Преглед изворни кода

Merge branch 'release/0.3.1'

Olivier Massot пре 1 година
родитељ
комит
0ee38db188
49 измењених фајлова са 503 додато и 298 уклоњено
  1. 5 0
      app.vue
  2. 4 3
      components/About/Chronologie.vue
  3. 4 4
      components/About/Presentation.vue
  4. 2 2
      components/Common/Banner.vue
  5. 3 3
      components/Common/Card/Benefit.vue
  6. 3 3
      components/Common/Carousel/Clients.vue
  7. 1 1
      components/Common/Carousel/Fonctionnalite.vue
  8. 1 1
      components/Common/MenuScroll.vue
  9. 36 0
      components/Common/Meta.vue
  10. 27 28
      components/Common/ReviewSection.vue
  11. 1 3
      components/Home/Caroussel.vue
  12. 20 9
      components/Home/EventAgenda.vue
  13. 3 3
      components/Home/Help.vue
  14. 0 0
      components/Home/News.vue
  15. 3 28
      components/Home/Promotion.vue
  16. 6 28
      components/Home/Reviews.vue
  17. 6 29
      components/Home/Solution.vue
  18. 25 4
      components/JoinUs/Form.vue
  19. 5 0
      components/JoinUs/MissionDetail.vue
  20. 2 5
      components/Layout/AnchoredSection.vue
  21. 103 74
      components/Layout/Footer/Footer.vue
  22. 4 3
      components/Layout/Footer/Solutions.vue
  23. 1 1
      components/Layout/Navigation.vue
  24. 41 0
      components/Layout/UI/SectionTitle.vue
  25. 3 7
      components/Layout/UI/Title.vue
  26. 10 5
      components/Logiciels/Artist/Abonnement.vue
  27. 4 4
      components/Logiciels/Manager/Formation.vue
  28. 6 4
      components/Logiciels/Manager/SomeNumbers.vue
  29. 4 4
      components/Logiciels/School/Formations.vue
  30. 0 0
      components/Logiciels/School/Solutions.vue
  31. 8 3
      components/News/Details.vue
  32. 42 24
      components/Webinaire/Catalogue.vue
  33. 36 4
      components/Webinaire/FAQ.vue
  34. 5 0
      pages/CGV.vue
  35. 1 0
      pages/actualites/[id].vue
  36. 5 0
      pages/actualites/index.vue
  37. 6 1
      pages/formations.vue
  38. 4 0
      pages/index.vue
  39. 5 0
      pages/mentions-legales.vue
  40. 5 0
      pages/nous-contacter.vue
  41. 2 0
      pages/nous-rejoindre/[id].vue
  42. 7 0
      pages/nous-rejoindre/index.vue
  43. 5 1
      pages/opentalent_artist.vue
  44. 5 7
      pages/opentalent_manager.vue
  45. 5 0
      pages/opentalent_school.vue
  46. 5 0
      pages/politique-de-confidentialite-et-protection-des-donnees-personnelles.vue
  47. 14 2
      pages/qui-sommes-nous.vue
  48. 5 0
      pages/webinaires.vue
  49. 5 0
      stores/layoutStore.ts

+ 5 - 0
app.vue

@@ -9,4 +9,9 @@
 </template>
 </template>
 
 
 <script setup lang="ts">
 <script setup lang="ts">
+
+const layoutStore = useLayoutStore()
+
+layoutStore.resetAnchoredSections()
+
 </script>
 </script>

+ 4 - 3
components/About/Chronologie.vue

@@ -47,9 +47,9 @@
 
 
                 <v-col cols="4">
                 <v-col cols="4">
                   <div class="description-container">
                   <div class="description-container">
-                    <h3>
+                    <span class="year">
                       {{ slide.year }}
                       {{ slide.year }}
-                    </h3>
+                    </span>
 
 
                     <h4>
                     <h4>
                       {{ slide.title }}
                       {{ slide.title }}
