diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml
new file mode 100644
index 0000000000000000000000000000000000000000..aa92e5b2eb54fb58bd127323e8dcf4a54c286b3a
--- /dev/null
+++ b/.github/workflows/version.yml
@@ -0,0 +1,30 @@
+name: Write version to file
+on:
+  release:
+    types: [published]
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout repo
+        uses: actions/checkout@v3
+
+      - name: Release tag
+        run: |
+          echo "Tag name from GITHUB_REF_NAME: $GITHUB_REF_NAME"
+          echo "Tag name from github.ref_name: ${{  github.ref_name }}"
+
+      - name: Overwrite file
+        uses: "DamianReeves/write-file-action@master"
+        with:
+          path: ./static/osuny-theme-version
+          write-mode: overwrite
+          contents: ${{  github.ref_name }}
+
+      - name: Commit & Push
+        uses: Andro999b/push@v1.3
+        with:
+          github_token: ${{ secrets.GITHUB_TOKEN }}
+          branch: main
+          force: true
+          message: 'Write version to file'
diff --git a/assets/js/theme/design-system/dropdowns.js b/assets/js/theme/design-system/dropdowns.js
index 79923dfbaa7bfc7806d430bd5a7e326316106740..ec37cfdcd8368e670cc7687d73ba3682cb1a9fe7 100644
--- a/assets/js/theme/design-system/dropdowns.js
+++ b/assets/js/theme/design-system/dropdowns.js
@@ -14,6 +14,12 @@ class Dropdown {
         this.dropdownButton.addEventListener('click', () => {
             this.toggleDropdown();
         });
+
+        window.addEventListener('keydown', (event) => {
+            if (event.keyCode === 27 || event.key === 'Escape') {
+                this.toggleDropdown(false);
+            }
+        });
     }
 
     toggleDropdown (open = !this.state.isOpened) {
diff --git a/assets/js/theme/design-system/mainMenu.js b/assets/js/theme/design-system/mainMenu.js
index f1f12fd7b3b5d07d6dd9b5cd36cee81d5d984d13..217a017bcbb2e1441f887a54ba3d833e23e8ee20 100644
--- a/assets/js/theme/design-system/mainMenu.js
+++ b/assets/js/theme/design-system/mainMenu.js
@@ -135,7 +135,9 @@ class MainMenu {
     onScroll () {
         const offset = this.element.offsetHeight,
             y = window.scrollY,
-            isNearTop = y < offset;
+            isNearTop = y < offset,
+            threshold = 50;
+        let hasChanged = false;
 
         if (isNearTop) {
             this.element.classList.remove(CLASSES.sticky);
@@ -143,14 +145,18 @@ class MainMenu {
             this.element.classList.add(CLASSES.sticky);
         }
 
-        if (y > this.state.previousScrollY && !isNearTop) {
+        if (y > this.state.previousScrollY + threshold && !isNearTop) {
             document.documentElement.classList.add(CLASSES.scrollingDown);
-        } else {
+            hasChanged = true;
+        } else if (y < this.state.previousScrollY - threshold){
             document.documentElement.classList.remove(CLASSES.scrollingDown);
+            hasChanged = true;
         }
 
-        this.state.previousScrollY = y;
+        if (hasChanged) {
+            this.state.previousScrollY = y;
+        }
     }
 }
 
-export default new MainMenu('header[role="banner"]');
+export default new MainMenu('header#document-header');
diff --git a/assets/js/theme/design-system/toc.js b/assets/js/theme/design-system/toc.js
index b8b740ba405986fd6bc269bc0cdc8ca7d2195ed6..233156befef836edd550df532dd67abf4e655780 100644
--- a/assets/js/theme/design-system/toc.js
+++ b/assets/js/theme/design-system/toc.js
@@ -4,7 +4,8 @@ const CLASSES = {
   offcanvasOpened: 'has-offcanvas-opened',
   linkActive: 'active',
   isOpened: 'is-opened',
-  fullWidth: 'full-width'
+  fullWidth: 'full-width',
+  offcanvas: 'offcanvas-toc'
 };
 
 class TableOfContents {
@@ -13,17 +14,24 @@ class TableOfContents {
     this.content = this.element.querySelector('.toc-content');
     this.nav = this.element.querySelector('.toc');
     this.links = this.element.querySelectorAll('a');
-    this.sections = document.querySelectorAll('section');
+    this.sections = document.querySelectorAll('section[id]');
+    // TODO : handle sublinks update in toc 
     this.ctaTitle = document.querySelector('.toc-cta-title span');
     this.togglers = document.querySelectorAll('.toc-cta button, .toc-container button');
     this.state = {
       opened: false,
-      currentId: null
+      currentId: null,
+      currentLink: 0,
+      isOffcanvas : this.isOffcanvas()
     }
     this.listen();
+
+    if (this.state.isOffcanvas) {
+      this.element.setAttribute("aria-hidden", true);
+    }
   }
   isOffcanvas() {
-    return isMobile() || document.body.classList.contains(CLASSES.fullWidth);
+    return isMobile() || document.body.classList.contains(CLASSES.fullWidth) || document.body.classList.contains(CLASSES.offcanvas);
   }
   listen() {
     window.addEventListener('scroll', this.update.bind(this), false);
@@ -54,16 +62,30 @@ class TableOfContents {
   }
   toggle(open) {
     this.state.opened = typeof open !== 'undefined' ? open : !this.state.opened;
-
     const classAction = this.state.opened ? 'add' : 'remove';
-    this.element.classList[classAction](CLASSES.isOpened);
+    const transitionDuration = this.state.opened ? 0 : this.getTransitionDuration();
+
+    // TODO: refacto timeout and css transition
+    setTimeout(() => {
+      this.element.setAttribute("aria-hidden", !this.state.opened);
+    }, transitionDuration * 1000);
+
+    setTimeout(() => {
+      this.element.classList[classAction](CLASSES.isOpened);
+    }, 50)
+    
     document.documentElement.classList[classAction](CLASSES.offcanvasOpened);
   }
+  getTransitionDuration() {
+    let transitionDuration = getComputedStyle(this.element).getPropertyValue('--toc-transition-duration');
+    transitionDuration = parseFloat(transitionDuration.replace('s', ''))
+    return transitionDuration;
+  }
   update() {
     const scroll = document.documentElement.scrollTop || document.body.scrollTop;
     let id = null;
     this.sections.forEach(section => {
-      if (section.offsetTop <= scroll) {
+      if (this.getAbsoluteOffsetTop(section) <= scroll + window.innerHeight/2) {
         id = section.id;
       }
     });
@@ -73,14 +95,27 @@ class TableOfContents {
     }
     this.updateScrollspy(scroll);
   }
+  getAbsoluteOffsetTop(element) {
+    let top = 0;
+    do {
+        top += element.offsetTop  || 0;
+        element = element.offsetParent;
+    } while(element);
+    return top
+  }
   activateLink(id) {
     const currentLink = this.element.querySelector(`[href*=${ id }]`);
-    this.state.id = id;
-    this.links.forEach(link => link.classList.remove(CLASSES.linkActive));
-    if (currentLink) {
-      currentLink.classList.add(CLASSES.linkActive);
-      this.updateCtaTitle(currentLink);
-    }
+    // console.log(currentLink.hash)
+    this.links.forEach((link, index) => {
+      if (link == currentLink) {
+        link.classList.add(CLASSES.linkActive);
+        this.updateCtaTitle(link);
+        this.state.id = id;
+        this.state.currentLink = link;
+      } else {
+        link.classList.remove(CLASSES.linkActive)
+      }
+    });
   }
   updateCtaTitle(link) {
     if (isMobile()) {
@@ -90,10 +125,14 @@ class TableOfContents {
     }
   }
   updateScrollspy(scroll) {
-    const progression = Math.max((scroll - window.innerHeight) / document.body.offsetHeight, 0);
-    const container = this.isOffcanvas() ? this.nav : this.content;
-    // TODO: ne fonctionne pas avec le  behavior-scroll: smooth
-    container.scrollTop = progression * window.innerHeight/2;
+    const container = this.state.isOffcanvas ? this.nav : this.content;
+    if (this.state.currentLink && scroll > window.innerHeight) {
+      let progress = (this.getAbsoluteOffsetTop(this.state.currentLink) - container.offsetHeight/2);
+      progress = this.state.isOffcanvas ? progress : progress - scroll;
+      container.scrollTo({
+        top: progress
+      })
+    }
   }
 }
 
diff --git a/assets/js/vendors/carousel.js b/assets/js/vendors/carousel.js
index 59d6cf3e6741a841b0b0b093170c51ab1e12dc4e..eb86fbe6aa7f7d8b01292b355ffe465cdad0f369 100644
--- a/assets/js/vendors/carousel.js
+++ b/assets/js/vendors/carousel.js
@@ -20,42 +20,53 @@ class Carousel {
     }
 
     init () {
-        var splide = new Splide(this.element).mount(),
-            toggleButton = splide.root.querySelector('.splide__autoplay'),
-            stepButtons = splide.root.querySelectorAll('.splide__pagination button'),
-            elements = splide.root.querySelectorAll('.splide__pagination, .splide__slide'),
-            autoplay = splide.Components.Autoplay;
+        this.splide = new Splide(this.element).mount();
+        const toggleButton = this.splide.root.querySelector('.splide__autoplay'),
+            stepButtons = this.splide.root.querySelectorAll('.splide__pagination button'),
+            elements = this.splide.root.querySelectorAll('.splide__pagination, .splide__slide'),
+            autoplay = this.splide.Components.Autoplay;
 
+        this.listen();
 
         if (toggleButton) {
             stepButtons.forEach((stepButton) => {
                 stepButton.innerHTML = '<i></i>';
             });
 
-            splide.on('autoplay:play', function () {
+            this.splide.on('autoplay:play', () => {
                 toggleButton.classList.add('is-active');
             });
 
-            splide.on('autoplay:playing', function (rate) {
-                var activeStepButton = splide.root.querySelector('.splide__pagination .is-active i');
+            this.splide.on('autoplay:playing', (rate) => {
+                var activeStepButton = this.splide.root.querySelector('.splide__pagination .is-active i');
                 activeStepButton.style.width = rate * 100 + '%';
             });
 
-            splide.on('autoplay:pause', function () {
+            this.splide.on('autoplay:pause', () => {
                 toggleButton.classList.remove('is-active');
             });
 
-            elements.forEach(function(element) {
+            elements.forEach(element => {
                 element.addEventListener('click', () => {
                     autoplay.pause();
                 })
             });
 
-            splide.on('drag', function() {
+            this.splide.on('drag', () => {
                 autoplay.pause();
             });
         }
     }
+
+    listen() {
+        this.splide.on('move', () => {
+            this.splide.root.classList.add('is-moving')
+        });
+
+        this.splide.on('moved', () => {
+            this.splide.root.classList.remove('is-moving')
+        });
+    }
 }
 
 (function () {
diff --git a/assets/sass/_theme/_configuration.sass b/assets/sass/_theme/_configuration.sass
index d65d8b86503e7a5e3aaad24bd410555a51e87108..b0abc58c1a568c5e10a90261b31909fc3be10276 100644
--- a/assets/sass/_theme/_configuration.sass
+++ b/assets/sass/_theme/_configuration.sass
@@ -1,5 +1,3 @@
-// TODO: ranger
-
 // MAIN COLORS
 $color-accent: #0038FF !default
 $color-text: #000000 !default
@@ -8,122 +6,125 @@ $color-border: rgba(0, 0, 0, 0.30) !default
 $color-background-alt: #F2F2F2 !default
 $color-background: #FFFFFF !default
 
-// TODO : faut-il mettre les largeur de border dans le config ? overkill ?
-
 $body-color: $color-text !default
 $body-background-color: $color-background !default
 $link-color: $color-text !default
+$link-underline-offset: 0.2em !default
 
 // TYPOGRAPHY
 
 // Fonts family
-$body-font-family: "Adobe Garamond Pro", "Garamond", "Times New Roman", "Times", serif !default
+$body-font-family: "Baskerville", "Times New Roman", "Times", serif !default
 $heading-font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif !default
 
-// Base
-$font-size-base: 16px !default
-$line-height-base: 140% !default
-
 // Headings
 $heading-font-weight: normal !default
 
 // h1
-$h1-size-md: px2rem(60) !default
+$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-size-md: px2rem(40) !default
+$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-size-md: px2rem(28) !default
+$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-size-md: px2rem(22) !default
+$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-size-md: px2rem(24) !default
+$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-size-md: px2rem(20) !default
+$h6-font-family: $heading-font-family !default
+$h6-size-desktop: px2rem(20) !default
 $h6-size: px2rem(14) !default
-$h6-line-height: 18% !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-md: px2rem(60) !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
+
 // Body
-$body-size-md: px2rem(22) !default
-$body-size: px2rem(16) !default
+$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-md: px2rem(18) !default
+$small-size-desktop: px2rem(18) !default
 $small-size: px2rem(14) !default
-$small-line-height: 160% !default
+$small-line-height: 130% !default
 $small-weight: normal !default
 
 // Signature
 $signature-font-family: $heading-font-family !default
-$signature-size-md: px2rem(22)
-$signature-size: px2rem(18)
+$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-md: px2rem(16)
-$meta-size: px2rem(14)
+$meta-size-desktop: px2rem(16) !default
+$meta-size: px2rem(14) !default
 $meta-line-height: 150% !default
 $meta-weight: $heading-font-weight !default
 
 // Quotes
-$quote-size-md: px2rem(24) !default
-$quote-size-short: px2rem(60) !default
-$quote-size-long: px2rem(40) !default
+$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
 
 // Buttons
-$btn-font-size-md: px2rem(18) !default // TODO
+$btn-font-size-desktop: px2rem(18) !default // TODO
 $btn-font-size: px2rem(14) !default
-$btn-padding-x-md: px2rem(50) !default
-$btn-padding-y-md: px2rem(15) !default
+$btn-padding-x-desktop: px2rem(50) !default
+$btn-padding-y-desktop: px2rem(15) !default
 $btn-padding-x: px2rem(20) !default
 $btn-padding-y: px2rem(13) !default
 $btn-border-radius: px2rem(4) !default
 
-// Breadcrumb
-$breadcrumb-color: $color-text !default
-$breadcrumb-icon: "caret-right" !default
-$breadcrumb-icon-color: $color-text-alt !default
 
 // Spacing
 $spacing0: px2rem(12) !default
@@ -149,13 +150,14 @@ $zindex-body-overlay: 51 !default
 $zindex-toc: 60 !default
 $zindex-toc-cta: 49 !default
 $zindex-aside: 48 !default
+$zindex-footer: 70 !default
 
 // Header
 $header-color: $color-text !default
 $header-hover-color: $color-accent !default // TODO : Réflechir à plus élégant / générique
-$header-background: transparent !default
+$header-background: $color-background-alt !default
 $header-transition: 0.3s !default
-$header-dropdown-full: true !default
+$header-dropdown-full: false !default
 $header-dropdown-background: $header-background !default
 $header-dropdown-color: $header-color !default
 $header-dropdown-transition: $header-transition !default
@@ -164,11 +166,14 @@ $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(30) !default
+$header-nav-padding-y: px2rem(20) !default
+$header-nav-padding-y-desktop: px2rem(30) !default
 $header-logo-height: 32px !default
-$header-logo-height-md: $header-logo-height !default
-$header-height: 99px !default
-$header-height-md: 74px !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
@@ -177,45 +182,54 @@ $body-overlay-color: rgba(0, 0, 0, 0.3) !default
 $footer-color: $color-text !default
 $footer-background-color: $color-background-alt !default
 $footer-logo-height: $header-logo-height !default
-$footer-logo-height-md: $footer-logo-height !default
+$footer-logo-height-desktop: $footer-logo-height !default
 
 // Hero
 $hero-height: 300px !default
-$hero-height-md: 400px !default
+$hero-height-desktop: 500px !default
 $hero-color: $color-text !default
 $hero-background-color: $color-background-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": "\e905"))
-$icons: map-merge($icons, ("arrow-first": "\e906"))
-$icons: map-merge($icons, ("arrow-last": "\e907"))
-$icons: map-merge($icons, ("arrow-left": "\e908"))
-$icons: map-merge($icons, ("arrow-right": "\e909"))
+$icons: map-merge($icons, ("toc": "\e918"))
+$icons: map-merge($icons, ("search": "\e916"))
+$icons: map-merge($icons, ("play": "\e910"))
+$icons: map-merge($icons, ("pause": "\e90f"))
+$icons: map-merge($icons, ("eye": "\e901"))
+$icons: map-merge($icons, ("download": "\e900"))
+$icons: map-merge($icons, ("close": "\e90e"))
 $icons: map-merge($icons, ("burger": "\e902"))
+$icons: map-merge($icons, ("burger-close": "\e905"))
+$icons: map-merge($icons, ("arrow-next": "\e909"))
+$icons: map-merge($icons, ("arrow-previous": "\e908"))
+$icons: map-merge($icons, ("arrow-last": "\e907"))
+$icons: map-merge($icons, ("arrow-first": "\e906"))
+$icons: map-merge($icons, ("arrow-right": "\ff00"))
 $icons: map-merge($icons, ("caret": "\e904"))
-$icons: map-merge($icons, ("caret-bottom": "\e911"))
-$icons: map-merge($icons, ("caret-left": "\e912"))
-$icons: map-merge($icons, ("caret-right": "\e913"))
 $icons: map-merge($icons, ("caret-top": "\e914"))
-$icons: map-merge($icons, ("close": "\e90e"))
-$icons: map-merge($icons, ("download": "\e900"))
-$icons: map-merge($icons, ("eye": "\e901"))
-$icons: map-merge($icons, ("facebook": "\e90b"))
-$icons: map-merge($icons, ("instagram": "\e90a"))
-$icons: map-merge($icons, ("link-blank": "\e903"))
-$icons: map-merge($icons, ("linkedin": "\e90c"))
+$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, ("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, ("social": "\e915"))
-$icons: map-merge($icons, ("toc": "\e918"))
+$icons: map-merge($icons, ("link-blank": "\e903"))
 $icons: map-merge($icons, ("twitter": "\e90d"))
+$icons: map-merge($icons, ("social": "\e915"))
+$icons: map-merge($icons, ("linkedin": "\e90c"))
+$icons: map-merge($icons, ("instagram": "\e90a"))
+$icons: map-merge($icons, ("facebook": "\e90b"))
+$icons: map-merge($icons, ("arrow": "\ff01"))
+$icons: map-merge($icons, ("arrow-left": "\ff02"))
 
 // Breakpoints
 // TODO: réécrire en sass les mixins bootstrap
-$grid-breakpoints: (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1440px)  !default
+$grid-breakpoints: (xs: 0, sm: 576px, md: 768px, desktop: 992px, lg: 992px, xl: 1200px, xxl: 1440px) !default
 
 // System
 
@@ -223,19 +237,20 @@ $grid-breakpoints: (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 144
 $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: $meta-font-family !default
-$toc-font-size: $meta-size !default
-$toc-font-size-md: $meta-size-md !default
-$toc-line-height: $meta-line-height !default
-$toc-title-font-family: $toc-font-family !default
-$toc-title-font-size: $toc-font-size !default
-$toc-title-font-size-md: $toc-font-size-md !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
 
 // Table
 $table-head-font-size: $h4-size !default
-$table-head-font-size-md: $h4-size-md !default
+$table-head-font-size-desktop: $h4-size-desktop !default
 $table-body-size: $body-size !default
-$table-body-size-md: $body-size-md !default
+$table-body-size-desktop: $body-size-desktop !default
 
 // BLOCKS
 
@@ -245,41 +260,58 @@ $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 chapter
+$block-chapter-layout-accent-background: $color-accent !default
+$block-chapter-layout-accent-color: white !default
+$block-chapter-layout-alt-background: $color-background-alt !default
+$block-chapter-layout-alt-color: black !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-md: $body-size-md !default
+$block-definition-font-size-desktop: $body-size-desktop !default
 
 // Block pages
-$block-pages-card-background: color-contrast($color-background, 10%) !default
-$block-pages-card-page-background: invert($color-text) !default
+$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-short !default
+$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-long !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-size: $quote-size-md !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-md: px2rem(18) !default
-$block-key_figures-number-font-size-md: px2rem(40) !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
@@ -304,22 +336,28 @@ $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: $h5-size !default
-$program-essential-font-size-md: $h5-size-md !default
-$program-share-font-size: $h5-size !default
-$program-share-font-size-md: $h5-size-md !default
+$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
 
-// Layout posts list (ne concerne pas les blocks posts)
-$posts-layout-list: true !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
diff --git a/assets/sass/_theme/_utils.sass b/assets/sass/_theme/_utils.sass
index 98db93c4044886f7df26e1103161619e8e74e095..690dca386eb5dc795833ec7469b5aa7a17c66ec5 100644
--- a/assets/sass/_theme/_utils.sass
+++ b/assets/sass/_theme/_utils.sass
@@ -1,5 +1,3 @@
-// TODO : ranger
-
 @function px2rem($size)
     $remSize: $size / 16
     @return #{$remSize}rem
@@ -9,8 +7,9 @@
     @return #{$remSize}rem
 
 @mixin in-page-with-sidebar
-    body:not(.full-width) &
-        @content
+    @include media-breakpoint-up(desktop)
+        body:not(.full-width) &
+            @content
 
 @mixin in-page-without-sidebar
     main > .blocks &,
@@ -45,7 +44,7 @@
     text-decoration-color: rgba($color, 0.3)
     text-decoration-line: underline
     text-decoration-thickness: 1px
-    text-underline-offset: 6px
+    text-underline-offset: $link-underline-offset
     transition: text-decoration-color .3s ease
     &:hover
         text-decoration-color: rgba($color, 1)
@@ -57,6 +56,7 @@
 
 @mixin hover-translate-icon($pseudo: after, $distance: 10)
     &::#{$pseudo}
+        display: inline-block
         transition: transform 0.55s $arrow-ease-transition
         transform: translateX(0)
     &:hover
@@ -72,12 +72,11 @@
             top: calc(var(--header-height) + #{$offset-y})
 
 // NEW UTILS
-@mixin icon($icon-name: '', $pseudo-element: before, $font-size: px2rem(10), $non-breaking: false)
+@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-size: $font-size
         font-style: normal
         font-variant: normal
         font-weight: normal
@@ -90,6 +89,12 @@
             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
@@ -97,11 +102,12 @@
     padding-left: half($grid-gutter-sm)
     padding-right: half($grid-gutter-sm)
     width: 100%
-    @include media-breakpoint-up(md)
+    @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
@@ -111,7 +117,7 @@
         display: grid
         grid-gap: $gap-y $gap-x
         grid-template-columns: repeat($cols, 1fr)
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
         grid-gap: $grid-gutter-sm
 
 // This must be used for content inside columns
@@ -132,9 +138,9 @@
     $width: calc( (100% + #{$grid-gutter}) / 12 * #{$quantity-on-base} + #{$grid-gutter})
     @return #{$width}
 
-@function col-outside-container($quantity)
+@function col-outside-container($quantity, $base: 12)
     $responsive-grid-width: Min(100vw, (#{$grid-max-width}))
-    @return calc((#{$responsive-grid-width} + #{$grid-gutter} * 2) / 12 * #{$quantity} - #{$grid-gutter} * 2)
+    @return calc((#{$responsive-grid-width} + #{$grid-gutter} * 2) / #{$base} * #{$quantity} - #{$grid-gutter} * 2)
 
 @mixin container-margin-left
     margin-left: Max(#{$grid-gutter}, calc(50vw - #{$grid-max-width} / 2 + #{$grid-gutter}))
@@ -157,24 +163,18 @@
         aspect-ratio: #{$ratio}
         display: block
         width: 100%
-    @supports not (aspect-ratio: 1)
-        position: relative
-        &::before
-            content: ''
-            padding-top: (1 / $ratio) * 100%
-            width: 100%
-        #{$selector}
-            bottom: 0
-            left: 0
-            position: absolute
-            right: 0
-            top: 0
+
+@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
         @if $article-media-aspect-ratio
             @include aspect-ratio($article-media-aspect-ratio, 'img', $background)
         margin-bottom: $spacing1
@@ -182,11 +182,12 @@
         overflow: hidden
         img
             object-fit: cover
-    h1
+    h2, h3
         @include h3
-    a
-        @include stretched-link
-        text-decoration: none
+        a
+            display: block
+            @include stretched-link
+            text-decoration: none
     p
         + time
             margin-top: $spacing0
@@ -205,39 +206,35 @@
         > .title
             @include h2
             transition: color 0.55s
-            @include media-breakpoint-down(md)
-                @include icon("arrow-right", "after", px2rem(16), true)
+            @include media-breakpoint-down(desktop)
+                @include icon(arrow-right, after, true)
                     bottom: $spacing0
                     position: absolute
                     right: 0
-            @include media-breakpoint-up(md)
+            @include media-breakpoint-up(desktop)
                 @include arrow-right-hover
                 display: block
                 &::after
-                    font-size: $font-size-base
                     transform: translateX(0)
                     position: relative
                 &:hover
-                    color: $color-accent
                     &::after
                         transform: translateX($spacing0)
         a
             text-decoration: none
+            &:hover
+                color: $color-accent
 
-        @include media-breakpoint-down(md)
+        @include media-breakpoint-down(desktop)
+            a:nth-child(2)
+                margin-top: calc(#{$spacing0} / 2)
             a, p
                 display: block
-        @include media-breakpoint-up(md)
+        @include media-breakpoint-up(desktop)
             align-items: baseline
             display: flex
             justify-content: space-between
-            a:first-child, p:first-child
-            > .title
-                & + a,
-                & + p
-                    margin-left: $spacing1
-                    text-align: right
-                    white-space: nowrap
+            
 
 @mixin visually-hidden
     clip: rect(0,0,0,0) !important
@@ -285,14 +282,12 @@
 
 @mixin button-icon($icon: false)
     @include button-reset
-    line-height: $line-height-base
+    line-height: $body-line-height
     border: 1px solid $hero-color
-    padding: $spacing0 $spacing1
+    padding: half($spacing0) $spacing1
     white-space: nowrap
     @if $icon
-        @include icon($icon, after)
-            font-size: px2rem(20) 
-            margin-left: px2rem(10)
+        @include icon-block($icon, after)
 
 @mixin text-underline
     text-decoration-color: $color-border
@@ -301,13 +296,12 @@
     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-right", after,  $small-size)
+    @include icon(arrow, after)
         opacity: 0
         transform: translateX(-20px)
         transition: 0.55s $arrow-ease-transition
@@ -319,7 +313,7 @@
             transform: translateX(0)
 
 @mixin top-flex
-    @include media-breakpoint-up(md)
+    @include media-breakpoint-up(desktop)
         @include in-page-without-sidebar
             display: flex
             h2, h3
@@ -329,6 +323,45 @@
                 width: col(8)
                 margin-left: $grid-gutter
 
+@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
+        p
+            @include meta
+            background: $hero-background-color
+            display: none
+            padding: half($spacing0)
+            padding-right: $spacing1
+        a
+            color: inherit
+        &:focus
+            p
+                display: block
+        @include media-breakpoint-up(desktop)
+            &:before
+                padding-right: 0
+
+    &:hover
+        figcaption p
+            display: block
+
 // https://gist.github.com/jonathantneal/d0460e5c2d5d7f9bc5e6
 @function str-replace($string, $search, $replace: "")
 	$index: str-index($string, $search)
@@ -336,7 +369,7 @@
 		@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: null, $style: null, $exts: (eot woff2 woff ttf svg))
+@mixin font-face($name, $path, $weight: 400, $style: normal, $exts: (eot woff2 woff ttf svg))
   $src: null
 
   $extmods: (eot:"?", svg:"#" + str-replace($name," ","_"))
@@ -352,4 +385,12 @@
     font-style: $style
     font-weight: $weight
     font-display: swap
-    src: $src
\ No newline at end of file
+    src: $src
+
+
+// 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
diff --git a/assets/sass/_theme/blocks/base.sass b/assets/sass/_theme/blocks/base.sass
index dd3607ef946feb4a447dfce72d414b96a5335735..8684df5bf5093f046defcf326427838784d6a702 100644
--- a/assets/sass/_theme/blocks/base.sass
+++ b/assets/sass/_theme/blocks/base.sass
@@ -1,17 +1,26 @@
-.blocks
-    .block
-        margin-top: $spacing1
-        &:first-of-type
-            margin-top: 0
-        &-with-title
-            margin-top: $spacing4
-
 .block
+    padding-top: $spacing3
+    padding-bottom: $spacing3
     // Mobile & full-width
-    h2, h3
+    h2
         @include h2
     // Desktop with sidebar
-    @include media-breakpoint-up(md)
+    @include media-breakpoint-up(desktop)
         @include in-page-without-sidebar
-            h2, h3
-                @include h5
\ No newline at end of file
+            h2
+                @include h5
+    .top
+        h2
+            + .description
+                margin-top: $spacing1
+                @include media-breakpoint-up(desktop)
+                    margin-top: $spacing2
+        h2.hidden + .description
+                margin-top: 0
+
+// Specific
+$backgrounded_blocks: ".block-call_to_action, .block-chapter--accent_background, .block-chapter--alt_background, .block-timeline--horizontal, .block-pages--cards"
+.blocks
+    .block:first-child
+        &:not(#{$backgrounded_blocks})
+            padding-top: 0
diff --git a/assets/sass/_theme/blocks/call_to_action.sass b/assets/sass/_theme/blocks/call_to_action.sass
index 7ff5ae7eb6af5c3967c66317758fb839f93c7ae8..f06a53ec3037942f2cbbbad13f57db6f597c0ae0 100644
--- a/assets/sass/_theme/blocks/call_to_action.sass
+++ b/assets/sass/_theme/blocks/call_to_action.sass
@@ -1,4 +1,5 @@
 .block-call_to_action
+    --cta-background-color: #{$block-call-to-action-background}
     @include in-page-with-or-without-sidebar
         h2, h3
             @include h5
@@ -13,7 +14,7 @@
                 @include h2
         .actions
             [role="group"]
-                @include media-breakpoint-down(md)
+                @include media-breakpoint-down(desktop)
                     display: flex
                     flex-direction: column
             a
@@ -34,8 +35,10 @@
         * + .actions
             margin-top: calc(#{$spacing2} - #{$spacing1})
 
-    @include media-breakpoint-down(md)
-        background-color: $block-call-to-action-background
+    @include media-breakpoint-down(desktop)
+        background-color: var(--cta-background-color)
+        padding-top: 0
+        padding-bottom: 0
         .call_to_action
             padding: $spacing3 0
             .actions
@@ -53,34 +56,45 @@
                 margin-bottom: offset(1)
                 order: 1
 
-    @include media-breakpoint-up(md)
-        @include in-page-with-sidebar
-            .call_to_action
-                display: flex
-                flex-direction: column
-                margin-left: -$grid-gutter
-                margin-right: -$grid-gutter
-                > *
-                    order: 2
+    @include in-page-with-sidebar
+        .call_to_action
+            display: flex
+            flex-direction: column
+            > *
+                order: 2
+            > div
+                background-color: var(--cta-background-color)
+                padding: $grid-gutter
+                width: 100%
+                position: relative
+                &::after
+                    background-color: var(--cta-background-color)
+                    content: ''
+                    display: block
+                    position: absolute
+                    top: 0
+                    bottom: 0
+                    left: 100%
+                    width: Max(#{$grid-gutter}, calc(50vw - #{half($grid-max-width)} + #{$grid-gutter}))
+            &--with-image
+                picture
+                    order: 1
+                    padding-left: $grid-gutter
+                    padding-right: $grid-gutter
+                    position: relative
+                    z-index: 2
+                    img
+                        width: col(3, 6)
+                        margin-bottom: calc(-#{$grid-gutter} + -#{$spacing1})
                 > div
-                    background-color: $block-call-to-action-background
-                    padding: $grid-gutter
-                    width: 100%
-                &--with-image
-                    picture
-                        order: 1
-                        padding-left: $grid-gutter
-                        padding-right: $grid-gutter
-                        position: relative
-                        img
-                            width: col(3, 7)
-                            margin-bottom: calc(-#{$grid-gutter} + -#{$spacing1})
-                    > div
-                        padding-top: calc(#{$grid-gutter} + #{$spacing3})
-  
+                    padding-top: calc(#{$grid-gutter} + #{$spacing3})
+
+    @include media-breakpoint-up(desktop)
         @include in-page-without-sidebar
+            background-color: var(--cta-background-color)
+            padding-top: 0
+            padding-bottom: 0
             .block-content
-                background-color: $block-call-to-action-background
                 padding: $spacing4 $grid-gutter
                 margin-left: -$grid-gutter
                 margin-right: -$grid-gutter
diff --git a/assets/sass/_theme/blocks/chapter.sass b/assets/sass/_theme/blocks/chapter.sass
index 6ab93f805db3a86ca15e5df529d7d6422e592b82..059d9c45adf26d115f5f967177ed2bc595520d4d 100644
--- a/assets/sass/_theme/blocks/chapter.sass
+++ b/assets/sass/_theme/blocks/chapter.sass
@@ -5,27 +5,64 @@
         margin-top: $spacing1
         *
             @include small
-    picture
+        sub, sup
+            font-size: 60%
+            margin-left: 0
+    picture, img
         display: block
     figcaption
         @include small
         margin-top: 0.5rem
-    .block-content
+    .chapter
         flex-direction: column
         display: flex
-        .chapter
+        .text
             order: 2
         figure
             margin-bottom: $spacing1
-    @include media-breakpoint-up(md)
-        @include in-page-with-sidebar
-            picture
-                margin-top: $spacing1
+    &--alt_background
+        background: $block-chapter-layout-alt-background
+        .block-content
+            color: $block-chapter-layout-alt-color
+    &--accent_background
+        background: $block-chapter-layout-accent-background
+        .block-content
+            color: $block-chapter-layout-accent-color
+            a
+                @include link($block-chapter-layout-accent-color)
+
+    @include media-breakpoint-down(desktop)
+        &--with-image
+            &.block-chapter--alt_background, &.block-chapter--accent_background
+                padding-top: half($grid-gutter-sm)
+    @include in-page-with-sidebar
+        figure
+            max-width: col(6, 8)
+            &.image-portrait
+                max-width: col(4, 8)
+        &--alt_background, &--accent_background
+            background: none
+            padding-bottom: 0
+            padding-top: 0
+            .chapter .text
+                padding: $grid-gutter
+            figure
+                margin-bottom: 0
+                figcaption
+                    padding-left: $grid-gutter
+
+        &--alt_background
+            .chapter
+                background: $block-chapter-layout-alt-background
+        &--accent_background
+            .chapter
+                background: $block-chapter-layout-accent-background
+    @include media-breakpoint-up(desktop)
         @include in-page-without-sidebar
-            .block-content
+            .chapter
                 flex-direction: row
                 align-items: center
-                .chapter
+                .text
                     order: 0
                     width: col(7)
                 figure
@@ -34,4 +71,4 @@
                     margin-bottom: 0
     @include in-page-with-or-without-sidebar
         h2, h3
-            @include h2
\ No newline at end of file
+            @include h2
diff --git a/assets/sass/_theme/blocks/contact.sass b/assets/sass/_theme/blocks/contact.sass
index daf0c6dfd1b652270a71fe976cd4bb3c1627f376..181434d4a78636128f46bd3b200a9a8a055441df 100644
--- a/assets/sass/_theme/blocks/contact.sass
+++ b/assets/sass/_theme/blocks/contact.sass
@@ -7,7 +7,7 @@
         + .informations
             margin-top: $spacing2
     @include in-page-without-sidebar
-        @include media-breakpoint-up(md)
+        @include media-breakpoint-up(desktop)
             .top
                 margin-bottom: $spacing2
             .informations
@@ -40,14 +40,14 @@
             + li
                 padding-top: $spacing0
                 border-top: 1px solid $color-border
-            @include media-breakpoint-down(md)
+            @include media-breakpoint-down(desktop)
                 justify-content: end
                 flex-wrap: wrap
                 span
                     min-width: 50%
                     &:nth-child(n+2)
                         text-align: right
-            @include media-breakpoint-up(md)
+            @include media-breakpoint-up(desktop)
                 justify-content: space-between
                 span
                     width: 25%
@@ -56,7 +56,6 @@
                 span + span
                     text-align: right
     time + time
-        @include icon("arrow-right", before)
+        @include icon(arrow-right, before)
             display: inline-block
-            font-size: px2rem(12)
             padding: 0 px2rem(7) 0 px2rem(3)
diff --git a/assets/sass/_theme/blocks/datatable.sass b/assets/sass/_theme/blocks/datatable.sass
index 8db1cffbb96ab9c7710a920bb648b36aa085e273..f4f4270746f9fd04dbdafbe005899c8b30951513 100644
--- a/assets/sass/_theme/blocks/datatable.sass
+++ b/assets/sass/_theme/blocks/datatable.sass
@@ -1,3 +1,5 @@
 .block-datatable
     th
         white-space: nowrap
+    caption
+        color: $color-text-alt
diff --git a/assets/sass/_theme/blocks/definitions.sass b/assets/sass/_theme/blocks/definitions.sass
index eed503fa4ed88fbcf75aa97454bd4c30cfcb11ff..393a5e7f7259afef050e9b0e4864a8b35bd59b5f 100644
--- a/assets/sass/_theme/blocks/definitions.sass
+++ b/assets/sass/_theme/blocks/definitions.sass
@@ -9,13 +9,20 @@
             justify-content: space-between
             align-items: center
             transition: color 0.3s
+            @include browser-under-safari-16
+                position: relative
+                &::after
+                    display: block
+                    position: absolute
+                    right: 0
+                    bottom: 10px
             &:hover
-                color: $color-accent
+                color: $block-definition-color-hovered
         summary,
         p
             font-size: $block-definition-font-size
-            @include media-breakpoint-up(md)
-                font-size: $block-definition-font-size-md
+            @include media-breakpoint-up(desktop)
+                font-size: $block-definition-font-size-desktop
         p
             margin-block-start: 0
             margin-block-end: $spacing1
@@ -24,9 +31,11 @@
             border-bottom: 1px solid $block-definition-border-color
             display: block
             transition: border-color 0.5s
-    @include media-breakpoint-up(md)
+    @include media-breakpoint-up(desktop)
         @include in-page-without-sidebar
             .definitions
-                @include grid(2, md)
-                grid-row-gap: 0 !important
+                details
+                    p
+                        padding-left: col(4)
+                        margin-left: $grid-gutter
 
diff --git a/assets/sass/_theme/blocks/embed.sass b/assets/sass/_theme/blocks/embed.sass
index 9ad0900fd50ec635a8002fe8dc406fa03ae8e113..7977db0c047e0e82ef10975aa4b4b6b828589291 100644
--- a/assets/sass/_theme/blocks/embed.sass
+++ b/assets/sass/_theme/blocks/embed.sass
@@ -1,2 +1,2 @@
 iframe
-    max-width: 100%
\ No newline at end of file
+    width: 100%
diff --git a/assets/sass/_theme/blocks/files.sass b/assets/sass/_theme/blocks/files.sass
index 8cf7d5bb48b2bc50bb1bae860df4f29f8c68630a..b700606e853547dd019aacaaabbcdca12c87ff2b 100644
--- a/assets/sass/_theme/blocks/files.sass
+++ b/assets/sass/_theme/blocks/files.sass
@@ -3,44 +3,47 @@
         h2, h3
             + .description
                 margin-top: $spacing0
-    ul
+    .files
         @include list-reset
-    li
-        @include icon("download", before)
-        align-items: start
-        display: flex
-        position: relative
-        &::before
-            align-items: center
-            border: 1px solid $color-border
+        li
+            @include icon-block(download, before)
+            align-items: start
             display: flex
-            flex-shrink: 0
-            font-size: px2rem(18)
-            height: px2rem(60)
-            justify-content: center
-            margin-right: $spacing0
-            transition: background 0.3s ease, border 0.3s ease
-            width: px2rem(60)
-        &:hover
+            position: relative
             &::before
-                background-color: $color-border
-                border-color: transparent
-    a
-        @include stretched-link(before)
-        @include small
-        text-decoration: none
-        &::after
-            content: none !important // Remove default icon _blank
+                align-items: center
+                border: 1px solid $color-border
+                display: flex
+                flex-shrink: 0
+                height: px2rem(60)
+                justify-content: center
+                margin-right: $spacing0
+                transition: background 0.3s ease, border 0.3s ease
+                width: px2rem(60)
+            &:hover
+                &::before
+                    background-color: $color-text
+                    border-color: transparent
+                    color: $color-background
+        a
+            @include stretched-link(before)
+            @include small
+            text-decoration: none
+            display: block
+            &::after
+                content: none !important // Remove default icon _blank
 
     figcaption
         @include meta
-    @include media-breakpoint-down(md)
-        li + li
-            margin-top: $spacing1
-    @include media-breakpoint-up(md)
-        @include in-page-with-sidebar
-            ul
-                @include grid(2, md, half($grid-gutter))
+        margin-top: half($spacing0)
+    @include media-breakpoint-down(desktop)
+        .files
+            li + li
+                margin-top: $spacing1
+    @include in-page-with-sidebar
+        .files
+            @include grid(2, desktop, half($grid-gutter))
+    @include media-breakpoint-up(desktop)
         @include in-page-without-sidebar
             .top
                 display: flex
@@ -50,5 +53,5 @@
                     margin-top: 0
                     width: col(8)
                     margin-left: $grid-gutter
-            ul
-                @include grid(3, md, half($grid-gutter))
+            .files
+                @include grid(3, desktop, half($grid-gutter))
diff --git a/assets/sass/_theme/blocks/gallery.sass b/assets/sass/_theme/blocks/gallery.sass
index 291d7f981256af34b5df13c9eec0a77df93fc822..9a2324a8022a73c5d1569aa0d94a073573c6853d 100644
--- a/assets/sass/_theme/blocks/gallery.sass
+++ b/assets/sass/_theme/blocks/gallery.sass
@@ -1,7 +1,7 @@
 .block-gallery
     @include in-page-without-sidebar
         .top
-            @include grid(2, md)
+            @include grid(2, desktop)
             align-items: baseline
     figure
         display: block
@@ -32,12 +32,12 @@
 
     &--grid
         .gallery
-            align-items: baseline
+            align-items: start
             @include in-page-with-sidebar
-                @include grid(3, md, half($grid-gutter), half($grid-gutter))
+                @include grid(3, desktop, half($grid-gutter), half($grid-gutter))
             @include in-page-without-sidebar
-                @include grid(4, md)
-            @include media-breakpoint-down(md)
+                @include grid(4, desktop)
+            @include media-breakpoint-down(desktop)
                 @include grid(2)
                 grid-gap: half($grid-gutter-sm) !important
             figure
@@ -48,6 +48,8 @@
         overflow: hidden
         padding-bottom: $grid-gutter
         padding-top: $grid-gutter
+        position: relative
+        z-index: 0
         @include in-page-without-sidebar
             background: $block-gallery-carousel-background
         .block-gallery + &,
@@ -56,11 +58,15 @@
         .container
             .top
                 padding-right: half($grid-gutter-sm)
-                @include media-breakpoint-up(md)
+                @include media-breakpoint-up(desktop)
                     padding-right: half($grid-gutter)
         .splide
             display: flex
             flex-direction: column
+            @include in-page-with-sidebar
+                &.is-moving
+                    .splide__slide.is-active
+                        opacity: 0.1
             &__track
                 overflow: visible
                 margin-right: half(-$grid-gutter-sm)
@@ -72,7 +78,7 @@
                             opacity: 0.6
                         &.is-active
                             opacity: 1
-                @include media-breakpoint-up(md)
+                @include media-breakpoint-up(desktop)
                     margin-right: half(-$grid-gutter)
             &__slide
                 flex-shrink: initial
@@ -81,7 +87,7 @@
                     padding-right: 20%
                     img
                         max-width: 100%
-            figure 
+            figure
                 margin-right: half($grid-gutter)
                 picture
                     img
@@ -90,7 +96,7 @@
                         width: auto
                         height: auto
                         max-width: calc(100vw - #{$grid-gutter-sm} * 2)
-                @include media-breakpoint-up(md)
+                @include media-breakpoint-up(desktop)
                     picture
                         img
                             height: 70vh
@@ -110,7 +116,7 @@
                 &--prev,
                 &--next
                     @include button-reset
-                    @include icon("arrow-left", before)
+                    @include icon(arrow-left, before)
                     height: 48px
                     padding: 0
                     position: static
@@ -118,8 +124,13 @@
                     svg
                         display: none
                 &--next
-                    @include icon("arrow-right", before)
+                    @include icon(arrow-right, before)
         @include in-page-without-sidebar
+            @include media-breakpoint-up(desktop)
+                .splide
+                    figure
+                        margin-left: $grid-gutter
+                        margin-right: half(-$grid-gutter)
             .splide
                 &__slide
                     &:first-child
diff --git a/assets/sass/_theme/blocks/image.sass b/assets/sass/_theme/blocks/image.sass
index e9fed6b8e668123422445ccccf19dd53d49b4dc3..4e186ab582b19c5199b226b0d4ed61095e9e5884 100644
--- a/assets/sass/_theme/blocks/image.sass
+++ b/assets/sass/_theme/blocks/image.sass
@@ -19,38 +19,49 @@
         margin-right: half(-$grid-gutter-sm)
 
     @include in-page-with-sidebar
-        @include media-breakpoint-up(md)
-            picture
-                margin-left: 0
-                margin-right: -$grid-gutter
-            img
-                max-height: $block-image-max-height-with-sidebar
-                width: auto
+        picture
+            margin-left: 0
+            margin-right: -$grid-gutter
+        img
+            max-height: $block-image-max-height-with-sidebar
+            width: auto
     @include in-page-without-sidebar
-        @include media-breakpoint-up(md)
-            .block-content
-                position: relative
-                .top
-                    position: absolute
-                    width: col(5)
+        @include media-breakpoint-up(desktop)
             figure
-                display: flex
-                align-items: flex-end
-                > a 
-                    width: col(7)
-                    margin-left: half($grid-gutter)
-                    display: block
-                    order: 2
+                img
+                    max-height: $block-image-max-height-without-sidebar
+                    // max-height: calc(100vh - var(--header-height))
+                    width: auto
+                    max-width: 100%
+            &.image-portrait
+                .block-content
+                    position: relative
+                    .top
+                        position: absolute
+                        width: col(5)
+                figure
+                    display: flex
+                    align-items: flex-end
+                    > a 
+                        width: col(7)
+                        margin-left: half($grid-gutter)
+                        display: block
+                        order: 2
+                    picture
+                        margin-left: 0
+                        margin-right: -$grid-gutter
+                    figcaption
+                        width: calc(#{col(5)} + #{$grid-gutter} / 2)
+                        order: 1
+                        display: block
+                        text-align: right
+            &.image-landscape
                 picture
                     margin-left: 0
-                    margin-right: -$grid-gutter
-                    img
-                        max-height: $block-image-max-height-without-sidebar
+                    margin-right: 0
                 figcaption
-                    width: calc(#{col(5)} + #{$grid-gutter} / 2)
-                    order: 1
-                    display: block
-                    text-align: right
-                img
-                    max-height: calc(100vh - var(--header-height))
-                    width: auto
\ No newline at end of file
+                    display: flex
+                    justify-content: space-between
+                    align-items: baseline
+                    .credit
+                        margin-top: 0
\ No newline at end of file
diff --git a/assets/sass/_theme/blocks/key_figures.sass b/assets/sass/_theme/blocks/key_figures.sass
index 2e32fb5d3c30a479d4a6ff8aa1f3740a818f7e3d..caaa63dc1f9abd61a4536500f8679fb7e15c2439 100644
--- a/assets/sass/_theme/blocks/key_figures.sass
+++ b/assets/sass/_theme/blocks/key_figures.sass
@@ -2,33 +2,34 @@
     .top
         margin-bottom: 0
     ul
-        @include grid(3, md)
         @include list-reset
         @include in-page-with-sidebar
-            @include grid(2, md)
-    .top + ul
+            @include grid(2)
+        &.even-items
+            @include grid(2)
+            @include grid(4, desktop)
+        &.odd-items
+            @include grid(3, desktop)
+    .top:not(.hidden) + ul
         margin-top: $spacing2
-    @include media-breakpoint-down(md)
-        li + li
-            margin-top: $spacing2
     dl
         margin-bottom: 0
         margin-top: 0
         dt
             white-space: nowrap
-            font-family: $heading-font-family
+            font-family: $block-key_figures-number-font-family
             font-size: $block-key_figures-font-size
-            font-weight: $heading-font-weight
-            font-weight: bold
+            font-weight: $block-key_figures-unit-font-weight
             line-height: 1
             strong
                 display: inline-block
                 font-size: $block-key_figures-number-font-size
+                font-weight: $block-key_figures-number-font-weight
                 margin-inline-end: 0.1em
             @include media-breakpoint-up(md)
-                font-size: $block-key_figures-font-size-md
+                font-size: $block-key_figures-font-size-desktop
                 strong
-                    font-size: $block-key_figures-number-font-size-md
+                    font-size: $block-key_figures-number-font-size-desktop
             @include media-breakpoint-up(lg)
                 font-size: $block-key_figures-font-size-lg
                 strong
diff --git a/assets/sass/_theme/blocks/organization_chart.sass b/assets/sass/_theme/blocks/organization_chart.sass
index 44bf447ac326a029aa5730fc2e6fefcc9650961b..46a5f3bfb105d3be7ca097e185c8ce26a68fc365 100644
--- a/assets/sass/_theme/blocks/organization_chart.sass
+++ b/assets/sass/_theme/blocks/organization_chart.sass
@@ -1,28 +1,21 @@
 .block-organization_chart
-    article
-        position: relative
-        .name
-            @include h4
-            a
-                @include stretched-link
-                text-decoration: none
-            + p
-                margin-top: half($spacing0)
-    @include media-breakpoint-up(md)
-        @include in-page-with-sidebar
-            .persons
-                @include grid(2, md)
-            article
-                flex-direction: row
-                .avatar
-                    margin-right: $spacing1
-                    width: calc(#{col(1, 4)} + #{$grid-gutter})
-                .description
-                    margin-top: $spacing1
+    @include media-breakpoint-up(desktop)
+        @include in-page-without-sidebar
+            .top .description
+                max-width: col(8)
+    @include in-page-with-sidebar
+        .persons
+            @include grid(1, sm)
+            @include grid(2, desktop)
+        article
+            flex-direction: row
+            .avatar
+                margin-right: $spacing1
+                width: calc(#{col(1, 4)} + #{$grid-gutter})
+            .description
+                margin-top: $spacing1
+    @include media-breakpoint-up(sm)
         @include in-page-without-sidebar
             .persons
-                @include grid(6, md)
-            article
-                text-align: center
-                .avatar
-                    width: 100%
\ No newline at end of file
+                @include grid(4, lg)
+                @include grid(6, xl)
\ No newline at end of file
diff --git a/assets/sass/_theme/blocks/pages.sass b/assets/sass/_theme/blocks/pages.sass
index 860eaa23981ec45122fd56d9ca542dcc19610684..851d2b3f590676412d1cff3315d9ff1826301f38 100644
--- a/assets/sass/_theme/blocks/pages.sass
+++ b/assets/sass/_theme/blocks/pages.sass
@@ -11,13 +11,15 @@
             display: flex
             flex-direction: column
             .media
+                @include handle-svg-fit
                 order: -1
                 margin-bottom: $spacing1
                 img
                     display: block
                     aspect-ratio: 16/9
                     object-fit: cover
-        h1
+                    width: 100%
+        h3
             @include h3
             a
                 text-decoration: none
@@ -25,13 +27,13 @@
             + p
                 margin-top: $spacing0
 
-    @include media-breakpoint-up(md)
+    @include media-breakpoint-up(desktop)
         .top
             margin-bottom: $spacing2
 
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
         .top
-            h2, h3
+            h2
                 @include h5
         .description
             @include h2
@@ -39,43 +41,46 @@
             margin-top: $spacing1
 
     @include in-page-without-sidebar
-        @include media-breakpoint-up(md)
+        @include media-breakpoint-up(desktop)
             .top
                 @include grid
-                h2, h3
+                h2
                     grid-column: 1 / 5
                     a
                         text-decoration: none
-                        @include icon("arrow-right", "after", px2rem(16), true)
+                        @include icon(arrow, after, true)
+                        @include hover-translate-icon
             .description
                 @include h2
                 grid-column: 5 / 13
                 margin-top: -0.25em
-                font-style: $h2-size-md
+                font-style: $h2-size-desktop
 
     &--grid
         .grid
             a
-                @include icon("arrow-right", "after", px2rem(16), true)
-                @include hover-translate-icon(after, 3)
-        @include media-breakpoint-up(md)
+                @include icon(arrow, after, true)
+                @include hover-translate-icon(after)
+        @include media-breakpoint-up(desktop)
             .grid
-                @include grid(2, md)
+                @include grid(2, desktop)
                 @include in-page-with-sidebar
                     grid-column-gap: half($grid-gutter) !important
                 @include in-page-without-sidebar
-                    @include grid(3, md)
+                    @include grid(3, desktop)
 
     &--cards
         background-color: $block-pages-card-background
         padding-bottom: $grid-gutter
         padding-top: $grid-gutter
+        .blocks &:last-of-type
+            margin-bottom: 0
         .cards
-            @include grid(2, md)
+            @include grid(2, desktop)
             @include in-page-with-sidebar
                 grid-gap: half($grid-gutter) !important
             @include in-page-without-sidebar
-                @include grid(3, md)
+                @include grid(3, desktop)
         // TODO: move this //
         .block-gallery + &,
         .block-pages--cards + &
@@ -97,8 +102,11 @@
                 margin-left: -$spacing1
                 margin-right: -$spacing1
                 margin-top: -$spacing1
+                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
@@ -130,28 +138,33 @@
                     margin-top: $spacing0
                 a
                     @include meta
-                    text-decoration: none
-                    @include icon("arrow-right", before, px2rem(10))
+                    @include icon(arrow, before, true)
                         padding-right: $spacing0
-        @include media-breakpoint-down(md)
+                    @include hover-translate-icon(before, 5)
+                    @include link
+                    text-decoration-color: rgba(0,0,0,0)
+        @include media-breakpoint-down(desktop)
             .top
                 margin-bottom: $spacing0
             ul
                 margin-top: $spacing1
-        @include media-breakpoint-up(md)
-            @include in-page-with-sidebar
-                .block-content
-                    .top
-                        margin-bottom: $spacing1
-                    .description
-                        margin-bottom: $spacing1
-                    ul
-                        @include grid(2, md)
-                        grid-row-gap: $spacing0 !important
-                        grid-column-gap: half($grid-gutter) !important
-                        li
-                            margin-top: 0
+        @include in-page-with-sidebar
+            .block-content
+                .top
+                    margin-bottom: $spacing1
+                .description
+                    margin-bottom: $spacing1
+                ul
+                    @include grid(2, desktop)
+                    grid-row-gap: $spacing0 !important
+                    grid-column-gap: half($grid-gutter) !important
+                    li
+                        margin-top: 0
+        @include media-breakpoint-up(desktop)
             @include in-page-without-sidebar
+                h2
+                    a
+                        @include stretched-link(before)
                 .block-content
                     @include grid
                     grid-row-gap: $spacing1
@@ -159,12 +172,12 @@
                         display: block
                         grid-column: 1 / 8
                         margin-bottom: 0
-                    .top + .description
+                    .top:not(.hidden) + .description
                         grid-column: 1 / 8
                         grid-row: 2 / 3
                     // Default behavior (without page description)
                     ul
-                        @include grid(4, md)
+                        @include grid(4, desktop)
                         grid-column: 1 / 13
                         li
                             margin-top: 0
diff --git a/assets/sass/_theme/blocks/partners.sass b/assets/sass/_theme/blocks/partners.sass
index 09acb39bb18b4d670785c94c411cab8ddc9e561e..347f14271064d95e44f711d774c95ca293d48683 100644
--- a/assets/sass/_theme/blocks/partners.sass
+++ b/assets/sass/_theme/blocks/partners.sass
@@ -1,6 +1,11 @@
 .block-partners
-    @include media-breakpoint-up(md)
-        @include in-page-with-sidebar
-            .organizations
-                @include grid(4, xl)
-                grid-column-gap: half($grid-gutter) !important
+    @include media-breakpoint-up(desktop)
+        @include in-page-without-sidebar
+            .top .description
+                max-width: col(8)
+    @include in-page-with-sidebar
+        .organizations
+            @include grid(2, md)
+            @include grid(3, lg)
+            @include grid(4, xl)
+            grid-column-gap: half($grid-gutter) !important
diff --git a/assets/sass/_theme/blocks/posts.sass b/assets/sass/_theme/blocks/posts.sass
index 8e0e50e5b58bb72d50d149380b360275e5f3ef04..0fe62a5ac282abaa7757ecca8cf6523f1522acba 100644
--- a/assets/sass/_theme/blocks/posts.sass
+++ b/assets/sass/_theme/blocks/posts.sass
@@ -2,13 +2,13 @@
     .top
         margin-bottom: $spacing2
         a
-            @include icon("arrow-right", "after", px2rem(16), true)
+            @include icon(arrow-right, after, true)
             text-decoration: none
     .posts
         @include grid(1)
-        @include grid(3, md)
+        @include grid($block-posts-grid-columns, desktop)
     article
-        h1
+        h3
             a
                 @include stretched-link
                 text-decoration: none
@@ -18,16 +18,16 @@
             .media
                 margin-top: 0
     &--grid
-        @include media-breakpoint-down(md)
+        @include media-breakpoint-down(desktop)
             article + article
                 margin-top: $spacing3
-        @include media-breakpoint-up(md)
-            @include in-page-with-sidebar
-                .grid
-                    @include grid(2, md, $grid-gutter, half($grid-gutter))
+        @include in-page-with-sidebar
+            .grid
+                @include grid(2, desktop, $grid-gutter, half($grid-gutter))
+        @include media-breakpoint-up(desktop)
             @include in-page-without-sidebar
                 .grid
-                    @include grid(3)
+                    @include grid($block-posts-grid-columns)
     &--list
         article
             border-bottom: 1px solid $color-border
@@ -36,16 +36,19 @@
                 margin: 0
                 &, img
                     aspect-ratio: auto
-        @include media-breakpoint-down(md)
+        @include media-breakpoint-down(desktop)
             article
                 position: relative
                 padding-bottom: half($spacing3)
+                // display: flex
+                // flex-direction: row
                 + article
                     margin-top: half($spacing3)
                 .post-content
                     display: flex
                     flex-direction: column
-                    h1
+                    // width: 70%
+                    h3
                         margin-bottom: 0
                     time
                         margin-top: half($spacing0)
@@ -53,28 +56,25 @@
                     p
                         margin-top: half($spacing0)
                         order: 4
-                    h1, time
-                        padding-right: calc(30% + #{$spacing1})
                 .media
+                    display: none
                     order: 3
-                    position: absolute
-                    width: 30%
-                    top: 0
-                    right: 0
-        @include media-breakpoint-up(md)
+
+        @include in-page-with-sidebar
+            article
+                padding-bottom: $spacing1
+                + article
+                    margin-top: $spacing1
+                .media
+                    width: calc(#{col(2, 8)} + #{half($grid-gutter)})
+                .post-content
+                    width: col(6, 8)
+                    margin-left: half($grid-gutter)
+
+        @include media-breakpoint-up(desktop)
             article
                 display: flex
                 flex-direction: row
-            @include in-page-with-sidebar
-                article
-                    padding-bottom: $spacing1
-                    + article
-                        margin-top: $spacing1
-                    .media
-                        width: calc(#{col(2, 8)} + #{half($grid-gutter)})
-                    .post-content
-                        width: col(6, 8)
-                        margin-left: half($grid-gutter)
 
             @include in-page-without-sidebar
                  article
@@ -95,18 +95,15 @@
                         margin-top: 0.3em
     &--highlight
         .highlight-post
-            h1
+            h3
                 margin-bottom: $spacing0
             .media
                 margin-bottom: $spacing0
                 background: none
-                &, img
-                    aspect-ratio: auto
         .list
             margin-top: half($spacing3)
             border-top: 1px solid $color-border
             article
-                @include article
                 border-bottom: 1px solid $color-border
                 position: relative
                 padding-bottom: half($spacing3)
@@ -117,41 +114,45 @@
             .media
                 margin-top: 0
 
-        @include media-breakpoint-down(md)
+        @include in-page-with-sidebar
+            .highlight-post
+                .post
+                    flex-direction: row
+                    .media
+                        width: calc(#{col(3, 8)} + #{half($grid-gutter)})
+                        margin-bottom: 0
+                    .post-content
+                        width: col(5, 8)
+                        margin-left: half($grid-gutter)
+            .list
+                article
+                    @include grid(8, desktop, 0, 0)
+                    h3
+                        grid-column: 1 / 7
+                    .post-categories
+                        grid-column: 1 / 7
+                    time
+                        grid-row: 1
+                        grid-column: 7 / 9
+                        text-align: right
+                        order: 2
+                        margin-top: 0
+                    p
+                        grid-column: 1 / 7
+                        order: 3
+        
+        @include media-breakpoint-down(desktop)
             .list
                 border-top: 1px solid $color-border
-        @include media-breakpoint-up(md)
+
+        @include media-breakpoint-up(desktop)
             .highlight
-                h1
+                h3
                     @include h2
             .list
                 article
-                    h1
+                    h3
                         @include h4
-            @include in-page-with-sidebar
-                .highlight-post
-                    .post
-                        flex-direction: row
-                        .media
-                            width: calc(#{col(3, 8)} + #{half($grid-gutter)})
-                            margin-bottom: 0
-                        .post-content
-                            width: col(5, 8)
-                            margin-left: half($grid-gutter)
-                .list
-                    article
-                        @include grid(8, md, 0, 0)
-                        h1
-                            grid-column: 1 / 7
-                        time
-                            grid-column: 7 / 9
-                            text-align: right
-                            order: 2
-                            margin-top: 0
-                        p
-                            grid-column: 1 / 7
-                            order: 3
-
             @include in-page-without-sidebar
                 .highlight
                     @include grid(2)
@@ -160,4 +161,3 @@
                     margin-top: 0
                     article:first-child
                         margin-top: 0
-            
\ No newline at end of file
diff --git a/assets/sass/_theme/blocks/programs.sass b/assets/sass/_theme/blocks/programs.sass
index e51133f4dfb266cb621c2b959afd89ba19203b57..c254953892b1ef4993809b957a5f281f6fe37bf7 100644
--- a/assets/sass/_theme/blocks/programs.sass
+++ b/assets/sass/_theme/blocks/programs.sass
@@ -11,7 +11,7 @@
                 padding-right: $spacing2
                 &:hover
                     color: $color-accent
-    @include media-breakpoint-up(md)
+    @include media-breakpoint-up(desktop)
         @include in-page-without-sidebar
             .programs
                 li
diff --git a/assets/sass/_theme/blocks/sitemap.sass b/assets/sass/_theme/blocks/sitemap.sass
new file mode 100644
index 0000000000000000000000000000000000000000..bb45be78dfabbd6cc8eceefc2124610dcf8d940d
--- /dev/null
+++ b/assets/sass/_theme/blocks/sitemap.sass
@@ -0,0 +1,8 @@
+.block-sitemap
+    h3 
+      a 
+        text-decoration: none
+    ul + h3
+      margin-top: $spacing3
+    &: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
new file mode 100644
index 0000000000000000000000000000000000000000..ab1305163df496258406b4066995bba47533b7a3
--- /dev/null
+++ b/assets/sass/_theme/blocks/summary.sass
@@ -0,0 +1,8 @@
+.block-summary
+    @include in-page-without-sidebar
+        padding-top: 0
+        margin-top: $spacing3
+    @include in-page-with-sidebar
+        padding-top: 0
+    .lead
+        margin-bottom: 0
\ No newline at end of file
diff --git a/assets/sass/_theme/blocks/testimonials.sass b/assets/sass/_theme/blocks/testimonials.sass
index 4b0098601a031bde14d1dcb0f31877312f63d791..81b79cb17adcc1c1f9a3cf41e41dc6934a4ab49f 100644
--- a/assets/sass/_theme/blocks/testimonials.sass
+++ b/assets/sass/_theme/blocks/testimonials.sass
@@ -2,11 +2,12 @@
     blockquote
         @include blockquote
         p
+            font-family: $block-testimonials-font-family
             font-size: $block-testimonials-font-size
             line-height: $block-testimonials-line-height
             font-style: $block-testimonials-style
             color: $block-testimonials-color
-            @include media-breakpoint-up(md)
+            @include media-breakpoint-up(desktop)
                 font-size: px2rem(30) // TODO : on peut peut-être la sortir avec du RFS ?
             @include media-breakpoint-up(xl)
                 font-size: $block-testimonials-xl-font-size
@@ -16,13 +17,6 @@
                 @include media-breakpoint-up(xl)
                     font-size: $block-testimonials-xl-font-size-long-text
                     line-height: $block-testimonials-xl-line-height-long-text
-        // &::before
-        //     content: "“"
-        //     font-size: calc(#{$block-testimonials-font-size} * 3)
-        //     line-height: 1
-        //     position: absolute
-        //     transform: translateY(-50%)
-            // TODO : ajuster en fonction de la typo
 
     figure
         margin-bottom: 0
@@ -30,13 +24,16 @@
         align-items: center
         display: flex
         margin-top: $spacing1
+        span
+            display: block
     .avatar
         flex-shrink: 0
         width: calc(#{col(1, 8)} + #{$grid-gutter} / 2)
-        margin-right: calc(#{$grid-gutter} / 2)
+        min-width: px2rem(80)
+        margin-right: $spacing0
         margin-bottom: 0
-        // @include media-breakpoint-up(xxl)
-        //     width: calc(#{col(1, 7)} + #{$grid-gutter} / 2)
+        @include media-breakpoint-up(desktop)
+            margin-right: calc(#{$grid-gutter} / 2)
 
     .splide
         display: flex
@@ -60,6 +57,10 @@
                     width: 42px
                 &::before
                     color: $color-accent
+            &:not(.is-active)
+                + .splide__pagination
+                    .is-active i
+                        width: 100% !important
 
             .splide__play
                 &::before
@@ -87,27 +88,31 @@
                 i
                     background-color: $block-testimonials-pagination-progress-background
                     width: 0
-    @include media-breakpoint-up(md)
+    @include media-breakpoint-up(desktop)
         @include in-page-without-sidebar
             .top
-                padding-left: offset(2)
+                padding-left: offset(3)
             .splide__pagination
-                padding-left: offset(2)
+                padding-left: offset(3)
                 padding-right: offset(1)
             .splide__autoplay
                 margin-right: offset(1)
             figure
-                padding-left: offset(2)
-                padding-right: offset(1)
+                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)})
                 &.with-picture
+                    padding-right: offset(1)
+                    padding-left: offset(3)
                     position: relative
                     figcaption
                         display: block
                         margin-top: $spacing0
                         .avatar
                             position: absolute
-                            left: 0
+                            left: col(1)
                             top: 0
+                            margin-left: $grid-gutter
                             width: col(2)
 
         // TODO : en discuter en créa
diff --git a/assets/sass/_theme/blocks/timeline.sass b/assets/sass/_theme/blocks/timeline.sass
index d4ed2402ff4838926f53138fcc5f6f6166ca6caa..1197ee05232cfe37b89972fb0575789d2dded4a1 100644
--- a/assets/sass/_theme/blocks/timeline.sass
+++ b/assets/sass/_theme/blocks/timeline.sass
@@ -32,12 +32,12 @@
                 @include h4
                 + p
                     margin-top: $spacing0
-        @include media-breakpoint-down(md)
+        @include media-breakpoint-down(desktop)
             .event
                 padding-left: half($grid-gutter-sm)
                 &::after, &::before
                     left: 0
-        @include media-breakpoint-up(md)
+        @include media-breakpoint-up(desktop)
             @include in-page-without-sidebar
                 .events
                     padding-left: 0
@@ -63,7 +63,6 @@
         --min-title-height: 0px
         background: $block-timeline-horizontal-background
         color: $block-timeline-horizontal-color
-        margin-bottom: 8rem
         overflow: hidden
         padding-bottom: $grid-gutter
         padding-top: $grid-gutter
@@ -77,24 +76,24 @@
             
         .timeline-arrows
             display: flex
+            padding-left: half($grid-gutter)
             > button
                 @include button-reset
                 background: none
                 border: none
                 color: $block-timeline-horizontal-color
                 cursor: pointer
-                font-size: 1rem
-                padding: half($grid-gutter)
                 &:first-child
-                    @include icon(arrow-left, before)
+                    @include icon-block(arrow-previous, before)
+                    margin-left: $icon-arrow-previous-margin-left
                 &:last-child
-                    @include icon(arrow-right, before)
+                    @include icon-block(arrow-next, before)
                 &:disabled
                     cursor: default
                     opacity: 0.3
         .events
-            margin-left: calc(#{$grid-gutter} / -2)
-            margin-right: calc(#{$grid-gutter} / -2)
+            margin-left: half(-$grid-gutter)
+            margin-right: half(-$grid-gutter)
             // TODO : fixer le px gap en desktop entre chaque event
             ol
                 display: flex
@@ -112,8 +111,9 @@
             width: 50%
             
             .title
+                display: block
                 min-height: var(--min-title-height)
-                margin-bottom: $spacing1
+                padding-bottom: $spacing1
                 @include signature
             .description
                 @include small
@@ -141,7 +141,7 @@
                 .line
                     background: transparent
 
-        @include media-breakpoint-up(md)
+        @include media-breakpoint-up(desktop)
             .events
                 ol
                     margin-top: $spacing2
@@ -150,19 +150,15 @@
                     width: calc(100% + #{$grid-gutter})
         
         @include in-page-with-sidebar
-            @include media-breakpoint-up(md)
-                .timeline
-                    padding-left: offset(4)
-            // @include media-breakpoint-up(xxl)
-            //     .timeline
-            //         padding-left: offset(5)
+            .timeline
+                padding-left: offset(4)
 
         @include in-page-without-sidebar
             @include media-breakpoint-up(xxl)
                 .event
                     width: 25%
 
-        @include media-breakpoint-down(md)
+        @include media-breakpoint-down(desktop)
             .events
                 position: relative
             .timeline-arrows
diff --git a/assets/sass/_theme/blocks/video.sass b/assets/sass/_theme/blocks/video.sass
index f0c2c5f9647b9a5cfa7da3fd346b6acba9c7deec..4052c1745aa36aaced47235e3fefa4cdc276b6db 100644
--- a/assets/sass/_theme/blocks/video.sass
+++ b/assets/sass/_theme/blocks/video.sass
@@ -1,13 +1,16 @@
 .block-video
     .video
         @include aspect-ratio(16/9, 'iframe')
+        @supports not (aspect-ratio: 1)
+            iframe
+                min-height: 400px
         iframe
             background: black
     @include in-page-without-sidebar
         .transcription
             width: col(7)
             margin-left: auto
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
         .video
             margin-left: half(-$grid-gutter-sm)
             margin-right: half(-$grid-gutter-sm)
diff --git a/assets/sass/_theme/dependencies/glightbox.sass b/assets/sass/_theme/dependencies/glightbox.sass
index 255e9d22bba7a90854a7e2fb1d201cec3850ae74..421fd968cda67d8ed31163212599c67e381ebabe 100644
--- a/assets/sass/_theme/dependencies/glightbox.sass
+++ b/assets/sass/_theme/dependencies/glightbox.sass
@@ -6,7 +6,7 @@
             background-color: transparent
         &-title,
         &-desc
-            color: $color-background
+            color: white
     .gnext,
     .gprev
         color: white
diff --git a/assets/sass/_theme/dependencies/splide.sass b/assets/sass/_theme/dependencies/splide.sass
index b4960027066eea43bb8f677e952857bd20d9f7ab..976f7a904617836a3d926c7702133e49802927a8 100644
--- a/assets/sass/_theme/dependencies/splide.sass
+++ b/assets/sass/_theme/dependencies/splide.sass
@@ -44,7 +44,6 @@
         bottom: 0
         position: absolute
         right: 0
-
         &.is-active
             .splide__play
                 display: none
@@ -53,16 +52,15 @@
 
     &__pause,
     &__play
-        // @extend .icon
         height: 48px
         padding: 0
         width: 48px
 
     &__play
-        @include icon(play)
+        @include icon-block(play)
 
     &__pause
-        @include icon(pause)
+        @include icon-block(pause)
         display: none
 
 
diff --git a/assets/sass/_theme/design-system/breadcrumb.sass b/assets/sass/_theme/design-system/breadcrumb.sass
index adab37996bae507990a93feedaf8442d16334160..8c5a32ea02654738b296ab7fd3ab8013e2d3d74c 100644
--- a/assets/sass/_theme/design-system/breadcrumb.sass
+++ b/assets/sass/_theme/design-system/breadcrumb.sass
@@ -4,7 +4,8 @@
     flex-wrap: nowrap
     overflow: auto
     display: flex
-    padding-bottom: $spacing0
+    height: $spacing3
+    align-items: center
     li
         flex-shrink: 0
         white-space: nowrap
@@ -16,6 +17,8 @@
             line-height: 1
             &:hover
                 text-decoration-color: rgba($breadcrumb-color, 1)
+        &.active
+            color: $breadcrumb-color-active
         &:not(:first-child)
             padding-left: $spacing0
             @include icon($breadcrumb-icon)
diff --git a/assets/sass/_theme/design-system/contacts.sass b/assets/sass/_theme/design-system/contacts.sass
new file mode 100644
index 0000000000000000000000000000000000000000..003b3cdb7cdc83d2543db12bb3d471afbb558956
--- /dev/null
+++ b/assets/sass/_theme/design-system/contacts.sass
@@ -0,0 +1,29 @@
+.contacts-details
+    margin-top: $spacing3
+    ul
+        @include list-reset
+        padding-left: 0
+        li
+            list-style-type: none
+            + li
+                margin-top: $spacing1
+            address
+                @extend .p
+            > span
+                @include meta
+                display: block
+    @include media-breakpoint-down(md)
+        width: auto
+        ul + ul
+            margin-top: $spacing1
+        li
+            align-items: baseline
+            justify-content: space-between
+            // display: flex
+            // text-align: right
+            > span
+                flex-shrink: 0
+                margin-right: $spacing1
+                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 4ae1004c161a6a88f952bf9beab3c136c5572430..3f30abab743d6e40cc74905571cacdf01e739d24 100644
--- a/assets/sass/_theme/design-system/footer.sass
+++ b/assets/sass/_theme/design-system/footer.sass
@@ -1,22 +1,27 @@
-footer[role="contentinfo"]
+footer#document-footer
     background: $footer-background-color
     color: $footer-color
     padding-bottom: $spacing3
     padding-top: $spacing3
-    margin-top: $spacing4
+    position: relative
+    @include media-breakpoint-down(desktop)
+        z-index: $zindex-footer
+    a
+        @include link($footer-color)
     .logo
         img
             height: $footer-logo-height
             max-width: 100%
             width: auto
-            @include media-breakpoint-up(md)
-                height: $footer-logo-height-md
+            @include media-breakpoint-up(desktop)
+                height: $footer-logo-height-desktop
     ul
         @include list-reset
         li
             + li
                 margin-top: $spacing0
-            a:not(:hover)
+            a
+                @include link($footer-color)
                 text-decoration-color: transparent
     .footer
         &-site
@@ -27,16 +32,22 @@ footer[role="contentinfo"]
             display: block
             margin-top: $spacing0
 
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
         .container
+            + .container,
             > * + *
                 margin-top: $spacing3
-    @include media-breakpoint-up(md)
+
+    @include media-breakpoint-up(desktop)
         .container
-            @include grid(2, md, $spacing4)
+            display: flex
+            justify-content: space-between
+            padding-bottom: $spacing3
+            + .container
+                padding-top: $spacing3
+                padding-bottom: 0
         .footer
             &-site, &-social
                 text-align: right
             &-social
-                order: 4
-                align-self: end
+                order: 2
diff --git a/assets/sass/_theme/design-system/grid.sass b/assets/sass/_theme/design-system/grid.sass
deleted file mode 100644
index 79079be7881881058594a317003ea0c1f0501259..0000000000000000000000000000000000000000
--- a/assets/sass/_theme/design-system/grid.sass
+++ /dev/null
@@ -1,12 +0,0 @@
-.container
-    @include container
-
-.document-content
-    position: relative
-    @include in-page-with-sidebar
-        .blocks
-            .block-content
-                @include media-breakpoint-up(md)
-                    padding-left: offset(4)
-                // @include media-breakpoint-up(xxl)
-                //     padding-left: offset(5)
diff --git a/assets/sass/_theme/design-system/header.sass b/assets/sass/_theme/design-system/header.sass
index 7fd692bda92c26028ccf0de161ba131d55f967c8..eca47feb73dbd2e3589941d72611dc7ee6c9361c 100644
--- a/assets/sass/_theme/design-system/header.sass
+++ b/assets/sass/_theme/design-system/header.sass
@@ -1,12 +1,15 @@
-header[role="banner"]
+header#document-header
     background: $header-background
+    border-bottom: $header-border-bottom-width solid $color-border
+    color: $header-color
     position: fixed
     left: 0
     transition: transform $header-sticky-transition, background $header-sticky-transition
     top: 0
     width: 100%
     z-index: $zindex-header
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
+        border-bottom: 0
         width: 100%
     .dropdown-menu
         transition: background $header-sticky-transition
@@ -20,13 +23,18 @@ header[role="banner"]
             a:hover,
             a:focus,
             a:active
-                // @include link($header-sticky-color)
+                color: inherit
+            a:not(:hover)
+                text-decoration-color: transparent
             span
                 color: $header-sticky-color
+        @if $header-sticky-invert-logo
+            .logo img
+                filter: invert(1)
     html.is-scrolling-down:not(.has-menu-opened) &
-        @include media-breakpoint-down(md)
+        @include media-breakpoint-down(desktop)
             transform: translateY(-100%)
-        @include media-breakpoint-up(md)
+        @include media-breakpoint-up(desktop)
             &:not(:hover)
                 transform: translateY(-100%)
     .logo
@@ -34,5 +42,81 @@ header[role="banner"]
             display: block
             height: $header-logo-height
             width: auto
-            @include media-breakpoint-up(md)
-                height: $header-logo-height-md
+            @if $header-sticky-invert-logo
+                transition: filter $header-sticky-transition
+            @include media-breakpoint-up(desktop)
+                height: $header-logo-height-desktop
+    @include media-breakpoint-down(desktop)
+        html.has-menu-opened &
+            nav
+                padding-bottom: 0
+// TODO : Est-ce au bon endroit ?
+body
+    &::after
+        @include inset(0)
+        background-color: $body-overlay-color
+        content: ""
+        pointer-events: none
+        position: fixed
+        opacity: 0
+        transition: opacity $header-transition
+        z-index: $zindex-body-overlay
+
+    html.has-menu-opened &,
+    html.has-offcanvas-opened &
+        &::after
+            display: block
+            opacity: 1
+            pointer-events: inherit
+    html.has-offcanvas-opened &
+        &::after
+            z-index: $zindex-header + 1
+    html.is-animating:not(.has-menu-opened) &
+        &::after
+            display: block
+            opacity: 0
+
+header#document-header
+    nav
+        padding-top: $header-nav-padding-y
+        padding-bottom: $header-nav-padding-y
+        @include media-breakpoint-up(desktop)
+            padding-top: $header-nav-padding-y-desktop
+            padding-bottom: $header-nav-padding-y-desktop
+        .container
+            align-items: center
+            display: flex
+            flex-wrap: wrap
+            justify-content: space-between
+        button[type="button"]
+            @include button-reset
+            display: none
+            border: 0
+            color: inherit
+            padding: 0
+            position: relative
+            text-transform: uppercase
+            line-height: 1
+            @include media-breakpoint-down(desktop)
+                display: flex
+                align-items: center
+            &:focus
+                box-shadow: none
+            &:focus-visible
+                outline-color: gray
+                outline-offset: 5px
+                outline-style: dashed
+                outline-width: 1px
+            span:first-of-type
+                @include meta
+                font-size: 14px
+            span:last-of-type
+                background: none
+                @include icon-block(burger, before)
+                    vertical-align: baseline
+                    margin-right: $icon-burger-margin-right
+            &[aria-expanded="true"]
+                span:last-of-type
+                    &::before
+                        content: map-get($icons, "burger-close")
+                        margin-right: $icon-close-margin-right
diff --git a/assets/sass/_theme/design-system/hero.sass b/assets/sass/_theme/design-system/hero.sass
index 4df15867c9585737badec5c36e55f568ec6a1620..5162b4768c1b431718d4b73091edf2c75bf17992 100644
--- a/assets/sass/_theme/design-system/hero.sass
+++ b/assets/sass/_theme/design-system/hero.sass
@@ -6,35 +6,51 @@
     color: $hero-color
     min-height: $hero-height
     padding-bottom: $spacing3
-    padding-top: calc(2rem + var(--header-height))
+    padding-top: var(--header-height)
     position: relative
-    @include media-breakpoint-up(md)
-        min-height: $hero-height-md
+    margin-bottom: $spacing3
+    @include media-breakpoint-up(desktop)
+        min-height: $hero-height-desktop
     *:focus-visible
         outline-color: $hero-color
-    
-    nav + .content
-        margin-top: $spacing3
 
     .content
+        align-items: start
+        padding-top: $spacing3
+        > h1, > hgroup
+            margin-top: $spacing3
+            
+        h1 + p
+            margin-top: $spacing1
         figure
-            display: block
-            img, picture
+            position: relative
+            &, img, picture
                 display: block
-            figcaption
-                @include meta
-                color: $color-text-alt
-                margin-top: $spacing0
-                text-align: right
-                a
-                    color: inherit
+            img
+                width: 100%
+                height: auto
+            @include collapsed-figcaption
 
-    @include media-breakpoint-down(md)
+    .breadcrumb-nav + .content
+        padding-top: 0
+    .content + .breadcrumb-nav
+        margin-top: $spacing3
+
+    @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)
         &--with-image
             padding-bottom: 0
+            .content
+                > h1, > hgroup
+                    margin-bottom: $spacing2
         &--image-landscape
             figure
-                margin: half($spacing3) half(-$grid-gutter-sm) 0
+                margin-left: half(-$grid-gutter-sm)
+                margin-right: half(-$grid-gutter-sm)
         &--image-portrait, &--image-square
             .container
                 display: flex
@@ -42,58 +58,30 @@
                 margin-bottom: $spacing5
             figure
                 margin-bottom: calc(#{-$spacing5} + #{$spacing2})
-                margin-top: $spacing1
-    @include media-breakpoint-up(md)
-        $negative-margin-bottom: px2rem(150)
+
+    @include media-breakpoint-up(desktop)
         .content
-            h1
+            > h1, > hgroup
                 width: col(9)
         &--with-image
-            margin-bottom: $negative-margin-bottom
             .content
                 display: flex
                 justify-content: space-between
-                h1
+                > h1, > hgroup
                     width: col(7)
                 figure
                     width: col(5)
-                    margin-bottom: -$negative-margin-bottom
-                    // If there's no credits
-                    picture:last-child
-                        margin-bottom: $spacing2
+
         &--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
             .content
-                h1
+                > h1, > hgroup
                     width: col(8)
                 figure
-                    margin-top: calc(-#{$spacing3} - #{$spacing2})
                     width: col(3)
 
-    // In what case ?
-    // p
-    //     margin-bottom: 0
-    // a
-    //     color: $hero-color
-    //     text-decoration-color: rgba($hero-color, 0.3)
-    //     &:hover
-    //         text-decoration-color: $hero-color
-            
-
-    // > div:first-of-type
-    //     > div
-    //         margin-top: $spacing1
-    //         @include media-breakpoint-up(xl)
-    //             margin-top: px2rem(70)
-
-    // > div + div
-    //     margin-top: auto
-    //     .container
-    //         padding-bottom: $spacing1
-    //         padding-top: $spacing1
-    //     & + .document-nav
-    //         margin-top: 0
-    // > div
-    //     position: relative
-    //     z-index: 1
-    // picture
-    //     position: relative
diff --git a/assets/sass/_theme/design-system/layout.sass b/assets/sass/_theme/design-system/layout.sass
index 66513dee5ae7a15be2b2dbbec9018252eee6a0d2..e51b956ba9cdcb3d66c05af199682344a069c4b2 100644
--- a/assets/sass/_theme/design-system/layout.sass
+++ b/assets/sass/_theme/design-system/layout.sass
@@ -13,8 +13,8 @@
     --grid-gutter: #{$grid-gutter}
     --grid-max-width: #{$grid-max-width}
     --header-height: #{$header-height}
-     @include media-breakpoint-up(md)
-        --header-height: #{$header-height-md}
+    @include media-breakpoint-up(desktop)
+        --header-height: #{$header-height-desktop}
 
 // TODO: choisir entre margin top / bottom --> https://matthewjamestaylor.com/css-margin-top-vs-bottom
 
@@ -30,34 +30,47 @@ body
 
 main
     &:not(.page-with-blocks)
-        padding-bottom: $spacing-section-y
+        padding-bottom: $spacing3
+
+iframe
+    border: none
+
+[id]
+    scroll-margin-top: var(--header-height)
 
 .container
     @include container
     .hero + &
         margin-top: $spacing3
 
-ul
-    padding-left: px2rem(15)
+.hidden
+    display: none
+
+ul,
+ol
+    // https://since1979.dev/aligning-your-lists-with-your-text/
+    padding-left: 0
+    list-style-position: inside
+    > li
+        > p
+            display: inline
 
-.document-content, .blocks
-    margin-top: $spacing-section-y
-    > * + *
-        margin-top: $spacing-section-y
-    // > *
-    //     margin-top: $spacing3
-    //     padding-bottom: $spacing3
-    //     &:last-child
-    //         padding-bottom: $spacing4
-    // > *:not(:last-child)
-    //     padding-bottom: $spacing3
-    // > *:last-child
-    //     padding-bottom: $spacing4
-    // section
-    //     * + p
-    //         margin-bottom: 0 // TODO : vérifier les cas particuliers
-    //         margin-top: $spacing1
+.document-content
+    .container > .lead
+        margin-bottom: $spacing3
 
+// .document-content
+//     margin-top: $spacing-section-y
+
+.document-content
+    position: relative
+    @include in-page-with-sidebar
+        .block
+            .block-content
+                @include media-breakpoint-up(desktop)
+                    padding-left: offset(4)
+    // > .container:last-of-type
+    //     margin-bottom: $spacing4
 
 details
     &:not([open]):hover
@@ -69,7 +82,7 @@ details
         padding-top: $spacing0
         position: relative
         cursor: pointer
-        @include icon(caret, after, px2rem(5))
+        @include icon(caret, after)
             margin-left: px2rem(10)
             line-height: px2rem(22)
             transition: transform 0.25s
@@ -79,10 +92,7 @@ details
             display: none
     &[open]
         summary
-            @include icon(caret-top, after, px2rem(5))
+            @include icon(caret-top, after)
         &:hover
             summary::after
                 transform: translateY(-5px)
-
-section
-    scroll-margin-top: var(--header-height)
\ 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 bf3541613f265817706ad532a314c0e4ceea9197..44755c444ca2fab33f42e8f4df9cea512c24722e 100644
--- a/assets/sass/_theme/design-system/nav.sass
+++ b/assets/sass/_theme/design-system/nav.sass
@@ -7,12 +7,12 @@
         opacity: 0
 
 .menu
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
         -webkit-flex-basis: 100vw
         display: none
         flex-basis: 100vw
-        margin-top: 1.875rem
-        max-height: 70vh
+        margin-top: $spacing1
+        max-height: calc(100vh - var(--header-height) - #{$spacing1})
         overflow: auto
     a,
     a:focus,
@@ -29,18 +29,18 @@
         @include meta
         cursor: pointer
         transition: text-decoration 0.15s
+        display: block
         &:not(:hover)
             text-decoration-color: transparent
         &[aria-expanded]
             @include icon(caret, after)
-                font-size: px2rem(6)
                 margin-left: px2rem(5)
                 transition: transform 0.15s
             &[aria-expanded="true"]
                 &::after
                     transform: rotate(180deg)
 
-        @include media-breakpoint-up(md)
+        @include media-breakpoint-up(desktop)
             a:hover,
             a:focus
                 color: $header-hover-color
@@ -48,9 +48,9 @@
     .dropdown-menu
         display: none
         background: $header-dropdown-background
-        @include media-breakpoint-down(md)
+        @include media-breakpoint-down(desktop)
             padding-bottom: $spacing1
-        @include media-breakpoint-up(md)
+        @include media-breakpoint-up(desktop)
             padding: $spacing1
             position: absolute
         a
@@ -89,25 +89,28 @@
         span
             @include meta
 
-    @include media-breakpoint-up(md)
+    @include media-breakpoint-up(desktop)
+        .nav-level-3
+            li
+                margin-top: $spacing0
         @if $header-dropdown-full
             .dropdown-menu
                 inset: 100% 0 auto 0
                 padding-left: 0
                 padding-right: 0
+                padding-bottom: $spacing2
             .nav-level-2
                 @include container
-                @include grid(4, md)
+                @include grid(4, desktop)
         @else 
             .has-children
                 position: relative
             .dropdown-menu
                 margin-top: $header-nav-padding-y
                 min-width: 400px
-                padding-bottom: half($spacing0)
-                padding-left: $spacing0
-                padding-top: half($spacing0)
-                padding-right: $spacing0
+                padding-left: $spacing1
+                padding-top: $spacing0
+                padding-right: $spacing1
                 right: 0
                 text-align: right
             .nav-level-2
@@ -119,7 +122,7 @@
                     + li.has-children
                         margin-top: $spacing1
 
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
         &.is-opened
             display: block
         a, span
@@ -128,10 +131,11 @@
             display: block
             li 
                 a, span
-                    padding: half($spacing1) 0
+                    padding: half($spacing0) 0
                     display: block
             > li:not(:last-child) 
                 border-bottom: 1px solid #adb5bd
+            > li
                 > a, > span
                     padding-bottom: $spacing1
                     padding-top: $spacing1
@@ -140,9 +144,10 @@
                     align-items: center
                     display: flex
                     justify-content: space-between
-                    @include icon("caret-bottom", after)
+                    text-decoration: none
+                    @include icon(caret-bottom, after)
+                        display: block
                     &::after
-                        font-size: .375rem
                         line-height: 1
                 .dropdown-menu
                     display: none
@@ -155,74 +160,8 @@
         .nav-level-2
             > .has-children + .has-children
                 margin-top: $spacing1
-
-// TODO : Est-ce au bon endroit ?
-body
-    &::after
-        @include inset(0)
-        background-color: $body-overlay-color
-        content: ""
-        pointer-events: none
-        position: fixed
-        opacity: 0
-        transition: opacity $header-transition
-        z-index: $zindex-body-overlay
-
-    html.has-menu-opened &,
-    html.has-offcanvas-opened &
-        &::after
-            display: block
-            opacity: 1
-            pointer-events: inherit
-    html.has-offcanvas-opened &
-        &::after
-            z-index: $zindex-header + 1
-    html.is-animating:not(.has-menu-opened) &
-        &::after
-            display: block
-            opacity: 0
-
-header[role="banner"]
-    nav[role="navigation"]
-        padding-bottom: $header-nav-padding-y
-        padding-top: $header-nav-padding-y
-        .container
-            align-items: center
-            display: flex
-            flex-wrap: wrap
-            justify-content: space-between
-        button[type="button"]
-            @include button-reset
-            display: none
-            border: 0
-            color: $body-color
-            padding: 0
-            position: relative
-            @include media-breakpoint-down(md)
-                display: flex
-                align-items: center
-            &:focus
-                box-shadow: none
-            &:focus-visible
-                outline-color: gray
-                outline-offset: 5px
-                outline-style: dashed
-                outline-width: 1px
-            span:first-of-type
-                @include meta
-            span:last-of-type
-                @include icon("burger", before)
-                background: none
-                height: calc(1.063rem + .3125rem * 2)
-                padding: px2rem(5) 0 px2rem(5) px2rem(5)
-                width: calc(1.5rem + .3125rem)
-                &::before
-                    font-size: px2rem(17)
-                    vertical-align: top
-            &[aria-expanded="true"]
-                span:last-of-type
-                    &::before
-                        content: map-get($icons, "close")
+        .nav-level-3
+            padding-top: 0
 
 .share
     display: flex
@@ -232,11 +171,9 @@ header[role="banner"]
     li:not(:last-child)
         margin-right: 1rem
     a
-        font-size: px2rem(13)
         text-decoration: none
         padding: $spacing0
-        &::before
-            font-size: px2rem(13)
+        font-size: px2rem(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 c85563971c500822c0baa7061324d067e345eb95..799cd099db19f092823fc586d19506e42305b874 100644
--- a/assets/sass/_theme/design-system/pagination.sass
+++ b/assets/sass/_theme/design-system/pagination.sass
@@ -4,7 +4,10 @@
     justify-content: center
     align-items: center
     display: flex
-    margin-top: $spacing-section-y
+    flex-wrap: wrap
+    margin-top: $spacing3
+    main.page-with-blocks &
+        padding-bottom: $spacing3
     li
         a
             color: inherit
@@ -22,20 +25,27 @@
                 background-color: $color-background-alt
         &:first-child
             a
-                @include icon(arrow-first, before, px2rem(10))
+                @include icon-block(arrow-first, before)
+                padding-left: 0
+                padding-right: 0
         &:nth-child(2)
             a
-                @include icon(arrow-left, before, px2rem(10))
+                @include icon-block(arrow-previous, before)
+                padding-left: 0
+                padding-right: 0
         &:nth-last-child(2)
             a
-                @include icon(arrow-right, before, px2rem(10))
+                @include icon-block(arrow-next, before)
+                padding-left: 0
+                padding-right: 0
         &:last-child
             a
-                @include icon(arrow-last, before, px2rem(10))
+                @include icon-block(arrow-last, before)
+                padding-left: 0
+                padding-right: 0
 
 .posts-navigation
     border-top: 1px solid $color-border
-    margin-top: $spacing3
     ul
         @include list-reset
         display: flex
@@ -45,8 +55,10 @@
         a
             @include small
             border: 0
-            &:not(:hover)
-                text-decoration-color: transparent
+            display: block
+            text-decoration: none
+            &:hover
+                color: $color-accent
             span
                 @include meta
                 text-decoration: none
@@ -54,20 +66,20 @@
                 margin-bottom: $spacing0
         .previous
             span
-                @include icon(arrow-left, before, px2rem(12))
+                @include icon(arrow-left, before)
                     margin-right: px2rem(5)
         .next
             text-align: right
             span
-                @include icon(arrow-right, after, px2rem(12))
+                @include icon(arrow-right, after)
                     margin-left: px2rem(5)
 
-    @include media-breakpoint-up(md)
+    @include media-breakpoint-up(desktop)
         ul
             padding-top: $spacing1
-            .next:first-child
+            gap: $spacing1
 
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
         ul
             flex-direction: column-reverse
             .previous,
@@ -84,9 +96,9 @@
                     display: block
                     padding: $spacing1 0
             .previous
-                @include icon(arrow-left, before, px2rem(12))
+                @include icon(arrow-left, before)
                     margin-right: $spacing0
             .next
                 justify-content: end
-                @include icon(arrow-right, after, px2rem(12))
+                @include icon(arrow-right, after)
                     margin-left: $spacing0
\ No newline at end of file
diff --git a/assets/sass/_theme/design-system/table.sass b/assets/sass/_theme/design-system/table.sass
index f8502e593aeb2a8bce5c9c3966a1a1588328695f..98f688dab045b6250508d26acb3b7d2304cfa899 100644
--- a/assets/sass/_theme/design-system/table.sass
+++ b/assets/sass/_theme/design-system/table.sass
@@ -13,19 +13,22 @@ table
         padding-top: $spacing0
         padding-bottom: $spacing0
         padding-right: $spacing0
+        @include in-page-with-sidebar
+            padding-top: calc(#{$spacing0} / 2)
+            padding-bottom: calc(#{$spacing0} / 2)
 
     thead
         @include h4
         font-size: $table-head-font-size
-        @include media-breakpoint-up(md)
-            font-size: $table-head-font-size-md
+        @include media-breakpoint-up(desktop)
+            font-size: $table-head-font-size-desktop
         th
             text-align: left
 
     tbody
         font-size: $table-body-size
-        @include media-breakpoint-up(md)
-            font-size: $table-body-size-md
+        @include media-breakpoint-up(desktop)
+            font-size: $table-body-size-desktop
         tr
             border-bottom: 1px solid $color-border
         tr:first-child
@@ -37,7 +40,7 @@ table
     margin-right: half(-$grid-gutter-sm)
     padding-left: half($grid-gutter-sm)
     padding-right: half($grid-gutter-sm)
-    @include media-breakpoint-up(md)
+    @include media-breakpoint-up(desktop)
         margin-left: half(-$grid-gutter)
         margin-right: half(-$grid-gutter)
         padding-left: half($grid-gutter)
diff --git a/assets/sass/_theme/design-system/table_of_contents.sass b/assets/sass/_theme/design-system/table_of_contents.sass
index e490ad99a00a616e5527b7e9b7fd527eb54aeda9..0e7d1746f0da1b9d126bbdf61f39efd66dd8bb08 100644
--- a/assets/sass/_theme/design-system/table_of_contents.sass
+++ b/assets/sass/_theme/design-system/table_of_contents.sass
@@ -1,4 +1,5 @@
 @mixin offcanvas-toc
+    --toc-transition-duration: 0.35s
     background: $toc-background-color
     position: fixed
     top: 0
@@ -8,11 +9,13 @@
     z-index: $zindex-toc
     width: calc(#{col-outside-container(4)} + #{$grid-gutter} * 2)
     transform: translateX(100%)
-    transition: 0.35s transform ease-in-out
-    @include media-breakpoint-down(md)
+    transition: var(--toc-transition-duration) transform ease-in-out
+    @include media-breakpoint-down(desktop)
         width: calc(100% - #{$grid-gutter})
     &.is-opened
         transform: translateX(0)
+    &[aria-hidden="true"]
+        display: none
     .toc-content
         display: flex
         flex-direction: column
@@ -20,12 +23,14 @@
     .toc-title
         border-bottom: 1px solid $color-border
         font-size: $toc-title-font-size
-        padding: $header-nav-padding-y
-        @include media-breakpoint-up(md)
-            padding: $header-nav-padding-y $grid-gutter
-        @include media-breakpoint-up(md)
-            font-size: $toc-title-font-size-md
-            padding: calc(#{$spacing0} * 0.5 + #{$header-nav-padding-y}) $grid-gutter
+        padding: $spacing0 $spacing1
+        @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-top: 0
+            padding-bottom: 0
+            line-height: calc(var(--header-height) - 1px)
     .toc
         flex: 1
         display: flex
@@ -35,24 +40,28 @@
         > ol
             flex: 1
             padding: $spacing1
-            @include media-breakpoint-up(md)
+            @include media-breakpoint-up(desktop)
                 padding: $spacing1 $grid-gutter
             > li:first-child
                 margin-top: 0
     button
         @include button-reset
-        display: flex
-        justify-content: space-between
+        @include icon-block(close, after)
+            margin-right: -14px
         align-items: center
-        padding: $header-nav-padding-y $spacing1
         border-top: 1px solid $color-border
-        line-height: inherit
-        @include icon(close, after)
-        @include media-breakpoint-up(md)
+        display: flex
+        justify-content: space-between
+        padding: 0 $spacing1
+        line-height: $body-line-height
+        @include media-breakpoint-up(desktop)
             border-top: 0
-            padding: calc(#{$spacing0} * 0.5 + #{$header-nav-padding-y}) 0
             position: absolute
+            padding-right: 0
             top: 0
+            padding-top: 0
+            padding-bottom: 0
+            line-height: var(--header-height)
             right: $grid-gutter
             &::after
                 margin-left: $spacing0
@@ -60,27 +69,32 @@
 .toc-cta
     display: flex
     position: relative
-    @include media-breakpoint-up(md)
+    @include in-page-with-sidebar
+        display: none
+    @include media-breakpoint-up(desktop)
         @include container
+        background: $color-background
         justify-content: end
+        margin-bottom: $spacing3
+        position: sticky
         text-align: right
-        @include in-page-with-sidebar
-            display: none
+        top: calc(var(--header-height) * -1)
+        transition: top $toc-sticky-transition
+        z-index: $zindex-toc-cta
+        html:not(.is-scrolling-down) &
+            top: var(--header-height)
         body.offcanvas-toc &
             display: flex
-
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
         border-top: 1px solid $color-border
         position: fixed
         bottom: 0
-        background: white
+        background: $toc-background-color
         left: 0
         width: 100%
-        padding: $spacing0
+        padding: 0 half($grid-gutter-sm)
         z-index: $zindex-toc-cta
-
     button
-        @include icon(toc, after)
         @include button-icon(toc)
         border: 0
         line-height: inherit
@@ -92,9 +106,9 @@
             text-overflow: ellipsis
             overflow: hidden
         &::after
-            font-size: px2rem(13)
             color: $toc-color
-        @include media-breakpoint-down(md)
+            margin-right: $icon-toc-margin-right
+        @include media-breakpoint-down(desktop)
             display: flex
             justify-content: space-between
             align-items: center
@@ -102,33 +116,33 @@
 
 .toc-container
     // in full width page or under md breakpoint (mobile)
-    
     @include in-page-without-sidebar
         @include offcanvas-toc
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
         @include offcanvas-toc
 
     // Only desktop and in page with sidebar
-    @include media-breakpoint-up(md)
-        @include in-page-with-sidebar
-            @include container-margin-left
-            pointer-events: none
-            top: 0
-            left: 0
-            margin-top: 0
-            height: 100%
-            position: absolute
-            width: col-outside-container(4)
-            .toc-content
-                position: sticky
-                top: var(--header-height)
-                overflow-y: auto
-                max-height: calc(100vh - var(--header-height))
-                margin-bottom: $spacing1
-                padding-bottom: $spacing5
-                pointer-events: auto
-            button
-                display: none
+    @include in-page-with-sidebar
+        @include container-margin-left
+        pointer-events: none
+        top: 0
+        left: 0
+        margin-top: 0
+        height: 100%
+        position: absolute
+        width: col-outside-container(4)
+        .toc-content
+            overflow-y: auto
+            max-height: calc(100vh - var(--header-height))
+            padding-bottom: $spacing2
+            pointer-events: auto
+            @include sticky($spacing1)
+            html.is-scrolling-down &
+                max-height: calc(100vh - #{$spacing1})
+        .toc-title
+            color: $color-text-alt
+        button
+            display: none
 
     // Program tweak : use offcanvas
     // TODO : find a better way to cancel sidebar props
@@ -139,25 +153,26 @@
         left: auto
         .toc-content
             position: relative
-            top: 0
+            top: 0 !important
             max-height: none
             padding-bottom: 0
             margin-top: 0
             margin-bottom: 0
-
+            html.is-scrolling-down &
+                max-height: none
 
 .toc-title, .toc-cta, .toc-container button
-    font-family: $toc-font-family
+    font-family: $toc-title-font-family
     font-size: $toc-title-font-size
     color: $toc-color
-    @include media-breakpoint-up(md)
-        font-size: $toc-title-font-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $toc-title-font-size-desktop
 
 .toc
     font-family: $toc-font-family
     line-height: $toc-line-height
-    @include media-breakpoint-up(md)
-        font-size: $toc-font-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $toc-font-size-desktop
     ol
         @include list-reset
         align-items: flex-start
@@ -171,7 +186,7 @@
                 display: block
                 text-decoration-color: transparent
                 &:hover
-                    text-decoration: underline
+                    text-decoration-color: $toc-color
         .active
             color: $toc-active-color
             pointer-events: none
@@ -180,6 +195,4 @@
             li a
                 @include icon(list-hyphen)
                 &::before
-                    opacity: 0.3
-                    font-size: 6px
-                    margin-inline-end: 6px
+                    margin-right: 6px
diff --git a/assets/sass/_theme/design-system/typography.sass b/assets/sass/_theme/design-system/typography.sass
index 7cb5b1f9cf2bb52e01be5948d0104e8b22117d0f..d80a093d7a250add3c87f8bacd2b106e4eacae4e 100644
--- a/assets/sass/_theme/design-system/typography.sass
+++ b/assets/sass/_theme/design-system/typography.sass
@@ -7,9 +7,9 @@ body
     font-size: $body-size
     font-variant-ligatures: common-ligatures
     text-rendering: optimizelegibility
-    line-height: $line-height-base
-    @include media-breakpoint-up(md)
-        font-size: $body-size-md
+    line-height: $body-line-height
+    @include media-breakpoint-up(desktop)
+        font-size: $body-size-desktop
 
 // Experimental, not implemented yet
 p, h1, h2, h3, h4, h5, h6, li, a, th, td, span
@@ -20,77 +20,76 @@ h1, h2, h3, h4, h5, h6
     margin-top: 0
     margin-bottom: 0
 
-@mixin heading
-    font-family: $heading-font-family
-
 @mixin h1
-    @include heading
+    font-family: $h1-font-family
     font-size: $h1-size
     font-weight: $h1-weight
     line-height: $h1-line-height
     text-transform: $h1-text-transform
-    @include media-breakpoint-up(md)
-        font-size: $h1-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $h1-size-desktop
 
 h1, .h1
     @include h1
 
 @mixin h2
-    @include heading
+    font-family: $h2-font-family
     font-size: $h2-size
     font-weight: $h2-weight
     line-height: $h2-line-height
     text-transform: $h2-text-transform
-    @include media-breakpoint-up(md)
-        font-size: $h2-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $h2-size-desktop
 
 h2, .h2
     @include h2
 
 @mixin h3
-    @include heading
+    font-family: $h3-font-family
     font-size: $h3-size
     font-weight: $h3-weight
     line-height: $h3-line-height
     text-transform: $h3-text-transform
-    @include media-breakpoint-up(md)
-        font-size: $h3-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $h3-size-desktop
 
 h3, .h3
     @include h3
 
 @mixin h4
-    @include heading
+    font-family: $h4-font-family
     font-size: $h4-size
     font-weight: $h4-weight
     line-height: $h4-line-height
     text-transform: $h4-text-transform
-    @include media-breakpoint-up(md)
-        font-size: $h4-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $h4-size-desktop
 
 h4, .h4
     @include h4
 
 @mixin h5
-    @include heading
+    font-family: $h5-font-family
     font-size: $h5-size
     font-weight: $h5-weight
     line-height: $h5-line-height
     text-transform: $h5-text-transform
-    @include media-breakpoint-up(md)
-        font-size: $h5-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $h5-size-desktop
+    a
+        text-decoration: none
 
 h5, .h5
     @include h5
 
 @mixin h6
-    @include heading
+    font-family: $h6-font-family
     font-size: $h6-size
     font-weight: $h6-weight
     line-height: $h6-line-height
     text-transform: $h6-text-transform
-    @include media-breakpoint-up(md)
-        font-size: $h6-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $h6-size-desktop
 
 h6, .h6
     @include h6
@@ -102,37 +101,36 @@ h2, .h2
         &:hover
             text-decoration-thickness: 1px
 
-@mixin lead
+@mixin lead($handle-sidebar: true)
     font-family: $lead-font-family
     font-size: $lead-size
     font-weight: $lead-weight
     line-height: $lead-line-height
-    @include media-breakpoint-up(md)
-        font-size: $lead-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $lead-size-desktop
+    @if $handle-sidebar
+        @include in-page-with-sidebar
+            font-family: $lead-sidebar-font-family
+            font-size: $lead-sidebar-size-desktop
+            font-weight: $lead-sidebar-weight
+            line-height: $lead-sidebar-line-height
 
 .lead
     @include lead
-    margin-top: 0
 
 .p,
 .li
     font-size: $body-size
-    @include media-breakpoint-up(md)
-        font-size: $body-size-md
-
-p
-    margin-top: 0
-    margin-bottom: 0
-    + p
-        margin-top: $spacing0
+    @include media-breakpoint-up(desktop)
+        font-size: $body-size-desktop
 
 @mixin meta
     font-family: $meta-font-family
     font-size: $meta-size
     font-weight: $meta-weight
     line-height: $meta-line-height
-    @include media-breakpoint-up(md)
-        font-size: $meta-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $meta-size-desktop
 
 .meta
     @include meta
@@ -142,8 +140,8 @@ p
     font-size: $signature-size
     font-weight: $signature-weight
     line-height: $signature-line-height
-    @include media-breakpoint-up(md)
-        font-size: $signature-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $signature-size-desktop
 
 .signature
     @include signature
@@ -153,26 +151,65 @@ p
     font-size: $small-size
     font-weight: $small-weight
     line-height: $small-line-height
-    @include media-breakpoint-up(md)
-        font-size: $small-size-md
+    @include media-breakpoint-up(desktop)
+        font-size: $small-size-desktop
 
 small, .small
     @include small
 
-[itemprop="articleBody"]
-    h1, h2, h3, h4, h5, h6
-        margin-block-start: 2em
+@mixin rich-text
+    word-break: break-word
+    h1, h2, h3, h4, h5, h6, p
+        margin-top: 2em
         &:first-child, meta + &
-            margin-block-start: 0
+            margin-top: 0
+
+.rich-text
+    @include rich-text
+
+@mixin inherit-text
+    font-family: inherit
+    font-weight: inherit
+    font-style: inherit
+    font-size: inherit
+    line-height: inherit
+
+[itemprop="articleBody"]
+    @include rich-text
 
 @mixin blockquote
     margin: 0
+    font-family: $quote-font-family
+    font-size: $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
     cite
         font-size: px2rem(18)
         font-style: normal
 
 blockquote, .blockquote
     @include blockquote
+    font-style: italic
+
+p
+    margin-top: 0
+    margin-bottom: 0
+    + p
+        margin-top: $spacing0
+
+p:empty
+    display: none
+
+p + ul,
+p + ol
+    margin-top: 0
+
+figcaption
+    a
+        color: inherit
 
 address
     font-style: normal
@@ -182,7 +219,7 @@ a,
     @include link
     overflow-wrap: break-word
     &[target="_blank"]:not(.icon)
-        @include icon("link-blank", "after", px2rem(10), true)
+        @include icon(link-blank, after, true)
     &[href^="mailto"]
         &::after
             content: none
@@ -193,9 +230,9 @@ a,
     text-decoration: none
     display: inline-block
     border-radius: $btn-border-radius
-    @include media-breakpoint-up(md)
-        font-size: $btn-font-size-md
-        padding: $btn-padding-y-md $btn-padding-x-md
+    @include media-breakpoint-up(desktop)
+        font-size: $btn-font-size-desktop
+        padding: $btn-padding-y-desktop $btn-padding-x-desktop
 
 .btn
     @include btn
@@ -220,6 +257,11 @@ abbr, abbr[title]
     color: $color-background
     text-shadow: none
 
+sub,
+sup
+    font-size: 60%
+    margin-left: px2rem(2)
+
 *:focus-visible
     outline-color: gray
     outline-offset: 5px
@@ -236,11 +278,13 @@ abbr, abbr[title]
     font-family: 'Icon'
     font-style: normal
     font-weight: 400
-    src: url('../fonts/icons/icomoon.woff') format("woff")
+    src: url('../fonts/fonticons/IconFont.woff') format("woff")
 
 @each $name, $glyph in $icons
     .icon-#{$name}
         @include icon($name, before)
+    .icon-block-#{$name}
+        @include icon-block($name, before)
     .btn-#{$name}
         @include icon($name)
         &::before
diff --git a/assets/sass/_theme/hugo-osuny.sass b/assets/sass/_theme/hugo-osuny.sass
index 1df8e79cdf447ac9191a9f6e8df46bae6af02865..aa3da63802a896f8155ff7b1330a348b25778fdd 100644
--- a/assets/sass/_theme/hugo-osuny.sass
+++ b/assets/sass/_theme/hugo-osuny.sass
@@ -18,8 +18,8 @@
 @import "design-system/layout"
 @import "design-system/a11y"
 @import "design-system/breadcrumb"
+@import "design-system/contacts"
 @import "design-system/footer"
-@import "design-system/grid"
 @import "design-system/header"
 @import "design-system/hero"
 @import "design-system/image"
@@ -46,6 +46,8 @@
 @import "blocks/partners"
 @import "blocks/posts"
 @import "blocks/programs"
+@import "blocks/sitemap"
+@import "blocks/summary"
 @import "blocks/testimonials"
 @import "blocks/timeline"
 @import "blocks/video"
@@ -55,7 +57,6 @@
 @import "sections/authors"
 @import "sections/categories"
 @import "sections/diplomas"
-@import "sections/home"
 @import "sections/organizations"
 @import "sections/pages"
 @import "sections/papers"
diff --git a/assets/sass/_theme/sections/authors.sass b/assets/sass/_theme/sections/authors.sass
index f8eb3f2dba7d307a8ba5081ada17b589a3dc710a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/assets/sass/_theme/sections/authors.sass
+++ b/assets/sass/_theme/sections/authors.sass
@@ -1,5 +0,0 @@
-.authors__term
-    .container
-        margin-top: $spacing2
-    .posts
-        @include grid(3, md)
diff --git a/assets/sass/_theme/sections/categories.sass b/assets/sass/_theme/sections/categories.sass
index f6218cdfb52ad77f747121de5f8e4cedc7da53ef..2d3c05e69b14c4a40cb1b10e8f293f6a43127f02 100644
--- a/assets/sass/_theme/sections/categories.sass
+++ b/assets/sass/_theme/sections/categories.sass
@@ -1,4 +1,11 @@
 ul.categories
     @include list-section
-    article
-        @include article
\ No newline at end of file
+    li
+        a:first-child
+            & + p 
+                text-align: right
+                white-space: nowrap
+
+.categories__term
+    main
+        padding-bottom: $spacing3
\ No newline at end of file
diff --git a/assets/sass/_theme/sections/diplomas.sass b/assets/sass/_theme/sections/diplomas.sass
index 99db73d9cd076c2247a2702f2945008270d0d45c..c5b2d68c5dd83fbc8aa7a5e8080d1885869f8763 100644
--- a/assets/sass/_theme/sections/diplomas.sass
+++ b/assets/sass/_theme/sections/diplomas.sass
@@ -1,15 +1,55 @@
 ul.diplomas
     @include list-reset
     > li
-        margin-bottom: $spacing3
+        margin-bottom: $spacing0
+        @include media-breakpoint-up(desktop)
+            margin-bottom: $spacing3
         > a
-            @include h3
+            @include h2
+            display: block
+            text-decoration: none
+            padding-bottom: $spacing1
+            padding-top: $spacing1
+            border-bottom: 1px solid $color-border
+            @include icon(arrow-right, after)
+                align-self: center
+                margin-left: auto
+            &:hover
+                color: $color-accent
+            @include media-breakpoint-down(desktop)
+                position: relative
+                padding-right: $spacing1
+                &::after
+                    position: absolute
+                    bottom: $spacing1
+                    right: 0
+            @include media-breakpoint-up(desktop)
+                display: flex
+                align-items: baseline
+                span
+                    margin-left: $spacing1
+                
+        .content
+            @include grid(2, desktop)
+            padding-bottom: $spacing1
+            padding-top: $spacing1
+
         .programs
+            @include media-breakpoint-down(desktop)
+                margin-top: $spacing1
             li
+                @include h3
                 display: block
+                border-bottom: 0
+                padding: 0
+                + li
+                    margin-top: $spacing1
+                a:hover
+                    color: $color-accent
+                        
         .program
             div
-                @include media-breakpoint-up(md)
+                @include media-breakpoint-up(desktop)
                     display: flex
                     > p
                         width: col(6)
@@ -23,7 +63,6 @@ ul.diplomas
     button
         @include button-reset
         @include icon(caret, after)
-            font-size: px2rem(6)
             margin-left: 5px
     .dropdown-menu
         @include inset(calc(100% + #{$spacing0}), 0, auto, auto)
@@ -31,7 +70,7 @@ ul.diplomas
         display: none
         position: absolute
         z-index: 2
-        @include media-breakpoint-down(md)
+        @include media-breakpoint-down(desktop)
             right: half(-$grid-gutter-sm)
             left: half(-$grid-gutter-sm)
         &,
@@ -44,52 +83,70 @@ ul.diplomas
             padding: $spacing1
             text-decoration: none
             white-space: normal
-            @include media-breakpoint-down(md)
+            @include media-breakpoint-down(desktop)
                 padding: $spacing0 $spacing1
             &:not(:first-child)
                 border-top: 1px solid $color-border
             &:hover
                 background-color: $color-accent
                 color: white
-            &:focus
-                color: black
 
     button[aria-expanded="true"] 
         @include icon('caret-top', 'after')
-            font-size: px2rem(6)
         + .dropdown-menu
             display: block
 
-    
-    // TODO : style de l'icone
-    // button::after,
-    // button[aria-expanded="true"]::after
-    //     display: inline-block
-    //     font-family: Icon
-    //     font-size: .375rem
-    //     font-weight: 400
-    //     line-height: 1
-    //     margin-left: 0.3125rem
-    //     vertical-align: middle
-
-.essential
-    flex-wrap: wrap
-    font-size: $program-essential-font-size
-    margin-bottom: 0
-    @include media-breakpoint-up(md)
-        @include grid(12, false, 0)
-        font-size: $program-essential-font-size-md
-    dt,
-    dd
-        margin: 0
-        padding-bottom: $spacing0
-        padding-top: $spacing0
-    dt
-        grid-column: 1/3
-        opacity: .8
-        @include media-breakpoint-down(md)
-            padding-bottom: 0
-    dd
-        grid-column: 3/13
+.essential-container
+    .container
         @include media-breakpoint-down(md)
-            padding-top: 0
+            .buttons
+                display: flex
+                gap: $spacing1
+                flex-wrap: wrap
+        @include media-breakpoint-up(md)
+            @include grid(2, md)
+            align-items: flex-end
+            .buttons
+                display: flex
+                justify-content: flex-end
+                flex-direction: column
+                align-items: end
+                gap: $spacing1
+                > *
+                    width: col(2, 6)
+                    min-width: 200px
+            
+    .essential
+        color: $header-color
+        flex-wrap: wrap
+        font-size: $program-essential-font-size
+        margin-bottom: 0
+        margin-top: $spacing3
+        @include meta
+        @include media-breakpoint-up(desktop)
+            @include grid(6, false, 0)
+            font-size: $program-essential-font-size-desktop
+        dt,
+        dd
+            margin: 0
+            padding-bottom: $spacing0
+            padding-top: $spacing0
+            &:last-of-type
+                padding-bottom: 0
+        dt
+            grid-column: 1/3
+            color: $color-text-alt
+            @include media-breakpoint-down(desktop)
+                padding-bottom: 0
+        dd
+            grid-column: 3/7
+            @include media-breakpoint-down(desktop)
+                padding-top: 0
+            a
+                @include link($hero-color)
+
+.diplomas__term
+    ol.programs
+        li
+            @include grid(2, desktop)
+            align-items: start
\ No newline at end of file
diff --git a/assets/sass/_theme/sections/home.sass b/assets/sass/_theme/sections/home.sass
deleted file mode 100644
index 4eca2321b30560e0acfb229105241710baa29a94..0000000000000000000000000000000000000000
--- a/assets/sass/_theme/sections/home.sass
+++ /dev/null
@@ -1,6 +0,0 @@
-.page__home
-    main
-        header
-            picture
-                img
-                    opacity: .5
diff --git a/assets/sass/_theme/sections/organizations.sass b/assets/sass/_theme/sections/organizations.sass
index 22289ddf29c425875ec3d0767ac9bcd8af530fa6..c732d67c15d78c203c922c6126a8180edc2c1a7f 100644
--- a/assets/sass/_theme/sections/organizations.sass
+++ b/assets/sass/_theme/sections/organizations.sass
@@ -1,21 +1,31 @@
 .organization
     @include article
     position: relative
-    h1
+    h2, h3
         @include meta
         a
             @include stretched-link
             text-decoration: none
+            display: block
     .media
         background: $color-background-alt
-        aspect-ratio: 1/1
         padding: $spacing1
         margin-bottom: half($spacing0)
+        picture
+            aspect-ratio: 1
+            display: block
         img
             width: 100%
             height: 100%
             object-fit: contain
             object-position: center
+        &:empty
+            position: relative
+            &::after
+                content: ''
+                display: block
+                padding-bottom: 100%
+
 
 .organizations
     max-width: 100%
@@ -27,7 +37,7 @@
         @include grid(3, md)
         @include grid(3, lg)
         @include grid(3, xl)
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
         grid-column-gap: $spacing1 !important
 
 .organizations__section
@@ -35,14 +45,48 @@
         margin-top: $spacing2
 
 .organizations__page
-    .content
-        margin-top: $spacing2
-        @include grid(2, md)
-    .media
-        max-width: 200px
-    .contacts-list
-        padding-left: 0
-        li
-            list-style-type: none
-            span
-                display: block
\ No newline at end of file
+    .lead
+        font-family: $lead-sidebar-font-family
+        font-weight: $lead-sidebar-weight
+        line-height: $lead-sidebar-line-height
+        margin-bottom: $spacing1
+        @include media-breakpoint-up(desktop)
+            font-size: $lead-sidebar-size-desktop
+    .document-content
+        .logo
+            figcaption
+                text-align: right
+                @include meta
+                margin-bottom: $spacing0
+            picture
+                aspect-ratio: 1/1
+                background: $color-background-alt
+                display: block
+                padding: $spacing2
+                margin-bottom: half($spacing0)
+                width: auto
+            img
+                width: 100%
+                height: 100%
+                object-fit: contain
+                object-position: center
+        .blocks
+            margin-top: $spacing3
+        .contacts-details
+            @include grid(2, md)
+    @include media-breakpoint-down(md)
+        .document-content
+            .logo
+                margin-top: $spacing3
+                display: flex
+                justify-content: space-between
+    @include media-breakpoint-up(md)
+        .document-content
+            > .container
+                display: flex
+                justify-content: space-between
+                gap: $grid-gutter
+            [itemprop="articleBody"]
+                width: col(8)
+            .logo
+                width: col(3)
diff --git a/assets/sass/_theme/sections/pages.sass b/assets/sass/_theme/sections/pages.sass
index 68717365d76b5411b2da594cde8bbdb27ae746ab..05b8d65a1e459ea91615c7d60f7640ffb1ee8d8b 100644
--- a/assets/sass/_theme/sections/pages.sass
+++ b/assets/sass/_theme/sections/pages.sass
@@ -7,7 +7,7 @@
 
 .pages
     @include grid(1)
-    @include grid(3, md)
+    @include grid(3, desktop)
 
 .page__children
     margin-top: $spacing3
diff --git a/assets/sass/_theme/sections/persons.sass b/assets/sass/_theme/sections/persons.sass
index 7647a7dbdf2b35ea6f55fd548ece616844ae4389..81f25b9ea7a2476f8f701e7d39634fe1ba412972 100644
--- a/assets/sass/_theme/sections/persons.sass
+++ b/assets/sass/_theme/sections/persons.sass
@@ -1,39 +1,72 @@
+.persons__page
+    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
     .avatar
-        margin-bottom: $spacing1
+        align-self: start
+        flex-shrink: 0
         order: -1
-        width: px2rem(76)
+        margin-bottom: $spacing1
 
     .name
-        margin-bottom: px2rem(5)
-        // & ~ p
-            // @include small
-
+        @include h4
+        a
+            @include stretched-link
+            text-decoration: none
+        + p
+            margin-top: half($spacing0)
+    .description
+        @include small
     @include media-breakpoint-down(md)
-        display: block
-        &::after
-            content: ''
-            clear: both
-            display: table
-        > div:first-of-type
-            float: left
-            max-width: calc(100% - 6rem)
+        flex-direction: row
+        justify-content: space-between
         .avatar
-            float: right
+            align-self: start
+            flex-shrink: 0
+            order: 2
+            margin-left: $spacing0
             margin-bottom: 0
-
+            width: 100px
+    @include media-breakpoint-up(desktop)
+        @include in-page-without-sidebar
+            text-align: center
+            .avatar
+                width: 100%
 
 section.persons,
 div.persons
     @include grid(1)
     @include grid(2, md)
     @include grid(3, lg)
-    @include grid(4, xl)
-    @include grid(5, xxl)
+    @include grid(5, xl)
+    @include grid(6, xxl)
 
-ol.persons
+ol.persons--list
     @include list-reset
     > li
         border-bottom: 1px solid $color-border
@@ -53,41 +86,37 @@ ol.persons
         [itemprop="jobTitle"]
             @include small
             margin-top: 0
-        @include media-breakpoint-up(md)
+        @include media-breakpoint-up(desktop)
             align-items: baseline
             display: flex
             [itemprop="name"]
                 width: col(5)
             [itemprop="jobTitle"]
-                width: col(7)
+                width: col(6)
                 margin-left: $grid-gutter
-        @include media-breakpoint-down(md)
+        @include media-breakpoint-down(desktop)
             &::after
                 position: absolute
                 right: 0
                 top: calc(#{$spacing1} + 10px)
-            
-                
+
 .avatar
-    @include aspect-ratio(50, 'img')
+    // @include aspect-ratio(50, 'img')
     background-color: $persons-avatar-background-color
     border-radius: 50%
-    margin-bottom: $spacing2
+    // margin-bottom: $spacing2
     overflow: hidden
     position: relative
-    width: 100%
+    // width: 100%
     &::before
         content: ""
         display: block
         padding-top: 100%
-
-    picture,
-    img
+    picture, img
         @include inset(0)
         height: 100%
         width: 100%
         position: absolute
-
     img
         object-fit: cover
 
@@ -95,11 +124,11 @@ ol.persons
 .taxonomies-persons
     @include list-reset
     li
-        @include media-breakpoint-down(md)
+        @include media-breakpoint-down(desktop)
             margin-bottom: $spacing1
             a
                 display: block
-        @include media-breakpoint-up(md)
+        @include media-breakpoint-up(desktop)
             display: inline-block
             margin-right: $spacing2
     a
@@ -109,17 +138,18 @@ ol.persons
         @include icon(arrow, after)
             margin-left: $spacing1
 
-
 .lead + .taxonomies-persons
     margin-top: $spacing-section-y
 
 .persons__section
     * + .persons
         margin-top: $spacing-section-y
+    .persons:last-child
+        padding-bottom: $spacing3
 
 .persons__page
     .hero
-        @include media-breakpoint-down(md)
+        @include media-breakpoint-down(desktop)
             padding-bottom: 0
             margin-bottom: $spacing4
             .avatar
@@ -128,7 +158,7 @@ ol.persons
                 margin-left: auto
                 transform: translateY(100px)
                 margin-top: calc(#{$spacing1} - 100px)
-        @include media-breakpoint-up(md)
+        @include media-breakpoint-up(desktop)
             .content
                 align-items: center
                 display: flex
@@ -140,20 +170,29 @@ ol.persons
                 .avatar
                     margin-bottom: 0
                     width: col(3)
-
-@include media-breakpoint-up(lg)
-    .persons__page
+    .roles
+        a
+            @include small
+    .blocks
+        margin-top: $spacing3
+    .person-programs
+        margin-top: $spacing4
+    @include media-breakpoint-down(lg)
+        .roles
+            margin-top: $spacing2
+    @include media-breakpoint-up(lg)
         .informations
             @include grid
             margin-bottom: $spacing2
-            > div
-                &:first-of-type
-                    grid-column: 1 / 9
-                &:nth-of-type(2)
-                    grid-column: 9 / 13
-
+            > div:first-of-type
+                grid-column: 1 / 9
+            .roles
+                grid-column: 9 / 13
+                text-align: right
             .lead + div
                 margin-top: $spacing2
-
-        .posts 
-            @include grid(3)
+    .contacts-details ul
+        @include grid(2, md, 0)
+        li
+            margin-top: 0
+            margin-bottom: $spacing1
diff --git a/assets/sass/_theme/sections/posts.sass b/assets/sass/_theme/sections/posts.sass
index 8285453c9cda0982561e38713db11751465980fb..cbf241a8a7dc8909b72717475a7cdc564ac7648e 100644
--- a/assets/sass/_theme/sections/posts.sass
+++ b/assets/sass/_theme/sections/posts.sass
@@ -2,67 +2,82 @@
     @include article($post-media-background)
     time
         color: $post-time-color
+    .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
 
 .posts__section,
 .authors__term,
-.categories__term
-    @if $posts-layout-list
-        .posts 
-            @include grid(1)
-            grid-gap: 0
-            article
-                border-bottom: 1px solid $color-border
+.categories__term,
+.persons__page
+
+    .posts--list
+        article
+            border-bottom: 1px solid $color-border
+            display: flex
+            margin-bottom: $spacing1
+            padding-bottom: $spacing1
+            flex-direction: row
+            h2 + p, h3 + p
+                margin-top: $spacing0
+            @include media-breakpoint-up(desktop)
+                @include grid
                 margin-bottom: $spacing3
                 padding-bottom: $spacing3
-                display: flex
-                flex-direction: row
-                @include media-breakpoint-up(md)
-                    @include grid
+            div:not(.media)
+                grid-column: 4/13
+                @include media-breakpoint-down(desktop)
+                    flex: 1
+                    margin-left: $spacing0
+                p:not(.title)
+                    @include media-breakpoint-down(desktop)
+                        display: none
+            .media
+                background: none
+                margin: 0
+                @include media-breakpoint-down(desktop)
+                    width: 33.33333%
+                @include media-breakpoint-up(desktop)
+                    grid-column: 1/4
+                &, img
+                    aspect-ratio: auto
+            @include media-breakpoint-up(desktop)
+                time 
+                    font-size: $h5-size
+                    position: absolute
+                    right: 0
+                    top: 0
                 div:not(.media)
-                    grid-column: 4/13
-                    @include media-breakpoint-down(md)
-                        flex: 1
-                        margin-left: $spacing0
-                    p:not(.title)
-                        @include media-breakpoint-down(md)
-                            display: none
-                .media
-                    background: none
-                    margin: 0
-                    @include media-breakpoint-down(md)
-                        width: 33.33333%
-                    @include media-breakpoint-up(md)
-                        grid-column: 1/4
-                @include media-breakpoint-up(md)
-                    time 
-                        font-size: $h5-size
-                        position: absolute
-                        right: 0
-                        top: 0
-                    div:not(.media)
-                        h1,
-                        p,
-                        a
-                            max-width: col(6, 9)
-
-    @else 
-        .posts
-            @include grid(1)
-            @include grid(2, md)
-            @include grid(3, xl)
+                    h2, h3,
+                    p
+                        max-width: col(6, 9)
+    .posts--grid
+        @include grid(1)
+        @include grid(2, desktop)
+        @include grid($posts-grid-columns, xxl)
 
 .posts__page
-    @include media-breakpoint-down(md)
+    @include media-breakpoint-down(desktop)
         .document-content
             display: flex
             flex-direction: column
             aside
                 order: 2
                 padding: 0 half($grid-gutter-sm)
-            .blocks-pagination
+            .block-pagination
                 order: 3
-    @include media-breakpoint-up(md)
-        aside
+    @include media-breakpoint-up(desktop)
+        .post-sidebar
             @include container-margin-left
             margin-top: 0
             top: 0
@@ -70,12 +85,21 @@
             height: 100%
             position: absolute
             width: col-outside-container(4)
-            .post-infos
+            > div
                 @include sticky($spacing1)
+            .toc-container
+                border-top: 1px solid $color-border
+                padding-top: $spacing1
+                position: static
+                margin-left: 0
+        // Safe spacing if post is empty
+        .document-content
+            min-height: 350px
+    .lead
+        @include h3
 
 .post-categories
     @include list-reset
-    @include small
     margin: 0
     li
         display: inline-block
@@ -87,49 +111,46 @@
 
 .post-infos
     margin-bottom: 0
-    &, li
-        @include small
-    ul
-        @include list-reset
-    caption
-        @include visually-hidden
-        position: relative !important // Fix safari iOS border issue
-    th
-        @include h4
-        padding-left: 0
-        white-space: nowrap
-        vertical-align: top
-    tr
+    @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
+        justify-content: space-between
+        padding-top: $spacing0
+        padding-bottom: $spacing0
         border-color: $color-border
-        a
-            color: $color-accent
-            &:not(:hover)
-                text-decoration-color: transparent
-    th, td
         padding: 1rem 0
-    .multiple
+        &:not(:first-child)
+            align-items: center
 
-    td:last-of-type
-        padding-right: 0
-        text-align: right
-    tr:first-of-type
-        border-top: 0
-        th, td
-            padding-top: 0
-    tr:last-of-type
-        border-bottom: 0
+            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
+    a
+        // @include meta
+        @include link($color-accent)
     .share
         justify-content: flex-end
         a
             color: inherit
-        li:last-child
+        li:last-child a
             margin-right: -$spacing0
 
 .related
     margin-top: $spacing1
     .posts
-        @include grid(2, md)
+        @include grid(2, desktop)
         margin-bottom: 0
     .link
-        @extend .link-more
+        @extend .link-more
\ No newline at end of file
diff --git a/assets/sass/_theme/sections/programs.sass b/assets/sass/_theme/sections/programs.sass
index 7ba475f6cf21a56084a87597ef93201f223539d3..cee274383e3067218ae558e0e20fd35185d16c94 100644
--- a/assets/sass/_theme/sections/programs.sass
+++ b/assets/sass/_theme/sections/programs.sass
@@ -3,11 +3,16 @@
 
 div.programs,
 section.programs
-    @include grid(2, md)
+    @include grid(2, desktop)
     @include grid(3, xl)
 
 ol.programs
     @include list-section
+    li
+        a:nth-child(2)
+            white-space: nowrap
+            @include media-breakpoint-up(desktop)
+                margin-left: $spacing1
 
 .programs__section
     .hero-program
@@ -15,10 +20,22 @@ ol.programs
         justify-content: end
         .container
             position: relative
+    &:not(.full-width)
+        .lead
+            font-family: $lead-font-family
+            font-weight: $lead-weight
+            line-height: $lead-line-height
+            @include media-breakpoint-up(desktop)
+                font-size: $lead-size-desktop
+
+    ol.programs
+        margin-bottom: $spacing3
     .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
@@ -32,78 +49,164 @@ ol.programs
             &:active,
             &:focus
                 box-shadow: 0 0 0 0.25rem rgba(white, .5)
-            @include media-breakpoint-up(md)
-                font-size: $program-share-font-size-md
+            @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%
-            bottom: 100%
             .share
                 display: flex
+                align-items: center
+                height: 100%
                 li
                     margin: 0
                     flex: 1 1
                     text-align: center
             a
                 display: block
-                color: invert($hero-color)
+                color: $hero-background-color
     .buttons
-        margin-top: $spacing1
-        @include media-breakpoint-up(md)
-            bottom: 2.25rem
-            margin-top: 0
-            position: absolute
-            right: $grid-gutter
+        @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
+            width: auto
+            @include media-breakpoint-up(desktop)
+                font-size: $program-share-font-size-desktop
+
+        @include media-breakpoint-down(desktop)
             margin-top: $spacing1
-            @include media-breakpoint-up(md)
-                font-size: $program-share-font-size-md
 
     .document-content
+        @include media-breakpoint-up(desktop)
+            .lead
+                padding-bottom: $spacing2
         .content
-            padding-top: $spacing2
-            > div > * + *
+            padding-bottom: $spacing2
+            section:not(.block) > * + *
                 margin-top: 1em
             .blocks
-                .container
-                    padding-left: 0
-                    padding-right: 0
-                .block-content
-                    padding-left: 0
+                section > * + *
+                    margin-top: 0
+                h2
+                    @include h3
+                @include media-breakpoint-down(desktop)
+                    padding-top: $spacing3
+                    margin-left: half(-$grid-gutter-sm)
+                    margin-right: half(-$grid-gutter-sm)
 
-    @include media-breakpoint-up(md)
+                @include media-breakpoint-up(desktop)
+                    .container
+                        padding-left: 0
+                        padding-right: 0
+                    .block-content
+                        padding-left: 0
+    @include media-breakpoint-down(desktop)
         .document-content
             .content
-                @include grid(12, md)
-                border-top: 1px solid $color-border
+                > h2
+                    margin-bottom: $spacing2
+            section:not(:first-child):not(.block)
+                margin-top: $spacing3
+    @include media-breakpoint-up(desktop)
+        .document-content
+            .content
+                @include grid(12, desktop)
                 position: relative
+                padding-bottom: $spacing4
                 > *
                     grid-column: 5/13
                 > h2
+                    @include h5
                     $sticky-top-offset: 90px
                     @include sticky($sticky-top-offset)
                     top: $sticky-top-offset
-                    margin-top: -0.3em
+                    // margin-top: -0.3em
                     align-self: start
                     grid-column: 1/5
                     margin-bottom: 0
+                section:not(:first-child):not(.block)
+                    margin-top: $spacing4
             section:first-of-type
                 .content
                     border-top: none
 
-    table
-        margin-block-start: 2em
-        caption 
-            @include visually-hidden
\ No newline at end of file
+    .program-table
+        tr
+            font-size: unset
+            line-height: 160%
+            &:first-child 
+                border-top: 1px solid $color-border
+            &:last-child
+                border-bottom: 1px solid $color-border
+        th
+            @include small
+            color: $color-text-alt
+            vertical-align: middle
+        td
+            text-align: right
+            padding-right: 0
+        caption
+            @include visually-hidden
+        th
+            font-weight: normal
+            a
+                text-decoration: none
+    .list-persons
+        @include list-reset
+        > li
+            border-bottom: 1px solid $color-border
+            justify-content: flex-start
+            position: relative
+            padding-bottom: $spacing0
+            padding-top: $spacing0
+            @include media-breakpoint-up(desktop)
+                @include grid(2)
+            @include icon(arrow-right, after, true)
+                color: inherit
+                position: absolute
+                right: 0
+                top: $spacing0
+                margin-top: px2rem(12)
+            a
+                color: inherit
+                text-decoration: none
+                @include stretched-link(before)
+                @include media-breakpoint-down(desktop)
+                    margin-right: $spacing1
+            p
+                align-self: center
+                margin-top: unset
+                @include small
+                @include media-breakpoint-up(desktop)
+                    margin-right: $spacing1
+            &:hover
+                color: $color-accent
+            &:first-child
+                border-top: 1px solid $color-border
+            a
+            p
+                @include small
+    .related-posts
+        .category-link
+            display: block
+            text-decoration: none
+            @include icon(arrow, after, true)
+            @include hover-translate-icon
+            @include media-breakpoint-down(desktop)
+                margin-bottom: $spacing1
\ No newline at end of file
diff --git a/assets/sass/_theme/sections/sitemap.sass b/assets/sass/_theme/sections/sitemap.sass
index f9bb886ef1dd397e6abb4d318c86ee4f7a14c889..f5b664fc2686303266b54ccd0b4f087560b905b1 100644
--- a/assets/sass/_theme/sections/sitemap.sass
+++ b/assets/sass/_theme/sections/sitemap.sass
@@ -1,13 +1,13 @@
 .sitemap__section
     .content
         > div
-            @include media-breakpoint-up(md)
+            @include media-breakpoint-up(desktop)
                 padding-left: offset(5)
             ul 
                 list-style: none
                 margin-bottom: calc(7.5rem / 2)
                 padding: 0
-                @include media-breakpoint-up(md)
+                @include media-breakpoint-up(desktop)
                     margin-bottom: 7.5rem
                 li
                     margin-bottom: 1rem
\ No newline at end of file
diff --git a/config.yaml b/config.yaml
index f3cd69a55d47f72dd0cd238f6fb6d1adf712cb50..0aff9f41b3a5b6797c3ae1fe78b81115fe707ef5 100644
--- a/config.yaml
+++ b/config.yaml
@@ -1,6 +1,169 @@
 params:
   keycdn: https://osuny-1b4da.kxcdn.com
   cookie_banner:
-    enable: true
+    enable: false
     blank: true
     page: https://gdpr.eu/cookies/
+  breadcrumb:
+    position: hero-start #  hero-start |  hero-end | after-hero
+  posts:
+    index:
+      show_categories: false
+      truncate_description: 200 # Set to 0 to disable truncate
+      layout: list # grid | list
+  pages:
+    index:
+      truncate_description: 200 # Set to 0 to disable truncate
+  persons:
+    index:
+      layout: list # grid | list
+  home:
+    toc:
+      disabled: true
+  logo:
+    header: "/assets/images/logo.svg"
+    footer: "/assets/images/logo.svg"
+  organizations:
+    dark_logo_background: false
+  image_sizes:
+    design_system:
+      lightbox:
+        # TODO mobile et tablet
+        mobile:   1920x2560
+        tablet:   1920x2560
+        desktop:  1920x2560
+      hero:
+        mobile:   400
+        tablet:   800
+        desktop:  900
+    blocks:
+      call_to_action:
+        mobile:   164
+        tablet:   350
+        desktop:  415
+      chapter:
+        mobile:   350
+        tablet:   450
+        desktop:  1280
+      image:
+        mobile:   480x850
+        tablet:   768x1360
+        desktop:  1400x1820
+      organization_chart:
+        mobile:   80
+        tablet:   100
+        desktop:  255
+      partners:
+        mobile:   164
+        tablet:   216
+        desktop:  196
+      testimonials:
+        desktop:  200
+      gallery:
+        carousel:
+          mobile:   400
+          tablet:   600
+          desktop:  1024
+        grid:
+          mobile:   170
+          tablet:   350
+          desktop:  415
+    sections:
+      categories:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        hero_term:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+      diplomas:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        hero_single:
+          mobile:   351
+          tablet:   456
+          desktop:  856
+      home:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+      organizations:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        logo:
+          mobile:   331
+          tablet:   196
+          desktop:  396
+        item:
+          mobile:   144
+          tablet:   196
+          desktop:  176
+      pages:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        item:
+          mobile:   350
+          tablet:   400
+          desktop:  900
+      papers:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        hero_single:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+      persons:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        hero_single:
+          mobile:   200
+          tablet:   200
+          desktop:  415
+        item:
+          mobile:   80
+          tablet:   100
+          desktop:  255
+      posts:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        hero_single:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        item:
+          mobile:   350
+          tablet:   450
+          desktop:  900
+      programs:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        image:
+          mobile:   351x168
+          tablet:   456x219
+          desktop:  856x410
+      volumes:
+        hero:
+          mobile:   400
+          tablet:   800
+          desktop:  900
+        item:
+          mobile:   327x388
+          tablet:   208x247
+          desktop:  300x356
\ No newline at end of file
diff --git a/content/icons.html b/content/icons.html
new file mode 100644
index 0000000000000000000000000000000000000000..24dc8b853bda561de2099bd64ef5865315bc5046
--- /dev/null
+++ b/content/icons.html
@@ -0,0 +1,86 @@
+---
+title: Icônes
+url: icons
+design:
+  full_width: true
+  toc:
+    present: false
+    offcanvas: false
+blocks:
+- template: chapter
+  title: >-
+    Icônes à la taille du texte
+  position: 1
+  data:
+    layout: no_background
+    text: >-
+      <p>
+        icon-caret-bottom <i class="icon-caret-bottom"></i><br>
+        icon-caret-right <i class="icon-caret-right"></i><br>
+        icon-caret-left <i class="icon-caret-left"></i><br>
+        icon-caret-top <i class="icon-caret-top"></i><br>
+        icon-caret <i class="icon-caret"></i><br>
+        icon-list-hyphen <i class="icon-list-hyphen"></i><br>
+        icon-facebook <i class="icon-facebook"></i><br>
+        icon-twitter <i class="icon-twitter"></i><br>
+        icon-linkedin <i class="icon-linkedin"></i><br>
+        icon-instagram <i class="icon-instagram"></i><br>
+        icon-link-blank <i class="icon-link-blank"></i><br>
+        icon-arrow <i class="icon-arrow"></i><br>
+        icon-arrow-right <i class="icon-arrow-right"></i><br>
+        icon-arrow-left <i class="icon-arrow-left"></i><br>
+      </p>
+      <p class="lead">
+        icon-caret-bottom <i class="icon-caret-bottom"></i><br>
+        icon-caret-right <i class="icon-caret-right"></i><br>
+        icon-caret-left <i class="icon-caret-left"></i><br>
+        icon-caret-top <i class="icon-caret-top"></i><br>
+        icon-caret <i class="icon-caret"></i><br>
+        icon-list-hyphen <i class="icon-list-hyphen"></i><br>
+        icon-facebook <i class="icon-facebook"></i><br>
+        icon-twitter <i class="icon-twitter"></i><br>
+        icon-linkedin <i class="icon-linkedin"></i><br>
+        icon-instagram <i class="icon-instagram"></i><br>
+        icon-link-blank <i class="icon-link-blank"></i><br>
+        icon-arrow <i class="icon-arrow"></i><br>
+        icon-arrow-right <i class="icon-arrow-right"></i><br>
+        icon-arrow-left <i class="icon-arrow-left"></i><br>
+      </p>
+- template: chapter
+  title: >-
+    Icônes en taille fixe (bloc)
+  position: 1
+  data:
+    layout: no_background
+    text: >-
+      <p>
+        icon-block-burger <i class="icon-block-burger"></i><br>
+        icon-block-close <i class="icon-block-close"></i><br>
+        icon-block-toc <i class="icon-block-toc"></i><br>
+        icon-block-arrow-first <i class="icon-block-arrow-first"></i><br>
+        icon-block-arrow-previous <i class="icon-block-arrow-previous"></i><br>
+        icon-block-arrow-next <i class="icon-block-arrow-next"></i><br>
+        icon-block-arrow-last <i class="icon-block-arrow-last"></i><br>
+        icon-block-pause <i class="icon-block-pause"></i><br>
+        icon-block-play <i class="icon-block-play"></i><br>
+        icon-block-download <i class="icon-block-download"></i><br>
+        icon-block-eye <i class="icon-block-eye"></i><br>
+        icon-block-search <i class="icon-block-search"></i><br>
+        icon-block-social <i class="icon-block-social"></i><br>
+      </p>
+      <p class="lead">
+        icon-block-burger <i class="icon-block-burger"></i><br>
+        icon-block-close <i class="icon-block-close"></i><br>
+        icon-block-toc <i class="icon-block-toc"></i><br>
+        icon-block-arrow-first <i class="icon-block-arrow-first"></i><br>
+        icon-block-arrow-previous <i class="icon-block-arrow-previous"></i><br>
+        icon-block-arrow-next <i class="icon-block-arrow-next"></i><br>
+        icon-block-arrow-last <i class="icon-block-arrow-last"></i><br>
+        icon-block-pause <i class="icon-block-pause"></i><br>
+        icon-block-play <i class="icon-block-play"></i><br>
+        icon-block-download <i class="icon-block-download"></i><br>
+        icon-block-eye <i class="icon-block-eye"></i><br>
+        icon-block-search <i class="icon-block-search"></i><br>
+        icon-block-social <i class="icon-block-social"></i><br>
+      </p>
+---
diff --git a/content/sitemap/_index.en.html b/content/sitemap/_index.en.html
deleted file mode 100644
index 0eda955af3947a08420ad5b465e537bcd668334c..0000000000000000000000000000000000000000
--- a/content/sitemap/_index.en.html
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: Sitemap
----
diff --git a/content/sitemap/_index.fr.html b/content/sitemap/_index.fr.html
deleted file mode 100644
index 4604f40ad6caaff54b3bc4e0e41c91ac193703ef..0000000000000000000000000000000000000000
--- a/content/sitemap/_index.fr.html
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: Plan du site
-url: plan-du-site
----
diff --git a/docs/blocks.md b/docs/blocks.md
deleted file mode 100644
index 22c9fef63f0227e139ab1528b5fb1a6381b78785..0000000000000000000000000000000000000000
--- a/docs/blocks.md
+++ /dev/null
@@ -1,62 +0,0 @@
-## Blocs existants 
-
-### Chapitre
-* titre ```text```
-* contenu ```summernote```
-
-### Galerie
-* titre ```text```
-* image ```each```
-  * fichier ```file```
-  * alt ```text```
-
-### Organigramme
-* titre ```text```
-* personne ```each```
-  * choix ```select```
-  * rôle ```text```
-
-### Partenaires
-* titre ```text```
-* partenaire```each```
-  * choix ```select```
-  * nom ```text```
-  * website ```text```
-  * logo ```file```
-
-### Témoignages
-* titre ```text```
-* slide```each```
-  * texte ```textarea```
-  * auteur ```text```
-  * métier ```text```
-  * photo ```file```
-
-
-## Blocs proposés 
-
-### Editorial texte / image
-* titre ```text```
-* contenu ```summernote```
-* image ```file```
-* inverser le sens ```toggle```
-
-### Push (cta)
-* titre ```text```
-* contenu ```summernote```
-* image ```file```
-* lien ```url```
-* nom du bouton ```text```
-
-### Carousel
-* titre ```text```
-* slide```each```
-  * image ```file```
-  * titre ```text```
-  * lien ```url```
-  * nom du bouton ```text```
-
-### Video
-* titre ```text```
-* plateform ```select```
-* id de la video ```file```
diff --git a/i18n/en.yml b/i18n/en.yml
index 49492cc9deab3938c27993c89079f8fef0dafae8..90f5e8f3f106b546243c14c023452583fbd37cd2 100644
--- a/i18n/en.yml
+++ b/i18n/en.yml
@@ -1,3 +1,42 @@
+blocks:
+  call_to_action:
+    title: Call to action
+  chapter:
+    title: Chapter
+  contact:
+    title: Contact
+  datatable:
+    title: Table
+  definitions:
+    title: Definitions
+  embed:
+    title: HTML embed
+  files:
+    title: Files
+  gallery:
+    title: Gallery
+  image:
+    title: Image
+  key_figures:
+    title: Key figures
+  organization_chart:
+    title: People
+  pages:
+    title: Pages
+  partners:
+    title: Organizations
+  posts:
+    title: Posts
+  programs:
+    title: Programs
+  testimonials:
+    title: Testimonials
+  timeline:
+    title: Timeline
+    next: Next element
+    previous: Previous element
+  video:
+    title: Video
 categories:
   no_post: No post in this category
   see_more:
@@ -23,6 +62,7 @@ commons:
     slideX: Go to slide %s
   close: Close
   contact:
+    address: Address
     email: Email
     phone: Téléphone
     website: Site web
@@ -34,6 +74,9 @@ commons:
   "false": "No"
   in: In
   language: Language
+  lightbox:
+    link:
+      title: Open image
   link:
     blank: extern link
     blank_aria: “{{ .Title }}” - extern link
@@ -97,6 +140,8 @@ formats:
   zip: Compressed archive
   gz: Compressed archive
   tar: Compressed archive
+organizations:
+  logo: Logo
 page_not_found: 404 page not found
 pages:
   details: Details
@@ -117,30 +162,28 @@ posts:
   previous: Previous article
   previous_aria: revious article “{{ .Title }}”
   see_all: See all posts
-  see_all_in_category: See all posts in “{{ .Title }}”
+  see_all_in_program: See all program's news
+  see_all_in_category: See all news in “{{ .Title }}”
   share: Please, share
   share_aria: Share on “{{ .Title }}” - extern link
   title: News
 programs:
-  _accessibility: Accessibility
-  _administrative_information: Administrative information
-  _contacts: Contacts
-  _duration: Duration
-  _description: Description
-  _informations: Informations
-  _evaluation: Evaluation
-  _objectives: Objectives
-  _opportunities: Opportunities
+  accessibility: Accessibility
+  administrative_information: Administrative information
+  contacts: Contacts
+  evaluation: Evaluation
+  objectives: Objectives
+  opportunities: Opportunities
   _other: Other
-  _pedagogy: Pedagogy
-  _prerequisites: Prerequisites
-  _pricing: Pricing
-  _registration: Registration
-  _roles: Roles
-  _teachers: Teachers
-  _team: Team
-  _content: Content
-  _results: Results
+  pedagogy: Pedagogy
+  prerequisites: Prerequisites
+  presentation: Summary
+  pricing: Pricing
+  registration: Registration
+  roles: Management
+  teachers: Teachers
+  content: Content
+  results: Results
   apply: Apply
   capacity: Capacity
   diploma: Diploma
@@ -155,6 +198,7 @@ programs:
     essential: Essential
     pedagogy: Pedagogy
     presentation: Presentation
+    related: News
     results: After the program
   type:
     apprenticeship: Apprenticeship
diff --git a/i18n/fr.yml b/i18n/fr.yml
index 96c254eb68d2a81ce6b316ff53745332638ee645..2487a98682868ecf88c8011742a3ad2e14c9e308 100644
--- a/i18n/fr.yml
+++ b/i18n/fr.yml
@@ -1,3 +1,42 @@
+blocks:
+  call_to_action: 
+    title: Appel à actions
+  chapter: 
+    title: Chapitre
+  contact: 
+    title: Contact
+  datatable: 
+    title: Tableau
+  definitions: 
+    title: Définitions
+  embed: 
+    title: Intégration HTML
+  files: 
+    title: Fichiers
+  gallery: 
+    title: Galerie
+  image: 
+    title: Image
+  key_figures: 
+    title: Chiffres-clés
+  organization_chart: 
+    title: Personnes
+  pages: 
+    title: Pages
+  partners: 
+    title: Organisations
+  posts: 
+    title: Actualités
+  programs: 
+    title: Formations
+  testimonials: 
+    title: Témoignages
+  timeline: 
+    title: Frise chronologique
+    next: Élément suivant
+    previous: Élément précédent
+  video: 
+    title: Vidéo
 categories:
   no_post: Aucun article dans cette catégorie
   see_more:
@@ -23,6 +62,7 @@ commons:
     slideX: Aller au slide %s
   close: Fermer
   contact:
+    address: Adresse
     email: Email
     phone: Téléphone
     website: Site web
@@ -34,6 +74,9 @@ commons:
   "false": Non
   in: Dans
   language: Langue
+  lightbox:
+    link:
+      title: Ouvrir l'image
   link:
     blank: lien externe
     blank_aria: “{{ .Title }}” - lien externe
@@ -97,15 +140,17 @@ formats:
   zip: Compressed archive
   gz: Compressed archive
   tar: Compressed archive
+organizations:
+  logo: Logo
 page_not_found: 404 page non trouvée
 pages:
   details: En détail
   informations: Informations
   posts: Actualités
 persons:
-  posts: Actualités publiées par cette personne
+  posts: Actualités publiées
   programs: Enseignements
-  publications: Publications de cette personne
+  publications: Publications
 posts:
   author: Auteur·rice
   categories: Catégories
@@ -117,30 +162,28 @@ posts:
   previous: Article précédent
   previous_aria: Article précédent “{{ .Title }}”
   see_all: Voir toutes les actualités
+  see_all_in_program: Voir toutes les actualités de la formation
   see_all_in_category: Voir toutes les actualités “{{ .Title }}”
   share: Partager sur
   share_aria: Partager sur “{{ .Title }}” - lien externe
   title: Actualités
 programs:
-  _accessibility: Accessibilité
-  _administrative_information: Informations administratives
-  _contacts: Contacts
-  _duration: Durée
-  _description: Description
-  _informations: Informations
-  _evaluation: Modalités d’évaluation
-  _objectives: Objectifs
-  _opportunities: Débouchés
+  accessibility: Accessibilité
+  administrative_information: Informations administratives
+  contacts: Contacts
+  evaluation: Modalités d’évaluation
+  objectives: Objectifs
+  opportunities: Débouchés
   _other: Autre
-  _pedagogy: Méthodes mobilisées
-  _prerequisites: Prérequis
-  _pricing: Tarifs
-  _registration: Modalités et délais d’accès
-  _roles: Rôles
-  _teachers: Enseignants·es
-  _team: Équipe
-  _content: Contenus de la formation
-  _results: Indicateurs de résultats
+  pedagogy: Méthodes mobilisées
+  prerequisites: Prérequis
+  presentation: En bref
+  pricing: Tarifs
+  registration: Modalités et délais d’accès
+  roles: Organisation
+  teachers: Enseignants·es
+  content: Contenus de la formation
+  results: Indicateurs de résultats
   apply: Candidater
   capacity: Capacité d’accueil
   diploma: Diplôme
@@ -155,6 +198,7 @@ programs:
     essential: Essentiel
     pedagogy: Pédagogie
     presentation: Présentation
+    related: Actualités
     results: Après la formation
   type:
     apprenticeship: Apprentissage
@@ -173,4 +217,4 @@ volumes:
   plural_name: Volumes
   singular_name: Volume
   table_contents: Table des matières
-  volume_number: Volume {{ .Number }}
+  volume_number: Volume {{ .Number }}
\ No newline at end of file
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index a9abb019ec42df8d0ba47d9059317647f3ab5b79..a9459f1b2ec1d509dac4b959f384955c09a06d6f 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -16,7 +16,7 @@
   <body class="{{ $body_class }}">
     {{- partial "header/accessibility.html" -}}
     {{- partial "header/header.html" -}}
-    <main{{ if .Params.blocks }} class="page-with-blocks"{{ end }} id="main" role="main" tabindex="-1">
+    <main{{ if .Params.blocks }} class="page-with-blocks"{{ end }} id="main" tabindex="-1">
       {{- block "main" . }}{{- end }}
       {{- partial "hooks/before-main-end" . -}}
     </main>
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
index 55fb1319fcf5b5505660fc11fdf3eb29f0ef935e..86145a657c0a16ba8031b134fde643074d0f072f 100644
--- a/layouts/_default/list.html
+++ b/layouts/_default/list.html
@@ -1,20 +1,37 @@
 {{ define "main" }}
-  {{- partial "header/hero.html"
+  {{ partial "pages/hero.html" . }}
+  {{ partial "hooks/after-page-hero.html" . }}
+
+  <div class="document-content">
+    {{- $category := site.GetPage (printf "/categories%s" .Params.category) -}}
+    {{ partial "toc/container.html"
         (dict
-          "title" .Title
-          "image" .Params.image
-          "context" .
-        ) -}}
-  <div class="document-content container">
-    <div class="pages">
-      {{ range .Paginator.Pages }}
-        <div>
-          <h2>
-            <a href="{{ .Permalink }}">{{ partial "PrepareHTML" .Title }}</a>
-          </h2>
+            "category" $category
+            "toc" "pages/toc.html"
+            "context" .
+        )
+    }}
+
+    {{ partial "pages/summary.html" (dict
+        "context" .
+        "block_wrapped" true
+      ) }}
+
+    {{ if .Params.blocks }}
+      {{ partial "blocks/list.html" . }}
+    {{ else }}
+      <section class="block block-pages block-pages--grid">
+        <div class="container">
+          <div class="block-content">
+            {{- partial "blocks/templates/pages/grid.html" (dict 
+                "pages" .Params.children
+                "show_images" true
+                "show_descriptions" true
+                ) }}
+          </div>
         </div>
-      {{ end }}
-    </div>
-    {{ partial "commons/pagination.html" . }}
+      </section>
+    {{ end }}
   </div>
+
 {{ end }}
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
index 507a8e8716a89c2c8aa8be20f14527315e09ba9c..86145a657c0a16ba8031b134fde643074d0f072f 100644
--- a/layouts/_default/single.html
+++ b/layouts/_default/single.html
@@ -1,11 +1,37 @@
 {{ define "main" }}
-  {{- partial "header/hero.html"
+  {{ partial "pages/hero.html" . }}
+  {{ partial "hooks/after-page-hero.html" . }}
+
+  <div class="document-content">
+    {{- $category := site.GetPage (printf "/categories%s" .Params.category) -}}
+    {{ partial "toc/container.html"
         (dict
-          "title" .Title
-          "image" .Params.image
-          "context" .
-        ) -}}
-  <div class="document-content container">
-    {{ partial "PrepareHTML" .Content }}
+            "category" $category
+            "toc" "pages/toc.html"
+            "context" .
+        )
+    }}
+
+    {{ partial "pages/summary.html" (dict
+        "context" .
+        "block_wrapped" true
+      ) }}
+
+    {{ if .Params.blocks }}
+      {{ partial "blocks/list.html" . }}
+    {{ else }}
+      <section class="block block-pages block-pages--grid">
+        <div class="container">
+          <div class="block-content">
+            {{- partial "blocks/templates/pages/grid.html" (dict 
+                "pages" .Params.children
+                "show_images" true
+                "show_descriptions" true
+                ) }}
+          </div>
+        </div>
+      </section>
+    {{ end }}
   </div>
+
 {{ end }}
diff --git a/layouts/administrators/list.html b/layouts/administrators/list.html
index 3a3d9f118f298956e4b1d5a9041d3d89cb45e2e4..64d780d483a76930c4c1706fe5045d0dc82ef185 100644
--- a/layouts/administrators/list.html
+++ b/layouts/administrators/list.html
@@ -3,11 +3,12 @@
   {{ partial "persons/hero.html" . }}
 
   <div class="document-content">
-    <div class="container">
-      {{ partial "persons/image.html" .Params.image }}
-      {{ partial "persons/chapo.html" .Params.description_short }}
-    </div>
-  
+
+    {{ partial "persons/summary.html" (dict
+        "with_container" true
+        "context" .
+      ) }}
+
     {{ partial "blocks/list.html" . }}
   
     <div class="container">
diff --git a/layouts/authors/list.html b/layouts/authors/list.html
index 804518b71898086a0958f2a18819a68281abf662..691bfe546ed6aa2e1f659233cdceecfbf0e136b3 100644
--- a/layouts/authors/list.html
+++ b/layouts/authors/list.html
@@ -3,9 +3,11 @@
   {{ partial "persons/hero.html" . }}
 
   <div class="document-content">
-    <div class="container">
-      {{ partial "persons/chapo.html" .Params.description_short }}
-    </div>
+
+    {{ partial "persons/summary.html" (dict
+        "with_container" true
+        "context" .
+      ) }}
 
     {{ partial "blocks/list.html" . }}
 
diff --git a/layouts/categories/list.html b/layouts/categories/list.html
index 391cccf5d98f7e4fd61e397b64b304557966e676..dc40e99731e7e266dd5cfe56cd0fd6eff130e318 100644
--- a/layouts/categories/list.html
+++ b/layouts/categories/list.html
@@ -1,8 +1,10 @@
 {{ define "main" }}
   {{ partial "categories/hero-list.html" . }}
 
-  <div class="document-content container">
-    {{ partial "categories/categories.html" . }}
-    {{ partial "commons/pagination.html" . }}
+  <div class="document-content">
+    <div class="container">
+      {{ partial "categories/categories.html" . }}
+      {{ partial "commons/pagination.html" . }}
+    </div>
   </div>
 {{ end }}
diff --git a/layouts/categories/term.html b/layouts/categories/term.html
index e62d2c22d8caa70187a33aa8926597440ce887cf..eeaa72e7fc8541cc1a806a2a54925b4f04ab9cc0 100644
--- a/layouts/categories/term.html
+++ b/layouts/categories/term.html
@@ -1,9 +1,24 @@
 {{ define "main" }}
   {{ partial "categories/hero-term.html" . }}
 
-  <div class=" document-content container">
-    {{ partial "categories/chapo.html" .Params.description_short }}
-    {{ partial "posts/posts.html" . }}
-    {{ partial "commons/pagination.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 "blocks/list.html" . }}
+
+    <div class="container">
+      {{ partial "posts/posts.html" . }}
+      {{ partial "commons/pagination.html" . }}
+    </div>
   </div>
 {{ end }}
diff --git a/layouts/diplomas/list.html b/layouts/diplomas/list.html
index 10585d3e3d481588aeb31099b44b52a51d6f2eff..30e8fd0db47843113acb8d668edfac4bbef18c18 100644
--- a/layouts/diplomas/list.html
+++ b/layouts/diplomas/list.html
@@ -2,15 +2,16 @@
   {{ partial "diplomas/hero-list.html" . }}
 
   <div class="document-content">
-    <div class="container">
-      {{ partial "diplomas/image.html" .Params.image }}
-      {{ partial "diplomas/chapo.html" .Params.description_short }}
-    </div>
+
+    {{ partial "diplomas/summary.html" (dict
+        "with_container" true
+        "context" .
+      ) }}
+
     {{ partial "blocks/list.html" . }}
+
     <div class="container">
-      {{ .Scratch.Set "show_programs" true }}
       {{ partial "diplomas/diplomas.html" . }}
-      {{ .Scratch.Delete "show_programs" }}
     </div>
   </div>
 
diff --git a/layouts/diplomas/term.html b/layouts/diplomas/term.html
index 6177d2adff356116507525de4d69234db449a200..6e518d4f47056245898355502807edfae5657258 100644
--- a/layouts/diplomas/term.html
+++ b/layouts/diplomas/term.html
@@ -4,7 +4,20 @@
   <div class="document-content">
     {{ partial "blocks/list.html" . }}
     <div class="container">
-      {{ partial "programs/programs-list.html" .Pages }}
+      <ol class="programs">
+        {{- range .Pages -}}
+          <li>
+            {{- $title := partial "PrepareHTML" .Title -}}
+            <a href="{{ .Permalink }}" class="title" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">
+              {{- $title -}}
+            </a>
+            <p class="description">
+              {{/*  TODO: replace with description_short  */}}
+              {{- partial "PrepareHTML" .Params.presentation -}}
+            </p>
+          </li>
+        {{- end -}}
+      </ol>
     </div>
   </div>
 {{ end }}
diff --git a/layouts/index.html b/layouts/index.html
index 623e340fe6bad01ed04794358d98228fcf464b86..1c7b0e34b339b63c08514e5912ad63ba69e31b97 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -2,44 +2,36 @@
   {{ partial "home/hero.html" . }}
 
   <div class="document-content">
-    {{ partial "toc/container.html"
-        (dict
-            "toc" "toc/default.html"
-            "context" .
-        )
-    }}
+    {{- if not $.Site.Params.home.toc.disabled -}}
+      {{ partial "toc/container.html"
+          (dict
+              "toc" "toc/default.html"
+              "context" .
+          )
+      }}
+    {{- end -}}
+
+    {{ partial "home/summary.html" (dict
+        "block_wrapped" true
+        "context" .
+      ) }}
 
     {{- if .Params.blocks }}
-  
       {{- partial "blocks/list.html" . -}}
-  
     {{ else }}
-  
-      <div class="container">
-        {{ if (partial "GetTextFromHTML" .Content) }}
-        <section>
-          {{- partial "PrepareHTML" .Content -}}
-        </section>
-        {{ end }}
-  
-        {{- range site.Data.menus.primary -}}
-          <section>
-            {{ partial "home/top.html" . }}
-  
-            {{ if eq .kind "news" }}
-              {{ partial "home/posts.html" . }}
-            {{ else }}
-              {{ if .children }}
-                {{ partial "home/pages.html" . }}
-              {{ end }}
-            {{ end }}
-          </section>
-        {{ end }}
-  
-        {{ partial "home/volumes.html" . }}
-      </div>
-  
-    {{ end -}}
+      <section class="block block-pages block-pages--grid">
+        <div class="container">
+          <div class="block-content">
+            {{- partial "blocks/templates/pages/grid.html" (dict 
+                "pages" .Params.children
+                "show_images" true
+                "show_descriptions" true
+                ) }}
+          </div>
+        </div>
+      </section>
+    {{ end }}
   </div>
 
 {{ end }}
+{{/*  TODO: refacto avec pages/list.html  */}}
\ No newline at end of file
diff --git a/layouts/organizations/list.html b/layouts/organizations/list.html
index c56beb57d6fc1612f5b7a06b0ca41d38dc8e618d..32e04debdd4cc09f1a214a84f7ff90c95710192b 100644
--- a/layouts/organizations/list.html
+++ b/layouts/organizations/list.html
@@ -1,12 +1,26 @@
 {{ define "main" }}
+  {{- $is_partners_block_present := false -}}
+  {{ range .Params.blocks }}
+    {{- if eq .template "partners" -}}
+      {{- $is_partners_block_present = true -}}
+    {{ end }}
+  {{ end }}
+
   {{ partial "organizations/hero.html" . }}
 
   <div class="document-content">
+    {{ partial "pages/summary.html" (dict
+      "context" .
+      "with_container" true
+    ) }}
+
+    {{ partial "blocks/list.html" . }}
+
     <div class="container">
-      {{ partial "organizations/organizations.html" . }}
-      {{ partial "commons/pagination.html" . }}
+      {{- if not $is_partners_block_present -}}
+        {{ partial "organizations/organizations.html" . }}
+        {{ partial "commons/pagination.html" . }}
+      {{ end }}
     </div>
-  
-    {{ partial "blocks/list.html" . }}
   </div>
 {{ end }}
diff --git a/layouts/organizations/single.html b/layouts/organizations/single.html
index 9037b15d18f6db1d86e3b97955a2f07e2aaa7e3c..3d6039cfaf3b8514989d77bf7bf5c6764bae6556 100644
--- a/layouts/organizations/single.html
+++ b/layouts/organizations/single.html
@@ -1,15 +1,30 @@
 {{ define "main" }}
   {{ partial "organizations/hero.html" . }}
 
-  <div class="document-content container">
-    <div class="content">
-      <div>
-        {{ partial "organizations/logo.html" . }}
-      </div>
-      <div>
-        {{ partial "organizations/content.html" . }}
-        {{ partial "organizations/contacts.html" . }}
+  <div class="document-content" itemscope itemtype="https://schema.org/Organization">
+
+    {{ partial "toc/container.html" (dict
+          "toc" "toc/default.html"
+          "context" .
+        ) }}
+
+    <div class="container">
+      <div itemprop="articleBody" class="rich-text">
+        {{ partial "pages/summary.html" (dict
+          "context" .
+        ) }}
+
+        {{ if (partial "GetTextFromHTML" .Content) }}
+          {{ partial "PrepareHTML" (
+              partial "H2AddId" .Content
+            ) }}
+        {{ end }}
+        
+        {{ partial "organizations/contact-details.html" . }}
+
       </div>
+      {{ partial "organizations/logo.html" . }}
     </div>
+    {{ partial "blocks/list.html" . }}
   </div>
 {{ end }}
diff --git a/layouts/pages/list.html b/layouts/pages/list.html
index 9a66396ab61ae68b9faa7ce950d6c0b4bcb2b945..7a19eef26b2be4a2647e59ea4bc24361146f739b 100644
--- a/layouts/pages/list.html
+++ b/layouts/pages/list.html
@@ -1,28 +1,29 @@
 {{ define "main" }}
   {{ partial "pages/hero.html" . }}
+  {{ partial "hooks/after-page-hero.html" . }}
 
   <div class="document-content">
     {{- $category := site.GetPage (printf "/categories%s" .Params.category) -}}
-    {{- if .Params.blocks }}
-      {{ $need_aside := false }}
-      {{ range .Params.blocks }}
-        {{ if .title }}
-          {{ $need_aside = true }}
-        {{ end }}
-      {{ end }}
-      {{ partial "toc/container.html"
-          (dict
-              "category" $category
-              "toc" "pages/toc.html"
-              "context" .
-          )
-      }}
-      {{ partial "hooks/after-page-hero.html" . }}
+    {{ partial "toc/container.html"
+        (dict
+            "category" $category
+            "toc" "pages/toc.html"
+            "context" .
+        )
+    }}
+
+    {{ partial "pages/summary.html" (dict
+        "context" .
+        "block_wrapped" true
+      ) }}
+
+    {{ if .Params.blocks }}
       {{ partial "blocks/list.html" . }}
     {{ else }}
       <section class="block block-pages block-pages--grid">
         <div class="container">
           <div class="block-content">
+            {{- partial "blocks/default_title.html" "pages" -}}
             {{- partial "blocks/templates/pages/grid.html" (dict 
                 "pages" .Params.children
                 "show_images" true
diff --git a/layouts/pages/sitemap.html b/layouts/pages/sitemap.html
new file mode 100644
index 0000000000000000000000000000000000000000..45fd62f30ec595762f015a4b0082ad116de57e45
--- /dev/null
+++ b/layouts/pages/sitemap.html
@@ -0,0 +1,45 @@
+{{ define "main" }}
+  {{- partial "header/hero.html"
+        (dict
+          "title" .Title
+          "image" .Params.image
+          "context" .
+        ) -}}
+
+  <div class="document-content">
+    {{ partial "toc/container.html"
+      (dict
+          "toc" "sitemap/toc.html"
+          "context" .
+      ) }}
+
+    {{ partial "sitemap/summary.html" (dict
+      "context" .
+      "block_wrapped" true
+      ) }}
+
+    {{ partial "blocks/list.html" . }}
+
+    {{ range .Site.Sections }}
+      {{ if ne .Type "sitemap" }}
+        {{ $permalink := .Permalink }}
+        <section class="block block-sitemap" id="{{ .Type }}">
+          <div class="container">
+            <div class="block-content">
+              <h3>
+                <a href="{{ $permalink }}">{{ safeHTML .Title }}</a>
+              </h3>
+              <ul>
+                {{ range where .Site.Pages "Section" .Type }}
+                  {{ if ne $permalink .Permalink }}
+                    <li><a href="{{ .Permalink }}">{{ safeHTML .Title }}</a></li>
+                  {{ end }}
+                {{ end }}
+              </ul>
+            </div>
+          </div>
+        </section>
+      {{ end }}
+    {{ end }}
+  </div>
+{{ end }}
diff --git a/layouts/papers/list.html b/layouts/papers/list.html
index 741e7745853824fd91f1c1f435ece82c60f2898c..b1e67d0cf9fe8b39f0421f6cf1cb170ebfcb7bdd 100644
--- a/layouts/papers/list.html
+++ b/layouts/papers/list.html
@@ -3,6 +3,7 @@
         (dict
           "title" .Title
           "image" .Params.image
+          "sizes" site.Params.image_sizes.sections.papers.hero
           "context" .
         ) -}}
   <div class="document-content">
diff --git a/layouts/papers/single.html b/layouts/papers/single.html
index de90ce80f355895079568a129f8893cf0fc77f59..5654229356e61356a1a8e9873ef572828ef2f2ab 100644
--- a/layouts/papers/single.html
+++ b/layouts/papers/single.html
@@ -3,6 +3,7 @@
         (dict
           "title" .Title
           "image" .Params.image
+          "sizes" site.Params.image_sizes.sections.papers.hero_single
           "context" .
         ) -}}
 <div class="document-content" itemscope itemtype="https://schema.org/ScholarlyArticle">
@@ -16,7 +17,6 @@
         {{ partial "papers/body.html" . }}
         {{ partial "papers/references.html" . }}
       </div>
-      {{ partial "papers/aside.html" . }}
     </div>
   </div>
 </div>
diff --git a/layouts/partials/FilterIframeLazy b/layouts/partials/FilterIframeLazy
new file mode 100644
index 0000000000000000000000000000000000000000..8c0fbf22c6b3ebb27b2a864f4231f3a4ed72cd92
--- /dev/null
+++ b/layouts/partials/FilterIframeLazy
@@ -0,0 +1,5 @@
+{{ $chunks := split . "<iframe" }}
+{{ $text := delimit $chunks "<iframe loading=\"lazy\"" }}
+{{ $chunks = split $text "</iframe>" }}
+{{ $text = delimit $chunks "</iframe>" }}
+{{ return $text }}
diff --git a/layouts/partials/FixIframeRatio b/layouts/partials/FixIframeRatio
deleted file mode 100644
index cc0e13398fa046df1b169ecb70fcf5357e4289a9..0000000000000000000000000000000000000000
--- a/layouts/partials/FixIframeRatio
+++ /dev/null
@@ -1,5 +0,0 @@
-{{ $chunks := split . "<iframe" }}
-{{ $text := delimit $chunks "<div class=\"ratio ratio-16x9\"><iframe loading=\"lazy\" title=\"\"" }}
-{{ $chunks = split $text "</iframe>" }}
-{{ $text = delimit $chunks "</iframe></div>" }}
-{{ return $text }}
diff --git a/layouts/partials/GetBodyclass b/layouts/partials/GetBodyclass
index 8663c304c5ed0d448370c09f9751fccb55dbe543..fa0e7f7f6e5b652455698a35ffd01877e53500e4 100644
--- a/layouts/partials/GetBodyclass
+++ b/layouts/partials/GetBodyclass
@@ -1,15 +1,15 @@
-{{- $bodyclass := .Params.bodyclass | default "" -}}
+{{ $bodyclass := .Params.bodyclass | default "" }}
 
-{{- if ne $bodyclass "" -}}
-  {{- $bodyclass = printf "page-%s" $bodyclass -}}
-{{- end -}}
+{{ if ne $bodyclass "" }}
+  {{ $bodyclass = printf "page%s" $bodyclass }}
+{{ end }}
 
-{{- if or .Params.full_width (and (eq .Kind "section") (eq .Type "posts")) -}}
-  {{- $bodyclass = printf "full-width %s" $bodyclass -}}
-{{- end -}}
+{{ if .Params.design.full_width }}
+  {{ $bodyclass = printf "full-width %s" $bodyclass }}
+{{ end }}
 
-{{- if .Params.diplomas -}}
-  {{- $bodyclass = printf "offcanvas-toc %s" $bodyclass -}}
-{{- end -}}
+{{ if .Params.design.toc.offcanvas }}
+  {{ $bodyclass = printf "offcanvas-toc %s" $bodyclass }}
+{{ end }}
 
-{{- return $bodyclass -}}
\ No newline at end of file
+{{ return $bodyclass }}
\ No newline at end of file
diff --git a/layouts/partials/GetImageRatio b/layouts/partials/GetImageRatio
index 29425d1a8721777ec8c7daa5b706913fe7c6e733..b17f0b3dd54aa045ee1d273ded25538d8574d6ff 100644
--- a/layouts/partials/GetImageRatio
+++ b/layouts/partials/GetImageRatio
@@ -2,7 +2,9 @@
 {{ $ratio := 1 }}
 
 {{ if $image }}
-  {{ $ratio = div (float $image.width) (float $image.height) }}
+  {{ if and $image.width $image.height }}
+    {{ $ratio = div (float $image.width) (float $image.height) }}
+  {{ end }}
 {{ end }}
 
 {{ return $ratio }}
\ No newline at end of file
diff --git a/layouts/partials/GetImageUrlKeycdn b/layouts/partials/GetImageUrlKeycdn
index 2a02dbb7b4070044b009108360a1b477334b3aef..9b2cee0865413985921fa880bb1ba4f3e0868194 100644
--- a/layouts/partials/GetImageUrlKeycdn
+++ b/layouts/partials/GetImageUrlKeycdn
@@ -10,6 +10,7 @@
 {{ end }}
 {{ $scale := .scale }}
 {{ $fit := "" }}
+{{ $quality := "" }}
 {{ with .size }}
   {{ $sizes := split . "x" }}
   {{ $width := int (index $sizes 0) }}
@@ -17,6 +18,7 @@
   {{ with $scale }}
     {{ $width = mul $width $scale }}
     {{ $height = mul $height $scale }}
+    {{ $quality = 50 }}
   {{ end }}
   {{ $fit = "inside" }}
   {{ $result = printf "%swidth=%d&height=%d&" $result $width $height }}
@@ -28,4 +30,7 @@
 {{ if ne $fit "" }}
   {{ $result = printf "%s&fit=%s" $result $fit }}
 {{ end }}
+{{ if ne $quality "" }}
+  {{ $result = printf "%s&quality=%d" $result $quality }}
+{{ end }}
 {{ return $result }}
diff --git a/layouts/partials/GetImageUrlOsuny b/layouts/partials/GetImageUrlOsuny
index 154bdcdf6e86642bac576f329b2af3ccbad54573..ab640f0e244ce5d25dbf478090d87374afb3ae26 100644
--- a/layouts/partials/GetImageUrlOsuny
+++ b/layouts/partials/GetImageUrlOsuny
@@ -18,9 +18,13 @@
 
 {{ $crop := "" }}
 {{ if .crop }}
-  {{ range $cropValues }}
-    {{ if eq .crop . }}
-      {{ $crop = . }}
+  {{ if eq (string .crop) "true" }}
+    {{ $crop = "center" }}
+  {{ else }}
+    {{ range $cropValues }}&
+      {{ if eq .crop . }}
+        {{ $crop = . }}
+      {{ end }}
     {{ end }}
   {{ end }}
 {{ end }}
diff --git a/layouts/partials/GetLightboxUrl b/layouts/partials/GetLightboxUrl
new file mode 100644
index 0000000000000000000000000000000000000000..7ea489ee683acb9ab20a9bb78db8964cfac488c8
--- /dev/null
+++ b/layouts/partials/GetLightboxUrl
@@ -0,0 +1,17 @@
+{{ $id := . }}
+{{ if isset . "id" }}
+  {{ $id = .id }}
+{{ end }}
+{{ $lightbox_sizes := site.Params.image_sizes.design_system.lightbox.desktop }}
+{{ $image := partial "GetMedia" $id }}
+{{ $url := "" }}
+
+{{ if $image }}
+  {{- $url = $image.url -}}
+  {{- if site.Params.keycdn -}}
+    {{- $url = $image.direct_url -}}
+  {{- end -}}
+  {{ $url = partial "GetImageUrl" (dict "url" $url "size" $lightbox_sizes ) }}
+{{- end -}}
+
+{{ return $url }}
diff --git a/layouts/partials/GetTruncateContent b/layouts/partials/GetTruncateContent
index 8459b9504c9ffd168ed82e87610bbf430e52dce4..d1eaa91db824dbcba4b4eb5399b9f66871531558 100644
--- a/layouts/partials/GetTruncateContent
+++ b/layouts/partials/GetTruncateContent
@@ -1,3 +1,5 @@
-{{ $text := replace . "<" " <" }}
-{{ $text = chomp (truncate 120 "…" (safeHTML (plainify $text))) }}
+{{ $length := .length | default 150 }}
+
+{{ $text := replace .text "<" " <" }}
+{{ $text = chomp (truncate $length "…" (safeHTML (plainify $text))) }}
 {{ return $text }}
diff --git a/layouts/partials/IsTocNeeded b/layouts/partials/IsTocNeeded
deleted file mode 100644
index c0ec4cc76f787daef95fca1083704ea95271efe7..0000000000000000000000000000000000000000
--- a/layouts/partials/IsTocNeeded
+++ /dev/null
@@ -1,13 +0,0 @@
-{{ $isNeeded := false }}
-
-{{ if eq .context.Type "programs" }}
-  {{ $isNeeded = true }}
-{{ end }}
-
-{{ if .context.Params.blocks }}
-  {{ if gt (len .context.Params.blocks) 1 }}
-    {{ $isNeeded = true }}
-  {{ end }}
-{{ end }}
-
-{{ return $isNeeded }}
\ No newline at end of file
diff --git a/layouts/partials/PrepareHTML b/layouts/partials/PrepareHTML
index 796c3fbd2f9d461382302962f86eb86dc50b5dea..2d3f25ddfb724d20fa61e92c060b353106bed059 100644
--- a/layouts/partials/PrepareHTML
+++ b/layouts/partials/PrepareHTML
@@ -2,7 +2,7 @@
 safeHTML (
   chomp (
     partial "CorrectPunctuation" (
-      partial "FixIframeRatio" (
+      partial "FilterIframeLazy" (
         .
       )
     )
diff --git a/layouts/partials/ToCamelCase b/layouts/partials/ToCamelCase
new file mode 100644
index 0000000000000000000000000000000000000000..44702344eeee4b96b23108b40591bee0a7fac65d
--- /dev/null
+++ b/layouts/partials/ToCamelCase
@@ -0,0 +1,4 @@
+{{ $input  := . }}
+{{ $output := $input | lower }}
+{{ $output := $output | markdownify }}
+{{ return $output }}
\ No newline at end of file
diff --git a/layouts/partials/blocks/default_title.html b/layouts/partials/blocks/default_title.html
new file mode 100644
index 0000000000000000000000000000000000000000..c0c1d655904d224db8b6748477211859919769a8
--- /dev/null
+++ b/layouts/partials/blocks/default_title.html
@@ -0,0 +1 @@
+<h2 class="hidden">{{- i18n (printf "blocks.%s.title" . ) -}}</h2>
\ No newline at end of file
diff --git a/layouts/partials/blocks/templates/call_to_action.html b/layouts/partials/blocks/templates/call_to_action.html
index 2fae0fcd15833a1425802a055badca8d9b6c633b..e3ad825a8b84472c59546f316bb1c3228facf422 100644
--- a/layouts/partials/blocks/templates/call_to_action.html
+++ b/layouts/partials/blocks/templates/call_to_action.html
@@ -1,5 +1,5 @@
-{{- $context := .context -}}
 {{- $position := .block.position -}}
+{{- $template := .block.template -}}
 {{- $title := .block.title -}}
 {{- with .block.data -}}
   {{- $buttons := and .button.text .button_secondary.text -}}
@@ -8,10 +8,12 @@
       <div class="block-content">
         <div class="call_to_action call_to_action--with{{ if not .image }}out{{ end }}-image">
           <div>
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
+            {{- if not $title -}}
+              {{ partial "blocks/default_title.html" $template }}
+            {{ else }}
+              <h2>{{ partial "PrepareHTML" $title }}</h2>
+            {{ end -}}
+
             {{- if (partial "GetTextFromHTML" .text) }}
             <div class="description">
               {{ partial "PrepareHTML" .text }}
@@ -36,16 +38,13 @@
               {{- end -}}
             </div>
             {{- end -}}
-
           </div>
 
           {{ partial "commons/image.html"
             (dict
               "image"    .image.file
               "alt"      .image.alt
-              "mobile"   "164x164"
-              "tablet"   "336x336"
-              "desktop"  "416x416"
+              "sizes"    site.Params.image_sizes.blocks.call_to_action
             )}}
 
         </div>
diff --git a/layouts/partials/blocks/templates/chapter.html b/layouts/partials/blocks/templates/chapter.html
index 417e27199f6bd13a63b6da9386ca077278d9bd8d..9e4fdf1202b7af01f273d854d1b631cf67439ded 100644
--- a/layouts/partials/blocks/templates/chapter.html
+++ b/layouts/partials/blocks/templates/chapter.html
@@ -1,49 +1,60 @@
-{{- $context := .context -}}
 {{- $position := .block.position -}}
+{{- $template := .block.template -}}
 {{- $title := .block.title -}}
+{{- $layout := .block.data.layout | default "no_background" -}}
 {{- $class := "block block-chapter" -}}
+{{- $image_class := "" -}}
+
 {{- with .block.data -}}
   {{ if .image }}
     {{- $class = printf "%s block-chapter--with-image" $class -}}
+    {{- $image_class = printf "image-%s" (partial "GetImageDirection" .image) -}}
   {{ end }}
+  {{- $layout_class := printf "block-chapter--%s" $layout -}}
+  {{- $class = printf "%s %s" $class $layout_class -}}
+
   <section class="{{ $class }}{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
-
         <div class="chapter">
-          {{ if $title -}}
-            <div class="top">
-              {{ partial "blocks/title" (dict 
-                "title" $title
-                "context" $context
-                ) }}
+          <div class="text">
+            {{- if not $title -}}
+              {{ partial "blocks/default_title.html" $template }}
+            {{ else }}
+              <div class="top">
+                <h2>{{ partial "PrepareHTML" $title }}</h2>
+              </div>
+            {{ end -}}
+            {{ if (partial "GetTextFromHTML" .text) -}}
+            <div class="rich-text">
+              {{ partial "PrepareHTML" .text }}
             </div>
-          {{ end -}}
-          {{ if (partial "GetTextFromHTML" .text) -}}
-          <div>
-            {{ partial "PrepareHTML" .text }}
+            {{ end -}}
+            {{ if (partial "GetTextFromHTML" .notes) }}
+              <div class="notes">
+                {{ partial "PrepareHTML" .notes }}
+              </div>
+            {{ end -}}
           </div>
-          {{ end -}}
-          {{ if (partial "GetTextFromHTML" .notes) }}
-            <div class="notes">
-              {{ partial "PrepareHTML" .notes }}
-            </div>
+          {{ if .image }}
+            <figure class="{{- $image_class -}}">
+              <a class="glightbox"
+                data-glightbox="type: image;{{ if .credit }}description: {{ partial "PrepareHTML" .credit }}{{ end }}"
+                href="{{- partial "GetLightboxUrl" .image -}}"
+                title="{{- i18n "commons.lightbox.link.title" -}}"
+                >
+                {{ partial "commons/image.html"
+                  (dict
+                    "image"    .image
+                    "sizes"    site.Params.image_sizes.blocks.chapter
+                  )}}
+              </a>
+              {{ if partial "GetTextFromHTML" .credit }}
+                <figcaption>{{ partial "PrepareHTML" .credit }}</figcaption>
+              {{ end }}
+            </figure>
           {{ end -}}
         </div>
-        {{ with .image }}
-          <figure>
-            {{ partial "commons/image.html"
-              (dict
-                "image"    .
-                "mobile"   "351x351"
-                "tablet"   "336x336"
-                "desktop"  "636x636"
-              )}}
-            {{ if partial "GetTextFromHTML" .credit }}
-              <figcaption>{{ partial "PrepareHTML" .credit }}</figcaption>
-            {{ end }}
-          </figure>
-        {{ end -}}
       </div>
     </div>
   </section>
diff --git a/layouts/partials/blocks/templates/contact.html b/layouts/partials/blocks/templates/contact.html
index d9b1c6f9c4a3fe42b8f58a385d35971a112a5b49..41e3fd30c2d235337f2163e7d41c40c98a71de57 100644
--- a/layouts/partials/blocks/templates/contact.html
+++ b/layouts/partials/blocks/templates/contact.html
@@ -1,4 +1,4 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- $class := "block block-contact" -}}
@@ -6,12 +6,11 @@
   <section class="{{ $class }}{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
-        {{ if $title -}}
+        {{- if not $title -}}
+          {{ partial "blocks/default_title.html" $template }}
+        {{ else }}
           <div class="top">
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
+              <h2>{{ partial "PrepareHTML" $title }}</h2>
               {{- if .description }}
               <div class="description">
                 {{ partial "PrepareHTML" .description }}
diff --git a/layouts/partials/blocks/templates/datatable.html b/layouts/partials/blocks/templates/datatable.html
index a07cf8b9f0804b63826e360a47279e5d24fea368..c8c19a3716ef3e98dd5995f99bdd9fff97ca0e7c 100644
--- a/layouts/partials/blocks/templates/datatable.html
+++ b/layouts/partials/blocks/templates/datatable.html
@@ -1,4 +1,4 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- $title := .block.title -}}
@@ -6,12 +6,11 @@
   <section class="block block-datatable{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
-        {{- if $title }}
+        {{- if not $title -}}
+          {{ partial "blocks/default_title.html" $template }}
+        {{ else }}
           <div class="top">
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
+            <h2>{{ partial "PrepareHTML" $title }}</h2>
           </div>
         {{ end -}}
         <div class="table-responsive">
@@ -31,7 +30,7 @@
               {{ range .rows }}
                 <tr>
                   {{ range . }}
-                    <td>{{ . }}</td>
+                    <td>{{ .  | markdownify }}</td>
                   {{ end }}
                 </tr>
               {{ end }}
diff --git a/layouts/partials/blocks/templates/definitions.html b/layouts/partials/blocks/templates/definitions.html
index 4adc1babda0e78b4202a11aad2b771c8cc419bd5..f82a80b41434206aca1facbd23b08f79612877ca 100644
--- a/layouts/partials/blocks/templates/definitions.html
+++ b/layouts/partials/blocks/templates/definitions.html
@@ -1,23 +1,22 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- with .block.data -}}
   <section class="block block-definitions{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
-        {{- if $title }}
+        {{- if not $title -}}
+          {{ partial "blocks/default_title.html" $template }}
+        {{ else }}
           <div class="top">
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
+            <h2>{{ partial "PrepareHTML" $title }}</h2>
           </div>
         {{ end -}}
         <div class="definitions">
           {{- range .elements }}
             <details itemscope itemtype="https://schema.org/DefinedTerm">
-              <summary itemprop="name">{{ .title }}</summary>
-              <p itemprop="description">{{ .description }}</p>
+              <summary itemprop="name">{{ partial "PrepareText" .title }}</summary>
+              <p itemprop="description">{{ partial "PrepareText" .description }}</p>
             </details>
           {{ end -}}
         </div>
diff --git a/layouts/partials/blocks/templates/embed.html b/layouts/partials/blocks/templates/embed.html
index 263eb21ec01aa8e47acd0342619eef9f455fb82c..6b67aaf9942ad8026e96e01d9959214038df4213 100644
--- a/layouts/partials/blocks/templates/embed.html
+++ b/layouts/partials/blocks/templates/embed.html
@@ -1,16 +1,15 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- with .block.data -}}
   <section class="block block-embed{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
-        {{- if $title }}
+        {{- if not $title -}}
+          {{ partial "blocks/default_title.html" $template }}
+        {{ else }}
           <div class="top">
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
+            <h2>{{ partial "PrepareHTML" $title }}</h2>
           </div>
         {{ end -}}
 
diff --git a/layouts/partials/blocks/templates/files.html b/layouts/partials/blocks/templates/files.html
index 48e5837be39983395b43d3f7d96546bd734f97ba..c811af648d735266f9a015cbb41601b517e5fca8 100644
--- a/layouts/partials/blocks/templates/files.html
+++ b/layouts/partials/blocks/templates/files.html
@@ -1,16 +1,17 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- with .block.data -}}
   <section class="block block-files{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
-        {{- if $title }}
+        {{- if or $title .description }}
           <div class="top">
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
+            {{- if not $title -}}
+              {{ partial "blocks/default_title.html" $template }}
+            {{ else }}
+              <h2>{{ partial "PrepareHTML" $title }}</h2>
+            {{ end -}}
             {{- if .description }}
               <div class="description">
                 {{ partial "PrepareHTML"  .description }}
@@ -19,7 +20,7 @@
           </div>
         {{ end -}}
         
-        <ul>
+        <ul class="files">
           {{- range .files }}
             {{ if ne .id "" }}
               {{- $file := partial "GetMedia" .id -}}
diff --git a/layouts/partials/blocks/templates/gallery.html b/layouts/partials/blocks/templates/gallery.html
index 6f2832675e53a6d5a24b8620bad6eaa64ba85d48..61580b0c358231dec0630a73dbed25c5bdaaa5fe 100644
--- a/layouts/partials/blocks/templates/gallery.html
+++ b/layouts/partials/blocks/templates/gallery.html
@@ -1,4 +1,4 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- $layout_class := "block-gallery--grid" -}}
@@ -12,11 +12,10 @@
       <div class="block-content">
         {{- if (or $title .description) }}
           <div class="top">
-            {{- if $title }}
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
+            {{- if not $title -}}
+              {{ partial "blocks/default_title.html" $template }}
+            {{ else }}
+              <h2>{{ partial "PrepareHTML" $title }}</h2>
             {{ end -}}
             {{- if .description }}
               <div class="description">
diff --git a/layouts/partials/blocks/templates/gallery/carousel.html b/layouts/partials/blocks/templates/gallery/carousel.html
index 5b480ddf3042209c0713236c1779c0887fb6887e..a787ab3f2ef92ef36950e507f2c1c6b44f7bb5b9 100644
--- a/layouts/partials/blocks/templates/gallery/carousel.html
+++ b/layouts/partials/blocks/templates/gallery/carousel.html
@@ -13,23 +13,17 @@
     {{ if .file }}
       {{- $image := partial "GetMedia" .file -}}
       {{- if $image -}}
-        {{/*  TODO: refactor  */}}
-        {{- $url := $image.url -}}
-        {{- if site.Params.keycdn -}}
-          {{- $url = $image.direct_url -}}
-        {{- end -}}
-        {{- $lightbox_sizes := "1280x2560" -}}
         <figure{{ if $is_carousel }} class="splide__slide"{{ end }}>
           <a class="glightbox"
             data-glightbox="type: image;{{ if .credit }}description: {{ partial "PrepareHTML" .credit }}{{ end }}"
-            href="{{ partial "GetImageUrl" (dict "url" $url "size" $lightbox_sizes ) }}">
+            href="{{ partial "GetLightboxUrl" (dict "id" .id) }}"
+            title="{{- i18n "commons.lightbox.link.title" -}}"
+            >
             {{ partial "commons/image.html"
               (dict
                 "image"    .id
                 "alt"      .alt
-                "mobile"   "164"
-                "tablet"   "336"
-                "desktop"  "967x679"
+                "sizes"    site.Params.image_sizes.blocks.gallery.carousel
               )}}
           </a>
           {{ if or .text .credit }}
diff --git a/layouts/partials/blocks/templates/gallery/grid.html b/layouts/partials/blocks/templates/gallery/grid.html
index 492af5b808e8b272205028432ae3c2ba986a113a..fe5a4a1cc4da6785a27e3580bbce659156c2c5f2 100644
--- a/layouts/partials/blocks/templates/gallery/grid.html
+++ b/layouts/partials/blocks/templates/gallery/grid.html
@@ -3,23 +3,17 @@
     {{ if .id }}
       {{- $image := partial "GetMedia" .id -}}
       {{- if $image -}}
-        {{/*  TODO: refactor  */}}
-        {{- $url := $image.url -}}
-        {{- if site.Params.keycdn -}}
-          {{- $url = $image.direct_url -}}
-        {{- end -}}
-        {{- $lightbox_sizes := "1280x2560" -}}
         <figure>
           <a class="glightbox"
             data-glightbox="type: image;{{ if .credit }}description: {{ partial "PrepareHTML" .credit }}{{ end }}"
-            href="{{ partial "GetImageUrl" (dict "url" $url "size" $lightbox_sizes ) }}">
+            href="{{ partial "GetLightboxUrl" (dict "id" .id) }}"
+            title="{{- i18n "commons.lightbox.link.title" -}}"
+            >
             {{ partial "commons/image.html"
               (dict
                 "image"    .file
                 "alt"      .alt
-                "mobile"   "164"
-                "tablet"   "336"
-                "desktop"  "416"
+                "sizes"    site.Params.image_sizes.blocks.gallery.grid
               )}}
           </a>
           {{ if .text }}
diff --git a/layouts/partials/blocks/templates/image.html b/layouts/partials/blocks/templates/image.html
index 0d1532f4977eb0b582a8cc7edc78ac9b67e4339b..2bc4ef561c90b319677aa6348178501b123eeada 100644
--- a/layouts/partials/blocks/templates/image.html
+++ b/layouts/partials/blocks/templates/image.html
@@ -1,47 +1,41 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
+{{- $image_class := "" -}}
 {{- with .block.data -}}
   {{- $text := .text -}}
   {{- $buttons := and .button.text .button_secondary.text -}}
-  <section class="block block-image{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
+  {{- if .image -}}
+    {{- $image_class = printf "image-%s" (partial "GetImageDirection" .image ) -}}
+  {{- end -}}
+  <section class="block block-image{{ if $title }} block-with-title{{ end }} {{ $image_class -}}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
-
-        {{ if $title -}}
+        {{- if not $title -}}
+          {{ partial "blocks/default_title.html" $template }}
+        {{ else }}
           <div class="top">
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
+            <h2>{{ partial "PrepareHTML" $title }}</h2>
           </div>
         {{ end -}}
 
         {{- with .image -}}
-          {{/*  TODO: refactor  */}}
-          {{- $image := partial "GetMedia" .file -}}
-          {{- $url := $image.url -}}
-          {{- if site.Params.keycdn -}}
-            {{- $url = $image.direct_url -}}
-          {{- end -}}
-
-          {{- $lightbox_sizes := "2048x3640" -}}
-          <figure>
+          <figure class="{{ $image_class }}">
             <a class="glightbox"
-              data-glightbox="type: image;"
-              href="{{ partial "GetImageUrl" (dict "url" $url "size" $lightbox_sizes ) }}">
+              data-glightbox="type: image;{{ if .credit }}description: {{ partial "PrepareHTML" .credit }}{{ end }}"
+              href="{{- partial "GetLightboxUrl" . -}}"
+              title="{{- i18n "commons.lightbox.link.title" -}}"
+              >
               {{ partial "commons/image.html"
                 (dict
                   "image"    .
                   "alt"      .alt
-                  "mobile"   "480x850"
-                  "tablet"   "768x1360"
-                  "desktop"  "1400x1820"
+                  "sizes"    site.Params.image_sizes.blocks.image
                 )}}
             </a>
             <figcaption>
               {{- if $text }}
-                <p>{{ partial "PrepareHTML" $text }}</p>
+                {{ partial "PrepareHTML" $text }}
               {{ end -}}
               {{- if partial "PrepareHTML" .credit }}
                 <div class="credit">{{ partial "PrepareHTML" .credit }}</div>
diff --git a/layouts/partials/blocks/templates/key_figures.html b/layouts/partials/blocks/templates/key_figures.html
index 97d107276609a6e533232df400fe4282d8641ae6..af8f12e60351c8ef9daccb6ac9a4accc5f12b17f 100644
--- a/layouts/partials/blocks/templates/key_figures.html
+++ b/layouts/partials/blocks/templates/key_figures.html
@@ -1,16 +1,18 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
+{{- $figures := .figures}}
 {{- with .block.data -}}
   <section class="block block-key_figures{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
         {{- if (or $title .description) }}
           <div class="top">
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
+            {{- if not $title -}}
+              {{ partial "blocks/default_title.html" $template }}
+            {{ else }}
+              <h2>{{ partial "PrepareHTML" $title }}</h2>
+            {{ end -}}
             {{- if .description }}
               <div class="description">
                 {{ partial "PrepareHTML"  .description }}
@@ -18,9 +20,14 @@
             {{ end -}}
           </div>
         {{ end -}}
-        <ul>
+
+        {{ $list_class := "odd-items" }}
+        {{ if (modBool $figures 2) }}
+          {{ $list_class = "even-items" }}
+        {{ end }}
+        <ul class="{{ $list_class }}">
           {{- range .figures }}
-            <li>
+              <li>
                 <dl>
                     <dt><strong>{{ .number }}</strong>{{ partial "PrepareHTML" .unit }}</dt>
                     <dd>{{ partial "PrepareHTML" .description }}</dd>
diff --git a/layouts/partials/blocks/templates/organization_chart.html b/layouts/partials/blocks/templates/organization_chart.html
index 117df6d5b47b4a9a7ce906b1978dde5d82a2d339..a515fd200b1c316fb6ab9e9321455b1266766d36 100644
--- a/layouts/partials/blocks/templates/organization_chart.html
+++ b/layouts/partials/blocks/templates/organization_chart.html
@@ -1,17 +1,19 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- with .block.data -}}
   {{- $with_link := .with_link -}}
+  {{- $with_photo := .with_photo -}}
 <section class="block block-organization_chart{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
   <div class="container">
     <div class="block-content">
         {{ if (or $title .description) -}}
           <div class="top">
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
+            {{- if not $title -}}
+              {{ partial "blocks/default_title.html" $template }}
+            {{ else }}
+              <h2>{{ partial "PrepareHTML" $title }}</h2>
+            {{ end -}}
             {{- if .description }}
               <div class="description">
                 {{ partial "PrepareHTML"  .description }}
@@ -22,37 +24,40 @@
         <div class="persons">
           {{- range .persons -}}
             {{ $person := site.GetPage (printf "/persons/%s" .slug) }}
-            <div>
-              {{- if (partial "GetTextFromHTML" .role) }}
-                <article class="person" itemscope itemtype="https://schema.org/Person">
-                  <div class="description">
-                    <h1 class="name" itemprop="name">
-                      {{ if $with_link }}
-                      <a href="{{ $person.Permalink }}" aria-label="{{ i18n "commons.more_aria" (dict "Title" $person.Title) }}">
-                      {{ end }}
-                        {{- partial "PrepareHTML" $person.Title -}}
-                      {{ if $with_link }}
-                      </a>
-                      {{ end }}
-                    </h1>
-                    <p itemprop="jobTitle">{{ partial "PrepareHTML" .role }}</p>
-                  </div>
-                  <div class="avatar" itemprop="image">
-                    {{- if $person.Params.image }}
-                      {{ partial "commons/image.html"
-                            (dict
-                              "image"    $person.Params.image
-                              "mobile"   "80x80"
-                              "tablet"   "100x100"
-                              "desktop"  "255x255"
-                            )}}
-                    {{ end -}}
-                  </div>
-                </article>
-              {{ else }}
-                {{ partial "persons/person.html" $person }}
+            <article class="person" itemscope itemtype="https://schema.org/Person">
+              <div class="description">
+                <h3 class="name" itemprop="name">
+                  {{ if $with_link }}
+                  <a href="{{ $person.Permalink }}" aria-label="{{ i18n "commons.more_aria" (dict "Title" $person.Title) }}">
+                    {{ end }}
+                    {{- partial "PrepareHTML" $person.Title -}}
+                    {{ if $with_link }}
+                  </a>
+                  {{ end }}
+                </h3>
+                <p itemprop="jobTitle">
+                  {{- if (partial "GetTextFromHTML" .role) }}
+                    {{ partial "PrepareHTML" .role }}
+                  {{- else if partial "GetTextFromHTML" $person.Params.summary }}
+                    {{- partial "PrepareHTML" $person.Params.summary -}}
+                  {{ else if (partial "GetTextFromHTML" $person.Content) }}
+                    {{- partial "GetTruncateContent" ( dict "text" $person.Content ) -}}
+                  {{ end -}}
+                </p>
+              </div>
+              {{- if $with_photo }}
+                <div class="avatar" itemprop="image">
+                  {{- if $person.Params.image }}
+                    {{ partial "commons/image.html"
+                      (dict
+                        "image"    $person.Params.image
+                        "sizes"    site.Params.image_sizes.blocks.organization_chart
+                      )}}
+                  {{ end -}}
+                </div>
               {{ end -}}
-            </div>
+            </article>
+
           {{- end -}}
         </div>
       </div>
diff --git a/layouts/partials/blocks/templates/pages.html b/layouts/partials/blocks/templates/pages.html
index 1a17492757ad26af65597fee91f7df735be714fa..e749a50fe1f1c82f90c5d371c163d081a4358a9f 100644
--- a/layouts/partials/blocks/templates/pages.html
+++ b/layouts/partials/blocks/templates/pages.html
@@ -1,4 +1,4 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- $class := "block block-pages" -}}
@@ -10,6 +10,7 @@
   {{- $show_main_description := .show_main_description -}}
   {{- $show_descriptions := .show_descriptions -}}
   {{- $show_images := .show_images -}}
+  {{- $main_description := "" -}}
   {{- $page_link := false -}}
 
   {{/* LEGACY */}}
@@ -36,26 +37,32 @@
       {{ $title = .Title }}
     {{ end }}
     {{ if .Params.bodyclass }}
-      {{- $page_class = partial "GetBodyclass" . }}
-      {{- $page_class = printf "block-%s" $page_class }}
+      {{- $page_class = printf "block-page-%s" .Params.bodyclass }}
+    {{ end }}
+    {{ if site.Params.pages.index.truncate_description }}
+      {{- $main_description = partial "GetTruncateContent" ( dict 
+          "text" .Params.summary
+          "length" site.Params.pages.index.truncate_description
+          ) -}}
+    {{ else }}
+      {{- $main_description = partial "PrepareText" .Params.summary -}}
     {{ end }}
   {{ end -}}
 
   <section class="block block-pages{{ if $title }} block-with-title{{ end }} {{ $layout_class }} {{ $page_class }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
-        {{- if $title }}
+        {{- if not $title -}}
+          {{ partial "blocks/default_title.html" $template }}
+        {{ else }}
           <div class="top">
-            {{/*  Quand le bloc a un titre, est-ce qu'on prend le titre de la page principale ou le titre du bloc ?  */}}
-            {{ partial "blocks/title" (dict 
+            {{ partial "blocks/title_with_link.html" (dict 
               "title" $title
-              "context" $context
               "link" $page_link
               ) }}
-            
             {{ if and $show_main_description (ne $layout "list")}}
               {{- with $page }}
-                <p class="description">{{ partial "PrepareHTML" .Params.description_short }}</p>
+                <p class="description">{{- $main_description -}}</p>
               {{ end }}
             {{ end }}
           </div>
@@ -63,7 +70,7 @@
 
         {{ if and $show_main_description (eq $layout "list")}}
           {{- with $page }}
-            <p class="description">{{ partial "PrepareHTML" .Params.description_short }}</p>
+            <p class="description">{{- $main_description -}}</p>
           {{ end }}
         {{ end }}
 
diff --git a/layouts/partials/blocks/templates/pages/cards.html b/layouts/partials/blocks/templates/pages/cards.html
index 5c3ea061cab3bba4e9a83ca50427d00be984b4be..7ca088c4851bc35834a4e5ad34a32161d3408d1d 100644
--- a/layouts/partials/blocks/templates/pages/cards.html
+++ b/layouts/partials/blocks/templates/pages/cards.html
@@ -5,18 +5,26 @@
   {{ range .pages }}
     {{- $page := partial "GetPageByUrl" .page -}}
     {{- if .slug -}}
+      {{/*  LEGACY  */}}
       {{- $page = partial "GetPageByUrl" .slug -}}
     {{- end -}}
     {{ with $page }}
       <article class="card">
-        <h1>
+        <h3>
           <a href="{{- .Permalink -}}">
             {{- partial "PrepareHTML" .Title -}}
           </a>
-        </h1>
+        </h3>
 
-        {{ if and $show_descriptions .Params.description_short }}
-          <p>{{ partial "PrepareHTML" .Params.description_short }}</p>
+        {{ if and $show_descriptions .Params.summary }}
+          {{ if site.Params.pages.index.truncate_description }}
+            <p>{{ partial "GetTruncateContent" ( dict 
+              "text" .Params.summary
+              "length" site.Params.pages.index.truncate_description
+              ) }}</p>
+          {{ else }}
+            <p>{{ partial "PrepareText" .Params.summary }}</p>
+          {{ end }}
         {{ end }}
 
         <p class="more meta">{{- i18n "commons.more" -}}</p>
diff --git a/layouts/partials/blocks/templates/pages/grid.html b/layouts/partials/blocks/templates/pages/grid.html
index 49d6100300524ad20e6c6e54d967f6ce17f0d84f..a8ff4128d3d9de87d1481ad499a1c46c232c2982 100644
--- a/layouts/partials/blocks/templates/pages/grid.html
+++ b/layouts/partials/blocks/templates/pages/grid.html
@@ -10,6 +10,7 @@
       {{- if .page -}}
         {{- $page = partial "GetPageByUrl" .page -}}
       {{- else if .slug -}}
+        {{/*  LEGACY  */}}
         {{- $page = partial "GetPageByUrl" .slug -}}
       {{ end }}
     {{ else }}
@@ -18,13 +19,20 @@
 
     {{ with $page }}
       <article>
-        <h1>
+        <h3>
           <a href="{{- .Permalink -}}">
             {{- partial "PrepareHTML" .Title -}}
           </a>
-        </h1>
-        {{ if and $show_descriptions .Params.description_short }}
-          <p>{{ partial "PrepareHTML" .Params.description_short }}</p>
+        </h3>
+        {{ if and $show_descriptions .Params.summary }}
+          {{ if site.Params.pages.index.truncate_description }}
+            <p>{{ partial "GetTruncateContent" ( dict 
+              "text" .Params.summary
+              "length" site.Params.pages.index.truncate_description
+              ) }}</p>
+          {{ else }}
+            <p>{{ partial "PrepareText" .Params.summary }}</p>
+          {{ end }}
         {{ end }}
         {{ if $show_images }}
           {{- partial "pages/page-media.html" . -}}
diff --git a/layouts/partials/blocks/templates/pages/list.html b/layouts/partials/blocks/templates/pages/list.html
index a699ecb9c3df1ea2098377abe6e40d7778a7da29..f30cb416d2672df18b51fb0562d2d89c035478ed 100644
--- a/layouts/partials/blocks/templates/pages/list.html
+++ b/layouts/partials/blocks/templates/pages/list.html
@@ -2,6 +2,7 @@
   {{ range .pages }}
     {{- $page := partial "GetPageByUrl" .page -}}
     {{- if .slug -}}
+      {{/*  LEGACY  */}}
       {{- $page = partial "GetPageByUrl" .slug -}}
     {{- end -}}
     {{ with $page }}
diff --git a/layouts/partials/blocks/templates/partners.html b/layouts/partials/blocks/templates/partners.html
index 248b64845f6933deede3dcdc261fd7c90b63c83d..4c1c69b2c337a1208bb164a71b05fd399ff735ba 100644
--- a/layouts/partials/blocks/templates/partners.html
+++ b/layouts/partials/blocks/templates/partners.html
@@ -1,17 +1,20 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
+{{ $logo_index := "logo" }}
+{{ if site.Params.organizations.dark_logo_background }}
+  {{ $logo_index = "logo_on_dark_background" }}
+{{ end }}
 {{- with .block.data -}}
   <section class="block block-partners{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
         {{ if (or $title .description) -}}
           <div class="top">
-            {{- if $title }}
-              {{ partial "blocks/title" (dict 
-                "title" $title
-                "context" $context
-                ) }}
+            {{- if not $title -}}
+              {{ partial "blocks/default_title.html" $template }}
+            {{ else }}
+              <h2>{{ partial "PrepareHTML" $title }}</h2>
             {{ end -}}
             {{- if .description }}
               <div class="description">
@@ -23,48 +26,52 @@
 
         <div class="organizations">
           {{- range .partners }}
-            <div>
-
-              {{- if .slug }}
-                {{ with (site.GetPage (printf "/organizations/%s" .slug )) }}
-                  {{- partial "organizations/organization.html" . -}}
-                {{ end }}
-              {{- else -}}
-                <article class="organization">
-                  {{- $title := "" -}}
-                  {{ if .name }}
-                    <div>
-                      {{ $title = partial "PrepareHTML" .name -}}
-                      <h1>
-                        {{- if .url }}
-                        <a href="{{ .url }}">
-                        {{ end }}
-                          {{- $title -}}
-                        {{ if .url }}
-                        </a>
-                        {{ end -}}
-                      </h1>
-                    </div>
-                  {{ end -}}
-                  <div class="media">
-                    {{- if .logo -}}
-                      {{- partial "commons/image.html"
-                            (dict
-                              "image"    .logo
-                              "alt"      $title
-                              "mobile"   "164"
-                              "tablet"   "216"
-                              "desktop"  "196"
-                            ) -}}
-                    {{- end -}}
-                  </div>
-                </article>
-              {{ end -}}
-
-            </div>
+            {{ if .slug }}
+              {{ with (site.GetPage (printf "/organizations/%s" .slug )) }}
+                {{ template "partner" (dict 
+                    "title" .Title
+                    "url" .Permalink
+                    "logo" (index .Params $logo_index)
+                  )}}
+              {{ end }}
+            {{ else }}
+              {{ template "partner" (dict 
+                  "title" .name
+                  "url" .url
+                  "logo" .logo
+                )}}
+            {{ end }}
           {{ end -}}
         </div>
       </div>
     </div>
   </section>
 {{- end -}}
+
+{{- define "partner" -}}
+<article class="organization">
+  {{ $title := "" }}
+  {{ if .title }}
+    {{ $title = partial "PrepareHTML" .title -}}
+    <h3>
+      {{- if .url }}
+        <a href="{{ .url }}" title="{{ safeHTML (i18n "commons.link.blank_aria" (dict "Title" $title)) }}">
+      {{ end -}}
+        {{- $title -}}
+      {{- if .url }}
+        </a>
+      {{ end -}}
+    </h3>
+  {{ end -}}
+  <div class="media">
+    {{- if .logo -}}
+      {{- partial "commons/image.html"
+        (dict
+          "image"    .logo
+          "alt"      $title
+          "sizes"    site.Params.image_sizes.blocks.partners
+        ) -}}
+    {{- end -}}
+  </div>
+</article>
+{{- end  -}}
\ No newline at end of file
diff --git a/layouts/partials/blocks/templates/posts.html b/layouts/partials/blocks/templates/posts.html
index 27ac3fca676627a3ca2fbd8c4666476e8dc9c9ba..89509900b746ce775a1977a30950d64da3e942cd 100644
--- a/layouts/partials/blocks/templates/posts.html
+++ b/layouts/partials/blocks/templates/posts.html
@@ -1,4 +1,4 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- $term := false -}}
@@ -10,7 +10,7 @@
   {{ if .category }}
     {{- $term = site.GetPage (printf "/categories%s" .category) -}}
   {{ end }}
-  <section class="block block-posts--{{- $layout }} block-posts{{ if $title }} block-with-title{{ end }} {{ if $term }} term-{{ replace $term.Slug "/" "" }} {{- end -}}" id="block-{{ $position }}">
+  <section itemscope itemtype="http://schema.org/Blog" class="block block-posts--{{- $layout }} block-posts{{ if $title }} block-with-title{{ end }} {{ if $term }} term-{{ replace $term.Slug "/" "" }} {{- end -}}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
         {{ if $title -}}
@@ -20,11 +20,14 @@
               {{ $title_link = $term.Permalink }}
             {{ end -}}
 
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              "link" $title_link
-              ) }}
+            {{- if not $title -}}
+              {{ partial "blocks/default_title.html" $template }}
+            {{ else }}
+              {{ partial "blocks/title_with_link.html" (dict 
+                "title" $title
+                "link" $title_link
+                ) }}
+            {{ end -}}
 
           </div>
         {{- end }}
diff --git a/layouts/partials/blocks/templates/posts/grid.html b/layouts/partials/blocks/templates/posts/grid.html
index 681e236b486f8ff0cd01bf042c17aeaa7ed5223c..5bcf393c86a06160699fc590f92c207089d31238 100644
--- a/layouts/partials/blocks/templates/posts/grid.html
+++ b/layouts/partials/blocks/templates/posts/grid.html
@@ -1,7 +1,10 @@
 <div class="grid">
   {{ range $post := .posts -}}
     {{ with site.GetPage (printf "/posts/%s" $post) }}
-      {{ partial "posts/post" . }}
+      {{ partial "posts/post.html" (dict 
+        "post" .
+        "heading" "h3"
+        ) }}
     {{ end }}
   {{ end }}
 </div>
\ No newline at end of file
diff --git a/layouts/partials/blocks/templates/posts/highlight.html b/layouts/partials/blocks/templates/posts/highlight.html
index 70a71410a418c61da499471fef7bef1ba96864f2..6e1f82e4955db5c4c4c5d11ca3fd4ba460311bea 100644
--- a/layouts/partials/blocks/templates/posts/highlight.html
+++ b/layouts/partials/blocks/templates/posts/highlight.html
@@ -6,19 +6,33 @@
 
     {{ with $highlight }}
       <div class="highlight-post">
-        {{ partial "posts/post" . }}
+        {{ partial "posts/post" (dict 
+          "post" .
+          "heading" "h3"
+          ) }}
       </div>
     {{ end }}
 
     {{ with $list }}
+      {{ $first := true }}
       <div class="list">
-        {{ range . }}
+        {{ range after 1 . }}
           {{ with site.GetPage (printf "/posts/%s" .) }}
-            <article>
+            <article class="post">
               {{- $title := partial "PrepareHTML" .Title -}}
-              <h1 itemprop="headline"><a href="{{ .Permalink }}" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">{{ $title }}</a></h1>
-              {{- if (partial "GetTextFromHTML" .Params.description_short) -}}
-              <p itemprop="articleBody">{{ partial "PrepareHTML" .Params.description_short }}</p>
+              <h3 itemprop="headline"><a href="{{ .Permalink }}" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">{{ $title }}</a></h3>
+              {{ if site.Params.posts.index.show_categories }}
+                {{- partial "posts/categories" . -}}
+              {{ end }}
+              {{- if (partial "GetTextFromHTML" .Params.summary) -}}
+                {{ if site.Params.posts.index.truncate_description }}
+                  <p itemprop="articleBody">{{ partial "GetTruncateContent" ( dict 
+                    "text" .Params.summary
+                    "length" site.Params.posts.index.truncate_description
+                    ) }}</p>
+                {{ else }}
+                  <p itemprop="articleBody">{{ partial "PrepareText" .Params.summary }}</p>
+                {{ end }}
               {{- end -}}
               <time itemprop="datePublished" datetime="{{ .Date.Format "2006-01-02T15:04" }}">{{ .Date | time.Format ":date_long" }}</time>
             </article>
diff --git a/layouts/partials/blocks/templates/posts/list.html b/layouts/partials/blocks/templates/posts/list.html
index ac8dbb0e4cf2f6b1516a592bdbf770fddb1858eb..1b26319b3fb3137101bccbe7e01236b7e12f08f5 100644
--- a/layouts/partials/blocks/templates/posts/list.html
+++ b/layouts/partials/blocks/templates/posts/list.html
@@ -1,7 +1,9 @@
 <div class="list">
   {{ range $post := .posts -}}
     {{ with site.GetPage (printf "/posts/%s" $post) }}
-      {{ partial "posts/post" . }}
+      {{ partial "posts/post.html" (dict 
+        "post" . 
+        "heading" "h3") }}
     {{ end }}
   {{ end }}
 </div>
\ No newline at end of file
diff --git a/layouts/partials/blocks/templates/programs.html b/layouts/partials/blocks/templates/programs.html
index a783e9d5662c0d452285bda009ef7b8170b5976a..377ffdae59bf69ded61d67157ed30f79ebbe586b 100644
--- a/layouts/partials/blocks/templates/programs.html
+++ b/layouts/partials/blocks/templates/programs.html
@@ -1,23 +1,22 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- with .block.data -}}
   <section class="block block-programs{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
-        {{ if $title -}}
+        {{- if not $title -}}
+          {{ partial "blocks/default_title.html" $template }}
+        {{ else }}
           <div class="top">
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
+            <h2>{{ partial "PrepareHTML" $title }}</h2>
           </div>
         {{ end -}}
 
         <ol class="programs">
           {{- range .programs -}}
             <li>
-              {{ $program := site.GetPage (printf "/programs/%s" .slug) }}
+              {{ $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 -}}
@@ -25,10 +24,6 @@
             </li>
           {{ end }}
         </ol>
-        {{/*   TODO : use program list partial ?
-          {{ partial "programs/programs-list.html" .programs }}
-        */}}
-      
       </div>
     </div>
   </section>
diff --git a/layouts/partials/blocks/templates/testimonials.html b/layouts/partials/blocks/templates/testimonials.html
index b2ec3959f2ee00b93a8cc06533f009f3c9949852..31e9be932e0592ed235dbe913f2dc4ad45d5bcc1 100644
--- a/layouts/partials/blocks/templates/testimonials.html
+++ b/layouts/partials/blocks/templates/testimonials.html
@@ -1,4 +1,4 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- $is_carousel := false -}}
@@ -7,16 +7,13 @@
   {{ if gt (len .testimonials) 1 }}
     {{- $is_carousel = true -}}
   {{ end }}
-  <section class="block block-testimonials{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
+  <section class="block block-testimonials{{ if $title }} block-with-title{{ end }}{{ if $is_carousel}} with-carousel{{ end }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
-        {{ if $title -}}
-          <div class="top">
-            {{ partial "blocks/title" (dict 
-              "title" $title
-              "context" $context
-              ) }}
-          </div>
+        {{- if not $title -}}
+          {{ partial "blocks/default_title.html" $template }}
+        {{ else }}
+          <h2 class="hidden">{{ partial "PrepareHTML" $title }}</h2>
         {{ end -}}
 
         <div class="testimonials">
@@ -51,9 +48,7 @@
                           (dict
                             "image"    .photo
                             "alt"      .author
-                            "mobile"   "192x192"
-                            "tablet"   "192x192"
-                            "desktop"  "192x192"
+                            "sizes"    site.Params.image_sizes.blocks.testimonials
                           ) -}}
                   </div>
                 {{- end }}
@@ -62,9 +57,6 @@
                     {{- if .author -}}
                       <span class="signature">{{ partial "PrepareHTML" .author }}</span>
                     {{- end }}
-                    {{- if and .author .job -}}
-                      <br>
-                    {{- end -}}
                     {{- if .job -}}
                       <span class="meta">{{- partial "PrepareHTML" .job -}}</span>
                     {{- end }}
diff --git a/layouts/partials/blocks/templates/timeline.html b/layouts/partials/blocks/templates/timeline.html
index a66546ecb8dad079dccb4485753ff0d0ed1709ec..aee968cdf4e64ad4eb7ed6e2fb377237c94b2322 100644
--- a/layouts/partials/blocks/templates/timeline.html
+++ b/layouts/partials/blocks/templates/timeline.html
@@ -1,4 +1,4 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
 {{- $layout := .block.data.layout | default "vertical" -}}
@@ -8,7 +8,7 @@
     {{ partial $template (dict 
         "title" $title
         "block" .block
-        "context" $context
+        "template" $template
       ) }}
   </div>
 </section>
diff --git a/layouts/partials/blocks/templates/timeline/horizontal.html b/layouts/partials/blocks/templates/timeline/horizontal.html
index f4c6a05996b74bf3e735d9acd4682ab4dfb41942..b10651f7bc40f96dd379736fd028c34e4392d31d 100644
--- a/layouts/partials/blocks/templates/timeline/horizontal.html
+++ b/layouts/partials/blocks/templates/timeline/horizontal.html
@@ -1,10 +1,9 @@
 <div class="timeline">
-  {{ if .title }}
-    {{ partial "blocks/title" (dict 
-    "title" .title
-    "context" .context
-    ) }}
-  {{ end }}
+  {{- if not .title -}}
+    {{ partial "blocks/default_title.html" .template }}
+  {{ else }}
+    <h2>{{ partial "PrepareHTML" .title }}</h2>
+  {{ end -}}
 
   {{ with .block.data }}
     <div class="events">
@@ -19,7 +18,7 @@
       </ol>
       {{ if  (gt (len .events) 0) }}
         <div class="timeline-arrows">
-          <button class="previous" disabled title="{{ i18n "blocks.timeline.prev"}}"></button>
+          <button class="previous" disabled title="{{ i18n "blocks.timeline.previous"}}"></button>
           <button class="next" title="{{ i18n "blocks.timeline.next"}}"></button>
         </div>
       {{ end }}
diff --git a/layouts/partials/blocks/templates/timeline/vertical.html b/layouts/partials/blocks/templates/timeline/vertical.html
index fd407d64d100ed9b4e57238a141c3a59fea90dd8..0d465e692ebc4f1141ccba0419a1a2aa52a4cddb 100644
--- a/layouts/partials/blocks/templates/timeline/vertical.html
+++ b/layouts/partials/blocks/templates/timeline/vertical.html
@@ -1,19 +1,18 @@
 <div class="block-content">
-  {{ if .title -}}
+  {{- if not .title -}}
+    {{ partial "blocks/default_title.html" .template }}
+  {{ else }}
     <div class="top">
-      {{ partial "blocks/title" (dict 
-        "title" .title
-        "context" .context
-        ) }}
+      <h2>{{ partial "PrepareHTML" .title }}</h2>
     </div>
-  {{- end }}
+  {{ end -}}
 
   {{ with .block.data -}}
     <div class="events">
       {{ range .events -}}
         <article class="event">
           {{ if .title }}
-            <h1 class="event-title">{{ partial "PrepareHTML" .title }}</h1>
+            <h3 class="event-title">{{ partial "PrepareHTML" .title }}</h3>
           {{ end }}
           {{ if .text }}
             <p>{{ partial "PrepareText" .text }}</p>
diff --git a/layouts/partials/blocks/templates/video.html b/layouts/partials/blocks/templates/video.html
index 9b619e2d6165fe9b8eb5805c6f43f6961aeeaa85..30ecaf0901587ef6ff68858c61718b0c28756198 100644
--- a/layouts/partials/blocks/templates/video.html
+++ b/layouts/partials/blocks/templates/video.html
@@ -1,17 +1,17 @@
-{{- $context := .context -}}
+{{- $template := .block.template -}}
 {{- $position := .block.position -}}
 {{- $title := .block.title -}}
+{{/*  TODO A11Y: vérifier d'ajouter toujours un titre adjacent à la vidéo  */}}
 {{- with .block.data -}}
   <section class="block block-video{{ if $title }} block-with-title{{ end }}" id="block-{{ $position }}">
     <div class="container">
       <div class="block-content">
         <div>
-          {{ if $title -}}
+          {{- if not $title -}}
+            {{ partial "blocks/default_title.html" $template }}
+          {{ else }}
             <div class="top">
-              {{ partial "blocks/title" (dict 
-                "title" $title
-                "context" $context
-                ) }}
+              <h2>{{ partial "PrepareHTML" $title }}</h2>
             </div>
           {{ end -}}
 
diff --git a/layouts/partials/blocks/templates/video/GetIframe b/layouts/partials/blocks/templates/video/GetIframe
index dd720fcdb7527f3ada13f3f84bd72b63a0f2758a..947f0b926c56231d0c144b446928d9399ca32ef7 100644
--- a/layouts/partials/blocks/templates/video/GetIframe
+++ b/layouts/partials/blocks/templates/video/GetIframe
@@ -53,3 +53,9 @@
     {{ end }}
   {{ end }}
 {{ end }}
+{{ if not $identifier }}
+  {{ partial "blocks/templates/video/iframe.html" (dict
+    "url" $url
+    "title" $title
+    )}}
+{{ end }}
diff --git a/layouts/partials/blocks/templates/video/dailymotion.html b/layouts/partials/blocks/templates/video/dailymotion.html
index 8e3ea41976e5fd90213e10cc1a7f87bda5656367..e6e28a939b6bbfe81174c78504ade6d6a87636d8 100644
--- a/layouts/partials/blocks/templates/video/dailymotion.html
+++ b/layouts/partials/blocks/templates/video/dailymotion.html
@@ -2,6 +2,5 @@
   class="dailymotion"
   src="https://www.dailymotion.com/embed/video/{{ .id }}"
   title="{{ .title }}"
-  frameborder="0"
   loading="lazy">
 </iframe>
diff --git a/layouts/partials/blocks/templates/video/iframe.html b/layouts/partials/blocks/templates/video/iframe.html
new file mode 100644
index 0000000000000000000000000000000000000000..65585f5a5264ffaffc12d1582dccc6ebd1bb0852
--- /dev/null
+++ b/layouts/partials/blocks/templates/video/iframe.html
@@ -0,0 +1,5 @@
+<iframe 
+  src="{{ .url }}"
+  title="{{ .title }}"
+  loading="lazy">
+</iframe>
\ No newline at end of file
diff --git a/layouts/partials/blocks/templates/video/vimeo.html b/layouts/partials/blocks/templates/video/vimeo.html
index e0ffc073807e5bf0b69fac4cfcf8db6ebf18ab6d..98b53c04ca40ef272aec540b2bd00405c99505ba 100644
--- a/layouts/partials/blocks/templates/video/vimeo.html
+++ b/layouts/partials/blocks/templates/video/vimeo.html
@@ -2,6 +2,5 @@
   class="vimeo"
   src="https://player.vimeo.com/video/{{ .id }}"
   title="{{ .title }}"
-  frameborder="0"
   loading="lazy">
 </iframe>
diff --git a/layouts/partials/blocks/templates/video/youtube.html b/layouts/partials/blocks/templates/video/youtube.html
index 88e26d300eae7e89fe9b3d96fd67a92c8b8bd659..7e97544e6d16ab9be7cff03eee237abf71de53f9 100644
--- a/layouts/partials/blocks/templates/video/youtube.html
+++ b/layouts/partials/blocks/templates/video/youtube.html
@@ -2,6 +2,5 @@
   class="youtube"
   src="https://www.youtube.com/embed/{{ .id }}"
   title="{{ .title }}"
-  frameborder="0"
   loading="lazy">
 </iframe>
diff --git a/layouts/partials/blocks/title.html b/layouts/partials/blocks/title.html
deleted file mode 100644
index 9169f387da5c570e53cc376e3821233fc9914dc4..0000000000000000000000000000000000000000
--- a/layouts/partials/blocks/title.html
+++ /dev/null
@@ -1,23 +0,0 @@
-{{- if .title }}
-  {{- if ne .context.Type "programs" }}
-    <h2>
-      {{- if .link -}}
-        <a href="{{ .link }}">
-      {{- end -}}
-      {{ partial "PrepareHTML" .title }}
-      {{- if .link -}}
-        </a>
-      {{- end -}}
-    </h2>
-  {{ else }}
-    <h3>
-      {{- if .link -}}
-        <a href="{{ .link }}">
-      {{- end -}}
-      {{ partial "PrepareHTML" .title }}
-      {{- if .link -}}
-        </a>
-      {{- end -}}
-    </h3>
-  {{ end -}}
-{{ end -}}
\ No newline at end of file
diff --git a/layouts/partials/blocks/title_with_link.html b/layouts/partials/blocks/title_with_link.html
new file mode 100644
index 0000000000000000000000000000000000000000..6fd35b2f80587fe0af8d62d0c0fa845fd1ee3622
--- /dev/null
+++ b/layouts/partials/blocks/title_with_link.html
@@ -0,0 +1,11 @@
+{{- if .title }}
+  <h2>
+    {{- if .link -}}
+      <a href="{{ .link }}">
+    {{- end -}}
+    {{ partial "PrepareHTML" .title }}
+    {{- if .link -}}
+      </a>
+    {{- end -}}
+  </h2>
+{{ end -}}
\ No newline at end of file
diff --git a/layouts/partials/categories/category.html b/layouts/partials/categories/category.html
index e640a4b242836f8f0d22708096e56f4b8d1262b2..2aa2d521d8a843175ae8ea879b3212fd770a1a76 100644
--- a/layouts/partials/categories/category.html
+++ b/layouts/partials/categories/category.html
@@ -1,15 +1 @@
 <a href="{{ .Permalink }}" class="title" aria-label="{{ i18n "commons.more_aria" (dict "Title" .Title) }}">{{ partial "PrepareHTML" .Title }}</a>
-<div class="media">
-  {{- if .Params.image -}}
-    {{- partial "commons/image.html"
-          (dict
-            "image"    .Params.image
-            "alt"      .Title
-            "mobile"   "351x291"
-            "tablet"   "334x167"
-            "desktop"  "634x317"
-          ) -}}
-  {{- else -}}
-    {{- partial "commons/image-default.html" (dict "class" "img-fluid") -}}
-  {{- end -}}
-</div>
diff --git a/layouts/partials/categories/chapo.html b/layouts/partials/categories/chapo.html
deleted file mode 100644
index 4117ac68595d2f5ffaf25d0f39e028072afdbaab..0000000000000000000000000000000000000000
--- a/layouts/partials/categories/chapo.html
+++ /dev/null
@@ -1 +0,0 @@
-{{- partial "commons/chapo.html" . -}}
diff --git a/layouts/partials/categories/hero-list.html b/layouts/partials/categories/hero-list.html
index 0a48273d269ebe615febe47fa9fec8999ef76c53..4cb482eb1016eae37cd284843efa2518fbe0ffee 100644
--- a/layouts/partials/categories/hero-list.html
+++ b/layouts/partials/categories/hero-list.html
@@ -1,5 +1,6 @@
 {{- partial "header/hero.html"
       (dict
-        "title" .Title
-        "context" .
+        "title"    .Title
+        "sizes"    site.Params.image_sizes.sections.categories.hero
+        "context"  .
       ) -}}
diff --git a/layouts/partials/categories/hero-term.html b/layouts/partials/categories/hero-term.html
index 0a48273d269ebe615febe47fa9fec8999ef76c53..f3573430e6a73ed3f3a50e826644a774208096aa 100644
--- a/layouts/partials/categories/hero-term.html
+++ b/layouts/partials/categories/hero-term.html
@@ -1,5 +1,7 @@
 {{- partial "header/hero.html"
-      (dict
-        "title" .Title
-        "context" .
-      ) -}}
+    (dict
+      "title" .Title
+      "image" .Params.image
+      "sizes"    site.Params.image_sizes.sections.categories.hero_term
+      "context" .
+    ) -}}
diff --git a/layouts/partials/categories/summary.html b/layouts/partials/categories/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..4ed5a570f5d60bc07d29393efb221e5fa06a7b8b
--- /dev/null
+++ b/layouts/partials/categories/summary.html
@@ -0,0 +1 @@
+{{- partial "commons/summary.html" . -}}
diff --git a/layouts/partials/commons/chapo.html b/layouts/partials/commons/chapo.html
deleted file mode 100644
index a2775efa5cb90e9c92841f73f8633401fc375b6e..0000000000000000000000000000000000000000
--- a/layouts/partials/commons/chapo.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{- if (partial "GetTextFromHTML" .) -}}
-  <p class="lead">
-    {{ partial "PrepareHTML" . }}
-  </p>
-{{ end }}
diff --git a/layouts/partials/commons/image-default.html b/layouts/partials/commons/image-default.html
index dc08e99b28680276be5fdf7ad964bf22b3a5290f..014f0eb47a2a95d79832653f25c60d2645eb6360 100644
--- a/layouts/partials/commons/image-default.html
+++ b/layouts/partials/commons/image-default.html
@@ -1,4 +1,4 @@
-{{ if os.FileExists "static/assets/images/default.png" }}
+{{- if os.FileExists "static/assets/images/default.png" -}}
   {{ $file := "/assets/images/default.png" }}
   {{ $fileDimensions := partial "GetImageDimensions" (dict "context" . "file" $file "static" true) }}
   {{- $lazy := default true .lazy -}}
@@ -14,4 +14,4 @@
     {{- if .class }} class="{{ .class }}"{{- end -}}
     {{- if $lazy }} loading="lazy"{{- end -}}
     >
-{{ end }}
+{{- end -}}
diff --git a/layouts/partials/commons/image.html b/layouts/partials/commons/image.html
index 8c43d6fc9b414cca23afa6632e812fdfdf6ebbe4..02fcadf3d8e4f14d8311cabd41753f31ffff10a4 100644
--- a/layouts/partials/commons/image.html
+++ b/layouts/partials/commons/image.html
@@ -24,7 +24,16 @@
     {{- if .crop -}}
       {{- $crop = true -}}
     {{- end -}}
-    <picture>
+    {{ $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" -}}
 
@@ -39,32 +48,32 @@
 
       {{- else -}}
 
-        {{ with .desktop -}}
+        {{ 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 -}}
+        {{ 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 -}}
+        {{ 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">
         {{- end }}
-        {{ with .desktop -}}
+        {{ 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 -}}
+        {{ 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)">
         {{- end }}
-        {{ with .mobile -}}
+        {{ with $mobile -}}
         <source srcset="{{ partial "GetImageUrl" (dict "url" $url "size" . "crop" $crop ) }},
                         {{ partial "GetImageUrl" (dict "url" $url "size" . "scale" 2 "crop" $crop) }} 2x">
         {{- end }}
diff --git a/layouts/partials/commons/menu.html b/layouts/partials/commons/menu.html
index b52bcb68a692fd48f1b1ef92a39571ea86c4703e..34174849906e043685fb9b70e9f06fa0a4bc4228 100644
--- a/layouts/partials/commons/menu.html
+++ b/layouts/partials/commons/menu.html
@@ -35,7 +35,7 @@
       {{- if ne .kind "blank" -}}
         <a href="{{ .target }}"{{ if ne $linkClass ""}} class="{{ $linkClass }}"{{ end }} {{ safeHTMLAttr $attr }} {{ safeHTMLAttr $attr_title }}>{{ .title }}</a>
       {{- else -}}
-        <span class="{{ if ne $linkClass ""}} {{ $linkClass }}{{ end }}{{ if gt .level 1 }} disabled{{ end }}"{{ safeHTMLAttr $attr }}>{{ .title }}</span>
+        <span class="{{ if ne $linkClass ""}} {{ $linkClass }}{{ end }}{{ if gt .level 1 }} disabled{{ end }}" {{ safeHTMLAttr $attr }}>{{ .title }}</span>
       {{- end -}}
       {{- if ne $stop $level -}}
         {{- if $hasDropdown }}
diff --git a/layouts/partials/commons/pagination.html b/layouts/partials/commons/pagination.html
index 05feef299621b654acf17021f1691a63f9339b63..8769cb92df6e931c4cf8f73d0a58a621b134f5a1 100644
--- a/layouts/partials/commons/pagination.html
+++ b/layouts/partials/commons/pagination.html
@@ -14,7 +14,7 @@
 
 <!-- If there's more than one page. -->
 {{- if gt $paginator.TotalPages 1 -}}
-<nav role="navigation" aria-label="{{ i18n "commons.pagination.label" }}">
+<nav aria-label="{{ i18n "commons.pagination.label" }}">
   <ul class="pagination">
 
     <!-- First page. -->
diff --git a/layouts/partials/commons/summary.html b/layouts/partials/commons/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..ba373dae0ab485522d315405e034689c36c3c5c1
--- /dev/null
+++ b/layouts/partials/commons/summary.html
@@ -0,0 +1,24 @@
+{{- $text := (partial "GetTextFromHTML" .context.Params.summary) -}}
+
+{{- if $text -}}
+
+  {{- if .block_wrapped -}}
+  <section class="block block-summary">
+    <div class="container">
+      <div class="block-content">
+  {{- else if .with_container -}}
+  <div class="container">
+  {{- end -}}
+
+  <p class="lead" role="heading" aria-level="2">
+    {{ partial "PrepareText" .context.Params.summary }}
+  </p>
+
+  {{- if .block_wrapped -}}
+      </div>
+    </div>
+  </section>
+  {{- else if .with_container -}}
+  </div>
+  {{- end -}}
+{{- end -}}
\ No newline at end of file
diff --git a/layouts/partials/diplomas/chapo.html b/layouts/partials/diplomas/chapo.html
deleted file mode 100644
index a2775efa5cb90e9c92841f73f8633401fc375b6e..0000000000000000000000000000000000000000
--- a/layouts/partials/diplomas/chapo.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{- if (partial "GetTextFromHTML" .) -}}
-  <p class="lead">
-    {{ partial "PrepareHTML" . }}
-  </p>
-{{ end }}
diff --git a/layouts/partials/diplomas/diplomas.html b/layouts/partials/diplomas/diplomas.html
index 16cfa85084861e28f87fd8f17bd6b04d021c8f54..1e8ff864fc3c0c38d75b4bc31409615d182e11d3 100644
--- a/layouts/partials/diplomas/diplomas.html
+++ b/layouts/partials/diplomas/diplomas.html
@@ -1,7 +1,3 @@
-{{ $show_programs := false }}
-{{- if .Scratch.Get "show_programs" }}
-  {{ $show_programs = true }}
-{{ end -}}
 <ul class="diplomas">
   {{ range .Paginator.Pages }}
     <li>
@@ -13,15 +9,22 @@
           </span>
         {{ end }}
       </a>
-      {{- if $show_programs }}
+      <div class="content">
+        <div class="description">
+          {{- partial "PrepareText" .Params.summary -}}
+        </div>
+
         <ol class="programs">
           {{- range .Pages -}}
             <li>
-              {{ partial "programs/program.html" . }}
+              <a href="{{ .Permalink }}" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" .Title)) }}">
+                {{- partial "PrepareHTML" .Title -}}
+              </a>
             </li>
           {{- end -}}
         </ol>
-      {{ end -}}
+
+      </div>
     </li>
   {{ end }}
 </ul>
diff --git a/layouts/partials/diplomas/essential.html b/layouts/partials/diplomas/essential.html
index 9b3bd3e017cea389d1580f7c9f482db1eb0ffa54..2f83ffad344502b63f05ccfd6f3402a52f84cdd9 100644
--- a/layouts/partials/diplomas/essential.html
+++ b/layouts/partials/diplomas/essential.html
@@ -1,7 +1,5 @@
 {{- with . -}}
   <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>
diff --git a/layouts/partials/diplomas/hero-list.html b/layouts/partials/diplomas/hero-list.html
index d989fe21231ac352c6f61792a19853092bdff120..b272a7170a4114164a9dc3811d72b2fffd1e0168 100644
--- a/layouts/partials/diplomas/hero-list.html
+++ b/layouts/partials/diplomas/hero-list.html
@@ -1,6 +1,8 @@
 {{- $title := or .Params.header_text .Title -}}
 {{- partial "header/hero.html"
-      (dict
-        "title" $title
-        "context" .
-      ) -}}
+    (dict
+      "title" $title
+      "image" .Params.image
+      "sizes"    site.Params.image_sizes.sections.diplomas.hero
+      "context" .
+    ) -}}
diff --git a/layouts/partials/diplomas/hero-single.html b/layouts/partials/diplomas/hero-single.html
index d989fe21231ac352c6f61792a19853092bdff120..6bd1f4316602337264941abc45c0d527d90bb5aa 100644
--- a/layouts/partials/diplomas/hero-single.html
+++ b/layouts/partials/diplomas/hero-single.html
@@ -1,6 +1,30 @@
 {{- $title := or .Params.header_text .Title -}}
-{{- partial "header/hero.html"
-      (dict
-        "title" $title
-        "context" .
-      ) -}}
+<header class="hero">
+  <div class="container">
+    {{- if .Params.breadcrumb | default true -}}
+      {{ partial "header/breadcrumbs.html" . }}
+    {{- end -}}
+    <div class="content">
+      <h1>{{ partial "PrepareHTML" $title }}</h1>
+      {{- 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>
+</header>
diff --git a/layouts/partials/diplomas/image.html b/layouts/partials/diplomas/image.html
deleted file mode 100644
index 40868e727950f41c194bdb7ed27a4580fd33944d..0000000000000000000000000000000000000000
--- a/layouts/partials/diplomas/image.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{{ if . }}
-  <figure class="featured-image">
-  {{ partial "commons/image.html"
-        (dict
-          "image"    .
-          "mobile"   "351x168"
-          "tablet"   "456x219"
-          "desktop"  "856x410"
-          "itemprop" true
-        )}}
-    {{- if isset . "credit" -}}
-      {{ if partial "GetTextFromHTML" .credit }}
-        <figcaption>{{ partial "PrepareHTML" .credit }}</figcaption>
-      {{ end }}
-    {{- end -}}
-  </figure>
-{{ end }}
diff --git a/layouts/partials/diplomas/summary.html b/layouts/partials/diplomas/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..4ed5a570f5d60bc07d29393efb221e5fa06a7b8b
--- /dev/null
+++ b/layouts/partials/diplomas/summary.html
@@ -0,0 +1 @@
+{{- partial "commons/summary.html" . -}}
diff --git a/layouts/partials/footer/complementary.html b/layouts/partials/footer/complementary.html
deleted file mode 100644
index 7a0045fe88bb8b49de9f9d1202c0176139b8efbc..0000000000000000000000000000000000000000
--- a/layouts/partials/footer/complementary.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div class="complementary">
-  {{ if site.Data.menus.legal }}
-    {{ partial "commons/menu.html"
-          (dict
-            "items"       site.Data.menus.legal
-            "level"       1
-            "class"       "nav-legal"
-          )}}
-  {{ end }}
-  {{ if site.Data.menus.social }}
-    {{ partial "commons/menu.html"
-          (dict
-            "items"       site.Data.menus.social
-            "level"       1
-            "class"       "nav-social"
-          )}}
-  {{ end }}
-</div>
-<div class="credit">
-  {{ partial "footer/credit.html" }}
-</div>
-
diff --git a/layouts/partials/footer/debug.html b/layouts/partials/footer/debug.html
index 517e24acc2bdd17c1432373b862a101f2cc3cacf..ea1cd83f29104ea280b3dc172d83da5346de2bec 100644
--- a/layouts/partials/footer/debug.html
+++ b/layouts/partials/footer/debug.html
@@ -22,9 +22,11 @@
   <div><span>5 (256px) </span></div>
 </div>
 
+<div class="d-cross"></div>
 <style>
   :root {
     --d-grid-margin: 64px;
+    --d-grid-sm-margin: 44px;
   }
   .d-grid {
     bottom: 0;
@@ -107,6 +109,45 @@
   .d-spacing > div:nth-child(6){
     height: var(--spacing5);
   }
+  .d-cross {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 2px;
+    height: 2px;
+    background: gray;
+    display: none;
+    pointer-events: none;
+    z-index: 100;
+  }
+  .d-cross.is-visible {
+    display: block;
+  }
+  .d-cross:after, .d-cross:before{
+    content: '';
+    position: absolute;
+    background: gray;
+    transform: translate(-50%, -50%);
+    width: 1px;
+    height: 1px;
+  }
+  .d-cross:after{
+    height: 200vh;
+  }
+  .d-cross:before{
+    width: 200vw;
+  }
+
+  @media (max-width: 768px) {
+    .d-grid > div {
+      display: none;
+    }
+    .d-grid {
+      border-left: calc(var(--d-grid-sm-margin) / 2) solid fuchsia;
+      border-right: calc(var(--d-grid-sm-margin) / 2) solid fuchsia;
+    }
+  }
+
 </style>
 
 <script>
@@ -114,9 +155,45 @@
     if (e.ctrlKey && e.key === 'g') {
       document.querySelector('.d-grid').classList.toggle('is-visible');
       document.querySelector('.d-spacing').classList.toggle('is-visible');
+      document.querySelector('.d-cross').classList.toggle('is-visible');
     }
     if (e.ctrlKey && e.key === 'w') {
       document.body.classList.toggle('full-width');
     }
   });
+
+  window.addEventListener('pointermove', e => {
+    document.querySelector('.d-cross').style.left = e.clientX + "px";
+    document.querySelector('.d-cross').style.top = e.clientY + "px";
+  });
+
+  document.querySelectorAll('img').forEach(img => {
+    img.addEventListener('click', e => {
+      if (e.altKey) {
+        e.preventDefault()
+        e.stopImmediatePropagation()
+        responsiveImageDebugOutput(img)
+      }
+    })
+  })
+
+  function responsiveImageDebugOutput(img) {
+    if (!img) {
+      throw new TypeError("Expected an image node. Got none.");
+    }
+    const listener = function () {
+      const pixelRatio = window.devicePixelRatio > 1 ? 2 : 1;
+      const dimensionWidth = img.naturalWidth * pixelRatio;
+      const dimensionHeight = img.naturalHeight * pixelRatio;
+      console.log(`
+        -------------------------
+        Rendered size: ${img.width}x${img.height}
+        Intrinsic size: ${dimensionWidth}x${dimensionHeight}
+        Device Pixel Ratio: ${window.devicePixelRatio}
+        -------------------------
+      `);
+    };
+    if (img.complete) listener();
+    //img.addEventListener('load', listener);
+  }
 </script>
\ No newline at end of file
diff --git a/layouts/partials/footer/footer-expand.html b/layouts/partials/footer/footer-expand.html
deleted file mode 100644
index 1552497997a03637e3c404a7ef5356d8b956bc97..0000000000000000000000000000000000000000
--- a/layouts/partials/footer/footer-expand.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<div class="content">
-  <div>
-    {{ partial "footer/logo.html" }}
-  </div>
-  <div>
-    {{ partial "footer/site.html" }}
-  </div>
-</div>
-
-{{ if site.Data.menus.primary }}
-  <nav role="navigation" aria-label="{{ i18n "commons.menu.main" }}">
-    {{ partial "commons/menu.html"
-          (dict
-            "items"       site.Data.menus.primary
-            "level"       1
-            "class"       "nav-levels"
-          )}}
-  </nav>
-{{ end }}
-
-{{ partial "footer/complementary.html" }}
diff --git a/layouts/partials/footer/footer-simple.html b/layouts/partials/footer/footer-simple.html
index d772fe82d85a605ba662e87d9da9032620a901a4..01a5b6e083a726ef62af92d8bf930c8fa19bd452 100644
--- a/layouts/partials/footer/footer-simple.html
+++ b/layouts/partials/footer/footer-simple.html
@@ -1,12 +1,16 @@
-<div class="footer-logo">
-  {{ partial "footer/logo.html" }}
+<div class="container">
+  <div class="footer-logo">
+    {{ partial "footer/logo.html" }}
+  </div>
+  <div class="footer-site">
+    {{ partial "footer/site.html" }}
+  </div>
 </div>
-<div class="footer-site">
-  {{ partial "footer/site.html" }}
-</div>
-<div class="footer-social">
-  {{ partial "footer/social.html" }}
-</div>
-<div class="footer-legals">
-  {{ partial "footer/legals.html" }}
+<div class="container">
+  <div class="footer-social">
+    {{ partial "footer/social.html" }}
+  </div>
+  <div class="footer-legals">
+    {{ partial "footer/legals.html" }}
+  </div>
 </div>
diff --git a/layouts/partials/footer/footer.html b/layouts/partials/footer/footer.html
index f31398d27de1512028f6abb7748229d5a24ff562..21183ce4fba865f7ba6c361de74049d086968d96 100644
--- a/layouts/partials/footer/footer.html
+++ b/layouts/partials/footer/footer.html
@@ -1,5 +1,3 @@
-<footer role="contentinfo">
-  <div class="container">
-    {{ partial "footer/footer-simple.html" }}
-  </div>
+<footer id="document-footer">
+  {{ partial "footer/footer-simple.html" }}
 </footer>
diff --git a/layouts/partials/footer/logo.html b/layouts/partials/footer/logo.html
index 5cdf05f63c24ff25ca0512af8ad52b448d6d9e98..0e0bead460a7913326d77968ceacbb0a02ce0e50 100644
--- a/layouts/partials/footer/logo.html
+++ b/layouts/partials/footer/logo.html
@@ -1,3 +1,3 @@
-{{ $file := "/assets/images/logo.svg" }}
+{{ $file := site.Params.logo.footer }}
 {{ $fileDimensions := partial "GetImageDimensions" (dict "context" . "file" $file "static" true) }}
 <a class="logo" href="{{ site.BaseURL }}"><img src="{{ $file }}" alt="{{ site.Title }}" height="{{ index $fileDimensions 1 }}" width="{{ index $fileDimensions 0 }}" loading="lazy"></a>
diff --git a/layouts/partials/head/seo.html b/layouts/partials/head/seo.html
index d02403e666966a875b8e92b6ecaf0f1e9da23088..93ad3f2eb3ea8913e27db9c6a28168623771e057 100644
--- a/layouts/partials/head/seo.html
+++ b/layouts/partials/head/seo.html
@@ -3,18 +3,20 @@
   {{- $seoTitle = printf "%s | %s" (chomp (htmlUnescape .Title)) $seoTitle -}}
 {{- end -}}
 {{- $seoDescription := "" -}}
-{{- if .Params.description -}}
-  {{- $seoDescription = partial "PrepareHTML" .Params.description -}}
-{{- else if .Params.description_short -}}
-  {{- $seoDescription = partial "PrepareHTML" .Params.description_short -}}
+{{- if .Params.meta_description -}}
+  {{- $seoDescription = partial "PrepareHTML" .Params.meta_description -}}
+{{- else if .Params.description -}}
+  {{- $seoDescription = partial "PrepareHTML" .Params.description -}} {{/*  LEGACY  */}}
+{{- else if .Params.summary -}}
+  {{- $seoDescription = partial "PrepareText" .Params.summary -}}
 {{- else if .Content -}}
-  {{- $seoDescription = partial "GetTruncateContent" .Content -}}
+  {{- $seoDescription = partial "GetTruncateContent" ( dict "text" .Content ) -}}
 {{- else if .Params.legacy_text -}}
-  {{- $seoDescription = partial "GetTruncateContent" .Params.legacy_text -}}
+  {{- $seoDescription = partial "GetTruncateContent" ( dict "text" .Params.legacy_text ) -}}
 {{- else if .Params.blocks -}}
   {{- range first 1 .Params.blocks -}}
     {{- if .title -}}
-      {{- $seoDescription = partial "GetTruncateContent" .title -}}
+      {{- $seoDescription = partial "GetTruncateContent" ( dict "text" .title ) -}}
     {{- end -}}
   {{- end -}}
 {{- end -}}
diff --git a/layouts/partials/header/breadcrumbs.html b/layouts/partials/header/breadcrumbs.html
index b182270489ef9f36a657f119ec47dcce1aab6c3e..756de5f76b3df253a15d4a65abae11a9db51a9ec 100644
--- a/layouts/partials/header/breadcrumbs.html
+++ b/layouts/partials/header/breadcrumbs.html
@@ -1,4 +1,4 @@
-<nav aria-label="{{ i18n "commons.breadcrumb" }}">
+<nav class="breadcrumb-nav" aria-label="{{ i18n "commons.breadcrumb" }}">
   {{- $path := strings.TrimSuffix "/" .RelPermalink -}}
   {{- $length := len (split $path "/") }}
   <ol itemscope itemtype="https://schema.org/BreadcrumbList" class="breadcrumb">
@@ -8,7 +8,7 @@
                   "p2" . 
                   "path" $path 
                   "position" $length
-                ) }}
+                ) -}}
   </ol>
 </nav>
 
@@ -47,13 +47,13 @@
     {{- end -}}
     {{- $title = chomp $title }}
     <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" class="breadcrumb-item{{- if .active }} active{{ end }}"{{- if .active }} aria-current="page"{{ end }}>
-      {{ if not .active -}}
+      {{- if not .active -}}
         <a itemprop="item" href="{{ .page.Permalink }}">
-      {{- end }}
+      {{- end -}}
         <span itemprop="name">{{- partial "PrepareHTML" $title -}}</span>
-      {{ if not .active -}}
+      {{- if not .active -}}
         </a>
-      {{- end }}
+      {{- end -}}
       <meta itemprop="position" content="{{- .position -}}">
     </li>
   {{- end -}}
diff --git a/layouts/partials/header/header.html b/layouts/partials/header/header.html
index fee3fcf934ca7769be418152d9441ae8610ba8ff..c047b7019fe3ac588a3fb0c3c07a3dd829209c30 100644
--- a/layouts/partials/header/header.html
+++ b/layouts/partials/header/header.html
@@ -1,6 +1,5 @@
-<header role="banner">
-  {{/* navbar class is required for dropdown */}}
-  <nav class="navbar" role="navigation" aria-label="{{ i18n "commons.menu.main" }}">
+<header id="document-header">
+  <nav aria-label="{{ i18n "commons.menu.main" }}">
     <div class="container">
       {{ partial "header/logo.html" }}
       {{ $menu := partial "GetMenu" "primary" }}
diff --git a/layouts/partials/header/hero.html b/layouts/partials/header/hero.html
index bd845e2d7a9275abdee6b8c11d060d6e4ea0b6a5..45be3537a1e573cdda176e5593423074eb0519b7 100644
--- a/layouts/partials/header/hero.html
+++ b/layouts/partials/header/hero.html
@@ -5,27 +5,56 @@
 
 <header class="hero {{ if .image -}}hero--with-image hero--image-{{- $direction -}}{{- end -}}">
   <div class="container">
-    {{- if .breadcrumb | default true -}}
-      {{ partial "header/breadcrumbs.html" .context }}
+    {{- if eq site.Params.breadcrumb.position "hero-start" -}}
+      {{- if .breadcrumb | default true -}}
+        {{ partial "header/breadcrumbs.html" .context }}
+      {{- end -}}
     {{- end -}}
     <div class="content">
-      <h1>{{ partial "PrepareHTML" .title }}</h1>
+      {{- if .subtitle -}}
+        <hgroup>
+          <h1>{{ partial "PrepareHTML" .title }}</h1>
+          <p>{{ partial "PrepareHTML" .subtitle }}</p>
+        </hgroup>
+      {{- else -}}
+        <h1>{{ partial "PrepareHTML" .title }}</h1>
+      {{- end -}}
       {{- if .image }}
         <figure>
-          {{ partial "commons/image.html"
-            (dict
-              "image"    .image
-              "mobile"   "351"
-              "tablet"   "456"
-              "desktop"  "856"
-            ) }}
-          {{ if .image.credit }}
-            <figcaption>
-              {{- partial "PrepareHTML" .image.credit -}}
-            </figcaption>
-          {{ end }}
+          <a class="glightbox"
+            data-glightbox="type: image;{{ if .image.credit }}description: {{ partial "PrepareHTML" .image.credit }}{{ end }}"
+            href="{{ partial "GetLightboxUrl" .image }}"
+            title="{{- i18n "commons.lightbox.link.title" -}}"
+            >
+            {{ partial "commons/image.html"
+              (dict
+                "image"    .image
+                "sizes"    ( .sizes | default site.Params.image_sizes.design_system.hero )
+                "lazy"     false
+              ) }}
+              {{ if .image.credit }}
+                <figcaption tabindex="0">
+                  <p>
+                    {{- partial "GetTextFromHTML" .image.credit -}}
+                  </p>
+                </figcaption>
+              {{ end }}
+          </a>
         </figure>
       {{ end -}}
     </div>
+    {{- if eq site.Params.breadcrumb.position "hero-end" -}}
+      {{- if .breadcrumb | default true -}}
+        {{ partial "header/breadcrumbs.html" .context }}
+      {{- end -}}
+    {{- end -}}
   </div>
 </header>
+
+{{- if eq site.Params.breadcrumb.position "after-hero" -}}
+  {{- if .breadcrumb | default true -}}
+    <div class="container">
+      {{ partial "header/breadcrumbs.html" .context }}
+    </div>
+  {{- end -}}
+{{- end -}}
\ No newline at end of file
diff --git a/layouts/partials/header/logo.html b/layouts/partials/header/logo.html
index 7ce7b481ed349fa8b946e878f6c23c7d29bc2fdc..1f159730e15c03e8d1947682ef9151b84dcfdc52 100644
--- a/layouts/partials/header/logo.html
+++ b/layouts/partials/header/logo.html
@@ -1,3 +1,3 @@
-{{ $file := "/assets/images/logo.svg" }}
+{{ $file := site.Params.logo.header }}
 {{ $fileDimensions := partial "GetImageDimensions" (dict "context" . "file" $file "static" true) }}
 <a class="logo" href="{{ site.BaseURL }}"><img src="{{ $file }}" alt="{{ site.Title }}" height="{{ index $fileDimensions 1 }}" width="{{ index $fileDimensions 0 }}"></a>
diff --git a/layouts/partials/home/hero.html b/layouts/partials/home/hero.html
index 0a012b577b42588e45ff61e2ebd3e56934f77810..0a8f6680f38c164b9adc7f8be15858d7cba30523 100644
--- a/layouts/partials/home/hero.html
+++ b/layouts/partials/home/hero.html
@@ -4,5 +4,6 @@
         "title" $title
         "image" .Params.image
         "breadcrumb" false
+        "sizes" site.Params.image_sizes.sections.home.hero
         "context" .
       )}}
diff --git a/layouts/partials/home/pages.html b/layouts/partials/home/pages.html
deleted file mode 100644
index a927d878de92dc4f9fe56e85e8e9a4aef6a57d74..0000000000000000000000000000000000000000
--- a/layouts/partials/home/pages.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{{ if .children }}
-  <div class="pages">
-    {{ range .children }}
-      {{ if and .target (not (eq .kind "url")) }}
-        {{ $page := partial "GetPageByUrl" .target }}
-        {{ if $page }}
-          <div>
-            {{ $page.Scratch.Set "show_description" true }}
-            {{ partial "pages/page.html" $page }}
-            {{ $page.Scratch.Delete "show_description" }}
-          </div>
-        {{ end }}
-      {{ end }}
-    {{ end }}
-  </div>
-{{ end }}
diff --git a/layouts/partials/home/posts.html b/layouts/partials/home/posts.html
deleted file mode 100644
index 0fe91529fedc3c21834a92d6ac522b839d57949a..0000000000000000000000000000000000000000
--- a/layouts/partials/home/posts.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="posts">
-  {{ range (where site.RegularPages "Type" "posts" | first 6) }}
-    <div>
-      {{ partial "posts/post.html" . }}
-    </div>
-  {{ end }}
-</div>
diff --git a/layouts/partials/home/summary.html b/layouts/partials/home/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..4ed5a570f5d60bc07d29393efb221e5fa06a7b8b
--- /dev/null
+++ b/layouts/partials/home/summary.html
@@ -0,0 +1 @@
+{{- partial "commons/summary.html" . -}}
diff --git a/layouts/partials/home/top.html b/layouts/partials/home/top.html
deleted file mode 100644
index b226d74f7a7e7e064a5e806260e33f3f4988523a..0000000000000000000000000000000000000000
--- a/layouts/partials/home/top.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<div class="top">
-  <h2>
-    {{- $title := partial "PrepareHTML" .title -}}
-    {{ if ne .kind "blank" }}<a href="{{ .target }}" title="{{ i18n "commons.more_aria" (dict "Title" $title) }}">{{ end }}
-      {{- $title -}}
-    {{ if ne .kind "blank" }}</a>{{ end }}
-  </h2>
-  {{ if or (eq .kind "news") (eq .kind "programs") }}
-    <span class="link">{{ i18n "commons.more" }}</span>
-  {{ end }}
-  {{ $page := partial "GetPageByUrl" .target }}
-  {{with $page}}
-    {{ if partial "GetTextFromHTML" .Params.description_short }}
-      <div>
-        <p>{{ partial "GetTruncateContent" .Params.description_short }}</p>
-      </div>
-    {{ end }}
-  {{end}}
-</div>
diff --git a/layouts/partials/home/volumes.html b/layouts/partials/home/volumes.html
deleted file mode 100644
index 223d2e57b940b85072d796c7dd4942321e121348..0000000000000000000000000000000000000000
--- a/layouts/partials/home/volumes.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{{ if .Site.Taxonomies.volumes }}
-  <div class="volumes">
-    {{ range .Site.Taxonomies.volumes }}
-      <div>
-        {{ partial "volumes/volume.html" .Page }}
-      </div>
-    {{ end }}
-  </div>
-{{ end }}
diff --git a/layouts/partials/hooks/before-document-content-end.html b/layouts/partials/hooks/before-document-content-end.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/layouts/partials/organizations/contact-details.html b/layouts/partials/organizations/contact-details.html
new file mode 100644
index 0000000000000000000000000000000000000000..66f8a713c0f8790b16495e421bf9d52dfa707e16
--- /dev/null
+++ b/layouts/partials/organizations/contact-details.html
@@ -0,0 +1,84 @@
+{{ with .Params.contact_details }}
+  {{ if or .website .linkedin .twitter .email .address .city .zipcode .country .phone }}
+    <div class="contacts-details">
+      {{ if or .website .linkedin .twitter .email }}
+        <ul>
+          {{ with .website }}
+            <li>
+              <span>{{ i18n "commons.contact.website" }}</span>
+              <a href="{{ chomp .value }}" target="_blank" rel="noopener" itemprop="url">{{ chomp .label }}</a>
+            </li>
+          {{ end }}
+
+          {{ with .linkedin }}
+            <li>
+              <span>LinkedIn</span>
+              <a href="{{ chomp .value }}" target="_blank" rel="noopener" itemprop="url">{{ chomp .label }}</a>
+            </li>
+          {{ end }}
+        
+          {{ with .mastodon }}
+            <li>
+              <span>Mastodon</span>
+              <a href="{{ chomp .value }}" target="_blank" rel="noopener" itemprop="url">{{ chomp .label }}</a>
+            </li>
+          {{ end }}
+
+          {{ with .twitter }}
+            <li>
+              <span>Twitter</span>
+              <a href="{{ chomp .value }}" target="_blank" rel="noopener" itemprop="url">{{ chomp .label }}</a>
+            </li>
+          {{ end }}
+
+          {{ with .email }}
+            <li>
+              <span>{{ i18n "commons.contact.email" }}</span>
+              <a href="{{ chomp .value }}" itemprop="email">{{ chomp .label }}</a>
+            </li>
+          {{ end }}
+        </ul>
+      {{ end }}
+
+      {{ if or .address .city .zipcode .country .phone }}
+        <ul>
+          {{ if or .address .city .zipcode .country }}
+            <li>
+              <span>{{ i18n "commons.contact.address" }}</span>
+              <address itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
+                {{ with .address }}
+                  <span itemprop="streetAddress">
+                    {{ partial "PrepareHTML" .label }},
+                  </span>
+                  <br>
+                {{ end }}
+                {{ with .city }}
+                  <span itemprop="addressLocality">
+                    {{ partial "PrepareHTML" .label }}
+                  </span>
+                {{ end }}
+                {{ with .zipcode }}
+                  <span itemprop="postalCode">
+                    {{ partial "PrepareHTML" .label }}
+                  </span>
+                {{ end }}
+                {{ with .country }}
+                  <span itemprop="postalCode">
+                    {{ partial "PrepareHTML" .label }}
+                  </span>
+                {{ end }}
+              </address>
+            </li>
+          {{ end }}
+
+          {{ with .phone }}
+            <li>
+              <span>{{ i18n "commons.contact.phone" }}</span>
+              <a href="{{ .value }}" itemprop="telephone">{{ .label }}</a>
+            </li>
+          {{ end }}
+        </ul>
+      {{ end }}
+    </div>
+  {{ end }}
+{{ end }}
diff --git a/layouts/partials/organizations/contacts.html b/layouts/partials/organizations/contacts.html
deleted file mode 100644
index c2a6e29c887932270f8ed021b4032820f1eabaf2..0000000000000000000000000000000000000000
--- a/layouts/partials/organizations/contacts.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<ul class="contacts-list">
-  {{ if .Params.linkedin }}
-    <li>
-      <span>Linkedin</span>
-      <a href="mailto:{{ .Params.linkedin }}" target="_blank" rel="noopener" itemprop="url">{{ .Params.linkedin }}</a>
-    </li>
-  {{ end }}
-
-  {{ if .Params.twitter }}
-    <li>
-      <span>Twitter</span>
-      <a href="https://twitter.com/{{ .Params.twitter }}" target="_blank" rel="noopener" itemprop="url">{{ .Params.twitter }}</a>
-    </li>
-  {{ end }}
-
-  {{ if .Params.website }}
-    <li>
-      <span>{{ i18n "commons.contact.website" }}</span>
-      <a href="{{ .Params.website }}" target="_blank" rel="noopener" itemprop="url">{{ .Params.website }}</a>
-    </li>
-  {{ end }}
-
-  {{ if .Params.email }}
-    <li>
-      <span>{{ i18n "commons.contact.email" }}</span>
-      <a href="mailto:{{ .Params.email }}" itemprop="email">{{ .Params.email }}</a>
-    </li>
-  {{ end }}
-
-  {{ if .Params.phone }}
-    <li>
-      <span>{{ i18n "commons.contact.phone" }}</span>
-      <a href="tel:{{ .Params.phone }}" itemprop="telephone">{{ .Params.phone }}</a>
-    </li>
-  {{ end }}
-</ul>
diff --git a/layouts/partials/organizations/content.html b/layouts/partials/organizations/content.html
deleted file mode 100644
index 106b53e6f958c096f4e17344b5313686758b18e9..0000000000000000000000000000000000000000
--- a/layouts/partials/organizations/content.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{{ if (partial "GetTextFromHTML" .Content) }}
-  <div itemprop="articleBody">
-  {{
-    partial "PrepareHTML" (
-      partial "H2AddId" .Content
-    )
-  }}
-  </div>
-{{ end }}
diff --git a/layouts/partials/organizations/hero.html b/layouts/partials/organizations/hero.html
index 3454341cfbf2cdff26319d8e3d29f12bbfe4600f..5013a73d83be7f66e8f5928ebfdbe341f6e340e7 100644
--- a/layouts/partials/organizations/hero.html
+++ b/layouts/partials/organizations/hero.html
@@ -2,5 +2,6 @@
       (dict
         "title" .Title
         "image" .Params.image
+        "sizes" site.Params.image_sizes.sections.organizations.hero
         "context" .
       ) -}}
diff --git a/layouts/partials/organizations/logo.html b/layouts/partials/organizations/logo.html
index 01d6597f2271966890b773534ec2192c03a243b1..586ead648b88f877a43f76e02e459d2a5e8db316 100644
--- a/layouts/partials/organizations/logo.html
+++ b/layouts/partials/organizations/logo.html
@@ -1,12 +1,14 @@
 {{- if .Params.logo -}}
-  <div class="media">
+  {{ $logo_index := "logo" }}
+  {{ if site.Params.organizations.dark_logo_background }}
+    {{ $logo_index = "logo_on_dark_background" }}
+  {{ end }}
+  <figure class="logo">
     {{- partial "commons/image.html"
-          (dict
-            "image"    .Params.logo
-            "alt"      .Title
-            "mobile"   "331"
-            "tablet"   "196"
-            "desktop"  "396"
-          ) -}}
-  </div>
+        (dict
+          "image"    (index .Params $logo_index)
+          "alt"      .Title
+          "sizes"    site.Params.image_sizes.sections.organizations.logo
+        ) -}}
+  </figure>
 {{- end -}}
diff --git a/layouts/partials/organizations/organization.html b/layouts/partials/organizations/organization.html
index 0891de6d8f82585dbc3afa5aa769041fd08a0d5d..a2d88bc418f25facee2ef920df1d9a3768f35297 100644
--- a/layouts/partials/organizations/organization.html
+++ b/layouts/partials/organizations/organization.html
@@ -1,17 +1,23 @@
 <article class="organization">
   <div>
     {{ $title := partial "PrepareHTML" .Title }}
-    <h1><a href="{{ .Permalink }}" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">{{ $title }}</a></h1>
+    <h2>
+      <a href="{{ .Permalink }}" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">
+        {{ $title }}
+      </a>
+    </h2>
   </div>
   <div class="media">
     {{- if .Params.logo -}}
+    {{ $logo_index := "logo" }}
+    {{ if site.Params.organizations.dark_logo_background }}
+      {{ $logo_index = "logo_on_dark_background" }}
+    {{ end }}
       {{- partial "commons/image.html"
             (dict
-              "image"    .Params.logo
+              "image"    (index .Params  $logo_index)
               "alt"      $title
-              "mobile"   "144"
-              "tablet"   "196"
-              "desktop"  "176"
+              "sizes"    site.Params.image_sizes.sections.organizations.item
             ) -}}
     {{- end -}}
   </div>
diff --git a/layouts/partials/organizations/summary.html b/layouts/partials/organizations/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..4ed5a570f5d60bc07d29393efb221e5fa06a7b8b
--- /dev/null
+++ b/layouts/partials/organizations/summary.html
@@ -0,0 +1 @@
+{{- partial "commons/summary.html" . -}}
diff --git a/layouts/partials/pages/chapo.html b/layouts/partials/pages/chapo.html
deleted file mode 100644
index a2775efa5cb90e9c92841f73f8633401fc375b6e..0000000000000000000000000000000000000000
--- a/layouts/partials/pages/chapo.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{- if (partial "GetTextFromHTML" .) -}}
-  <p class="lead">
-    {{ partial "PrepareHTML" . }}
-  </p>
-{{ end }}
diff --git a/layouts/partials/pages/children.html b/layouts/partials/pages/children.html
index a028a1c42d7d0178c2ae5ce0d13244de60a74e4a..891d769c66d1ea8cee0da2a22400ff511fc94840 100644
--- a/layouts/partials/pages/children.html
+++ b/layouts/partials/pages/children.html
@@ -6,9 +6,7 @@
           <div>
             {{ $page := partial "GetPageByUrl" . }}
             {{ with $page }}
-              {{ .Scratch.Set "show_description" true }}
               {{ partial "pages/page.html" . }}
-              {{ .Scratch.Delete "show_description" }}
             {{ end }}
           </div>
         {{ end }}
diff --git a/layouts/partials/pages/hero.html b/layouts/partials/pages/hero.html
index 8e7e675c055dce99ef4dda14b248d20db258f721..20039accd5cbb1a950cbf90da84190a01dfbb337 100644
--- a/layouts/partials/pages/hero.html
+++ b/layouts/partials/pages/hero.html
@@ -3,5 +3,6 @@
       (dict
         "title" $title
         "image" .Params.image
+        "sizes" site.Params.image_sizes.sections.pages.hero
         "context" .
       ) -}}
diff --git a/layouts/partials/pages/page-media.html b/layouts/partials/pages/page-media.html
index 989f6d411d2b0e3601adbc9e557cb952df086dc5..1f6e6e063d9798a1990fd30e8ff43ace948b1847 100644
--- a/layouts/partials/pages/page-media.html
+++ b/layouts/partials/pages/page-media.html
@@ -3,9 +3,7 @@
     {{- partial "commons/image.html"
           (dict
             "image"    .Params.image
-            "mobile"   "350x350"
-            "tablet"   "400x400"
-            "desktop"  "900x900"
+            "sizes"    site.Params.image_sizes.sections.pages.item
           ) -}}
   {{- else -}}
     {{- partial "commons/image-default.html" -}}
diff --git a/layouts/partials/pages/page.html b/layouts/partials/pages/page.html
index 95cb478b218a6bbbf97212a9cc5b820feeb3d910..d3ecfcf867cfed43f13ebcba2891b9fa42c25f64 100644
--- a/layouts/partials/pages/page.html
+++ b/layouts/partials/pages/page.html
@@ -16,17 +16,8 @@
         {{- partial "PrepareHTML" .Title -}}
       </a>
     {{- partial "PrepareHTML" (printf "</%s>" $heading) -}}
-
-    {{- if .Scratch.Get "show_description" }}
-      {{- if .Params.description_short }}
-        <p>{{ partial "PrepareHTML" .Params.description_short }}</p>
-      {{ end -}}
-    {{ end -}}
-    {{- if .Scratch.Get "show_more" }}
-      <p class="more">{{- i18n "commons.more" -}}</p>
+    {{- if .Params.summary }}
+      <p>{{ partial "PrepareText" .Params.summary }}</p>
     {{ end -}}
   </div>
-  {{ if .Scratch.Get "show_image" }}
-    {{- partial "pages/page-media.html" . -}}
-  {{- end }}
 </article>
diff --git a/layouts/partials/pages/pages.html b/layouts/partials/pages/pages.html
index 48040bf6777cdc1e635d4c88127a1208fb7ce9ec..f78350bb1b5a0bba10f50f2e02f99cbbdb060dbd 100644
--- a/layouts/partials/pages/pages.html
+++ b/layouts/partials/pages/pages.html
@@ -1,9 +1,7 @@
 <div class="pages">
   {{ range .Paginator.Pages }}
     <div>
-      {{ .Scratch.Set "show_description" true }}
       {{ partial "pages/page.html" . }}
-      {{ .Scratch.Delete "show_description" }}
     </div>
   {{ end }}
 </div>
diff --git a/layouts/partials/pages/summary.html b/layouts/partials/pages/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..4ed5a570f5d60bc07d29393efb221e5fa06a7b8b
--- /dev/null
+++ b/layouts/partials/pages/summary.html
@@ -0,0 +1 @@
+{{- partial "commons/summary.html" . -}}
diff --git a/layouts/partials/pages/toc.html b/layouts/partials/pages/toc.html
index 581af8846c2feaa839413c959bf766980d9c1a85..41e837c2dc92fc1a508b7d459763c4bb1d03fb96 100644
--- a/layouts/partials/pages/toc.html
+++ b/layouts/partials/pages/toc.html
@@ -1,73 +1,40 @@
-{{- $show_aside := false -}}
+<nav class="toc toc-pages" id="nav-toc" aria-labelledby="toc-title">
+  <ol>
 
-{{- $has_blocks := false -}}
-{{- range .context.Params.blocks -}}
-  {{- $has_blocks = true -}}
-  {{- if .title -}}
-    {{- $show_aside = true -}}
-  {{- end -}}
-{{- end -}}
+    {{- if .context.Params.blocks -}}
 
-{{- if .context.Pages -}}
-  {{- if eq $has_blocks false -}}
-    {{- $show_aside = true -}}
-  {{- end -}}
-{{- end -}}
+      {{- partial "blocks/toc.html" .context.Params.blocks -}}
 
-{{- if .context.Content -}}
-  {{- if eq $has_blocks false -}}
-    {{- $show_aside = true -}}
-  {{- end -}}
-{{- end -}}
+    {{- else -}}
 
-{{- if .category -}}
-  {{- if eq $has_blocks false -}}
-    {{- $show_aside = true -}}
-  {{- end -}}
-{{- end -}}
+      {{/* TODO: Delete it */}}
+      {{ $h2s := partial "H2Extract" .context.Content }}
+      {{- if and (not $h2s) (partial "GetTextFromHTML" .context.Content) }}
+        <li>
+          <a href="#page-informations">{{ i18n "pages.informations" }}</a>
+        </li>
+      {{ end -}}
 
-{{- if $show_aside }}
-  <nav class="toc toc-pages" id="nav-toc" aria-labelledby="toc-title">
-    <ol>
+      {{- range $index, $h2 := $h2s }}
+        <li>
+          <a href="#page-h2-{{$index}}">{{ plainify $h2 }}</a>
+        </li>
+      {{ end -}}
 
-      {{- if .context.Params.blocks -}}
+      {{- if .context.Pages }}
+        <li>
+          <a href="#page-children">{{ i18n "pages.details" }}</a>
+        </li>
+      {{ end -}}
 
-        {{- partial "blocks/toc.html" .context.Params.blocks -}}
+      {{- if .category.Pages }}
+        <li>
+          <a href="#page-posts">{{ i18n "pages.posts" }}</a>
+        </li>
+      {{ end -}}
 
-      {{- else -}}
-
-        {{/* TODO: Delete it */}}
-        {{ $h2s := partial "H2Extract" .context.Content }}
-        {{- if and (not $h2s) (partial "GetTextFromHTML" .context.Content) }}
-          <li>
-            <a href="#page-informations">{{ i18n "pages.informations" }}</a>
-          </li>
-        {{ end -}}
-
-        {{- range $index, $h2 := $h2s }}
-          <li>
-            <a href="#page-h2-{{$index}}">{{ plainify $h2 }}</a>
-          </li>
-        {{ end -}}
-
-        {{- if .context.Pages }}
-          <li>
-            <a href="#page-children">{{ i18n "pages.details" }}</a>
-          </li>
-        {{ end -}}
-
-        {{- if .category.Pages }}
-          <li>
-            <a href="#page-posts">{{ i18n "pages.posts" }}</a>
-          </li>
-        {{ end -}}
-
-      {{- end -}}
-
-    </ol>
-
-  </nav>
-
-{{ end -}}
+    {{- end -}}
 
+  </ol>
 
+</nav>
diff --git a/layouts/partials/persons/chapo.html b/layouts/partials/persons/chapo.html
deleted file mode 100644
index a2775efa5cb90e9c92841f73f8633401fc375b6e..0000000000000000000000000000000000000000
--- a/layouts/partials/persons/chapo.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{- if (partial "GetTextFromHTML" .) -}}
-  <p class="lead">
-    {{ partial "PrepareHTML" . }}
-  </p>
-{{ end }}
diff --git a/layouts/partials/persons/contact-details.html b/layouts/partials/persons/contact-details.html
new file mode 100644
index 0000000000000000000000000000000000000000..134e1207be396c9d230d4276afa20b452a05f030
--- /dev/null
+++ b/layouts/partials/persons/contact-details.html
@@ -0,0 +1,51 @@
+{{ with .Params.contact_details }}
+  {{ if or .website .linkedin .twitter .email .phone }}
+    <div class="contacts-details contacts-details--person">
+      {{ if or .website .linkedin .twitter .email .phone }}
+        <ul>
+          {{ with .website }}
+            <li>
+              <span>{{ i18n "commons.contact.website" }}</span>
+              <a href="{{ chomp .value }}" target="_blank" rel="noopener" itemprop="url">{{ chomp .label }}</a>
+            </li>
+          {{ end }}
+
+          {{ with .linkedin }}
+            <li>
+              <span>LinkedIn</span>
+              <a href="{{ chomp .value }}" target="_blank" rel="noopener" itemprop="url">{{ chomp .label }}</a>
+            </li>
+          {{ end }}
+
+          {{ with .mastodon }}
+            <li>
+              <span>Mastodon</span>
+              <a href="{{ chomp .value }}" target="_blank" rel="noopener" itemprop="url">{{ chomp .label }}</a>
+            </li>
+          {{ end }}
+
+          {{ with .twitter }}
+            <li>
+              <span>Twitter</span>
+              <a href="{{ chomp .value }}" target="_blank" rel="noopener" itemprop="url">{{ chomp .label }}</a>
+            </li>
+          {{ end }}
+
+          {{ with .email }}
+            <li>
+              <span>{{ i18n "commons.contact.email" }}</span>
+              <a href="{{ chomp .value }}" itemprop="email">{{ chomp .label }}</a>
+            </li>
+          {{ end }}
+
+          {{ with .phone }}
+            <li>
+              <span>{{ i18n "commons.contact.phone" }}</span>
+              <a href="{{ .value }}" itemprop="telephone">{{ .label }}</a>
+            </li>
+          {{ end }}
+        </ul>
+      {{ end }}
+    </div>
+  {{ end }}
+{{ end }}
diff --git a/layouts/partials/persons/hero-single.html b/layouts/partials/persons/hero-single.html
index 059d3e3d33d890fca775db786af6b12624d05784..37e4352768ca477695b29b538623fe1ef2058ffa 100644
--- a/layouts/partials/persons/hero-single.html
+++ b/layouts/partials/persons/hero-single.html
@@ -1,20 +1,29 @@
 <header class="hero">
   <div class="container">
-    {{ partial "header/breadcrumbs.html" . }}
+    {{- if eq site.Params.breadcrumb.position "hero-start" -}}
+      {{ partial "header/breadcrumbs.html" . }}
+    {{- end -}}
     <div class="content">
       <h1>{{ safeHTML (partial "CorrectPunctuation" .Title) }}</h1>
       {{ if .Params.image }}
         <div class="avatar">
           {{ partial "commons/image.html"
-                (dict
-                  "image"    .Params.image
-                  "class"    "img-fluid"
-                  "mobile"   "202x202"
-                  "tablet"   "192x192"
-                  "desktop"  "400x400"
-                )}}
+              (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 eq site.Params.breadcrumb.position "after-hero" -}}
+  <div class="container">
+    {{ partial "header/breadcrumbs.html" . }}
+  </div>
+{{- end -}}
\ No newline at end of file
diff --git a/layouts/partials/persons/hero.html b/layouts/partials/persons/hero.html
index 8e7e675c055dce99ef4dda14b248d20db258f721..c346f266db90bced536227bcca93244d15663127 100644
--- a/layouts/partials/persons/hero.html
+++ b/layouts/partials/persons/hero.html
@@ -4,4 +4,5 @@
         "title" $title
         "image" .Params.image
         "context" .
+        "sizes" site.Params.image_sizes.sections.persons.hero
       ) -}}
diff --git a/layouts/partials/persons/image.html b/layouts/partials/persons/image.html
deleted file mode 100644
index c31b7b9b8812fd227eb3ee1506d52fc3aa769528..0000000000000000000000000000000000000000
--- a/layouts/partials/persons/image.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{{ if . }}
-  <figure class="featured-image">
-  {{ partial "commons/image.html"
-        (dict
-          "image"    .
-          "mobile"   "351x168"
-          "tablet"   "456x219"
-          "desktop"  "1232x450"
-          "itemprop" true
-        )}}
-    {{- if isset . "credit" -}}
-      {{ if partial "GetTextFromHTML" .credit }}
-        <figcaption>{{ partial "PrepareHTML" .credit }}</figcaption>
-      {{ end }}
-    {{- end -}}
-  </figure>
-{{ end }}
diff --git a/layouts/partials/persons/list-item.html b/layouts/partials/persons/list-item.html
index f6e349ec569733faddc853b587e1bc0a7e56589a..8f004ecad97f163238cfcac35d618fd13c9a17e9 100644
--- a/layouts/partials/persons/list-item.html
+++ b/layouts/partials/persons/list-item.html
@@ -1,6 +1,6 @@
 <li itemscope itemtype="https://schema.org/Person">
   <p itemprop="name"><a href="{{ .Permalink }}">{{ partial "PrepareHTML" .Title }}</a></p>
-  {{- if partial "GetTextFromHTML" .Params.description_short }}
-    <p itemprop="jobTitle">{{- partial "PrepareHTML" .Params.description_short -}}</p>
+  {{- if partial "GetTextFromHTML" .Params.summary }}
+    <p itemprop="jobTitle">{{- partial "PrepareText" .Params.summary -}}</p>
   {{ end -}}
 </li>
\ No newline at end of file
diff --git a/layouts/partials/persons/list-specific.html b/layouts/partials/persons/list-specific.html
index 605023a4f10c726621c7c081a1e33b090111f451..5b02131199e42a106ec97089acbda7f3f2d41e7b 100644
--- a/layouts/partials/persons/list-specific.html
+++ b/layouts/partials/persons/list-specific.html
@@ -1,14 +1,14 @@
-<ol class="persons">
-  {{ range (.Paginate (.Pages.ByParam "last_name")).Pages }}
-    {{ if .Slug }}
-      {{ $slug := printf "/persons/%s" .Slug }}
-      {{ $person := site.GetPage $slug }}
-      {{ if $person }}
-        {{ with $person }}
-          {{ partial "persons/list-item" $person }}
-        {{ end }}
-      {{ end }}
+{{ $persons := slice }}
+
+{{ range (.Paginate (.Pages.ByParam "last_name")).Pages }}
+  {{ if .Slug }}
+    {{ $slug := printf "/persons/%s" .Slug }}
+    {{ $person := site.GetPage $slug }}
+    {{ if $person }}
+      {{ $persons = $persons | append $person }}
     {{ end }}
   {{ end }}
-</ol>
+{{ end }}
+
+{{ partial "persons/list.html" (dict "persons" $persons) }}
 {{ partial "commons/pagination.html" . }}
diff --git a/layouts/partials/persons/list.html b/layouts/partials/persons/list.html
index 77a53118ffd00784b31fcfd602c7e429608f53a1..9edc780d68ca0968021de3851db7f69bbca2fa4f 100644
--- a/layouts/partials/persons/list.html
+++ b/layouts/partials/persons/list.html
@@ -1,7 +1,13 @@
-<ol class="persons">
-  {{ $persons := .Pages.ByParam "last_name" }}
-  {{ range (.Paginate $persons).Pages }}
-    {{ partial "persons/list-item" . }}
-  {{ end }}
-</ol>
-{{ partial "commons/pagination.html" . }}
+{{ if eq site.Params.persons.index.layout "list" }}
+  <ol class="persons persons--list">
+    {{ range .persons }}
+      {{ partial "persons/list-item" . }}
+    {{ end }}
+  </ol>
+{{ else if eq site.Params.persons.index.layout "grid" }}
+  <div class="persons">
+    {{ range .persons }}
+      {{ partial "persons/person" . }}
+    {{ end }}
+  </div>
+{{ end }}
diff --git a/layouts/partials/persons/person.html b/layouts/partials/persons/person.html
index 15135d58c0c4598f6655d9e5e1a1242ae0dac811..2b709098481da6ad98ff1ab8d8c67670776f97a6 100644
--- a/layouts/partials/persons/person.html
+++ b/layouts/partials/persons/person.html
@@ -1,22 +1,20 @@
 <article class="person">
-  <div>
+  <div class="description">
     {{- $title := partial "PrepareHTML" .Title }}
     <p class="name"><a href="{{ .Permalink }}">{{- $title -}}</a></p>
-    {{- if partial "GetTextFromHTML" .Params.description_short }}
-      <p>{{- partial "PrepareHTML" .Params.description_short -}}</p>
+    {{- if partial "GetTextFromHTML" .Params.summary }}
+      <p>{{- partial "PrepareText" .Params.summary -}}</p>
     {{ else if (partial "GetTextFromHTML" .Content) }}
-      <p>{{- partial "GetTruncateContent"  .Content -}}</p>
+      <p>{{- partial "GetTruncateContent" ( dict "text" .Content ) -}}</p>
     {{ end -}}
   </div>
   <div class="avatar">
     {{- if .Params.image }}
       {{ partial "commons/image.html"
             (dict
-              "alt"    .Title
+              "alt"      .Title
               "image"    .Params.image
-              "mobile"   "76x76"
-              "tablet"   "76x76"
-              "desktop"  "76x76"
+              "sizes"    site.Params.image_sizes.sections.persons.item
             )}}
     {{ end -}}
   </div>
diff --git a/layouts/partials/persons/posts.html b/layouts/partials/persons/posts.html
index 2d7b95e0a95e9e8522a2b767bad3ecb54f2ce37e..d31f1bf3966e345ed754aae10f168c40e0aaafa4 100644
--- a/layouts/partials/persons/posts.html
+++ b/layouts/partials/persons/posts.html
@@ -1,13 +1,10 @@
 <section>
   <div class="top">
-    <h2>{{ i18n "persons.posts" }}</h2>
-    <a href="{{ .Permalink }}" class="link">{{ i18n "posts.see_all" }}</a>
+    <h2 class="h5"><a href="{{ .Permalink }}">{{ i18n "persons.posts" }}</a></h2>
   </div>
-  <div class="posts">
+  <div class="posts posts--{{- site.Params.posts.index.layout -}}">
     {{ range first 3 .Pages }}
-      <div>
-        {{ partial "posts/post.html" . }}
-      </div>
+      {{ partial "posts/post.html" (dict "post" . ) }}
     {{ end }}
   </div>
 </section>
diff --git a/layouts/partials/persons/programs.html b/layouts/partials/persons/programs.html
index df2fa0443ed325ef8d9c6e1ef30108f05d70a8bc..aabfaa22b44050aa93856f8f7806959a5526c07e 100644
--- a/layouts/partials/persons/programs.html
+++ b/layouts/partials/persons/programs.html
@@ -1,17 +1,14 @@
 {{ $slug := .slug }}
-<section>
+<section class="person-programs">
   <div class="top">
-    <h2>{{ i18n "persons.programs" }}</h2>
+    <h2 class="h5">{{ i18n "persons.programs" }}</h2>
   </div>
-  <table class="table-resume">
-    <caption>{{ i18n "persons.programs" }}</caption>
-    <tbody>
-      {{ range .programs }}
-      <tr>
-        <th>{{ safeHTML (index .Params.teachers_description $slug) }}</th>
-        <td><a href="{{ .Permalink }}" class="link link-more">{{ safeHTML .Title }}</a></td>
-      </tr>
-      {{ end }}
-    </tbody>
-  </table>
+  <ol class="programs" itemscope itemtype="https://schema.org/CreativeWork">
+    {{ range .programs }}
+      <li>
+        <p itemscope itemtype="https://schema.org/EducationalOccupationalProgram"><a href="{{ .Permalink }}" itemprop="name">{{ safeHTML .Title }}</a></p>
+        <p itemprop="educationalRole">{{ safeHTML (index .Params.teachers_description $slug) }}</p>
+      </li>
+    {{ end }}
+  </ul>
 </section>
diff --git a/layouts/partials/persons/summary.html b/layouts/partials/persons/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..4ed5a570f5d60bc07d29393efb221e5fa06a7b8b
--- /dev/null
+++ b/layouts/partials/persons/summary.html
@@ -0,0 +1 @@
+{{- partial "commons/summary.html" . -}}
diff --git a/layouts/partials/persons/taxonomies.html b/layouts/partials/persons/taxonomies.html
index dcbc5a477d0af51872fb1f1cdb478aa71f6c66ff..827633d4edb8ff2ecf070a6ff9b59fa641d1c3c2 100644
--- a/layouts/partials/persons/taxonomies.html
+++ b/layouts/partials/persons/taxonomies.html
@@ -1,15 +1,15 @@
-{{- if .Site.Taxonomies -}}
-  <ul class="taxonomies taxonomies-persons">
-    {{- range $name, $t := .Site.Taxonomies }}
-      {{- if and (ne $name "categories") (ne $name "diplomas") }}
-        {{- with $.Site.GetPage "taxonomyTerm" $name}}
-          {{- if .Pages }}
-            <li>
-              <a href="{{ .Permalink }}">{{ partial "PrepareHTML" .Title }}</a>
-            </li>
-          {{ end -}}
+{{ $taxonomies := slice "administrators" "authors" "researchers" "teachers" }}
+{{ $has := .Params.has }}
+<ul class="taxonomies taxonomies-persons">
+  {{- range $taxonomies -}}
+    {{- if index $has ( printf "%s" . ) -}}
+      {{- with $.Site.GetPage "taxonomyTerm" . }}
+        {{- if .Pages }}
+          <li>
+            <a href="{{ .Permalink }}">{{ partial "PrepareHTML" .Title }}</a>
+          </li>
         {{ end -}}
       {{ end -}}
     {{ end -}}
-  </ul>
-{{- end -}}
+  {{ end -}}
+</ul>
diff --git a/layouts/partials/posts/aside.html b/layouts/partials/posts/aside.html
deleted file mode 100644
index 064fdac849a2fb0f1b3aa1a6ebb54d1c632ab9b2..0000000000000000000000000000000000000000
--- a/layouts/partials/posts/aside.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<aside>
-  {{- partial "posts/post-infos.html" . -}}
-</aside>
diff --git a/layouts/partials/posts/block-posts-layout.html b/layouts/partials/posts/block-posts-layout.html
new file mode 100644
index 0000000000000000000000000000000000000000..fad22521e80f720f7c858635bf4b39b643d2e5e1
--- /dev/null
+++ b/layouts/partials/posts/block-posts-layout.html
@@ -0,0 +1,15 @@
+{{ $layout := site.Params.posts.index.layout | default "list" }}
+<div class="block-posts block-posts--{{- $layout -}}">
+  <div class="container">
+    <div class="block-content">
+      <div class="{{ $layout }}">
+        {{ range .posts }}
+          {{ partial "posts/post.html" (dict 
+            "post" .
+            "heading" "h3"
+            ) }}
+        {{ end }}
+      </div>
+    </div>
+  </div>
+</div>
\ No newline at end of file
diff --git a/layouts/partials/posts/chapo.html b/layouts/partials/posts/chapo.html
deleted file mode 100644
index a2775efa5cb90e9c92841f73f8633401fc375b6e..0000000000000000000000000000000000000000
--- a/layouts/partials/posts/chapo.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{- if (partial "GetTextFromHTML" .) -}}
-  <p class="lead">
-    {{ partial "PrepareHTML" . }}
-  </p>
-{{ end }}
diff --git a/layouts/partials/posts/hero-list.html b/layouts/partials/posts/hero-list.html
index 3454341cfbf2cdff26319d8e3d29f12bbfe4600f..fa8d44876816599205324c8c4e9c2813d3455d01 100644
--- a/layouts/partials/posts/hero-list.html
+++ b/layouts/partials/posts/hero-list.html
@@ -2,5 +2,6 @@
       (dict
         "title" .Title
         "image" .Params.image
+        "sizes" site.Params.image_sizes.sections.posts.hero
         "context" .
       ) -}}
diff --git a/layouts/partials/posts/hero-single.html b/layouts/partials/posts/hero-single.html
index 3454341cfbf2cdff26319d8e3d29f12bbfe4600f..c872372aaecd8f79af38325966ff5c750001b4f1 100644
--- a/layouts/partials/posts/hero-single.html
+++ b/layouts/partials/posts/hero-single.html
@@ -2,5 +2,6 @@
       (dict
         "title" .Title
         "image" .Params.image
+        "sizes" site.Params.image_sizes.sections.posts.hero_single
         "context" .
       ) -}}
diff --git a/layouts/partials/posts/image.html b/layouts/partials/posts/image.html
deleted file mode 100644
index 40868e727950f41c194bdb7ed27a4580fd33944d..0000000000000000000000000000000000000000
--- a/layouts/partials/posts/image.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{{ if . }}
-  <figure class="featured-image">
-  {{ partial "commons/image.html"
-        (dict
-          "image"    .
-          "mobile"   "351x168"
-          "tablet"   "456x219"
-          "desktop"  "856x410"
-          "itemprop" true
-        )}}
-    {{- if isset . "credit" -}}
-      {{ if partial "GetTextFromHTML" .credit }}
-        <figcaption>{{ partial "PrepareHTML" .credit }}</figcaption>
-      {{ end }}
-    {{- end -}}
-  </figure>
-{{ end }}
diff --git a/layouts/partials/posts/post-infos.html b/layouts/partials/posts/post-infos.html
index b9734d2292cfdc39cb78875b91a780f6e89bc4bc..d4a3b027e6d39e126cd3c29078db4e26482c701f 100644
--- a/layouts/partials/posts/post-infos.html
+++ b/layouts/partials/posts/post-infos.html
@@ -1,42 +1,30 @@
-<table class="post-infos">
-  <caption>{{ i18n "posts.informations" }}</caption>
-  <tbody>
-    {{ if .Params.Categories }}
-      <tr>
-        <th scope="row">
-          {{- if gt (len .Params.Categories) 1 -}}
-            {{ i18n "posts.categories" }}
-          {{- else -}}
-            {{ i18n "posts.category" }}
-          {{- end -}}
-        </th>
-        <td itemprop="articleSection" {{ if gt (len .Params.Categories) 1 }} class="multiple" {{ end }}>
-          {{ partial "posts/categories.html" . }}
-        </td>
-      </tr>
-    {{ end }}
-    <tr>
-      <th scope="row">{{ i18n "posts.date" }}</th>
-      <td>
-        <time datetime="{{ .Date.Format "2006-01-02T15:04" }}">{{ .Date | time.Format ":date_long" }}</time>
-      </td>
-    </tr>
-    {{ range .GetTerms "authors" }}
-      <tr>
-        <th scope="row">{{ i18n "posts.author" }}</th>
-        <td itemscope itemtype="https://schema.org/Person" itemprop="author">
-          <a href="{{ .Permalink }}" itemprop="url">
-            <span itemprop="name">{{ safeHTML .Params.person }}</span>
-          </a>
-        </td>
-      </tr>
-    {{ end }}
-    
-    <tr>
-      <th scope="row">{{ i18n "posts.share" }}</th>
-      <td>
-        {{ partial "commons/share.html" }}
-      </td>
-    </tr>
-  </tbody>
-</table>
+<ul class="post-infos">
+  {{ if .Params.Categories }}
+    <li>
+      <span>
+        {{- if gt (len .Params.Categories) 1 -}}
+          {{ i18n "posts.categories" }}
+        {{- else -}}
+          {{ i18n "posts.category" }}
+        {{- end -}}
+      </span>
+      {{ partial "posts/categories.html" . }}
+    </li>
+  {{ end }}
+  <li>
+    <span>{{ i18n "posts.date" }}</span>
+    <time datetime="{{ .Date.Format "2006-01-02T15:04" }}">{{ .Date | time.Format ":date_long" }}</time>
+  </li>
+  {{ range .GetTerms "authors" }}
+    <li>
+      <span>{{ i18n "posts.author" }}</span>
+      <a href="{{ .Permalink }}" itemprop="url">
+        <span itemprop="name">{{ safeHTML .Params.person }}
+      </a>
+    </li>
+  {{ end }}
+  <li>
+    <span>{{ i18n "posts.share" }}</span>
+    {{ partial "commons/share.html" }}
+  </li>
+</ul>
\ No newline at end of file
diff --git a/layouts/partials/posts/post.html b/layouts/partials/posts/post.html
index 683d6ba8b750c50cb14c812126219ca6991dc9e5..f1a208f386080e9509499cf0bdf17febd4fdc238 100644
--- a/layouts/partials/posts/post.html
+++ b/layouts/partials/posts/post.html
@@ -1,10 +1,33 @@
+{{ $post := .post }}
+{{ $heading := .heading | default "h2" }}
+{{ $heading_tag := (dict 
+    "open" ((printf "<%s itemprop='headline'>" $heading) | safeHTML)
+    "close" ((printf "</%s>" $heading) | safeHTML)
+    ) }}
+
+{{ with $post }}
 <article class="post" itemprop="blogPosts" itemscope itemtype="http://schema.org/BlogPosting">
   <div class="post-content">
     {{- $title := partial "PrepareHTML" .Title -}}
-    <h1 itemprop="headline"><a href="{{ .Permalink }}" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">{{ $title }}</a></h1>
-    {{- if (partial "GetTextFromHTML" .Params.description_short) -}}
-      <p itemprop="articleBody">{{ partial "PrepareHTML" .Params.description_short }}</p>
+
+    {{ $heading_tag.open }}
+      <a href="{{ .Permalink }}" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">{{ $title }}</a>
+    {{ $heading_tag.close }}
+
+    {{ if site.Params.posts.index.show_categories }}
+      {{- partial "posts/categories" . -}}
+    {{ end }}
+    {{- if (partial "GetTextFromHTML" .Params.summary) -}}
+      {{ if site.Params.posts.index.truncate_description }}
+        <p itemprop="articleBody">{{ partial "GetTruncateContent" ( dict 
+          "text" .Params.summary
+          "length" site.Params.posts.index.truncate_description
+          ) }}</p>
+      {{ else }}
+        <p itemprop="articleBody">{{ partial "PrepareText" .Params.summary }}</p>
+      {{ end }}
     {{- end -}}
+    
     <time itemprop="datePublished" datetime="{{ .Date.Format "2006-01-02T15:04" }}">{{ .Date | time.Format ":date_long" }}</time>
   </div>
   <div class="media">
@@ -12,12 +35,11 @@
       {{- partial "commons/image.html"
             (dict
               "image"    .Params.image
-              "mobile"   "351x291"
-              "tablet"   "334x167"
-              "desktop"  "634x317"
+              "sizes"    site.Params.image_sizes.sections.posts.item
             ) -}}
     {{- else -}}
       {{- partial "commons/image-default.html" -}}
     {{- end -}}
   </div>
 </article>
+{{ end }}
\ No newline at end of file
diff --git a/layouts/partials/posts/posts.html b/layouts/partials/posts/posts.html
index 7a0a4cfda055f218e77bd5b1d144bebcca1550a8..f3304c7f7a74ba95a78647d0ef7233213b13e7bc 100644
--- a/layouts/partials/posts/posts.html
+++ b/layouts/partials/posts/posts.html
@@ -1,8 +1,8 @@
-<div class="posts">
+<div class="posts posts--{{- site.Params.posts.index.layout -}}">
   {{ if not .Pages }}
     <p>{{ i18n "categories.no_post" }}</p>
   {{ end }}
   {{ range .Paginator.Pages }}
-    {{ partial "posts/post.html" . }}
+    {{ partial "posts/post.html" (dict "post" . )}}
   {{ end }}
 </div>
diff --git a/layouts/partials/posts/prevnext.html b/layouts/partials/posts/prevnext.html
index 0f311366872262f104916204b35b3f76d9f61e9e..ea558c4da954391c6d01c7742e113dfedd4c92ca 100644
--- a/layouts/partials/posts/prevnext.html
+++ b/layouts/partials/posts/prevnext.html
@@ -1,30 +1,38 @@
-<nav class="posts-navigation" aria-label="{{ i18n "commons.pagination.between.posts" }}">
-  <ul>
-    {{- if .PrevInSection -}}
-      {{with .Site.RegularPages.Prev . }}
-        <li class="previous">
-          {{ $title := partial "PrepareHTML" .Title -}}
-          <a href="{{.RelPermalink}}" title="{{ safeHTML (i18n "posts.previous_aria" (dict "Title" $title)) }}">
-            <span>
-              {{- i18n "posts.previous" -}}
-            </span>
-            {{- $title -}}
-          </a>
-        </li>
-      {{end}}
-    {{- end -}}
-    {{- if .NextInSection -}}
-      {{with .Site.RegularPages.Next . }}
-        <li class="next">
-          {{ $title := partial "PrepareHTML" .Title -}}
-          <a href="{{.RelPermalink}}" title="{{ safeHTML (i18n "posts.next_aria" (dict "Title" $title)) }}">
-            <span>
-              {{- i18n "posts.next" -}}
-            </span>
-            {{- $title -}}
-          </a>
-        </li>
-      {{end}}
-    {{- end -}}
-  </ul>
-</nav>
+{{- if or .PrevInSection .NextInSection -}}
+<div class="block block-pagination">
+  <div class="container">
+    <div class="block-content">
+      <nav class="posts-navigation" aria-label="{{ i18n "commons.pagination.between.posts" }}">
+        <ul>
+          {{- if .PrevInSection -}}
+            {{with .Site.RegularPages.Prev . }}
+              <li class="previous">
+                {{ $title := partial "PrepareHTML" .Title -}}
+                <a href="{{.RelPermalink}}" title="{{ safeHTML (i18n "posts.previous_aria" (dict "Title" $title)) }}">
+                  <span>
+                    {{- i18n "posts.previous" -}}
+                  </span>
+                  {{- $title -}}
+                </a>
+              </li>
+            {{end}}
+          {{- end -}}
+          {{- if .NextInSection -}}
+            {{with .Site.RegularPages.Next . }}
+              <li class="next">
+                {{ $title := partial "PrepareHTML" .Title -}}
+                <a href="{{.RelPermalink}}" title="{{ safeHTML (i18n "posts.next_aria" (dict "Title" $title)) }}">
+                  <span>
+                    {{- i18n "posts.next" -}}
+                  </span>
+                  {{- $title -}}
+                </a>
+              </li>
+            {{end}}
+          {{- end -}}
+        </ul>
+      </nav>
+    </div>
+  </div>
+</div>
+{{- end -}}
diff --git a/layouts/partials/posts/related.html b/layouts/partials/posts/related.html
deleted file mode 100644
index 633b5009788d01c682fed82fc1255307492cc72a..0000000000000000000000000000000000000000
--- a/layouts/partials/posts/related.html
+++ /dev/null
@@ -1,18 +0,0 @@
-{{ if .Pages }}
-<section class="related">
-  <div class="top">
-    <h2 id="page-posts">{{ i18n "posts.title" }}</h2>
-    <a href="{{ .Permalink }}" class="link">
-      {{ $category_name := safeHTML .Title | truncate 30 }}
-      {{ i18n "posts.see_all_in_category" (dict "Title" $category_name) }}
-    </a>
-  </div>
-  <div class="posts">
-    {{ range first 2 .Pages }}
-      <div>
-        {{ partial "posts/post.html" . }}
-      </div>
-    {{ end }}
-  </div>
-</section>
-{{ end }}
diff --git a/layouts/partials/posts/sidebar.html b/layouts/partials/posts/sidebar.html
new file mode 100644
index 0000000000000000000000000000000000000000..ed2b64ac8ac71ee8521a2c126b6efe2c9a005472
--- /dev/null
+++ b/layouts/partials/posts/sidebar.html
@@ -0,0 +1,14 @@
+<div class="post-sidebar">
+  <div>
+    <aside>
+      {{- partial "posts/post-infos.html" . -}}
+    </aside>
+    
+    {{ partial "toc/container.html"
+      (dict
+          "toc" "toc/default.html"
+          "context" .
+      )
+    }}
+  </div>
+</div>
diff --git a/layouts/partials/posts/summary.html b/layouts/partials/posts/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..4ed5a570f5d60bc07d29393efb221e5fa06a7b8b
--- /dev/null
+++ b/layouts/partials/posts/summary.html
@@ -0,0 +1 @@
+{{- partial "commons/summary.html" . -}}
diff --git a/layouts/partials/programs/abstract.html b/layouts/partials/programs/abstract.html
index 7ce21617fb7574f5550435b9ae5d94db472e3689..3e0d225b3957a4b4ea4ec12f2f3c40c03c7ad87a 100644
--- a/layouts/partials/programs/abstract.html
+++ b/layouts/partials/programs/abstract.html
@@ -1,5 +1,7 @@
 {{ if (partial "GetTextFromHTML" .) }}
+<div class="container">
   <p class="lead" itemprop="abstract">
     {{ partial "PrepareHTML" . }}
   </p>
-{{ end }}
+</div>
+{{ end }}
\ No newline at end of file
diff --git a/layouts/partials/programs/admission.html b/layouts/partials/programs/admission.html
index b29e701920704b835d0c0b91b583c393ff4c92a5..50d5ec348d9344bfbf1e2af0a6510036c62efa21 100644
--- a/layouts/partials/programs/admission.html
+++ b/layouts/partials/programs/admission.html
@@ -1,72 +1,85 @@
 {{- if or (partial "GetTextFromHTML" .Params.prerequisites) (partial "GetTextFromHTML" .Params.pricing) (partial "GetTextFromHTML" .Params.registration) (partial "GetTextFromHTML" .Params.accessibility) (partial "GetTextFromHTML" .Params.other) -}}
-<section id="admission">
+<section id="{{ urlize (i18n "programs.toc.admission") }}">
   <div class="container">
     <div class="content">
       <h2>{{ i18n "programs.toc.admission" }}</h2>
       <div>
         {{- if partial "GetTextFromHTML" .Params.prerequisites -}}
-          <h3>{{ i18n "programs._prerequisites" }}</h3>
-          {{- partial "PrepareHTML" .Params.prerequisites -}}
+          <section id="{{ urlize (i18n "programs.prerequisites") }}">
+            <h3>{{ i18n "programs.prerequisites" }}</h3>
+            {{- partial "PrepareHTML" .Params.prerequisites -}}
+          </section>
         {{- end -}}
 
         {{- if partial "GetTextFromHTML" .Params.pricing -}}
-          <h3>{{ i18n "programs._pricing" }}</h3>
-          {{- partial "PrepareHTML" .Params.pricing -}}
+          <section id="{{ urlize (i18n "programs.pricing") }}">
+            <h3>{{ i18n "programs.pricing" }}</h3>
+            {{- partial "PrepareHTML" .Params.pricing -}}
+          </section>
         {{- end -}}
 
         {{- if partial "GetTextFromHTML" .Params.registration -}}
-          <h3>{{ i18n "programs._registration" }}</h3>
-          {{- partial "PrepareHTML" .Params.registration -}}
-          {{- if partial "GetTextFromHTML" .Params.registration_url -}}
-            <p><a href="{{- partial "PrepareHTML" .Params.registration_url -}}" class="registration">{{ i18n "programs.apply" }}</a></p>
-          {{- end -}}
+          <section id="{{ urlize (i18n "programs.registration") }}">
+            <h3>{{ i18n "programs.registration" }}</h3>
+            {{- partial "PrepareHTML" .Params.registration -}}
+            {{- if partial "GetTextFromHTML" .Params.registration_url -}}
+              <p><a href="{{- partial "PrepareHTML" .Params.registration_url -}}" class="registration">{{ i18n "programs.apply" }}</a></p>
+            {{- end -}}
+          </section>
         {{- end -}}
 
         {{- if partial "GetTextFromHTML" .Params.accessibility -}}
-          <h3>{{ i18n "programs._accessibility" }}</h3>
-          {{- partial "PrepareHTML" .Params.accessibility -}}
+          <section id="{{ urlize (i18n "programs.accessibility") }}">
+            <h3>{{ i18n "programs.accessibility" }}</h3>
+            {{- partial "PrepareHTML" .Params.accessibility -}}
+          </section>
         {{- end -}}
 
         {{- if partial "GetTextFromHTML" .Params.other -}}
-          <h3>{{ i18n "programs._other" }}</h3>
-          {{- partial "PrepareHTML" .Params.other -}}
+          <section id="{{ urlize (i18n "programs._other") }}">
+            <h3>{{ i18n "programs._other" }}</h3>
+            {{- partial "PrepareHTML" .Params.other -}}
+          </section>
         {{- end -}}
 
         {{- if .Params.roles -}}
-
-          <h3>{{ i18n "programs._roles" }}</h3>
-          {{- with .Params.roles -}}
-            {{- range . }}
-              {{ $title := .title }}
-              {{- range .persons -}}
-                {{ $slug := . }}
-                {{ with site.GetPage "persons" }}
-                  {{ with .GetPage $slug }}
-                    <p>
-                      <b>{{ $title }}</b>
-                      <br>
-                      <a href="{{ .Permalink }}">{{ partial "PrepareHTML" .Title }}</a>
-                      {{ if .Params.phone }}
-                        <br>
-                        {{ safeHTML .Params.phone }}
-                      {{ end }}
-                      {{ if .Params.email }}
+          <section id="{{ urlize (i18n "programs.roles") }}">
+            <h3>{{ i18n "programs.roles" }}</h3>
+            {{- with .Params.roles -}}
+              {{- range . }}
+                {{ $title := .title }}
+                {{- range .persons -}}
+                  {{ $slug := . }}
+                  {{ with site.GetPage "persons" }}
+                    {{ with .GetPage $slug }}
+                      <p>
+                        <b>{{ $title }}</b>
                         <br>
-                        <a href="mailto:{{ .Params.email }}" rel="noreferrer" target="_blank">{{ .Params.email }}</a>
-                      {{ end }}
-                    </p>
+                        <a href="{{ .Permalink }}">{{ partial "PrepareHTML" .Title }}</a>
+                        {{ if .Params.phone }}
+                          <br>
+                          {{ safeHTML .Params.phone }}
+                        {{ end }}
+                        {{ if .Params.email }}
+                          <br>
+                          <a href="mailto:{{ .Params.email }}" rel="noreferrer" target="_blank">{{ .Params.email }}</a>
+                        {{ end }}
+                      </p>
+                    {{ end }}
                   {{ end }}
                 {{ end }}
-              {{ end }}
-            {{ end -}}
-          {{- end -}}
+              {{ end -}}
+            {{- end -}}
+          </section>
         {{- end -}}
 
-        {{- if  partial "GetTextFromHTML" .Params.contacts -}}
-          <h3>{{ i18n "programs._contacts" }}</h3>
-          {{- if or (partial "GetTextFromHTML" .Params.contacts) -}}
-            {{- partial "PrepareHTML" .Params.contacts -}}
-          {{- end -}}
+        {{- if partial "GetTextFromHTML" .Params.contacts -}}
+          <section id="{{ urlize (i18n "programs.contacts") }}">
+            <h3>{{ i18n "programs.contacts" }}</h3>
+            {{- if or (partial "GetTextFromHTML" .Params.contacts) -}}
+              {{- partial "PrepareHTML" .Params.contacts -}}
+            {{- end -}}
+          </section>
         {{- end -}}
       </div>
     </div>
diff --git a/layouts/partials/programs/chapo.html b/layouts/partials/programs/chapo.html
deleted file mode 100644
index a2775efa5cb90e9c92841f73f8633401fc375b6e..0000000000000000000000000000000000000000
--- a/layouts/partials/programs/chapo.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{- if (partial "GetTextFromHTML" .) -}}
-  <p class="lead">
-    {{ partial "PrepareHTML" . }}
-  </p>
-{{ end }}
diff --git a/layouts/partials/programs/chapters.html b/layouts/partials/programs/chapters.html
deleted file mode 100644
index 4e208f716408efd75e77ac05abff3386f79035c1..0000000000000000000000000000000000000000
--- a/layouts/partials/programs/chapters.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<div itemprop="articleBody">
-  {{- $params := .params -}}
-  {{- $contactsExist := or $params.contacts $params.roles -}}
-  {{- range .chapters -}}
-    {{- $content := index $params . -}}
-    {{- $chapterExists := $content -}}
-    {{ if eq "contacts" . }}
-      {{- $chapterExists = $contactsExist -}}
-    {{ end }}
-    {{- if $chapterExists }}
-      <section>
-        {{ $title := i18n (printf "programs._%s" .) -}}
-        <h2 id="page-{{ . }}">{{ $title }}</h2>
-        {{ if eq . "contacts" }}
-          {{- partial "programs/content.html" $content -}}
-          {{- partial "programs/roles.html" $params.roles -}}
-        {{ else if eq . "teachers" }}
-          {{- partial "programs/teachers.html"
-                        (dict
-                          "title" $title
-                          "teachers" $params.teachers
-                          "descriptions" $params.teachers_description
-                        ) -}}
-        {{ else }}
-          {{- partial "programs/content.html" $content -}}
-        {{ end }}
-      </section>
-    {{ end -}}
-  {{- end -}}
-</div>
diff --git a/layouts/partials/programs/hero-single.html b/layouts/partials/programs/hero-single.html
index 48e20060806a24ee6c88860c1d5564ea8fd98071..c0ed3bb3fe702bf986dfc4dd1128b68c2be3cf0a 100644
--- a/layouts/partials/programs/hero-single.html
+++ b/layouts/partials/programs/hero-single.html
@@ -4,30 +4,32 @@
     {{- if .Params.breadcrumb | default true -}}
       {{ partial "header/breadcrumbs.html" . }}
     {{- end -}}
-    <div>
+    <div class="content">
       <h1>{{ partial "PrepareHTML" $title }}</h1>
     </div>
   </div>
 
-  <section class="container" id="essential">
-    {{- 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 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>
-      </div>
-      {{ with .Params.downloadable_summary }}
-        {{- $file := partial "GetMedia" . -}}
-        {{- if $file -}}
-          {{- $url := $file.url -}}
-          {{- if site.Params.keycdn -}}
-            {{- $url = $file.direct_url -}}
+        {{ 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 -}}
-          <a href="{{ $url }}" download target="_blank">{{ i18n "commons.download.singular_name" }}</a>
-        {{- end -}}
-      {{ end }}
+        {{ end }}
+      </div>
     </div>
-  </section>
+  </div>
 </header>
diff --git a/layouts/partials/programs/hero.html b/layouts/partials/programs/hero.html
index 8e7e675c055dce99ef4dda14b248d20db258f721..ee3cfeb3732d99ad494f13510722df71d651f50b 100644
--- a/layouts/partials/programs/hero.html
+++ b/layouts/partials/programs/hero.html
@@ -3,5 +3,6 @@
       (dict
         "title" $title
         "image" .Params.image
+        "sizes" site.Params.image_sizes.sections.programs.hero
         "context" .
       ) -}}
diff --git a/layouts/partials/programs/image.html b/layouts/partials/programs/image.html
index a6bc76f50a5002cc60c14dcb57d452d641298e66..5774db7cab06dd34b1fb3f0092b40fb20885a2aa 100644
--- a/layouts/partials/programs/image.html
+++ b/layouts/partials/programs/image.html
@@ -3,9 +3,7 @@
     {{ partial "commons/image.html"
           (dict
             "image"    .
-            "mobile"   "351x168"
-            "tablet"   "456x219"
-            "desktop"  "856x410"
+            "sizes"    site.Params.image_sizes.sections.programs.image
             "itemprop" true
             "crop"     true
           )}}
diff --git a/layouts/partials/programs/list.html b/layouts/partials/programs/list.html
index c45261d76a422d0c54fa1858265e887dc1a63b25..5184794ca527a4520209dede83f209ceaf307ca1 100644
--- a/layouts/partials/programs/list.html
+++ b/layouts/partials/programs/list.html
@@ -1,8 +1,14 @@
 <div class="document-content">
-  <div class="container">
-    {{ partial "programs/image.html" .Params.image }}
-    {{ partial "programs/chapo.html" .Params.description_short }}
-  </div>
+  {{ partial "toc/container.html"
+    (dict
+          "toc" "toc/default.html"
+          "context" .
+      )
+    }}
+  {{ partial "programs/summary.html" (dict
+      "with_container" true
+      "context" .
+    ) }}
   {{ partial "blocks/list.html" . }}
   <div class="container">
     {{ partial "diplomas/diplomas-select.html" . }}
diff --git a/layouts/partials/programs/pedagogy.html b/layouts/partials/programs/pedagogy.html
index 04525c5308d0ff375e080fff15c23cef6e490489..fbc1bdf4f8597231098779166f79b9cf3cb1a5fc 100644
--- a/layouts/partials/programs/pedagogy.html
+++ b/layouts/partials/programs/pedagogy.html
@@ -1,33 +1,41 @@
 {{- if or (partial "GetTextFromHTML" .Params.content) (partial "GetTextFromHTML" .Params.pedagogy) (partial "GetTextFromHTML" .Params.evaluation) (.Params.teachers) -}}
-<section id="pedagogy">
+<section id="{{ urlize ( i18n "programs.toc.pedagogy" ) }}">
   <div class="container">
     <div class="content">
       <h2>{{ i18n "programs.toc.pedagogy" }}</h2>
       <div>
         {{- if partial "GetTextFromHTML" .Params.content -}}
-          <h3>{{ i18n "programs._content" }}</h3>
-          {{- partial "PrepareHTML" .Params.content -}}
+          <section id="{{ urlize (i18n "programs.content") }}">
+            <h3>{{ i18n "programs.content" }}</h3>
+            {{- partial "PrepareHTML" .Params.content -}}
+          </section>
         {{- end -}}
 
         {{- if partial "GetTextFromHTML" .Params.pedagogy -}}
-          <h3>{{ i18n "programs._pedagogy" }}</h3>
-          {{- partial "PrepareHTML" .Params.pedagogy -}}
+          <section id="{{ urlize (i18n "programs.pedagogy") }}">
+            <h3>{{ i18n "programs.pedagogy" }}</h3>
+            {{- partial "PrepareHTML" .Params.pedagogy -}}
+          </section>
         {{- end -}}
 
         {{- if partial "GetTextFromHTML" .Params.evaluation -}}
-          <h3>{{ i18n "programs._evaluation" }}</h3>
-          {{- partial "PrepareHTML" .Params.evaluation -}}
+          <section id="{{ urlize (i18n "programs.evaluation") }}">
+            <h3>{{ i18n "programs.evaluation" }}</h3>
+            {{- partial "PrepareHTML" .Params.evaluation -}}
+          </section>
         {{- end -}}
 
         {{- if .Params.teachers -}}
-          {{ $title := i18n "programs._teachers" -}}
-          <h3>{{ $title }}</h3>
-          {{- partial "programs/teachers.html"
-                        (dict
-                          "title" $title
-                          "teachers" .Params.teachers
-                          "descriptions" .Params.teachers_description
-                        ) -}}
+          {{ $title := i18n "programs.teachers" -}}
+          <section id="{{ urlize $title }}">
+            <h3>{{ $title }}</h3>
+            {{- partial "programs/teachers.html"
+                          (dict
+                            "title" $title
+                            "teachers" .Params.teachers
+                            "descriptions" .Params.teachers_description
+                          ) -}}
+          </section>
         {{- end -}}
       </div>
     </div>
diff --git a/layouts/partials/programs/presentation.html b/layouts/partials/programs/presentation.html
index 8209e128f4938f6b7e5af67e7fea665e147eec14..a3076eda67e4911aeed3ee047343230e6f201afe 100644
--- a/layouts/partials/programs/presentation.html
+++ b/layouts/partials/programs/presentation.html
@@ -1,47 +1,60 @@
-<section id="presentation">
+<section id="{{ urlize (i18n "programs.toc.presentation") }}">
     <div class="container">
       <div class="content">
         <h2>{{ i18n "programs.toc.presentation" }}</h2>
 
         <div>
           {{- partial "programs/image.html" .Params.image -}}
+
+          {{- if partial "GetTextFromHTML" .Params.presentation -}}
+            <section id="{{ urlize (i18n "programs.presentation") }}">
+              <h3>{{ i18n "programs.presentation" }}</h3>
+              <p>{{- partial "PrepareHTML" .Params.presentation -}}</p>
+            </section>
+          {{- end -}}
+
           {{- if partial "GetTextFromHTML" .Params.objectives -}}
-            {{- partial "PrepareHTML" .Params.objectives -}}
+            <section id="{{ urlize (i18n "programs.objectives") }}">
+              <h3>{{ i18n "programs.objectives" }}</h3>
+              {{- partial "PrepareHTML" .Params.objectives -}}
+            </section>
           {{- end -}}
 
-          <h3>{{ i18n "programs._administrative_information" }}</h3>
-          <table class="post-infos">
-            <caption>{{ i18n "programs._administrative_information" }}</caption>
-            <tbody>
-              {{- with .Params.diplomas -}}
-                {{- $diploma := site.GetPage (printf "/diplomas/%s" .) -}}
-                {{- with $diploma.Params.ects -}}
-                  <tr>
-                    <th>{{ i18n "programs.ects_credits" }}</th>
-                    <td>{{ partial "PrepareHTML" . }}</td>
-                  </tr>
+          <section id="{{ urlize (i18n "programs.administrative_information") }}">
+            <h3>{{ i18n "programs.administrative_information" }}</h3>
+            <table class="program-table">
+              <caption>{{ i18n "programs.administrative_information" }}</caption>
+              <tbody>
+                {{- with .Params.diplomas -}}
+                  {{- $diploma := site.GetPage (printf "/diplomas/%s" .) -}}
+                  {{- with $diploma.Params.ects -}}
+                    <tr>
+                      <th scope="row">{{ i18n "programs.ects_credits" }}</th>
+                      <td>{{ partial "PrepareHTML" . }}</td>
+                    </tr>
+                  {{- end -}}
+                {{- end -}}
+                <tr>
+                  <th scope="row">{{ i18n "programs.type.initial" }}</th>
+                  <td>{{ if .Params.initial }}{{ i18n "commons.true" }}{{ else }}{{ i18n "commons.false" }}{{ end }}</td>
+                </tr>
+                <tr>
+                  <th scope="row">{{ i18n "programs.type.continuing" }}</th>
+                  <td>{{ if .Params.continuing }}{{ i18n "commons.true" }}{{ else }}{{ i18n "commons.false" }}{{ end }}</td>
+                </tr>
+                <tr>
+                  <th scope="row">{{ i18n "programs.type.apprenticeship" }}</th>
+                  <td>{{ if .Params.apprenticeship }}{{ i18n "commons.true" }}{{ else }}{{ i18n "commons.false" }}{{ end }}</td>
+                </tr>
+                {{- if partial "GetTextFromHTML" .Params.capacity -}}
+                <tr>
+                  <th>{{ i18n "programs.capacity" }}</th>
+                  <td>{{ partial "PrepareHTML" .Params.capacity }}</td>
+                </tr>
                 {{- end -}}
-              {{- end -}}
-              <tr>
-                <th>{{ i18n "programs.type.initial" }}</th>
-                <td>{{ if .Params.initial }}{{ i18n "commons.true" }}{{ else }}{{ i18n "commons.false" }}{{ end }}</td>
-              </tr>
-              <tr>
-                <th>{{ i18n "programs.type.continuing" }}</th>
-                <td>{{ if .Params.continuing }}{{ i18n "commons.true" }}{{ else }}{{ i18n "commons.false" }}{{ end }}</td>
-              </tr>
-              <tr>
-                <th>{{ i18n "programs.type.apprenticeship" }}</th>
-                <td>{{ if .Params.apprenticeship }}{{ i18n "commons.true" }}{{ else }}{{ i18n "commons.false" }}{{ end }}</td>
-              </tr>
-              {{- if partial "GetTextFromHTML" .Params.capacity -}}
-              <tr>
-                <th>{{ i18n "programs.capacity" }}</th>
-                <td>{{ partial "PrepareHTML" .Params.capacity }}</td>
-              </tr>
-              {{- end -}}
-            </tbody>
-          </table>
+              </tbody>
+            </table>
+          </section>
 
         </div>
         {{- partial "blocks/list.html" . }}
diff --git a/layouts/partials/programs/program.html b/layouts/partials/programs/program.html
index 7efa8afb76d15ada3db0b4e0fbd23402ba710045..caa4fd805e6724997644b30253e191658b4eb909 100644
--- a/layouts/partials/programs/program.html
+++ b/layouts/partials/programs/program.html
@@ -1,31 +1,13 @@
-{{- $with_image := false -}}
-{{- if .Scratch.Get "with_image" -}}
-  {{- $with_image = true -}}
-{{- end -}}
 {{- $title := partial "PrepareHTML" .Title -}}
 <article class="program">
   <div>
-    <h1>
+    <h2>
       <a href="{{ .Permalink }}" title="{{ safeHTML (i18n "commons.more_aria" (dict "Title" $title)) }}">
         {{- $title -}}
       </a>
-    </h1>
+    </h2>
     {{ if (partial "GetTextFromHTML" .Params.presentation) }}
       <p>{{- partial "PrepareHTML" .Params.presentation -}}</p>
     {{ end }}
   </div>
-  {{- if $with_image }}
-    {{- if .Params.image }}
-      <div class="media">
-        {{ partial "commons/image.html"
-              (dict
-                "image"    .Params.image
-                "mobile"   "351x168"
-                "tablet"   "456x219"
-                "desktop"  "856x410"
-                "itemprop" true
-              )}}
-      </div>
-    {{ end -}}
-  {{ end -}}
 </article>
diff --git a/layouts/partials/programs/programs-list.html b/layouts/partials/programs/programs-list.html
index c718510e869aa23f7dc024bf08221b110ac2db63..92575e9dc28bff473f01eafc5aea53e48e1ca5a7 100644
--- a/layouts/partials/programs/programs-list.html
+++ b/layouts/partials/programs/programs-list.html
@@ -9,6 +9,7 @@
       {{- with .Params.diplomas -}}
         {{- $diploma := site.GetPage (printf "/diplomas/%s" .) -}}
         {{- with $diploma -}}
+          &ensp;
           <a href="{{ .Permalink }}" title="{{ partial "PrepareHTML" .Title }}">{{ partial "PrepareHTML" .Params.short_name }}</a>
         {{- end -}}
       {{- end -}}
diff --git a/layouts/partials/programs/related.html b/layouts/partials/programs/related.html
new file mode 100644
index 0000000000000000000000000000000000000000..0c0dd60f2f63bcb9444e64fcac2ecdece1e2d607
--- /dev/null
+++ b/layouts/partials/programs/related.html
@@ -0,0 +1,16 @@
+{{ if .Pages }}
+<section class="related-posts" id="{{ urlize (i18n "programs.toc.related") }}">
+  <div class="container">
+    <div class="content">
+      <h2 id="page-posts">{{ i18n "posts.title" }}</h2>
+      <a href="{{ .Permalink }}" class="category-link">
+        {{ $category_name := safeHTML .Title | truncate 30 }}
+        {{ i18n "posts.see_all_in_program" (dict "Title" $category_name) }}
+      </a>
+      <div class="blocks">
+        {{ partial "posts/block-posts-layout.html" (dict "posts" .Pages ) }}
+      </div>
+    </div>
+  </div>
+</section>
+{{ end }}
diff --git a/layouts/partials/programs/results.html b/layouts/partials/programs/results.html
index 57be24af1e7ca78d9cec3fe3124e6514cf54bee9..2ebb05daf7e71a452db76895b57d999fe7c61de0 100644
--- a/layouts/partials/programs/results.html
+++ b/layouts/partials/programs/results.html
@@ -1,17 +1,21 @@
 {{- if or (partial "GetTextFromHTML" .Params.opportunities) (partial "GetTextFromHTML" .Params.results) -}}
-<section id="results">
+<section id="{{ urlize ( i18n "programs.toc.results" ) }}">
   <div class="container">
     <div class="content">
       <h2>{{ i18n "programs.toc.results" }}</h2>
       <div>
         {{- if partial "GetTextFromHTML" .Params.opportunities -}}
-          <h3>{{ i18n "programs._opportunities" }}</h3>
-          {{- partial "PrepareHTML" .Params.opportunities -}}
+          <section id="{{ urlize (i18n "programs.opportunities") }}">
+            <h3>{{ i18n "programs.opportunities" }}</h3>
+            {{- partial "PrepareHTML" .Params.opportunities -}}
+          </section>
         {{- end -}}
 
         {{- if partial "GetTextFromHTML" .Params.results -}}
-          <h3>{{ i18n "programs._results" }}</h3>
-          {{- partial "PrepareHTML" .Params.results -}}
+          <section id="{{ urlize (i18n "programs.results") }}">
+            <h3>{{ i18n "programs.results" }}</h3>
+            {{- partial "PrepareHTML" .Params.results -}}
+          </section>
         {{- end -}}
       </div>
     </div>
diff --git a/layouts/partials/programs/roles.html b/layouts/partials/programs/roles.html
deleted file mode 100644
index 0fa6b0b5a37a761ea63415e1aa3cd9acdbf55c04..0000000000000000000000000000000000000000
--- a/layouts/partials/programs/roles.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{{- range . }}
-  <h3>{{ .title }}</h3>
-  <div class="persons">
-    {{- range .persons -}}
-      {{ $slug := . }}
-      {{ with site.GetPage "persons" }}
-        {{ with .GetPage $slug }}
-          <div>
-            <div class="person">
-              <p class="name">
-                <a href="{{ .Permalink }}">{{ partial "PrepareHTML" .Title }}</a>
-              </p>
-              {{ if .Params.email }}
-                <p class="contact">
-                  <a href="mailto:{{ .Params.email }}" rel="noreferrer" target="_blank">{{ .Params.email }}</a>
-                </p>
-              {{ end }}
-              {{ if .Params.phone }}
-                <p class="contact">
-                  {{ safeHTML .Params.phone }}
-                </p>
-              {{ end }}
-            </div>
-          </div>
-        {{ end }}
-      {{ end }}
-    {{ end }}
-  </div>
-{{ end -}}
diff --git a/layouts/partials/programs/single.html b/layouts/partials/programs/single.html
index fcc508c923ab7d91e57dbab153b8b069eb09337f..2f00aa72b95f95ebffad72b86fad1f61a041be26 100644
--- a/layouts/partials/programs/single.html
+++ b/layouts/partials/programs/single.html
@@ -1,12 +1,15 @@
 <div class="document-content" itemscope itemtype="https://schema.org/EducationalOccupationalCredential">
+
+  <meta itemprop="name" content="{{ partial "PrepareHTML" .Title }}">
+  <meta itemprop="url" content="{{ .Permalink }}">
+
   {{ partial "toc/container.html"
-      (dict
+    (dict
           "toc" "programs/toc.html"
           "context" .
       )
-  }}
-  <meta itemprop="name" content="{{ partial "PrepareHTML" .Title }}">
-  <meta itemprop="url" content="{{ .Permalink }}">
+    }}
+
   {{- if .Params.image -}}
     {{- $id := .Params.image -}}
     {{- if isset .Params.image "id" -}}
@@ -21,13 +24,20 @@
       <meta itemprop="image" content="{{ $url }}">
     {{- end -}}
   {{- end -}}
-  <div class="container">
-    {{- partial "programs/abstract.html" .Params.presentation -}}
-  </div>
-  {{- partial "programs/children.html" .Pages -}}
+
+  {{ partial "programs/summary.html" (dict
+      "with_container" true
+      "context" .
+    ) }}
+
   {{- partial "programs/presentation.html" . -}}
+  {{- partial "programs/children.html" .Pages -}}
   {{- partial "programs/pedagogy.html" . -}}
   {{- partial "programs/results.html" . -}}
   {{- partial "programs/admission.html" . -}}
+
+  {{- $category := site.GetPage (printf "/categories/%s" .Params.related_category ) -}}
+  {{- partial "programs/related.html" $category -}}
+
   {{- partial "hooks/before-program-end.html" . -}}
 </div>
diff --git a/layouts/partials/programs/summary.html b/layouts/partials/programs/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..4ed5a570f5d60bc07d29393efb221e5fa06a7b8b
--- /dev/null
+++ b/layouts/partials/programs/summary.html
@@ -0,0 +1 @@
+{{- partial "commons/summary.html" . -}}
diff --git a/layouts/partials/programs/teachers.html b/layouts/partials/programs/teachers.html
index cb84a85978c2b188a4f94134e34ee9a16b823cfe..2939d4d5f18f4b6f6edd4eb55a844e1327a80324 100644
--- a/layouts/partials/programs/teachers.html
+++ b/layouts/partials/programs/teachers.html
@@ -1,22 +1,17 @@
-<table class="table-persons">
-  <caption>{{ .title }}</caption>
-  <tbody>
-    {{- $descriptions := .descriptions -}}
+<ul class="list-persons">
+  {{- $descriptions := .descriptions -}}
     {{- range .teachers -}}
       {{- $slug := . -}}
       {{- $person := site.GetPage (printf "/persons/%s" $slug) -}}
       {{- with $person -}}
-        <tr>
-          <th scope="row">
-            <a href="{{ .Permalink }}">
-              {{- partial "PrepareHTML" .Title -}}
-            </a>
-          </th>
-          <td>
-            {{- partial "PrepareHTML" (index $descriptions $slug) -}}
-          </td>
-        </tr>
-      {{- end -}}
+      <li>
+        <a href="{{ .Permalink }}">
+          {{- partial "PrepareHTML" .Title -}}
+        </a>
+        <p>
+          {{- partial "PrepareHTML" (index $descriptions $slug) -}}
+        </p>
+      </li>
     {{- end -}}
-  </tbody>
-</table>
+  {{- end -}}
+</ul>
\ No newline at end of file
diff --git a/layouts/partials/programs/toc.html b/layouts/partials/programs/toc.html
index da07a95a924ac985458f8264d13d1a36e2bdfa1d..42a04f3a6432fbda54fdb92640d39db13838d21f 100644
--- a/layouts/partials/programs/toc.html
+++ b/layouts/partials/programs/toc.html
@@ -1,25 +1,110 @@
+{{ $content := partial "GetTextFromHTML" .context.Params.content }}
+{{ $presentation :=  partial "GetTextFromHTML" .context.Params.presentation }}
+{{ $objectives :=  partial "GetTextFromHTML" .context.Params.objectives }}
+{{ $pedagogy :=  partial "GetTextFromHTML" .context.Params.pedagogy }}
+{{ $evaluation :=  partial "GetTextFromHTML" .context.Params.evaluation }}
+{{ $teachers := .context.Params.teachers }}
+
+{{ $opportunities := partial "GetTextFromHTML" .context.Params.opportunities }}
+{{ $results := partial "GetTextFromHTML" .context.Params.results }}
+
+{{ $prerequisites := partial "GetTextFromHTML" .context.Params.prerequisites }}
+{{ $pricing := partial "GetTextFromHTML" .context.Params.pricing }}
+{{ $registration := partial "GetTextFromHTML" .context.Params.registration }}
+{{ $accessibility := partial "GetTextFromHTML" .context.Params.accessibility }}
+{{ $other := partial "GetTextFromHTML" .context.Params.other }}
+
+{{ $roles := .context.Params.roles }}
+{{ $contacts := partial "GetTextFromHTML" .context.Params.contacts }}
+
+{{ $category := site.GetPage (printf "/categories/%s" .context.Params.related_category ) }}
+{{ $related_posts := $category.Pages }}
+
 {{/* nav-link required for toggle active class */}}
 <nav class="toc" id="nav-toc" aria-label="{{ i18n "commons.toc" }}">
   <ol>
     <li>
-      <a href="#essential">{{ i18n "programs.toc.essential" }}</a>
+      <a href="#{{ urlize (i18n "programs.toc.essential") }}">{{ i18n "programs.toc.essential" }}</a>
     </li>
     <li>
-      <a href="#presentation">{{ i18n "programs.toc.presentation" }}</a>
-      {{- if .context.Params.blocks -}}
-        <ol>
-          {{- partial "blocks/toc" .context.Params.blocks -}}
+      <a href="#{{ urlize (i18n "programs.toc.presentation") }}">{{ i18n "programs.toc.presentation" }}</a>
+       <ol>
+          {{- if $presentation -}}
+            <li><a href="#{{ urlize (i18n "programs.presentation") }}">{{ i18n "programs.presentation" }}</a></li>
+          {{- end -}}
+          {{- if $objectives -}}
+            <li><a href="#{{ urlize (i18n "programs.objectives") }}">{{ i18n "programs.objectives" }}</a></li>
+          {{- end -}}
+          <li><a href="#{{ urlize (i18n "programs.administrative_information") }}">{{ i18n "programs.administrative_information" }}</a></li>
+          {{- if .context.Params.blocks -}}
+            {{- partial "blocks/toc" .context.Params.blocks -}}
+          {{- end -}}
         </ol>
-      {{- end -}}
     </li>
     <li>
       <a href="#pedagogy">{{ i18n "programs.toc.pedagogy" }}</a>
+      {{- if or $content $pedagogy $evaluation $teachers }}
+      <ol>
+        {{- if $content -}}
+          <li><a href="#{{ urlize (i18n "programs.content") }}">{{ i18n "programs.content" }}</a></li>
+        {{- end -}}
+        {{- if $pedagogy -}}
+          <li><a href="#{{ urlize (i18n "programs.pedagogy") }}">{{ i18n "programs.pedagogy" }}</a></li>
+        {{- end -}}
+        {{- if $evaluation -}}
+          <li><a href="#{{ urlize (i18n "programs.evaluation") }}">{{ i18n "programs.evaluation" }}</a></li>
+        {{- end -}}
+        {{- if $teachers -}}
+          <li><a href="#{{ urlize (i18n "programs.teachers") }}">{{ i18n "programs.teachers" }}</a></li>
+        {{- end -}}
+      </ol>
+      {{ end -}}
     </li>
     <li>
       <a href="#results">{{ i18n "programs.toc.results" }}</a>
+      {{- if or $opportunities $results }}
+      <ol>
+        {{- if $opportunities -}}
+          <li><a href="#{{ urlize (i18n "programs.opportunities") }}">{{ i18n "programs.opportunities" }}</a></li>
+        {{- end -}}
+        {{- if $results -}}
+          <li><a href="#{{ urlize (i18n "programs.results") }}">{{ i18n "programs.results" }}</a></li>
+        {{- end -}}
+      </ol>
+      {{ end -}}
     </li>
     <li>
       <a href="#admission">{{ i18n "programs.toc.admission" }}</a>
+      {{- if or $prerequisites $pricing $registration $accessibility $other $roles $contacts }}
+      <ol>
+        {{- if $prerequisites -}}
+          <li><a href="#{{ urlize (i18n "programs.prerequisites") }}">{{ i18n "programs.prerequisites" }}</a></li>
+        {{- end -}}
+        {{- if $pricing -}}
+          <li><a href="#{{ urlize (i18n "programs.pricing") }}">{{ i18n "programs.pricing" }}</a></li>
+        {{- end -}}
+        {{- if $registration -}}
+          <li><a href="#{{ urlize (i18n "programs.registration") }}">{{ i18n "programs.registration" }}</a></li>
+        {{- end -}}
+        {{- if $accessibility -}}
+          <li><a href="#{{ urlize (i18n "programs.accessibility") }}">{{ i18n "programs.accessibility" }}</a></li>
+        {{- end -}}
+        {{- if $other -}}
+          <li><a href="#{{ urlize (i18n "programs._other") }}">{{ i18n "programs._other" }}</a></li>
+        {{- end -}}
+        {{- if $roles -}}
+          <li><a href="#{{ urlize (i18n "programs.roles") }}">{{ i18n "programs.roles" }}</a></li>
+        {{- end -}}
+        {{- if $contacts -}}
+          <li><a href="#{{ urlize (i18n "programs.contacts") }}">{{ i18n "programs.contacts" }}</a></li>
+        {{- end -}}
+      </ol>
+      {{ end -}}
     </li>
+    {{- if gt (len $related_posts) 0 -}}
+      <li>
+        <a href="#{{ urlize (i18n "programs.toc.related") }}">{{ i18n "programs.toc.related" }}</a>
+      </li>
+    {{- end -}}
   </ol>
 </nav>
diff --git a/layouts/partials/sitemap/document-nav.html b/layouts/partials/sitemap/document-nav.html
deleted file mode 100644
index 0b722516ff055ca9fa3011ff667c437489cc81cb..0000000000000000000000000000000000000000
--- a/layouts/partials/sitemap/document-nav.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<div class="document-nav">
-  <div>
-    {{- partial "sitemap/toc.html" . -}}
-  </div>
-</div>
\ No newline at end of file
diff --git a/layouts/partials/sitemap/summary.html b/layouts/partials/sitemap/summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..4ed5a570f5d60bc07d29393efb221e5fa06a7b8b
--- /dev/null
+++ b/layouts/partials/sitemap/summary.html
@@ -0,0 +1 @@
+{{- partial "commons/summary.html" . -}}
diff --git a/layouts/partials/sitemap/toc.html b/layouts/partials/sitemap/toc.html
index 49a56588ba823b9ecde52462a812f1e0f2ba04da..8f82e88ef95831d065d81946b0a6376e6fe10cd4 100644
--- a/layouts/partials/sitemap/toc.html
+++ b/layouts/partials/sitemap/toc.html
@@ -1,5 +1,8 @@
-<nav class="toc" id="nav-toc" aria-label="Table des matières">
+<nav class="toc" id="nav-toc" aria-label="{{ i18n "commons.toc" }}">
   <ol>
+    {{- if .context.Params.blocks -}}
+      {{- partial "blocks/toc.html" .context.Params.blocks -}}
+    {{- end -}}
     {{ range site.Sections }}
       {{ if ne .Type "sitemap" }}
         <li>
diff --git a/layouts/partials/toc/container.html b/layouts/partials/toc/container.html
index 55a9448f20eac910764f05d8185775a8c6d4473c..255253d1307bb3c4ca73b33126450c999fa206f9 100644
--- a/layouts/partials/toc/container.html
+++ b/layouts/partials/toc/container.html
@@ -1,9 +1,9 @@
-{{- $isTocNeeded := partial "IsTocNeeded" . -}}
+{{- $isTocPresent := .context.Params.design.toc.present -}}
 
-{{- if $isTocNeeded -}}
+{{- if $isTocPresent -}}
   {{- partial "toc/cta" -}}
 
-  <div class="toc-container" aria-hidden="true">
+  <div class="toc-container" aria-hidden="false" aria-labelledby="toc-title">
     <div class="toc-content">
       {{/* TODO : quelle balise pour le titre du toc ? */}}
       <div id="toc-title" class="toc-title">{{ i18n "commons.toc" }}</div>
diff --git a/layouts/partials/toc/default.html b/layouts/partials/toc/default.html
index ae57cd0f5adb72ebaa6b374c6581d3cca8a458b5..2f071f86070095fd90a5e49119c8a745149cd551 100644
--- a/layouts/partials/toc/default.html
+++ b/layouts/partials/toc/default.html
@@ -1,40 +1,7 @@
-{{- $show_aside := false -}}
-
-{{- $has_blocks := false -}}
-{{- range .context.Params.blocks -}}
-  {{- $has_blocks = true -}}
-  {{- if .title -}}
-    {{- $show_aside = true -}}
-  {{- end -}}
-{{- end -}}
-
-{{- if .context.Pages -}}
-  {{- if eq $has_blocks false -}}
-    {{- $show_aside = true -}}
-  {{- end -}}
-{{- end -}}
-
-{{- if .context.Content -}}
-  {{- if eq $has_blocks false -}}
-    {{- $show_aside = true -}}
-  {{- end -}}
-{{- end -}}
-
-{{- if .category -}}
-  {{- if eq $has_blocks false -}}
-    {{- $show_aside = true -}}
-  {{- end -}}
-{{- end -}}
-
-{{- if $show_aside }}
-  <nav class="toc toc-pages" id="nav-toc" aria-labelledby="toc-title">
-    <ol>
-      {{- if .context.Params.blocks -}}
-        {{- partial "blocks/toc.html" .context.Params.blocks -}}
-      {{- end -}}
-    </ol>
-  </nav>
-
-{{ end -}}
-
-
+<nav class="toc toc-pages" id="nav-toc" aria-labelledby="toc-title">
+  <ol>
+    {{- if .context.Params.blocks -}}
+      {{- partial "blocks/toc.html" .context.Params.blocks -}}
+    {{- end -}}
+  </ol>
+</nav>
diff --git a/layouts/partials/volumes/hero.html b/layouts/partials/volumes/hero.html
index 3454341cfbf2cdff26319d8e3d29f12bbfe4600f..a7648499f62496bc2d3870e5e7650040c691efde 100644
--- a/layouts/partials/volumes/hero.html
+++ b/layouts/partials/volumes/hero.html
@@ -2,5 +2,6 @@
       (dict
         "title" .Title
         "image" .Params.image
+        "sizes" site.Params.image_sizes.sections.volumes.hero
         "context" .
       ) -}}
diff --git a/layouts/partials/volumes/image.html b/layouts/partials/volumes/image.html
deleted file mode 100644
index 38e5d66e5a1e63647a3b28a4f62b09edaf643ab2..0000000000000000000000000000000000000000
--- a/layouts/partials/volumes/image.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{{- if .Params.image -}}
-  <div>
-    {{- partial "commons/image.html"
-          (dict
-            "image"    .Params.image
-            "alt"      .Title
-            "mobile"   "327x388"
-            "tablet"   "208x247"
-            "desktop"  "300x356"
-            "class"    "img-fluid"
-          ) -}}
-  </div>
-{{- end -}}
diff --git a/layouts/partials/volumes/volume.html b/layouts/partials/volumes/volume.html
index 359caf279bd01f8df468d628293ff6f4f8897792..09fc5ab2605b899b1e1740affcca93017e9c33d9 100644
--- a/layouts/partials/volumes/volume.html
+++ b/layouts/partials/volumes/volume.html
@@ -9,9 +9,7 @@
             (dict
               "image"    .Params.image
               "alt"      .Title
-              "mobile"   "327x388"
-              "tablet"   "208x247"
-              "desktop"  "408x485"
+              "sizes"    site.Params.image_sizes.sections.volumes.item
             ) -}}
     {{- else if site.Params.default_image.url -}}
       {{- partial "commons/image-default.html" (dict "class" "img-fluid") -}}
diff --git a/layouts/persons/list.html b/layouts/persons/list.html
index 12aa359fd865fe79987a4a72d379be0db85a7137..c40bba59311fa0d850ab0caef7aad847fd4b9312 100644
--- a/layouts/persons/list.html
+++ b/layouts/persons/list.html
@@ -10,16 +10,38 @@
   {{ partial "persons/hero.html" . }}
 
   <div class="document-content">
+    {{ partial "toc/container.html"
+        (dict
+            "toc" "toc/default.html"
+            "context" .
+        )
+    }}
+
+    {{ $summary_block := false }}
+    {{ if .Params.blocks }}
+      {{ if gt (len .Params.blocks) 1 }}
+        {{ $summary_block = true }}
+      {{ end }}
+    {{ end }}
+    
+    {{ partial "persons/summary.html" (dict
+        "context" .
+        "with_container" (not $summary_block)
+        "block_wrapped" $summary_block
+      ) }}
+
+    {{ partial "blocks/list.html" . }}
+
     <div class="container">
-      {{ partial "persons/image.html" .Params.image }}
-      {{ partial "persons/chapo.html" .Params.description_short }}
       {{- if not $is_organigram_present -}}
         {{ partial "persons/taxonomies.html" . }}
-        {{ partial "persons/list.html" . }}
+        {{ $persons := .Pages.ByParam "last_name" }}
+        {{ $persons = (.Paginate $persons).Pages }}
+        {{ partial "persons/list.html" (dict "persons" $persons) }}
+        {{ partial "commons/pagination.html" . }}
       {{- end -}}
     </div>
-  
-    {{ partial "blocks/list.html" . }}
+
   </div>
 
 {{ end }}
diff --git a/layouts/persons/single.html b/layouts/persons/single.html
index 586b4d1a055ff26391d42216c007b4528b3305a3..36838e43947800858f8055794166da3dfbb58eb2 100644
--- a/layouts/persons/single.html
+++ b/layouts/persons/single.html
@@ -16,8 +16,14 @@
 
   {{ partial "persons/hero-single.html" . }}
 
-  <div class="document-content container">
-    <div itemscope itemtype="https://schema.org/Person">
+  <div class="document-content">
+    {{ partial "toc/container.html"
+        (dict
+            "toc" "toc/default.html"
+            "context" .
+        )
+    }}
+    <div itemscope itemtype="https://schema.org/Person" class="container">
       <meta itemprop="name" content="{{ partial "PrepareHTML" .Title }}">
       <meta itemprop="url" content="{{ .Permalink }}">
       {{- if .Params.image -}}
@@ -29,9 +35,9 @@
 
       <div class="informations">
         <div>
-          {{ if (partial "GetTextFromHTML" .Params.description_short) }}
+          {{ if (partial "GetTextFromHTML" .Params.summary) }}
             <div class="lead" itemprop="description">
-              {{ partial "PrepareHTML" .Params.description_short }}
+              {{ partial "PrepareText" .Params.summary }}
             </div>
           {{ end }}
           {{ if (partial "GetTextFromHTML" .Content) }}
@@ -40,33 +46,40 @@
             </div>
           {{ end }}
         </div>
-        <div>
-          {{ range $programsForAdministrator }}
-            {{ $program := . }}
+        {{ range $programsForAdministrator }}
+        {{ $program := . }}
+          <div class="roles">
             {{ range .Params.roles }}
               {{ $role := .title }}
               {{ if in .persons $slug }}
                 <p>
                   {{ safeHTML $role }}<br>
-                  <a href="{{ $program.Permalink }}" class="link link-more">{{ safeHTML $program.Title }}</a>
+                  <a href="{{ $program.Permalink }}" class="link">{{ safeHTML $program.Title }}</a>
                 </p>
               {{ end }}
             {{ end }}
-          {{ end }}
-        </div>
+          </div>
+        {{ end }}
       </div>
-    </div>
 
-    {{ if $programsForTeacher }}
-      {{ partial "persons/programs.html" (dict "programs" $programsForTeacher "slug" $slug) }}
-    {{ end }}
+      {{ partial "persons/contact-details.html" . }}
 
-    {{ if $author.Pages }}
-      {{ partial "persons/posts.html" $author }}
-    {{ end }}
+    </div>
+
+    {{ partial "blocks/list.html" . }}
 
-    {{ if $papersForResearcher }}
-      {{ partial "persons/papers.html" (dict "papers" $papersForResearcher "slug" $slug) }}
-    {{ end }}
+    <div class="container">
+      {{ if $programsForTeacher }}
+        {{ partial "persons/programs.html" (dict "programs" $programsForTeacher "slug" $slug) }}
+      {{ end }}
+  
+      {{ if $author.Pages }}
+        {{ partial "persons/posts.html" $author }}
+      {{ end }}
+  
+      {{ if $papersForResearcher }}
+        {{ partial "persons/papers.html" (dict "papers" $papersForResearcher "slug" $slug) }}
+      {{ end }}
+    </div>
   </div>
 {{ end }}
diff --git a/layouts/posts/list.html b/layouts/posts/list.html
index 7faea74d78e996644b8fd8e11c2d9c19c5d48977..e01334c9d5becc1e702be90dc25495f04439d7a8 100644
--- a/layouts/posts/list.html
+++ b/layouts/posts/list.html
@@ -3,10 +3,10 @@
   <div class="document-content">
     {{ partial "commons/list-content.html" . }}
   
-    <div class="container">
-      {{ partial "posts/image.html" .Params.image }}
-      {{ partial "posts/chapo.html" .Params.description_short }}
-    </div>
+    {{ partial "posts/summary.html" (dict
+        "with_container" true
+        "context" .
+      ) }}
   
     {{ partial "blocks/list.html" . }}
   
diff --git a/layouts/posts/single.html b/layouts/posts/single.html
index 2dd79d4ed03df9132711dd8bb987fff9df0ddbc4..75f978ef76ba4b6b1e6353cf0314affbff9f4f30 100644
--- a/layouts/posts/single.html
+++ b/layouts/posts/single.html
@@ -5,24 +5,20 @@
     <meta itemprop="headline" content="{{ partial "PrepareHTML" .Title }}">
     <meta itemprop="url" content="{{ .Permalink }}">
     {{ if .Date }}<meta itemprop="datePublished" content="{{ .Date.Format "2006-01-02T15:04" }}">{{ end }}
-    {{ if .Params.description_short }}<meta itemprop="abstract" content="{{ partial "PrepareHTML" .Params.description_short }}">{{ end }}
-    {{ if .Summary }}<meta itemprop="description" content="{{ partial "PrepareHTML" .Summary }}">{{ end }}
+    {{ if .Params.summary }}<meta itemprop="abstract" content="{{ partial "PrepareText" .Params.summary }}">{{ end }}
+    {{ if .Summary }}<meta itemprop="description" content="{{ partial "PrepareText" .Summary }}">{{ end }}
+
+    {{ partial "posts/sidebar.html" . }}
+
+    {{ partial "posts/summary.html" (dict
+        "context" .
+        "block_wrapped" true
+      ) }}
 
-    {{ partial "posts/aside.html" . }}
-    <div class="blocks blocks-chapo">
-      <div class="container">
-        <div class="block-content">
-          {{ partial "posts/chapo.html" .Params.description_short }}
-        </div>
-      </div>
-    </div>
     {{ partial "blocks/list.html" . }}
-    <div class="blocks blocks-pagination">
-      <div class="container">
-        <div class="block-content">
-          {{ partial "posts/prevnext.html" . }}
-        </div>
-      </div>
-    </div>
+
+    {{ partial "posts/prevnext.html" . }}
+
+    {{ partial "hooks/before-document-content-end.html" . }}
   </div>
 {{ end }}
diff --git a/layouts/researchers/list.html b/layouts/researchers/list.html
index a27ee571b3affbdc644fe034fff0a0f7c440fdff..a7e18fc72ea9cf679e56e3421be244b4c49a935e 100644
--- a/layouts/researchers/list.html
+++ b/layouts/researchers/list.html
@@ -3,9 +3,11 @@
   {{ partial "persons/hero.html" . }}
 
   <div class="document-content">
-    <div class="container">
-      {{ partial "persons/chapo.html" .Params.description_short }}
-    </div>
+
+    {{ partial "persons/summary.html" (dict
+        "with_container" true
+        "context" .
+      ) }}
   
     {{ partial "blocks/list.html" . }}
   
diff --git a/layouts/sitemap/list.html b/layouts/sitemap/list.html
deleted file mode 100644
index fe90eda7eef2795dd2920d1820ee7418e98e0c39..0000000000000000000000000000000000000000
--- a/layouts/sitemap/list.html
+++ /dev/null
@@ -1,30 +0,0 @@
-{{ define "main" }}
-  {{- partial "header/hero.html"
-        (dict
-          "title" .Title
-          "image" .Params.image
-          "context" .
-        ) -}}
-  <div class="document-content container">
-    <div class="content">
-      {{- partial "sitemap/document-nav" . -}}
-      <div>
-        {{ range site.Sections }}
-          {{ if ne .Type "sitemap" }}
-            {{ $permalink := .Permalink }}
-            <h3 id="{{ .Type }}">
-              <a href="{{ $permalink }}">{{ safeHTML .Title }}</a>
-            </h3>
-            <ul>
-              {{ range where .Site.Pages "Section" .Type }}
-                {{ if ne $permalink .Permalink }}
-                  <li><a href="{{ .Permalink }}">{{ safeHTML .Title }}</a></li>
-                {{ end }}
-              {{ end }}
-            </ul>
-          {{ end }}
-        {{ end }}
-      </div>
-    </div>
-  </div>
-{{ end }}
diff --git a/layouts/teachers/list.html b/layouts/teachers/list.html
index a27ee571b3affbdc644fe034fff0a0f7c440fdff..64d780d483a76930c4c1706fe5045d0dc82ef185 100644
--- a/layouts/teachers/list.html
+++ b/layouts/teachers/list.html
@@ -3,10 +3,12 @@
   {{ partial "persons/hero.html" . }}
 
   <div class="document-content">
-    <div class="container">
-      {{ partial "persons/chapo.html" .Params.description_short }}
-    </div>
-  
+
+    {{ partial "persons/summary.html" (dict
+        "with_container" true
+        "context" .
+      ) }}
+
     {{ partial "blocks/list.html" . }}
   
     <div class="container">
diff --git a/layouts/volumes/term.html b/layouts/volumes/term.html
index e81b30167e1288d9ef762a09e6dccb5dada5f5b3..6f456eb0c4793a88310bc5a5a7fc0b9ac01904f4 100644
--- a/layouts/volumes/term.html
+++ b/layouts/volumes/term.html
@@ -13,7 +13,6 @@
 
     <div class="container">
       <div class="content">
-        {{ partial "volumes/image.html" . }}
         {{ partial "volumes/description.html" . }}
         {{ partial "volumes/document-aside.html" . }}
         {{ partial "volumes/table-contents.html" . }}
diff --git a/static/assets/fonts/fonticons/IconFont.ttf b/static/assets/fonts/fonticons/IconFont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..330990416174df467bdf918ebf4dd4c201897499
Binary files /dev/null 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
new file mode 100644
index 0000000000000000000000000000000000000000..32131224ecaa0733a8eca9ac87e4ba81e1464926
Binary files /dev/null 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
new file mode 100644
index 0000000000000000000000000000000000000000..dcab885d075aa66e55151293d18fe34621c9cc76
Binary files /dev/null and b/static/assets/fonts/fonticons/IconFont.woff2 differ
diff --git a/static/assets/fonts/icons/icomoon.svg b/static/assets/fonts/icons/icomoon.svg
deleted file mode 100644
index fefc13c846348941869cff8b2336f6625a2fe790..0000000000000000000000000000000000000000
--- a/static/assets/fonts/icons/icomoon.svg
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Generated by IcoMoon</metadata>
-<defs>
-<font id="icomoon" horiz-adv-x="1024">
-<font-face units-per-em="1024" ascent="960" descent="-64" />
-<missing-glyph horiz-adv-x="1024" />
-<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
-<glyph unicode="&#xe900;" glyph-name="download" d="M768 320v-128h-512v128h-85.333v-128c0-46.933 38.4-85.333 85.333-85.333h512c46.933 0 85.333 38.4 85.333 85.333v128h-85.333zM725.333 490.667l-60.16 60.16-110.507-110.080v348.587h-85.333v-348.587l-110.507 110.080-60.16-60.16 213.333-213.333 213.333 213.333z" />
-<glyph unicode="&#xe901;" glyph-name="eye" d="M512 704c0.412 0.001 0.899 0.002 1.386 0.002 163.929 0 305.757-94.625 373.844-232.234l1.090-2.435c-70.4-143.787-214.613-234.667-376.32-234.667s-305.92 90.88-376.32 234.667c69.177 140.044 211.005 234.669 374.934 234.669 0.487 0 0.974-0.001 1.461-0.003h-0.075zM512 789.333c-213.333 0-395.52-132.693-469.333-320 73.813-187.307 256-320 469.333-320s395.52 132.693 469.333 320c-73.813 187.307-256 320-469.333 320zM512 576c58.91 0 106.667-47.756 106.667-106.667s-47.756-106.667-106.667-106.667v0c-58.91 0-106.667 47.756-106.667 106.667s47.756 106.667 106.667 106.667v0zM512 661.333c-105.813 0-192-86.187-192-192s86.187-192 192-192 192 86.187 192 192-86.187 192-192 192z" />
-<glyph unicode="&#xe902;" glyph-name="burger" horiz-adv-x="1205" d="M0 960h1204.706v-60.235h-1204.706zM0 478.118h1204.706v-60.235h-1204.706zM0-3.765h1204.706v-60.235h-1204.706z" />
-<glyph unicode="&#xe903;" glyph-name="link-blank" d="M612.65 259.829l-175.043-175.043c-78.769-78.769-210.051-78.769-288.821 0s-78.769 210.051 0 288.821l175.043 175.043c17.504 17.504 17.504 43.761 0 61.265s-43.761 17.504-61.265 0l-175.043-175.043c-52.709-52.604-85.317-125.332-85.317-205.675s32.608-153.072 85.312-205.671l0.005-0.005c52.513-52.513 131.282-87.521 210.051-87.521s148.786 26.256 210.051 87.521l175.043 175.043c17.504 17.504 17.504 43.761 0 61.265s-52.513 17.504-70.017 0zM936.479 872.479c-52.604 52.709-125.332 85.317-205.675 85.317s-153.072-32.608-205.671-85.312l-87.526-87.526c-17.504-17.504-17.504-43.761 0-61.265l140.034-140.034-315.077-323.829c-17.504-17.504-17.504-43.761 0-61.265 8.752-8.752 17.504-8.752 35.009-8.752s26.256 0 35.009 8.752l306.325 323.829 148.786-148.786c8.752-8.752 17.504-8.752 35.009-8.752s26.256 0 35.009 8.752l87.521 87.521c105.026 113.778 105.026 297.573-8.752 411.35zM875.214 522.393l-61.265-52.513-113.778 113.778 52.513 52.513c17.504 17.504 17.504 43.761 0 61.265s-35.009 17.504-52.513 0l-61.265-52.513-113.778 113.778 52.513 52.513c78.769 78.769 210.051 78.769 288.821 0 87.521-78.769 87.521-210.051 8.752-288.821z" />
-<glyph unicode="&#xe904;" glyph-name="caret" horiz-adv-x="1707" d="M853.333-12.8l-750.933 733.867 136.533 136.533 614.4-631.467 614.4 631.467 136.533-136.533z" />
-<glyph unicode="&#xe905;" glyph-name="arrow" horiz-adv-x="1408" d="M1325.261 402.746c24.986 24.993 24.986 65.516 0 90.509l-407.3 407.294c-24.993 24.994-65.516 24.994-90.509 0-24.995-24.994-24.995-65.516 0-90.509l362.038-362.039-362.038-362.039c-24.995-24.993-24.995-65.516 0-90.509 24.993-24.995 65.516-24.995 90.509 0l407.3 407.293zM0 384h1280v128h-1280v-128z" />
-<glyph unicode="&#xe906;" glyph-name="arrow-first" horiz-adv-x="1408" d="M0 960v-1024h128v421.49l362.039-362.038c24.993-24.995 65.516-24.995 90.509 0 24.995 24.993 24.995 65.516 0 90.509l-298.038 298.039h1125.49v128h-1125.49l298.038 298.039c24.995 24.993 24.995 65.516 0 90.509-24.993 24.994-65.516 24.994-90.509 0l-362.039-362.038v421.49h-128z" />
-<glyph unicode="&#xe907;" glyph-name="arrow-last" horiz-adv-x="1408" d="M1280 357.49v-421.49h128v1024h-128v-421.49l-362.039 362.038c-24.993 24.994-65.516 24.994-90.509 0-24.995-24.994-24.995-65.516 0-90.509l298.038-298.039h-1125.49v-128h1125.49l-298.038-298.039c-24.995-24.993-24.995-65.516 0-90.509 24.993-24.995 65.516-24.995 90.509 0l362.039 362.038z" />
-<glyph unicode="&#xe908;" glyph-name="arrow-left" horiz-adv-x="1408" d="M490.039-4.552l-407.294 407.293c-24.994 24.993-24.994 65.517 0 90.51l407.294 407.293c24.993 24.994 65.516 24.994 90.509 0 24.995-24.994 24.995-65.516 0-90.51l-298.038-298.039h1125.49v-128h-1125.49l298.038-298.038c24.995-24.995 24.995-65.517 0-90.51-24.993-24.993-65.516-24.993-90.509 0z" />
-<glyph unicode="&#xe909;" glyph-name="arrow-right" horiz-adv-x="1408" d="M917.961 900.552l407.3-407.293c24.986-24.993 24.986-65.516 0-90.51l-407.3-407.293c-24.993-24.993-65.516-24.993-90.509 0-24.995 24.993-24.995 65.517 0 90.51l298.038 298.039h-1125.49v128h1125.49l-298.038 298.038c-24.995 24.994-24.995 65.517 0 90.51 24.993 24.994 65.516 24.994 90.509 0z" />
-<glyph unicode="&#xe90a;" glyph-name="instagram" d="M512 867.744c136.708 0 152.9-0.52 206.888-2.98 49.92-2.28 77.032-10.62 95.076-17.632 23.896-9.288 40.952-20.384 58.868-38.3 17.92-17.916 29.012-34.972 38.3-58.868 7.012-18.044 15.352-45.156 17.632-95.072 2.46-53.992 2.98-70.184 2.98-206.892 0-136.712-0.52-152.904-2.98-206.892-2.28-49.92-10.62-77.028-17.632-95.072-9.288-23.896-20.384-40.956-38.3-58.872s-34.972-29.012-58.868-38.296c-18.044-7.012-45.156-15.356-95.076-17.632-53.98-2.464-70.172-2.984-206.888-2.984-136.72 0-152.912 0.52-206.892 2.984-49.92 2.28-77.028 10.62-95.072 17.632-23.896 9.284-40.956 20.38-58.872 38.296-17.916 17.92-29.012 34.976-38.296 58.872-7.012 18.040-15.356 45.152-17.632 95.072-2.464 53.988-2.984 70.18-2.984 206.892 0 136.708 0.52 152.9 2.984 206.888 2.28 49.92 10.62 77.032 17.632 95.076 9.284 23.896 20.38 40.952 38.296 58.868 17.92 17.92 34.976 29.012 58.872 38.3 18.040 7.012 45.152 15.352 95.072 17.632 53.988 2.46 70.18 2.98 206.892 2.98zM512 960c-139.052 0-156.488-0.588-211.096-3.080-54.5-2.488-91.72-11.144-124.284-23.8-33.672-13.084-62.224-30.592-90.688-59.056s-45.968-57.016-59.052-90.684c-12.66-32.568-21.312-69.788-23.8-124.284-2.492-54.608-3.080-72.044-3.080-211.096s0.588-156.488 3.080-211.096c2.488-54.5 11.14-91.72 23.8-124.284 13.080-33.668 30.588-62.224 59.052-90.688s57.016-45.968 90.688-59.052c32.568-12.66 69.784-21.312 124.28-23.8 54.612-2.492 72.048-3.080 211.1-3.080s156.488 0.588 211.096 3.080c54.496 2.488 91.716 11.14 124.28 23.8 33.672 13.080 62.224 30.588 90.688 59.052s45.972 57.016 59.056 90.688c12.656 32.568 21.312 69.784 23.8 124.28 2.492 54.612 3.080 72.048 3.080 211.1s-0.588 156.488-3.080 211.096c-2.488 54.496-11.144 91.716-23.8 124.28-13.084 33.672-30.592 62.224-59.056 90.688s-57.016 45.976-90.684 59.056c-32.568 12.656-69.788 21.312-124.284 23.8-54.608 2.492-72.044 3.080-211.096 3.080zM512 710.92c-145.208 0-262.92-117.72-262.92-262.92 0-145.208 117.712-262.92 262.92-262.92 145.204 0 262.92 117.712 262.92 262.92 0 145.204-117.716 262.92-262.92 262.92zM512 277.332c-94.256 0-170.668 76.412-170.668 170.668s76.412 170.668 170.668 170.668 170.668-76.412 170.668-170.668-76.412-170.668-170.668-170.668zM846.744 721.308c0-33.936-27.504-61.44-61.44-61.44-33.932 0-61.44 27.504-61.44 61.44 0 33.932 27.508 61.44 61.44 61.44 33.936 0 61.44-27.508 61.44-61.44z" />
-<glyph unicode="&#xe90b;" glyph-name="facebook" horiz-adv-x="626" d="M341.333 561.778h256l-28.444-113.778h-227.556v-512h-113.778v512h-227.556v113.778h227.556v106.496c0 101.433 10.581 138.24 30.379 175.332 19.4 36.647 49.369 66.616 86.016 86.016 37.092 19.797 73.899 30.379 175.332 30.379 29.696 0 55.751-2.844 78.052-8.533v-105.244h-78.052c-75.321 0-98.247-4.437-121.628-16.953-17.294-9.216-30.151-22.073-39.367-39.367-12.516-23.381-16.953-46.308-16.953-121.628v-106.496z" />
-<glyph unicode="&#xe90c;" glyph-name="linkedin" d="M483.556 615.822c52.167 53.305 120.092 88.178 199.111 88.178 82.984 0 162.566-32.965 221.247-91.643 58.675-58.678 91.642-138.263 91.642-221.246v-426.667h-113.778v426.667c0 52.808-20.975 103.452-58.317 140.793s-87.984 58.319-140.794 58.319c-52.81 0-103.452-20.978-140.793-58.319s-58.319-87.985-58.319-140.793v-426.667h-113.778v711.111h113.778v-59.733zM85.333 789.333c-22.632 0-44.337 8.99-60.34 24.994s-24.994 37.708-24.994 60.34c0 22.632 8.99 44.337 24.994 60.34s37.708 24.994 60.34 24.994c22.632 0 44.337-8.99 60.34-24.994s24.994-37.708 24.994-60.34c0-22.632-8.99-44.337-24.994-60.34s-37.708-24.994-60.34-24.994zM28.444 675.556h113.778v-711.111h-113.778v711.111z" />
-<glyph unicode="&#xe90d;" glyph-name="twitter" horiz-adv-x="1195" d="M813.483 814.941c-43.236 0.007-84.747-16.96-115.604-47.25-30.851-30.29-48.583-71.482-49.374-114.712l-1.593-89.6c-0.091-4.811-1.2-9.548-3.254-13.899s-5.001-8.221-8.653-11.353c-3.652-3.132-7.93-5.456-12.544-6.82s-9.461-1.737-14.234-1.095l-88.802 12.060c-116.85 15.929-228.807 69.746-336.213 159.232-34.020-188.302 32.427-318.75 192.455-419.387l99.385-62.464c4.722-2.964 8.645-7.043 11.426-11.878s4.334-10.28 4.526-15.855c0.191-5.569-0.987-11.105-3.431-16.122-2.443-5.012-6.079-9.347-10.586-12.635l-90.567-66.162c53.874-3.356 105.017-0.967 147.456 7.452 268.4 53.589 446.861 255.545 446.861 588.688 0 27.193-57.572 121.799-167.253 121.799zM534.729 655.083c0.993 54.838 18.141 108.165 49.298 153.303s74.934 80.082 125.855 100.457c50.927 20.375 106.724 25.275 160.421 14.087 53.692-11.188 102.895-37.968 141.437-76.985 40.448 0.284 74.866-9.956 151.836 36.693-19.058-93.298-28.444-133.803-69.063-189.497 0-434.747-267.207-646.146-538.338-700.247-185.913-37.092-456.249 23.836-533.731 104.732 39.481 3.072 199.907 20.309 292.636 88.178-78.45 51.712-390.713 235.465-185.515 729.488 96.313-112.469 193.991-189.042 292.978-229.66 65.877-27.022 82.034-26.453 112.242-30.606l-0.057 0.057z" />
-<glyph unicode="&#xe90e;" glyph-name="close" d="M466.735 402.747l-407.293-407.291 45.255-45.254 407.293 407.291 407.293-407.297 45.254 45.261-407.293 407.291 452.547 452.549-45.254 45.255-452.547-452.549-452.548 452.548-45.255-45.255 452.548-452.548z" />
-<glyph unicode="&#xe90f;" glyph-name="pause" horiz-adv-x="784" d="M708.923-64v1024h78.769v-1024h-78.769zM0-64v1024h78.769v-1024h-78.769z" />
-<glyph unicode="&#xe910;" glyph-name="play" horiz-adv-x="848" d="M14.4 959.998l819.2-532.477-819.2-491.521v1024zM85.987 828.088v-765.653l612.519 367.515-612.519 398.139z" />
-<glyph unicode="&#xe911;" glyph-name="caret-bottom" horiz-adv-x="1707" d="M853.333-12.8l-750.933 733.867 136.533 136.533 614.4-631.467 614.4 631.467 136.533-136.533z" />
-<glyph unicode="&#xe912;" glyph-name="caret-left" horiz-adv-x="593" d="M500.364 960l93.091-93.091-430.545-418.909 430.545-418.909-93.091-93.091-500.364 512 500.364 512z" />
-<glyph unicode="&#xe913;" glyph-name="caret-right" horiz-adv-x="593" d="M93.091-64l-93.091 93.091 430.545 418.909-430.545 418.909 93.091 93.091 500.364-512-500.364-512z" />
-<glyph unicode="&#xe914;" glyph-name="caret-top" horiz-adv-x="1707" d="M1604.267 123.733l-136.533-136.533-614.4 631.467-614.4-631.467-136.533 136.533 750.933 733.867 750.933-733.867z" />
-<glyph unicode="&#xe915;" glyph-name="social" d="M768 272.213c-32.427 0-61.44-12.8-83.627-32.853l-304.213 177.067c2.133 9.813 3.84 19.627 3.84 29.867s-1.707 20.053-3.84 29.867l300.8 175.358c23.040-21.333 53.333-34.56 87.040-34.56 70.827 0 128 57.173 128 128s-57.173 128-128 128c-70.827 0-128-57.173-128-128 0-10.24 1.707-20.053 3.84-29.867l-300.8-175.36c-23.040 21.333-53.333 34.56-87.040 34.56-70.827 0-128-57.172-128-127.998s57.173-128 128-128c33.707 0 64 13.227 87.040 34.56l303.787-177.493c-2.133-8.96-3.413-18.347-3.413-27.733 0-68.693 55.893-124.587 124.587-124.587s124.587 55.893 124.587 124.587c0 68.693-55.893 124.587-124.587 124.587z" />
-<glyph unicode="&#xe916;" glyph-name="search" d="M795.575 247.247l212.558-208.798-70.222-68.998-212.504 208.847c-79.072-62.279-177.42-96.154-278.76-96.012-246.549 0-446.647 196.608-446.647 438.857s200.098 438.857 446.647 438.857c246.548 0 446.647-196.608 446.647-438.857 0.146-99.572-34.333-196.203-97.719-273.896zM696.023 283.429c62.986 63.639 98.158 148.948 98.016 237.714 0 188.611-155.482 341.333-347.392 341.333-191.959 0-347.392-152.722-347.392-341.333 0-188.562 155.433-341.333 347.392-341.333 90.344-0.141 177.164 34.421 241.935 96.305l7.441 7.314z" />
-<glyph unicode="&#xe917;" glyph-name="list-hyphen" horiz-adv-x="2731" d="M85.333 960h170.667v-853.333h2389.333v-170.667h-2560v1024z" />
-<glyph unicode="&#xe918;" glyph-name="toc" horiz-adv-x="1339" d="M945.231 802.462h-945.231v78.769h945.231v-78.769zM945.231 408.615h-945.231v78.769h945.231v-78.769zM945.231 14.769h-945.231v78.769h945.231v-78.769zM1339.077 841.846c0-65.255-52.901-118.154-118.154-118.154s-118.154 52.899-118.154 118.154c0 65.255 52.901 118.154 118.154 118.154s118.154-52.899 118.154-118.154zM1339.077 448c0-65.255-52.901-118.154-118.154-118.154s-118.154 52.899-118.154 118.154c0 65.255 52.901 118.154 118.154 118.154s118.154-52.899 118.154-118.154zM1339.077 54.154c0-65.252-52.901-118.154-118.154-118.154s-118.154 52.901-118.154 118.154c0 65.252 52.901 118.154 118.154 118.154s118.154-52.901 118.154-118.154z" />
-</font></defs></svg>
\ No newline at end of file
diff --git a/static/assets/fonts/icons/icomoon.ttf b/static/assets/fonts/icons/icomoon.ttf
deleted file mode 100644
index 3aa319a83fdc51af28426990a1c192fc1957ad55..0000000000000000000000000000000000000000
Binary files a/static/assets/fonts/icons/icomoon.ttf and /dev/null differ
diff --git a/static/assets/fonts/icons/icomoon.woff b/static/assets/fonts/icons/icomoon.woff
deleted file mode 100644
index 8c75595196d2a80ff494fbdadab7bb358d4361e7..0000000000000000000000000000000000000000
Binary files a/static/assets/fonts/icons/icomoon.woff and /dev/null differ
diff --git a/static/osuny-theme-version b/static/osuny-theme-version
new file mode 100644
index 0000000000000000000000000000000000000000..62e19781277b24a813c4f5dab3b7fc7c5eea0157
--- /dev/null
+++ b/static/osuny-theme-version
@@ -0,0 +1 @@
+v3.0.13
\ No newline at end of file
diff --git a/static/site.webmanifest b/static/site.webmanifest
new file mode 100644
index 0000000000000000000000000000000000000000..fd16e9c05ccb40afefc5c4a404aec21a5c3f292a
--- /dev/null
+++ b/static/site.webmanifest
@@ -0,0 +1,19 @@
+{
+  "name": "",
+  "short_name": "",
+  "icons": [
+    {
+      "src": "/assets/images/favicons/android-chrome-192x192.png",
+      "sizes": "192x192",
+      "type": "image/png"
+    },
+    {
+      "src": "/assets/images/favicons/android-chrome-512x512.png",
+      "sizes": "512x512",
+      "type": "image/png"
+    }
+  ],
+  "theme_color": "#ffffff",
+  "background_color": "#ffffff",
+  "display": "standalone"
+}