@@ -260,8 +260,9 @@ const slides: Array<ChronologyItem> = [
     border-top-right-radius: 20%;
     border-top-right-radius: 20%;
     border-bottom-right-radius: 20%;
     border-bottom-right-radius: 20%;
 
 
-    h3 {
+    .year {
       font-size: 1.8rem;
       font-size: 1.8rem;
+      font-weight: 500;
     }
     }
 
 
     h4 {
     h4 {

+ 4 - 4
components/About/Presentation.vue

@@ -9,11 +9,11 @@
         </v-col>
         </v-col>
 
 
         <v-col cols="8">
         <v-col cols="8">
-          <h3 class="italic-title mr-8">
+          <div class="italic-title mr-8">
             “Imaginé par des musiciens pour des musiciens, Opentalent se veut être
             “Imaginé par des musiciens pour des musiciens, Opentalent se veut être
             la référence pour la gestion et la promotion du spectacle vivant sur
             la référence pour la gestion et la promotion du spectacle vivant sur
             les territoires.”
             les territoires.”
-          </h3>
+          </div>
         </v-col>
         </v-col>
       </v-row>
       </v-row>
 
 
@@ -41,9 +41,9 @@
             pour en faire la promotion.
             pour en faire la promotion.
           </p>
           </p>
 
 
-          <h4>
+          <h3>
             La Culture au service du développement territorial
             La Culture au service du développement territorial
-          </h4>
+          </h3>
 
 
           <p>
           <p>
             Qui n'a jamais entendu que la culture coûtait trop cher ? On l'entend
             Qui n'a jamais entendu que la culture coûtait trop cher ? On l'entend

+ 2 - 2
components/Common/Banner.vue

@@ -113,7 +113,7 @@ const props = defineProps({
 
 
 .details-square {
 .details-square {
   position: absolute;
   position: absolute;
-  bottom: 0.4rem;
+  bottom: 0;
   right: 0;
   right: 0;
   width: 13rem;
   width: 13rem;
   height: 10rem;
   height: 10rem;
@@ -122,7 +122,7 @@ const props = defineProps({
 
 
 .logo-square {
 .logo-square {
   position: absolute;
   position: absolute;
-  bottom: 0.4rem;
+  bottom: 0;
   right: 13rem;
   right: 13rem;
   width: 13rem;
   width: 13rem;
   height: 10rem;
   height: 10rem;

+ 3 - 3
components/Common/Card/Benefit.vue

@@ -63,7 +63,7 @@ hr {
     font-weight: 300;
     font-weight: 300;
     font-size: 1.5rem;
     font-size: 1.5rem;
     line-height: 1rem;
     line-height: 1rem;
-    color: var(--primary-color);
+    color: var(--on-primary-color);
   }
   }
 
 
   .number {
   .number {
@@ -82,7 +82,7 @@ hr {
   p {
   p {
     font-weight: normal;
     font-weight: normal;
     font-size: 1rem;
     font-size: 1rem;
-    color: var(--primary-color);
+    color: var(--on-primary-color);
     margin-top: 1rem;
     margin-top: 1rem;
     height: 5rem;
     height: 5rem;
   }
   }
@@ -90,7 +90,7 @@ hr {
   ul {
   ul {
     font-weight: normal;
     font-weight: normal;
     font-size: 0.8rem;
     font-size: 0.8rem;
-    color: var(--primary-color);
+    color: var(--on-primary-color);
     margin-top: 1rem;
     margin-top: 1rem;
     margin-bottom: 1rem;
     margin-bottom: 1rem;
   }
   }

+ 3 - 3
components/Common/Carousel/Clients.vue

@@ -4,11 +4,11 @@
   <LayoutContainer>
   <LayoutContainer>
     <!-- Titre -->
     <!-- Titre -->
     <v-row justify="center">
     <v-row justify="center">
-      <h2 class="text-center">
+      <h3 class="text-center">
         <slot name="title">
         <slot name="title">
           Plus de <span class="alt-color">5000 structures</span> nous font confiance
           Plus de <span class="alt-color">5000 structures</span> nous font confiance
         </slot>
         </slot>
-      </h2>
+      </h3>
     </v-row>
     </v-row>
 
 
     <v-container>
     <v-container>
@@ -75,7 +75,7 @@ const goToNext = () => {
   margin-left: auto;
   margin-left: auto;
 }
 }
 
 
-h2 {
+h3 {
   margin-bottom: 2rem;
   margin-bottom: 2rem;
   text-align: center;
   text-align: center;
   font-weight: 600;
   font-weight: 600;

+ 1 - 1
components/Common/Carousel/Fonctionnalite.vue

@@ -3,7 +3,7 @@
     <v-row>
     <v-row>
       <v-col cols="6">
       <v-col cols="6">
         <LayoutUISubTitle>
         <LayoutUISubTitle>
-          Découvrez TOUTES LES FONCTIONNALITÉS DE NOTRE solution
+          Découvrez toutes les fonctionnalités de notre solution
         </LayoutUISubTitle>
         </LayoutUISubTitle>
 
 
         <LayoutUITitle>
         <LayoutUITitle>

+ 1 - 1
components/Common/MenuScroll.vue

@@ -90,7 +90,7 @@ const handleScroll = () => {
 
 
   a {
   a {
     text-decoration: none;
     text-decoration: none;
-    color: var(--on-primary-color);
+    color: var(--on-neutral-color);
   }
   }
 
 
   a:hover {
   a:hover {

+ 36 - 0
components/Common/Meta.vue

@@ -0,0 +1,36 @@
+<!--
+Définit les balises meta de la page
+-->
+<template></template>
+
+<script setup lang="ts">
+  const props = defineProps({
+    title: {
+      type: String,
+      required: true
+    },
+    description: {
+      type: String,
+      required: true
+    },
+    image: {
+      type: String,
+      required: false,
+      default: 'images/Opentalent'
+    }
+  })
+
+  useSeoMeta({
+    title : props.title,
+    ogTitle : props.title,
+    twitterTitle : props.title,
+    description : props.description,
+    ogDescription : props.description,
+    twitterDescription : props.description,
+    ogImage : props.image,
+    twitterImage: props.image,
+    twitterCard : 'summary_large_image',
+    ogType: 'website',
+    ogLocale: 'fr_FR'
+  })
+</script>

+ 27 - 28
components/Common/ReviewSection.vue

@@ -38,20 +38,20 @@
                     <v-card-text>
                     <v-card-text>
                       {{ card.review }}
                       {{ card.review }}
                     </v-card-text>
                     </v-card-text>
-
-                    <footer>
-                      <v-card-actions>
-                        {{ card.name }}
-                      </v-card-actions>
-
-                      <p class="reviewer-status">
-                        {{ card.status }}
-                      </p>
-                      <p class="reviewer-structure">
-                        {{ card.structure }}
-                      </p>
-                    </footer>
                   </v-card-item>
                   </v-card-item>
+
+                  <v-card-actions>
+                    <p class="reviewer-name">
+                      {{ card.name }}
+                    </p>
+
+                    <p class="reviewer-status">
+                      {{ card.status }}
+                    </p>
+                    <p class="reviewer-structure">
+                      {{ card.structure }}
+                    </p>
+                  </v-card-actions>
                 </v-card>
                 </v-card>
               </v-container>
               </v-container>
             </Slide>
             </Slide>
@@ -129,11 +129,19 @@ const goNext = () => {
 }
 }
 
 
 .carousel {
 .carousel {
-  .v-card-item {
+  .v-card {
     display: flex;
     display: flex;
     flex-direction: column;
     flex-direction: column;
-    justify-content: space-between;
-    height: 100%;
+    padding: 0 0.5rem;
+    border-radius: 1rem;
+    min-height: 300px;
+    max-height: 300px;
+    margin-top: 2rem;
+    margin-bottom: 0.6rem;
+  }
+
+  .v-card-item {
+    flex: 1
   }
   }
 
 
   .v-card-text {
   .v-card-text {
@@ -141,17 +149,17 @@ const goNext = () => {
     min-height: 120px;
     min-height: 120px;
     overflow: auto;
     overflow: auto;
     font-size: 0.9rem;
     font-size: 0.9rem;
+    flex: 1;
   }
   }
 
 
-  footer {
-    min-height: 100px;
+  .v-card-actions {
     display: flex;
     display: flex;
     flex-direction: column;
     flex-direction: column;
     justify-content: center;
     justify-content: center;
     align-items: center;
     align-items: center;
   }
   }
 
 
-  .v-card-actions {
+  .reviewer-name {
     font-weight: 500;
     font-weight: 500;
     font-size: 20px;
     font-size: 20px;
     line-height: 24px;
     line-height: 24px;
@@ -192,15 +200,6 @@ const goNext = () => {
   border-radius: 1rem;
   border-radius: 1rem;
 }
 }
 
 
-.v-card {
-  padding: 0 0.5rem;
-  border-radius: 1rem;
-  min-height: 220px;
-  max-height: 250px;
-  margin-top: 2rem;
-  margin-bottom: 0.6rem;
-}
-
 @media (min-width:2100px) {
 @media (min-width:2100px) {
   .v-card {
   .v-card {
     min-height: 360px !important;
     min-height: 360px !important;

+ 1 - 3
components/Home/Caroussel.vue

@@ -24,9 +24,7 @@ Carrousel de la page d'accueil
             class="logo"
             class="logo"
           />
           />
 
 
-          <p class="description">
-            {{ item.description }}
-          </p>
+          <p class="description" v-html="item.description" />
 
 
           <v-row class="align-start pl-4">
           <v-row class="align-start pl-4">
             <v-btn
             <v-btn

+ 20 - 9
components/Home/EventAgenda.vue

@@ -5,24 +5,34 @@ Section "Agenda" de la page d'accueil
   <LayoutContainer>
   <LayoutContainer>
     <div class="container">
     <div class="container">
       <div class="d-flex align-center justify-center">
       <div class="d-flex align-center justify-center">
-        <h2>
+        <h3>
           Retrouvez tous vos évènements dans l'agenda et référencez vous dans
           Retrouvez tous vos évènements dans l'agenda et référencez vous dans
           l'annuaire
           l'annuaire
-        </h2>
+        </h3>
       </div>
       </div>
 
 
       <v-row justify="center">
       <v-row justify="center">
         <div class="btn-container">
         <div class="btn-container">
           <v-col cols="12" md="6">
           <v-col cols="12" md="6">
-            <v-btn append-icon="fas fa-arrow-right" class="btn-event">
-              Découvrir l'agenda
-            </v-btn>
+            <AgendaLink href="/">
+              <v-btn
+                append-icon="fas fa-arrow-right"
+                class="btn-event"
+              >
+                Découvrir l'agenda
+              </v-btn>
+            </AgendaLink>
           </v-col>
           </v-col>
 
 
           <v-col cols="12" md="6">
           <v-col cols="12" md="6">
-            <v-btn append-icon="fas fa-arrow-right" class="btn-event">
-              Découvrir l’ANNUAIRE
-            </v-btn>
+            <AgendaLink href="/annuaire">
+              <v-btn
+                append-icon="fas fa-arrow-right"
+                class="btn-event"
+              >
+                Découvrir l’annuaire
+              </v-btn>
+            </AgendaLink>
           </v-col>
           </v-col>
         </div>
         </div>
       </v-row>
       </v-row>
@@ -32,6 +42,7 @@ Section "Agenda" de la page d'accueil
 
 
 <script setup>
 <script setup>
 import { useDisplay } from "vuetify";
 import { useDisplay } from "vuetify";
+import AgendaLink from "~/components/Common/AgendaLink.vue";
 const { mdAndDown } = useDisplay();
 const { mdAndDown } = useDisplay();
 </script>
 </script>
 
 
@@ -52,7 +63,7 @@ const { mdAndDown } = useDisplay();
   }
   }
 }
 }
 
 
-h2 {
+h3 {
   height: 9rem;
   height: 9rem;
   font-weight: 400;
   font-weight: 400;
   font-size: 3rem;
   font-size: 3rem;

+ 3 - 3
components/Home/Help.vue

@@ -10,10 +10,10 @@ Section "Besoin d'aide" de la page d'accueil
       </v-col>
       </v-col>
 
 
       <v-col cols="12" lg="6" class="col">
       <v-col cols="12" lg="6" class="col">
-        <h4>
+        <h3>
           Notre équipe est à vos côtés
           Notre équipe est à vos côtés
           pour vous guider
           pour vous guider
-        </h4>
+        </h3>
 
 
         <p>
         <p>
           Besoin d’aide ? <br />
           Besoin d’aide ? <br />
@@ -91,7 +91,7 @@ li {
   border-radius: 3rem;
   border-radius: 3rem;
 }
 }
 
 
-h4 {
+h3 {
   margin-bottom: 0.7rem;
   margin-bottom: 0.7rem;
   font-weight: 400;
   font-weight: 400;
   font-size: 2rem;
   font-size: 2rem;

+ 0 - 0
components/Home/News.vue


+ 3 - 28
components/Home/Promotion.vue

@@ -2,15 +2,9 @@
   <LayoutContainer>
   <LayoutContainer>
     <v-row class="gestion">
     <v-row class="gestion">
       <v-col>
       <v-col>
-        <div class="d-flex justify-center align-center flex-column">
-          <v-icon
-            size="6"
-            icon="fas fa-circle"
-          />
-          <h5>
-            GESTION ET PROMOTION
-          </h5>
-        </div>
+        <LayoutUISectionTitle class="alt-theme">
+          GESTION ET PROMOTION
+        </LayoutUISectionTitle>
 
 
         <v-row>
         <v-row>
           <p class="text-block">
           <p class="text-block">
@@ -102,9 +96,6 @@
 </template>
 </template>
 
 
 <script setup lang="ts">
 <script setup lang="ts">
-import { useDisplay } from "vuetify";
-
-const { mdAndDown } = useDisplay();
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
@@ -119,22 +110,6 @@ const { mdAndDown } = useDisplay();
     background: var(--primary-color);
     background: var(--primary-color);
   }
   }
 
 
-  h5 {
-    font-size: 1rem;
-    line-height: 1rem;
-    margin-top: 1rem;
-    color: var(--secondary-color);
-    text-align: center;
-    letter-spacing: 2.16px;
-    text-transform: uppercase;
-  }
-
-  .fa-circle{
-    margin-top: 1rem;
-    color: var(--on-primary-color);
-    margin-right: 1rem;
-  }
-
   .text-block {
   .text-block {
     font-weight: 600;
     font-weight: 600;
     font-size: 3rem;
     font-size: 3rem;

+ 6 - 28
components/Home/Reviews.vue

@@ -1,19 +1,13 @@
 <template>
 <template>
   <LayoutContainer>
   <LayoutContainer>
     <div class="container-1">
     <div class="container-1">
-      <div class="d-flex justify-center align-center flex-column">
-        <v-icon
-          icon="fa-solid fa-circle"
-          size="6"
-        />
-        <h6>
-          Avis Clients
-        </h6>
-      </div>
+      <LayoutUISectionTitle>
+        Avis Clients
+      </LayoutUISectionTitle>
 
 
-      <h3>
+      <h4>
         C'est vous qui le dites
         C'est vous qui le dites
-      </h3>
+      </h4>
     </div>
     </div>
 
 
     <!-- Ecrans larges -->
     <!-- Ecrans larges -->
@@ -274,22 +268,7 @@ const items: Ref<Array<{ src: string }>> = ref([
   background-color: var(--neutral-color);
   background-color: var(--neutral-color);
   height: 22rem;
   height: 22rem;
 
 
-  .v-icon {
-    margin-top: 1rem;
-    color: var(--secondary-color);
-  }
-
-  h6 {
-    font-size: 1rem;
-    line-height: 1rem;
-    margin-top: 1rem;
-    text-align: center;
-    letter-spacing: 2.16px;
-    text-transform: uppercase;
-    margin-bottom: 0.5rem;
-  }
-
-  h3 {
+  h4 {
     font-size: 2rem;
     font-size: 2rem;
     line-height: 42px;
     line-height: 42px;
     text-align: center;
     text-align: center;
@@ -299,7 +278,6 @@ const items: Ref<Array<{ src: string }>> = ref([
   @media (max-width: 600px) {
   @media (max-width: 600px) {
     margin-bottom: 24px;
     margin-bottom: 24px;
   }
   }
-
 }
 }
 
 
 .container-2 {
 .container-2 {

+ 6 - 29
components/Home/Solution.vue

@@ -4,20 +4,13 @@ Section "Solutions" de la page d'accueil
 
 
 <template>
 <template>
   <LayoutContainer>
   <LayoutContainer>
+    <LayoutUISectionTitle class="alt-theme">
+      3 solutions
+    </LayoutUISectionTitle>
 
 
-    <div class="d-flex justify-center align-center flex-column">
-      <v-icon
-        size="6"
-        icon="fas fa-circle"
-      />
-      <h5>
-        3 solutions
-      </h5>
-    </div>
-
-    <h3 class="text-center" >
+    <h4 class="text-center" >
       Trouvez la solution faites pour vous
       Trouvez la solution faites pour vous
-    </h3>
+    </h4>
 
 
     <v-row class="solutions center-90">
     <v-row class="solutions center-90">
       <v-col
       <v-col
@@ -157,23 +150,7 @@ const solutions: Array<SolutionItem> = [
   position: relative;
   position: relative;
 }
 }
 
 
-h5 {
-  font-size: 1rem;
-  line-height: 1rem;
-  margin-top: 1rem;
-  color: var(--secondary-color);
-  text-align: center;
-  letter-spacing: 2.16px;
-  text-transform: uppercase;
-}
-
-.fa-circle {
-  margin-top: 1rem;
-  color: var(--on-primary-color);
-  margin-right: 1rem;
-}
-
-h3 {
+h4 {
   margin-top: 0.5rem;
   margin-top: 0.5rem;
   font-size: 2.8rem;
   font-size: 2.8rem;
   line-height: 42px;
   line-height: 42px;

+ 25 - 4
components/JoinUs/Form.vue

@@ -51,17 +51,20 @@
           <v-file-input
           <v-file-input
             id="jobApplicationResume"
             id="jobApplicationResume"
             v-model="resumeUpload"
             v-model="resumeUpload"
-            :rules="[validateResume]"
+            :rules="[validateResume, validateFileSize]"
             label="Dépôt de CV*"
             label="Dépôt de CV*"
             accept=".pdf, .jpeg, .png"
             accept=".pdf, .jpeg, .png"
+            show-size
             required
             required
           />
           />
 
 
           <v-file-input
           <v-file-input
             id="jobApplicationMotivationLetter"
             id="jobApplicationMotivationLetter"
             v-model="motivationLetterUpload"
             v-model="motivationLetterUpload"
+            :rules="[validateFileSize]"
             label="Dépôt de lettre de motivation"
             label="Dépôt de lettre de motivation"
             accept=".pdf, .jpeg, .png"
             accept=".pdf, .jpeg, .png"
+            show-size
           />
           />
 
 
           <v-textarea
           <v-textarea
@@ -86,7 +89,7 @@
 
 
       <v-card-actions class="justify-center">
       <v-card-actions class="justify-center">
         <v-btn
         <v-btn
-          class="btn-more mb-4"
+          class="btn-more mb-4 submit"
           @click="submit"
           @click="submit"
         >
         >
           Envoyer
           Envoyer
@@ -124,6 +127,9 @@ const leftCars: ComputedRef<number> = computed(() =>
   maxMessageLength - (jobApplication.message ? jobApplication.message.length : 0)
   maxMessageLength - (jobApplication.message ? jobApplication.message.length : 0)
 )
 )
 
 
+// Taille maximum en Mo
+const maxFileSize = 5
+
 const validateName = (name: string | null) => !!name || "Le nom est obligatoire";
 const validateName = (name: string | null) => !!name || "Le nom est obligatoire";
 
 
 const validateSurname = (surname: string | null) => !!surname || "Le prénom est obligatoire";
 const validateSurname = (surname: string | null) => !!surname || "Le prénom est obligatoire";
@@ -134,9 +140,16 @@ const validateEmail = (email: string | null) =>
 const validatePhone = (email: string | null) =>
 const validatePhone = (email: string | null) =>
   (!!email && /^((\+|00)33\s?|0)[1-7]([\s.]?\d{2}){4}$/.test(email)) || "Le numéro de téléphone doit être valide";
   (!!email && /^((\+|00)33\s?|0)[1-7]([\s.]?\d{2}){4}$/.test(email)) || "Le numéro de téléphone doit être valide";
 
 
-const validateResume = (surname: string | null) =>
+const validateResume = () =>
   resumeUpload.value !== null && resumeUpload.value[0] !== null || "Vous devez joindre un CV à l'un des formats indiqués";
   resumeUpload.value !== null && resumeUpload.value[0] !== null || "Vous devez joindre un CV à l'un des formats indiqués";
 
 
+const validateFileSize = () =>
+  resumeUpload.value !== null
+  && resumeUpload.value[0] !== null
+  //@ts-ignore
+  && resumeUpload.value[0].size < (maxFileSize * 1024 * 1024)
+  || "La taille du fichier ne doit pas dépasser " + maxFileSize + " Mo";
+
 const validateNonEmptyMessage = (message: string | null) =>
 const validateNonEmptyMessage = (message: string | null) =>
   (!!message && message.length > 0) ||
   (!!message && message.length > 0) ||
   "Le message ne peut pas être vide";
   "Le message ne peut pas être vide";
@@ -179,5 +192,13 @@ const submit = async () => {
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
-
+.submit {
+  width: 100%;
+  margin-bottom: 0 !important;
+  height: 55px;
+}
+
+.submit:hover {
+  background-color: var(--on-neutral-color-extra-light);
+}
 </style>
 </style>

+ 5 - 0
components/JoinUs/MissionDetail.vue

@@ -25,6 +25,11 @@
         </div>
         </div>
 
 
         <div v-else-if="job !== null">
         <div v-else-if="job !== null">
+          <CommonMeta
+            :title="job.title"
+            description="Offre d'emploi"
+          />
+
           <LayoutUITitlePage>
           <LayoutUITitlePage>
             {{ job.title }}
             {{ job.title }}
           </LayoutUITitlePage>
           </LayoutUITitlePage>

+ 2 - 5
components/Layout/AnchoredSection.vue

@@ -31,20 +31,17 @@
   const top: Ref<number | null> = ref(null)
   const top: Ref<number | null> = ref(null)
   const bottom: Ref<number | null> = ref(null)
   const bottom: Ref<number | null> = ref(null)
 
 
-  onMounted(() => {
+  const onScroll = (scroll: any) => {
     top.value = section.value!.offsetTop
     top.value = section.value!.offsetTop
     bottom.value = section.value!.offsetTop + section.value!.offsetHeight
     bottom.value = section.value!.offsetTop + section.value!.offsetHeight
-  })
 
 
-  const onScroll = (e: any) => {
     if (top.value === null || bottom.value === null) {
     if (top.value === null || bottom.value === null) {
       return
       return
     }
     }
 
 
-    const screenVerticalCenter = document.documentElement.scrollTop + window.innerHeight / 2
+    const screenVerticalCenter = scroll.target.documentElement.scrollTop + window.innerHeight / 2
 
 
     const active = screenVerticalCenter > top.value && screenVerticalCenter < bottom.value
     const active = screenVerticalCenter > top.value && screenVerticalCenter < bottom.value
-
     if (active !== layoutStore.isAnchoredSectionOnScreen[props.id]) {
     if (active !== layoutStore.isAnchoredSectionOnScreen[props.id]) {
         layoutStore.setIsAnchoredSectionOnScreen(
         layoutStore.setIsAnchoredSectionOnScreen(
           props.id,
           props.id,

+ 103 - 74
components/Layout/Footer/Footer.vue

@@ -12,79 +12,108 @@
           </v-col>
           </v-col>
 
 
           <!-- Deuxième section : liens agenda culturel (écrans larges seulement) -->
           <!-- Deuxième section : liens agenda culturel (écrans larges seulement) -->
-          <v-col v-if="mdAndUp" cols="2" >
+          <v-col v-if="mdAndUp" cols="7" >
             <v-row>
             <v-row>
-              <h5>
-                Agenda culturel
-              </h5>
-            </v-row>
-            <v-row>
-              <AgendaLink href="/annuaire">
-                Annuaire
-              </AgendaLink>
-            </v-row>
-            <v-row>
-              <AgendaLink href="/actualites">
-                Actualités
-              </AgendaLink>
-            </v-row>
-            <v-row>
-              <AgendaLink href="/annonces">
-                Annonces
-              </AgendaLink>
-            </v-row>
-          </v-col>
+              <v-col cols="3">
+                <v-row>
+                  <h5>
+                    Agenda culturel
+                  </h5>
+                </v-row>
+                <v-row>
+                  <AgendaLink href="/annuaire">
+                    Annuaire
+                  </AgendaLink>
+                </v-row>
+                <v-row>
+                  <AgendaLink href="/actualites">
+                    Actualités
+                  </AgendaLink>
+                </v-row>
+                <v-row>
+                  <AgendaLink href="/annonces">
+                    Annonces
+                  </AgendaLink>
+                </v-row>
+              </v-col>
 
 
-          <!-- Troisième section : liens logiciels culturels (écrans larges seulement) -->
-          <v-col v-if="mdAndUp" cols="2">
-            <v-row>
-              <h5>
-                Logiciels culturels
-              </h5>
-            </v-row>
-            <v-row>
-              <nuxt-link to="/opentalent_artist">
-                Opentalent Artist
-              </nuxt-link>
-            </v-row>
-            <v-row>
-              <nuxt-link to="/opentalent_school">
-                Opentalent School
-              </nuxt-link
-              >
-            </v-row>
-            <v-row>
-              <nuxt-link to="/opentalent_manager">
-                Opentalent Manager
-              </nuxt-link>
-            </v-row>
-          </v-col>
+              <!-- Troisième section : liens logiciels culturels (écrans larges seulement) -->
+              <v-col cols="3">
+                <v-row>
+                  <h5>
+                    Logiciels culturels
+                  </h5>
+                </v-row>
+                <v-row>
+                  <nuxt-link to="/opentalent_artist">
+                    Opentalent Artist
+                  </nuxt-link>
+                </v-row>
+                <v-row>
+                  <nuxt-link to="/opentalent_school">
+                    Opentalent School
+                  </nuxt-link
+                  >
+                </v-row>
+                <v-row>
+                  <nuxt-link to="/opentalent_manager">
+                    Opentalent Manager
+                  </nuxt-link>
+                </v-row>
+              </v-col>
 
 
-          <!-- Quatrième section : liens espace client (écrans larges seulement) -->
-          <v-col v-if="mdAndUp" cols="2">
-            <v-row>
-              <h5>
-                Espace client
-              </h5>
-            </v-row>
-            <v-row>
-              <nuxt-link href="https://ressources.opentalent.fr/display/FAQ/Accueil">
-                Foire Aux Questions
-              </nuxt-link>
-            </v-row>
-            <v-row>
-              <nuxt-link href="https://ressources.opentalent.fr/" target="_blank">
-                Support en ligne
-              </nuxt-link>
-            </v-row>
-            <v-row>
-              <nuxt-link to="/nous-contacter" target="_blank" >
-                Nous contacter
-              </nuxt-link>
+              <!-- Quatrième section : A propos (écrans larges seulement) -->
+              <v-col cols="3">
+                <v-row>
+                  <h5>
+                    A PROPOS
+                  </h5>
+                </v-row>
+                <v-row>
+                  <nuxt-link to="/qui-sommes-nous">
+                    Qui sommes-nous
+                  </nuxt-link>
+                </v-row>
+                <v-row>
+                  <nuxt-link to="/nous-rejoindre">
+                    Nous rejoindre
+                  </nuxt-link
+                  >
+                </v-row>
+                <v-row>
+                  <nuxt-link to="/nous-contacter">
+                    Nous contacter
+                  </nuxt-link>
+                </v-row>
+              </v-col>
+
+              <!-- Cinquième section : liens espace client (écrans larges seulement) -->
+              <v-col cols="3">
+                <v-row>
+                  <h5>
+                    Espace client
+                  </h5>
+                </v-row>
+                <v-row>
+                  <nuxt-link href="https://ressources.opentalent.fr/display/FAQ/Accueil" target="_blank">
+                    Foire Aux Questions
+                  </nuxt-link>
+                </v-row>
+                <v-row>
+                  <nuxt-link href="https://ressources.opentalent.fr/" target="_blank">
+                    Support en ligne
+                  </nuxt-link>
+                </v-row>
+                <v-row>
+                  <nuxt-link to="/nous-contacter" target="_blank" >
+                    Nous contacter
+                  </nuxt-link>
+                </v-row>
+              </v-col>
             </v-row>
             </v-row>
           </v-col>
           </v-col>
 
 
-          <!-- Cinquième section : liens réseaux sociaux (écrans larges seulement) -->
+          <!-- Sixième section : liens réseaux sociaux (écrans larges seulement) -->
           <v-col v-if="mdAndUp" cols="2">
           <v-col v-if="mdAndUp" cols="2">
             <v-row class="justify-center">
             <v-row class="justify-center">
               <h5>
               <h5>
@@ -104,7 +133,7 @@
                 <nuxt-link
                 <nuxt-link
                   href="https://twitter.com/Opentalent_FRA"
                   href="https://twitter.com/Opentalent_FRA"
                   target="_blank"
                   target="_blank"
-                  class="fa-brands fa-square-twitter"
+                  class="fa-brands fa-square-x-twitter"
                 />
                 />
               </v-col>
               </v-col>
               <v-col cols="2">
               <v-col cols="2">
@@ -191,17 +220,17 @@
       <div class="footnotes">
       <div class="footnotes">
         <v-row justify="center">
         <v-row justify="center">
           <p class="mt-6">
           <p class="mt-6">
-            <a href="/mentions-legales" target="_blank">
+            <nuxt-link to="/mentions-legales">
               Mentions légales
               Mentions légales
-            </a>
+            </nuxt-link>
             -
             -
-            <a href="/politique-de-confidentialite-et-protection-des-donnees-personnelles" target="_blank">
+            <nuxt-link to="/politique-de-confidentialite-et-protection-des-donnees-personnelles">
               Politiques de cookies
               Politiques de cookies
-            </a>
+            </nuxt-link>
             -
             -
-            <a href="/CGV" target="_blank">
+            <nuxt-link to="/CGV">
               Conditions Générales de Ventes
               Conditions Générales de Ventes
-            </a>
+            </nuxt-link>
           </p>
           </p>
         </v-row>
         </v-row>
 
 

+ 4 - 3
components/Layout/Footer/Solutions.vue

@@ -25,7 +25,7 @@
 
 
         <v-col cols="10">
         <v-col cols="10">
           <!-- list v-chip-->
           <!-- list v-chip-->
-          <v-chip-group active-class="primary--text" column>
+          <v-chip-group column disabled>
             <v-chip class="ma-2 chip-custom" label>
             <v-chip class="ma-2 chip-custom" label>
               <span class="chip-detail">Orchestres</span>
               <span class="chip-detail">Orchestres</span>
             </v-chip>
             </v-chip>
@@ -57,7 +57,7 @@
 
 
         <v-col cols="10">
         <v-col cols="10">
           <!-- list v-chip-->
           <!-- list v-chip-->
-          <v-chip-group active-class="primary--text" column>
+          <v-chip-group column disabled>
             <v-chip class="ma-2 chip-custom" color="primary" label>
             <v-chip class="ma-2 chip-custom" color="primary" label>
               <span class="chip-detail">Fédérations</span>
               <span class="chip-detail">Fédérations</span>
             </v-chip>
             </v-chip>
@@ -86,7 +86,7 @@
 
 
         <v-col cols="10">
         <v-col cols="10">
           <!-- list v-chip-->
           <!-- list v-chip-->
-          <v-chip-group active-class="primary--text" column>
+          <v-chip-group column disabled>
             <v-chip class="ma-2 chip-custom" label>
             <v-chip class="ma-2 chip-custom" label>
               <span class="chip-detail">Conservatoire</span>
               <span class="chip-detail">Conservatoire</span>
             </v-chip>
             </v-chip>
@@ -141,6 +141,7 @@ const props = defineProps({
 }
 }
 
 
 .chip-custom {
 .chip-custom {
+  opacity: 1;
   color: var(--on-primary-color);
   color: var(--on-primary-color);
   border: 1px solid var(--primary-color);
   border: 1px solid var(--primary-color);
   border-radius: 3rem;
   border-radius: 3rem;

+ 1 - 1
components/Layout/Navigation.vue

@@ -19,7 +19,7 @@ Menu Navigation
         <v-menu
         <v-menu
           v-for="item in menu"
           v-for="item in menu"
           :key="item.label"
           :key="item.label"
-          open-on-hover
+          :open-on-hover="true"
         >
         >
           <template v-slot:activator="{ props }">
           <template v-slot:activator="{ props }">
             <nuxt-link
             <nuxt-link

+ 41 - 0
components/Layout/UI/SectionTitle.vue

@@ -0,0 +1,41 @@
+<!-- Titre H2 -->
+<template>
+  <div class="d-flex justify-center align-center flex-column">
+    <v-icon
+      size="6"
+      icon="fas fa-circle"
+    />
+    <h3>
+      <slot />
+    </h3>
+  </div>
+</template>
+
+<script setup lang="ts">
+</script>
+
+<style scoped lang="scss">
+h3 {
+  font-size: 1rem;
+  line-height: 1rem;
+  margin-top: 1rem;
+  text-align: center;
+  letter-spacing: 2.16px;
+  text-transform: uppercase;
+  color: var(--primary-color) !important;
+}
+
+.alt-theme h3 {
+  color: var(--on-primary-color-alt) !important;
+}
+
+.fa-circle {
+  margin-top: 1rem;
+  margin-right: 1rem;
+  color: var(--on-neutral-color-light) !important;
+}
+
+.alt-theme .fa-circle {
+  color: var(--on-primary-color) !important;
+}
+</style>

+ 3 - 7
components/Layout/UI/Title.vue

@@ -1,13 +1,9 @@
 <!-- Titre H2 -->
 <!-- Titre H2 -->
 <template>
 <template>
   <LayoutContainer>
   <LayoutContainer>
-    <!--
-    TODO: dans les faits c'est plutôt le sous-titre (même s'il apparait en plus gros)
-    voir à passer en H3, ou même en autre chose qu'un titre
-    -->
-    <h2>
+    <h3>
       <slot />
       <slot />
-    </h2>
+    </h3>
   </LayoutContainer>
   </LayoutContainer>
 </template>
 </template>
 
 
@@ -15,7 +11,7 @@
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
-  h2 {
+  h3 {
     color: var(--on-neutral-color);
     color: var(--on-neutral-color);
     font-weight: 600;
     font-weight: 600;
     font-size: 3rem;
     font-size: 3rem;

+ 10 - 5
components/Logiciels/Artist/Abonnement.vue

@@ -52,9 +52,9 @@
         </v-col>
         </v-col>
 
 
         <v-col cols="8">
         <v-col cols="8">
-          <h5>
+          <h3>
             Opentalent Artist, <br> la solution que vous attendiez...
             Opentalent Artist, <br> la solution que vous attendiez...
-          </h5>
+          </h3>
 
 
           <p class="solution">
           <p class="solution">
             Conçu pour les structures artistiques telles que chorales,
             Conçu pour les structures artistiques telles que chorales,
@@ -69,7 +69,12 @@
           </p>
           </p>
 
 
           <div class="border-row">
           <div class="border-row">
-            <v-img src="/images/logiciels/school/cmf_logo_orange.png" class="logo-cmf" />
+            <nuxt-link href="https://www.cmf-musique.org/" target="_blank">
+              <v-img
+                src="/images/logiciels/school/cmf_logo_orange.png"
+                class="logo-cmf"
+              />
+            </nuxt-link>
 
 
             <div class="cmf-container">
             <div class="cmf-container">
               <p>
               <p>
@@ -147,7 +152,7 @@ import AnchoredSection from "~/components/Layout/AnchoredSection.vue";
   text-align: justify
   text-align: justify
 }
 }
 
 
-h5 {
+h3 {
   color: var(--primary-color);
   color: var(--primary-color);
   margin-bottom: 4rem;
   margin-bottom: 4rem;
   font-size: 42px;
   font-size: 42px;
@@ -160,7 +165,7 @@ h5 {
   margin-bottom: 4rem;
   margin-bottom: 4rem;
 
 
   p {
   p {
-    color: var(--primary-color);
+    color: var(--on-primary-color);
     width: 25rem;
     width: 25rem;
     font-weight: 300;
     font-weight: 300;
     font-size: 16px;
     font-size: 16px;

+ 4 - 4
components/Logiciels/Manager/Formation.vue

@@ -22,13 +22,13 @@
             </div>
             </div>
 
 
             <div>
             <div>
-              <h4>
+              <h3>
                 {{ formation.sessions }}
                 {{ formation.sessions }}
-              </h4>
+              </h3>
 
 
-              <h3>
+              <h4>
                 {{ formation.title }}
                 {{ formation.title }}
-              </h3>
+              </h4>
 
 
               <p class="details mb-5">
               <p class="details mb-5">
                 {{ formation.description }}
                 {{ formation.description }}

+ 6 - 4
components/Logiciels/Manager/SomeNumbers.vue

@@ -38,10 +38,12 @@
           La plus grande Confédération Musicale de France nous fait confiance
           La plus grande Confédération Musicale de France nous fait confiance
         </span>
         </span>
 
 
-        <v-img
-          src="/images/logiciels/manager/cmf.jpg"
-          class="cmf-img mb-6"
-        />
+        <nuxt-link href="https://www.cmf-musique.org/" target="_blank">
+          <v-img
+            src="/images/logiciels/manager/cmf.jpg"
+            class="cmf-img mb-6"
+          />
+        </nuxt-link>
       </v-col>
       </v-col>
     </v-row>
     </v-row>
   </LayoutContainer>
   </LayoutContainer>

+ 4 - 4
components/Logiciels/School/Formations.vue

@@ -22,13 +22,13 @@
             </div>
             </div>
 
 
             <div>
             <div>
-              <h4>
+              <h3>
                 {{ formation.sessions }}
                 {{ formation.sessions }}
-              </h4>
+              </h3>
 
 
-              <h3>
+              <h4>
                 {{ formation.title }}
                 {{ formation.title }}
-              </h3>
+              </h4>
 
 
               <p class="details mb-5">
               <p class="details mb-5">
                 {{ formation.description }}
                 {{ formation.description }}

+ 0 - 0
components/Logiciels/School/Solutions.vue


+ 8 - 3
components/News/Details.vue

@@ -34,15 +34,20 @@
         </div>
         </div>
 
 
         <div v-else-if="newsItem !== null" class="news">
         <div v-else-if="newsItem !== null" class="news">
+          <CommonMeta
+            :title="newsItem.title"
+            :description="newsItem.leadText"
+          />
+
           <v-row class="center-90">
           <v-row class="center-90">
             <v-col cols="6">
             <v-col cols="6">
               <v-img :src="getImageUrl(newsItem.attachment)"/>
               <v-img :src="getImageUrl(newsItem.attachment)"/>
             </v-col>
             </v-col>
 
 
             <v-col cols="6">
             <v-col cols="6">
-              <h4>
+              <h1>
                 {{ newsItem.title }}
                 {{ newsItem.title }}
-              </h4>
+              </h1>
             </v-col>
             </v-col>
           </v-row>
           </v-row>
 
 
@@ -116,7 +121,7 @@ const getImageUrl = (attachment: string): string | null => {
     margin-right: auto;
     margin-right: auto;
   }
   }
 
 
-  h4 {
+  h1 {
     margin-top: 11rem;
     margin-top: 11rem;
     text-decoration: none;
     text-decoration: none;
     text-transform: uppercase;
     text-transform: uppercase;

+ 42 - 24
components/Webinaire/Catalogue.vue

@@ -8,12 +8,16 @@
       </v-row>
       </v-row>
 
 
       <v-row class="center-90">
       <v-row class="center-90">
-        <LayoutUITitlePage>
-          SIMPLIFIEZ LA GESTION ET LA COMMUNICATION DE VOTRE STRUCTURE CULTURELLE
-          <template #subtitle>
-            Votre orchestre, école de danse ou votre fédération mérite les outils les plus performants du marché pour briller en toute simplicité. Découvrez comment nos outils peuvent transformer votre quotidien :
-          </template>
-        </LayoutUITitlePage>
+        <v-col cols="12" class="section-title">
+          <h3>
+            SIMPLIFIEZ LA GESTION ET LA COMMUNICATION DE VOTRE STRUCTURE CULTURELLE
+          </h3>
+
+          <div class="strong-label">
+            Votre orchestre, école de danse ou votre fédération mérite les outils les plus performants du marché pour briller en toute simplicité.
+            Découvrez comment nos outils peuvent transformer votre quotidien :
+          </div>
+        </v-col>
       </v-row>
       </v-row>
 
 
       <v-row class="center-90 catalog">
       <v-row class="center-90 catalog">
@@ -101,11 +105,12 @@
     </div>
     </div>
 
 
     <!-- Modale d'inscription -->
     <!-- Modale d'inscription -->
-    <div
-      v-if="selectedWebinar"
+    <v-dialog
+      v-model="modalShowing"
+      max-width="800"
       class="calendar-modal"
       class="calendar-modal"
     >
     >
-      <div class="alt-theme">
+      <div class="alt-theme d-flex flex-column align-center">
         <LayoutUISubTitle>
         <LayoutUISubTitle>
           Inscrivez vous
           Inscrivez vous
         </LayoutUISubTitle>
         </LayoutUISubTitle>
@@ -131,7 +136,7 @@
           </v-col>
           </v-col>
         </v-row>
         </v-row>
       </div>
       </div>
-    </div>
+    </v-dialog>
   </LayoutContainer>
   </LayoutContainer>
 </template>
 </template>
 
 
@@ -265,6 +270,8 @@ const showModal = (webinaireTitle: string) => {
   selectedWebinar.value = webinaireTitle.trim();
   selectedWebinar.value = webinaireTitle.trim();
 };
 };
 
 
+const modalShowing = computed(() => selectedWebinar.value)
+
 const closeModal = () => {
 const closeModal = () => {
   selectedWebinar.value = null;
   selectedWebinar.value = null;
 };
 };
@@ -277,6 +284,31 @@ const closeModal = () => {
   background-color: transparent !important;
   background-color: transparent !important;
 }
 }
 
 
+.section-title {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+
+  h3 {
+    font-size: 2rem;
+    letter-spacing: .1rem;
+    line-height: 3.5rem;
+    margin-bottom: .5rem;
+    margin-top: 2rem;
+    text-transform: uppercase;
+  }
+
+  .strong-label {
+    font-size: 1.5rem;
+    font-weight: 400 !important;
+    letter-spacing: .1rem;
+    line-height: 2rem;
+    margin-bottom: 1rem;
+    text-align: center;
+    text-transform: uppercase;
+  }
+}
+
 .catalog {
 .catalog {
   padding: 2rem;
   padding: 2rem;
 
 
@@ -361,20 +393,6 @@ const closeModal = () => {
 }
 }
 
 
 .calendar-modal {
 .calendar-modal {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  background-color: rgba(14, 45, 50, 0.8);
-  z-index: 9999;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-
-  > div {
-    padding: 4rem;
-  }
 
 
   h4 {
   h4 {
     font-weight: 600;
     font-weight: 600;

+ 36 - 4
components/Webinaire/FAQ.vue

@@ -9,10 +9,17 @@ Foire aux questions
       </LayoutUISubTitle>
       </LayoutUISubTitle>
     </v-row>
     </v-row>
 
 
-    <LayoutUITitlePage>
-      Tout savoir sur nos webinaire en ligne
-      <template #subtitle>Les questions les plus fréquentes</template>
-    </LayoutUITitlePage>
+    <v-row class="center-90">
+      <v-col cols="12" class="section-title">
+        <h3>
+          Tout savoir sur nos webinaire en ligne
+        </h3>
+
+        <div class="strong-label">
+          Les questions les plus fréquentes
+        </div>
+      </v-col>
+    </v-row>
 
 
     <div class="faq">
     <div class="faq">
       <div
       <div
@@ -85,6 +92,31 @@ function isOpen(index: number) {
 
 
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
+.section-title {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+
+  h3 {
+    font-size: 2rem;
+    letter-spacing: .1rem;
+    line-height: 3.5rem;
+    margin-bottom: .5rem;
+    margin-top: 2rem;
+    text-transform: uppercase;
+  }
+
+  .strong-label {
+    font-size: 1.5rem;
+    font-weight: 400 !important;
+    letter-spacing: .1rem;
+    line-height: 2rem;
+    margin-bottom: 1rem;
+    text-align: center;
+    text-transform: uppercase;
+  }
+}
+
 .faq {
 .faq {
   padding: 1rem;
   padding: 1rem;
   width: 90%;
   width: 90%;

+ 5 - 0
pages/CGV.vue

@@ -1,4 +1,9 @@
 <template>
 <template>
+  <CommonMeta
+    title="Conditions générales de vente - Opentalent"
+    description="Conditions générales de vente"
+  />
+
   <LayoutUITitlePage>
   <LayoutUITitlePage>
     Conditions générales de vente
     Conditions générales de vente
   </LayoutUITitlePage>
   </LayoutUITitlePage>

+ 1 - 0
pages/actualites/[id].vue

@@ -1,4 +1,5 @@
 <template>
 <template>
+  <!-- Balises meta: définies dans le component Details -->
   <NewsDetails />
   <NewsDetails />
 
 
   <LayoutFooterPrefooter />
   <LayoutFooterPrefooter />

+ 5 - 0
pages/actualites/index.vue

@@ -1,4 +1,9 @@
 <template>
 <template>
+  <CommonMeta
+    title="Actualités - Opentalent"
+    description="Les dernières actualités"
+  />
+
   <NewsList />
   <NewsList />
 
 
   <LayoutFooterPrefooter />
   <LayoutFooterPrefooter />

+ 6 - 1
pages/formations.vue

@@ -1,8 +1,13 @@
 <template>
 <template>
+  <CommonMeta
+    title="Formation - Opentalent"
+    description="Prise en main ou piqûre de rappel, on est toujours à vos côtés."
+  />
+
   <LayoutUITitlePage>
   <LayoutUITitlePage>
     Formation
     Formation
     <template #subtitle>
     <template #subtitle>
-      Prise en main ou piqûre de rappel,on est toujours à vos côtés.
+      Prise en main ou piqûre de rappel, on est toujours à vos côtés.
     </template>
     </template>
   </LayoutUITitlePage>
   </LayoutUITitlePage>
 
 

+ 4 - 0
pages/index.vue

@@ -1,4 +1,8 @@
 <template>
 <template>
+  <CommonMeta
+    title="Opentalent - Logiciels culturels"
+    description="Une gamme de logiciels adaptée à chaque structure culturelle"
+  />
 
 
   <CommonActionMenu />
   <CommonActionMenu />
 
 

+ 5 - 0
pages/mentions-legales.vue

@@ -1,4 +1,9 @@
 <template>
 <template>
+  <CommonMeta
+    title="Mentions légales - Opentalent"
+    description="Mentions légales"
+  />
+
   <LayoutUITitlePage>
   <LayoutUITitlePage>
     Mentions légales
     Mentions légales
   </LayoutUITitlePage>
   </LayoutUITitlePage>

+ 5 - 0
pages/nous-contacter.vue

@@ -1,4 +1,9 @@
 <template>
 <template>
+  <CommonMeta
+    title="Nous contacter - Opentalent"
+    description="Notre équipe est là pour vous. Contactez-nous!"
+  />
+
   <ContactBanner />
   <ContactBanner />
 
 
   <ContactForm />
   <ContactForm />

+ 2 - 0
pages/nous-rejoindre/[id].vue

@@ -1,4 +1,6 @@
 <template>
 <template>
+  <!-- Balises meta: définies dans le component Details -->
+
   <CommonBanner
   <CommonBanner
     imageSrc="/images/actu/pub.png"
     imageSrc="/images/actu/pub.png"
     imageAlt="banner"
     imageAlt="banner"

+ 7 - 0
pages/nous-rejoindre/index.vue

@@ -1,4 +1,9 @@
 <template>
 <template>
+  <CommonMeta
+    title="Nous rejoindre - Opentalent"
+    description="Offres d'emploi et candidatures"
+  />
+
   <LayoutUITitlePage>
   <LayoutUITitlePage>
     Nous rejoindre
     Nous rejoindre
   </LayoutUITitlePage>
   </LayoutUITitlePage>
@@ -40,3 +45,5 @@ h3 {
   width: 100%;
   width: 100%;
 }
 }
 </style>
 </style>
+<script setup lang="ts">
+</script>

+ 5 - 1
pages/opentalent_artist.vue

@@ -1,4 +1,9 @@
 <template>
 <template>
+  <CommonMeta
+    title="Opentalent Artist"
+    description="Description du produit Opentalent Artist"
+  />
+
   <div class="theme-artist" >
   <div class="theme-artist" >
     <CommonActionMenu :actions="stickyMenuActions" />
     <CommonActionMenu :actions="stickyMenuActions" />
 
 
@@ -13,7 +18,6 @@
       image-alt="banner artist"
       image-alt="banner artist"
       square-text="Orchestres, chorales, compagnies de danse, de cirque et de théâtre"
       square-text="Orchestres, chorales, compagnies de danse, de cirque et de théâtre"
       logo-src="/images/logo/logiciels/Artist-noir.png"
       logo-src="/images/logo/logiciels/Artist-noir.png"
-      :logo-alt-theme="true"
     />
     />
 
 
     <CommonMenuScroll :menus="menus" class="mb-6" />
     <CommonMenuScroll :menus="menus" class="mb-6" />

+ 5 - 7
pages/opentalent_manager.vue

@@ -1,11 +1,10 @@
 <template>
 <template>
-  <div class="theme-manager">
-    <CommonBannerTitle
-      leftText="School"
-      title="Opentalent Manager"
-      rightText="Artist"
-    />
+  <CommonMeta
+    title="Opentalent Manager"
+    description="Description du produit Opentalent Manager"
+  />
 
 
+  <div class="theme-manager">
     <LogicielsTitle>
     <LogicielsTitle>
       <template #left-text>School</template>
       <template #left-text>School</template>
       Opentalent Manager
       Opentalent Manager
@@ -17,7 +16,6 @@
       imageAlt="line"
       imageAlt="line"
       squareText="Fédérations, confédérations et collectivités"
       squareText="Fédérations, confédérations et collectivités"
       logoSrc="/images/logo/logiciels/Manager-noir.png"
       logoSrc="/images/logo/logiciels/Manager-noir.png"
-      :logo-alt-theme="true"
     />
     />
 
 
     <CommonMenuScroll :menus="menus" class="mb-6" />
     <CommonMenuScroll :menus="menus" class="mb-6" />

+ 5 - 0
pages/opentalent_school.vue

@@ -1,4 +1,9 @@
 <template>
 <template>
+  <CommonMeta
+    title="Opentalent School"
+    description="Description du produit Opentalent School"
+  />
+
   <div class="theme-school">
   <div class="theme-school">
     <LogicielsTitle>
     <LogicielsTitle>
       <template #left-text>Artist</template>
       <template #left-text>Artist</template>

+ 5 - 0
pages/politique-de-confidentialite-et-protection-des-donnees-personnelles.vue

@@ -1,4 +1,9 @@
 <template>
 <template>
+  <CommonMeta
+    title="Politique de confidentialité - Opentalent"
+    description="Politique de confidentialité"
+  />
+
   <LayoutUITitlePage>
   <LayoutUITitlePage>
     POLITIQUE DE CONFIDENTIALITÉ
     POLITIQUE DE CONFIDENTIALITÉ
   </LayoutUITitlePage>
   </LayoutUITitlePage>

+ 14 - 2
pages/qui-sommes-nous.vue

@@ -3,6 +3,11 @@
 -->
 -->
 
 
 <template>
 <template>
+  <CommonMeta
+    title="Qui sommes-nous ? - Opentalent"
+    description="Imaginé par des musiciens pour des musiciens, Opentalent se veut être la référence pour la gestion et la promotion du spectacle vivant sur les territoires."
+  />
+
   <LayoutUITitlePage class="mb-12">
   <LayoutUITitlePage class="mb-12">
     Qui sommes-nous ?
     Qui sommes-nous ?
   </LayoutUITitlePage>
   </LayoutUITitlePage>
@@ -22,7 +27,9 @@
 
 
   <AboutLogiciels />
   <AboutLogiciels />
 
 
-  <HomeEventAgenda class="mb-6"/>
+  <AnchoredSection id="agenda" class="mb-6">
+    <HomeEventAgenda/>
+  </AnchoredSection>
 
 
   <AboutChronologie v-if="lgAndUp"/>
   <AboutChronologie v-if="lgAndUp"/>
 
 
@@ -36,6 +43,7 @@
 <script setup lang="ts">
 <script setup lang="ts">
 import type { MenuScroll } from "~/types/interface";
 import type { MenuScroll } from "~/types/interface";
 import { useDisplay } from "vuetify";
 import { useDisplay } from "vuetify";
+import AnchoredSection from "~/components/Layout/AnchoredSection.vue";
 
 
 const { lgAndUp } = useDisplay()
 const { lgAndUp } = useDisplay()
 
 
@@ -50,5 +58,9 @@ const menus: Array<MenuScroll> = [
 ];
 ];
 </script>
 </script>
 
 
-<style scoped>
+<style scoped lang="scss">
+:deep(.active) {
+  background-color: var(--primary-color);
+  color: var(--on-primary-color);
+}
 </style>
 </style>

+ 5 - 0
pages/webinaires.vue

@@ -1,4 +1,9 @@
 <template>
 <template>
+  <CommonMeta
+    title="Webinaires - Opentalent"
+    description="Partez à la découverte de vos logiciels Opentalent."
+  />
+
   <CommonActionMenu />
   <CommonActionMenu />
 
 
   <LayoutUITitlePage>
   <LayoutUITitlePage>

+ 5 - 0
stores/layoutStore.ts

@@ -14,6 +14,10 @@ export const useLayoutStore = defineStore('layout', () => {
     isFooterVisible.value = value
     isFooterVisible.value = value
   }
   }
 
 
+  const resetAnchoredSections = () =>{
+    isAnchoredSectionOnScreen.value = {}
+  }
+
   const isAnchoredSectionOnScreen: Ref<Record<string, boolean>> = ref({})
   const isAnchoredSectionOnScreen: Ref<Record<string, boolean>> = ref({})
 
 
   const setIsAnchoredSectionOnScreen = (sectionId: string, value: boolean) => {
   const setIsAnchoredSectionOnScreen = (sectionId: string, value: boolean) => {
@@ -26,6 +30,7 @@ export const useLayoutStore = defineStore('layout', () => {
     isFooterVisible,
     isFooterVisible,
     setIsFooterVisible,
     setIsFooterVisible,
     isAnchoredSectionOnScreen,
     isAnchoredSectionOnScreen,
+    resetAnchoredSections,
     setIsAnchoredSectionOnScreen
     setIsAnchoredSectionOnScreen
   }
   }
 })
 })