.elementor-6515 .elementor-element.elementor-element-d3ddf64{--display:flex;--position:fixed;--min-height:80px;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:space-between;--align-items:center;--gap:0px 24px;--row-gap:0px;--column-gap:24px;--padding-top:0px;--padding-bottom:0px;--padding-left:64px;--padding-right:64px;top:0px;--z-index:1000;}body:not(.rtl) .elementor-6515 .elementor-element.elementor-element-d3ddf64{left:0px;}body.rtl .elementor-6515 .elementor-element.elementor-element-d3ddf64{right:0px;}.elementor-widget-image .widget-image-caption{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-6515 .elementor-element.elementor-element-0128261 img{height:36px;border-radius:0px 0px 0px 0px;}.elementor-6515 .elementor-element.elementor-element-f9f0cbb{--display:flex;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:flex-end;--align-items:center;--gap:0px 4px;--row-gap:0px;--column-gap:4px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-widget-mega-menu > .e-n-menu > .e-n-menu-wrapper > .e-n-menu-heading > .e-n-menu-item > .e-n-menu-title, .elementor-widget-mega-menu > .e-n-menu > .e-n-menu-wrapper > .e-n-menu-heading > .e-n-menu-item > .e-n-menu-title > .e-n-menu-title-container, .elementor-widget-mega-menu > .e-n-menu > .e-n-menu-wrapper > .e-n-menu-heading > .e-n-menu-item > .e-n-menu-title > .e-n-menu-title-container > span{font-family:var( --e-global-typography-accent-font-family ), Sans-serif;font-weight:var( --e-global-typography-accent-font-weight );}.elementor-widget-mega-menu{--n-menu-divider-color:var( --e-global-color-text );}.elementor-6515 .elementor-element.elementor-element-fcc6073{--display:flex;--flex-direction:row;--container-widget-width:initial;--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--gap:24px 40px;--row-gap:24px;--column-gap:40px;border-style:solid;--border-style:solid;border-width:1px 0px 0px 0px;--border-top-width:1px;--border-right-width:0px;--border-bottom-width:0px;--border-left-width:0px;border-color:#E2E5ED;--border-color:#E2E5ED;--padding-top:24px;--padding-bottom:24px;--padding-left:64px;--padding-right:64px;}.elementor-6515 .elementor-element.elementor-element-fcc6073:not(.elementor-motion-effects-element-type-background), .elementor-6515 .elementor-element.elementor-element-fcc6073 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#F9FAFB;}.elementor-6515 .elementor-element.elementor-element-1a982d0{--display:grid;--e-con-grid-template-columns:1fr 1fr 1fr 1.4fr;--e-con-grid-template-rows:repeat(1, 1fr);--gap:28px 40px;--row-gap:28px;--column-gap:40px;--grid-auto-flow:row;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-b565b44{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--gap:10px 10px;--row-gap:10px;--column-gap:10px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-widget-heading .elementor-heading-title{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );color:var( --e-global-color-primary );}.elementor-widget-icon-list .elementor-icon-list-item:not(:last-child):after{border-color:var( --e-global-color-text );}.elementor-widget-icon-list .elementor-icon-list-icon i{color:var( --e-global-color-primary );}.elementor-widget-icon-list .elementor-icon-list-icon svg{fill:var( --e-global-color-primary );}.elementor-widget-icon-list .elementor-icon-list-item > .elementor-icon-list-text, .elementor-widget-icon-list .elementor-icon-list-item > a{font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-widget-icon-list .elementor-icon-list-text{color:var( --e-global-color-secondary );}.elementor-6515 .elementor-element.elementor-element-a3b39d5 .elementor-icon-list-icon i{transition:color 0.3s;}.elementor-6515 .elementor-element.elementor-element-a3b39d5 .elementor-icon-list-icon svg{transition:fill 0.3s;}.elementor-6515 .elementor-element.elementor-element-a3b39d5{--e-icon-list-icon-size:14px;--icon-vertical-offset:0px;}.elementor-6515 .elementor-element.elementor-element-a3b39d5 .elementor-icon-list-text{transition:color 0.3s;}.elementor-6515 .elementor-element.elementor-element-16748e3{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--gap:10px 10px;--row-gap:10px;--column-gap:10px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-b5a1841 .elementor-icon-list-icon i{transition:color 0.3s;}.elementor-6515 .elementor-element.elementor-element-b5a1841 .elementor-icon-list-icon svg{transition:fill 0.3s;}.elementor-6515 .elementor-element.elementor-element-b5a1841{--e-icon-list-icon-size:14px;--icon-vertical-offset:0px;}.elementor-6515 .elementor-element.elementor-element-b5a1841 .elementor-icon-list-text{transition:color 0.3s;}.elementor-6515 .elementor-element.elementor-element-88f46b8{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--gap:10px 10px;--row-gap:10px;--column-gap:10px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-193ba05 .elementor-icon-list-icon i{transition:color 0.3s;}.elementor-6515 .elementor-element.elementor-element-193ba05 .elementor-icon-list-icon svg{transition:fill 0.3s;}.elementor-6515 .elementor-element.elementor-element-193ba05{--e-icon-list-icon-size:14px;--icon-vertical-offset:0px;}.elementor-6515 .elementor-element.elementor-element-193ba05 .elementor-icon-list-text{transition:color 0.3s;}.elementor-6515 .elementor-element.elementor-element-81848a0{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--gap:12px 12px;--row-gap:12px;--column-gap:12px;border-style:solid;--border-style:solid;border-width:1px 1px 1px 1px;--border-top-width:1px;--border-right-width:1px;--border-bottom-width:1px;--border-left-width:1px;border-color:#E2E5ED;--border-color:#E2E5ED;--border-radius:14px 14px 14px 14px;--padding-top:18px;--padding-bottom:18px;--padding-left:18px;--padding-right:18px;}.elementor-6515 .elementor-element.elementor-element-81848a0:not(.elementor-motion-effects-element-type-background), .elementor-6515 .elementor-element.elementor-element-81848a0 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#F9FAFB;}.elementor-6515 .elementor-element.elementor-element-11f826a{--display:flex;--overflow:hidden;--border-radius:8px 8px 8px 8px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-11f826a:not(.elementor-motion-effects-element-type-background), .elementor-6515 .elementor-element.elementor-element-11f826a > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-image:url("https://digitalcity.comaseinfo-support.be/wp-content/uploads/2026/04/photo-hero2.jpeg");background-position:center center;background-size:cover;}.elementor-widget-text-editor{font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );color:var( --e-global-color-text );}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:var( --e-global-color-primary );}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap, .elementor-widget-text-editor.elementor-drop-cap-view-default .elementor-drop-cap{color:var( --e-global-color-primary );border-color:var( --e-global-color-primary );}.elementor-widget-button .elementor-button{background-color:var( --e-global-color-accent );font-family:var( --e-global-typography-accent-font-family ), Sans-serif;font-weight:var( --e-global-typography-accent-font-weight );}.elementor-6515 .elementor-element.elementor-element-195d371{--display:flex;--flex-direction:row;--container-widget-width:initial;--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--gap:24px 40px;--row-gap:24px;--column-gap:40px;border-style:solid;--border-style:solid;border-width:1px 0px 0px 0px;--border-top-width:1px;--border-right-width:0px;--border-bottom-width:0px;--border-left-width:0px;border-color:#E2E5ED;--border-color:#E2E5ED;--padding-top:24px;--padding-bottom:24px;--padding-left:64px;--padding-right:64px;}.elementor-6515 .elementor-element.elementor-element-195d371:not(.elementor-motion-effects-element-type-background), .elementor-6515 .elementor-element.elementor-element-195d371 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#F9FAFB;}.elementor-6515 .elementor-element.elementor-element-9859f14{--display:grid;--e-con-grid-template-columns:repeat(1, 1fr);--e-con-grid-template-rows:repeat(1, 1fr);--gap:28px 40px;--row-gap:28px;--column-gap:40px;--grid-auto-flow:row;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-dbb8fd4{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--gap:10px 10px;--row-gap:10px;--column-gap:10px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-e093be8 .elementor-icon-list-icon i{transition:color 0.3s;}.elementor-6515 .elementor-element.elementor-element-e093be8 .elementor-icon-list-icon svg{transition:fill 0.3s;}.elementor-6515 .elementor-element.elementor-element-e093be8{--e-icon-list-icon-size:14px;--icon-vertical-offset:0px;}.elementor-6515 .elementor-element.elementor-element-e093be8 .elementor-icon-list-text{transition:color 0.3s;}.elementor-6515 .elementor-element.elementor-element-a3cc718{--display:flex;--flex-direction:row;--container-widget-width:initial;--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--gap:24px 40px;--row-gap:24px;--column-gap:40px;border-style:solid;--border-style:solid;border-width:1px 0px 0px 0px;--border-top-width:1px;--border-right-width:0px;--border-bottom-width:0px;--border-left-width:0px;border-color:#E2E5ED;--border-color:#E2E5ED;--padding-top:24px;--padding-bottom:24px;--padding-left:64px;--padding-right:64px;}.elementor-6515 .elementor-element.elementor-element-a3cc718:not(.elementor-motion-effects-element-type-background), .elementor-6515 .elementor-element.elementor-element-a3cc718 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#F9FAFB;}.elementor-6515 .elementor-element.elementor-element-b9efd56{--display:grid;--e-con-grid-template-columns:1fr 1.6fr;--e-con-grid-template-rows:repeat(1, 1fr);--gap:28px 40px;--row-gap:28px;--column-gap:40px;--grid-auto-flow:row;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-314bbd0{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--gap:10px 10px;--row-gap:10px;--column-gap:10px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-74c03c8 .elementor-icon-list-icon i{transition:color 0.3s;}.elementor-6515 .elementor-element.elementor-element-74c03c8 .elementor-icon-list-icon svg{transition:fill 0.3s;}.elementor-6515 .elementor-element.elementor-element-74c03c8{--e-icon-list-icon-size:14px;--icon-vertical-offset:0px;}.elementor-6515 .elementor-element.elementor-element-74c03c8 .elementor-icon-list-text{transition:color 0.3s;}.elementor-6515 .elementor-element.elementor-element-133e4f8{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--gap:12px 12px;--row-gap:12px;--column-gap:12px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-444590c{--display:flex;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--align-items:center;--gap:14px 14px;--row-gap:14px;--column-gap:14px;border-style:solid;--border-style:solid;border-width:0px 0px 1px 0px;--border-top-width:0px;--border-right-width:0px;--border-bottom-width:1px;--border-left-width:0px;border-color:#E2E5ED;--border-color:#E2E5ED;--padding-top:0px;--padding-bottom:12px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-fb4596d{--display:flex;--border-radius:8px 8px 8px 8px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-fb4596d:not(.elementor-motion-effects-element-type-background), .elementor-6515 .elementor-element.elementor-element-fb4596d > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-image:url("https://digitalcity.comaseinfo-support.be/wp-content/uploads/2026/08/pexels-photo-5393503-scaled.jpeg");background-position:center center;background-size:cover;}.elementor-6515 .elementor-element.elementor-element-9b5c194{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--gap:4px 4px;--row-gap:4px;--column-gap:4px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-fdd143f{--display:flex;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--align-items:center;--gap:14px 14px;--row-gap:14px;--column-gap:14px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-c28cb95{--display:flex;--border-radius:8px 8px 8px 8px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-c28cb95:not(.elementor-motion-effects-element-type-background), .elementor-6515 .elementor-element.elementor-element-c28cb95 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-image:url("https://digitalcity.comaseinfo-support.be/wp-content/uploads/2026/08/iStock-1212754341.jpg");background-position:center center;background-size:cover;}.elementor-6515 .elementor-element.elementor-element-d66702e{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--gap:4px 4px;--row-gap:4px;--column-gap:4px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-f0f9a4b{--n-menu-dropdown-content-max-width:initial;--n-menu-heading-wrap:wrap;--n-menu-heading-overflow-x:initial;--n-menu-title-distance-from-content:0px;--n-menu-toggle-icon-wrapper-animation-duration:500ms;--n-menu-title-space-between:0px;--n-menu-title-transition:300ms;--n-menu-icon-size:16px;--n-menu-toggle-icon-size:20px;--n-menu-toggle-icon-hover-duration:500ms;--n-menu-toggle-icon-distance-from-dropdown:0px;}.elementor-6515 .elementor-element.elementor-element-0384a45{--display:flex;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:flex-end;--align-items:center;--gap:0px 14px;--row-gap:0px;--column-gap:14px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-6515 .elementor-element.elementor-element-c253c7e .elementor-button-content-wrapper{flex-direction:row;}.elementor-6515 .elementor-element.elementor-element-c253c7e .elementor-button{border-radius:8px 8px 8px 8px;}.elementor-6515 .elementor-element.elementor-element-2d36c0f .elementor-button{font-family:"Roboto", Sans-serif;font-size:14px;font-weight:600;border-radius:8px 8px 8px 8px;}.elementor-theme-builder-content-area{height:400px;}.elementor-location-header:before, .elementor-location-footer:before{content:"";display:table;clear:both;}@media(min-width:768px){.elementor-6515 .elementor-element.elementor-element-d3ddf64{--content-width:1320px;}.elementor-6515 .elementor-element.elementor-element-fcc6073{--content-width:1320px;}.elementor-6515 .elementor-element.elementor-element-195d371{--content-width:1320px;}.elementor-6515 .elementor-element.elementor-element-a3cc718{--content-width:1320px;}}@media(max-width:1024px){.elementor-6515 .elementor-element.elementor-element-d3ddf64{--padding-top:0px;--padding-bottom:0px;--padding-left:32px;--padding-right:32px;}.elementor-6515 .elementor-element.elementor-element-1a982d0{--e-con-grid-template-columns:repeat(2, 1fr);--grid-auto-flow:row;}.elementor-6515 .elementor-element.elementor-element-9859f14{--e-con-grid-template-columns:repeat(2, 1fr);--grid-auto-flow:row;}.elementor-6515 .elementor-element.elementor-element-b9efd56{--e-con-grid-template-columns:repeat(2, 1fr);--grid-auto-flow:row;}}@media(max-width:767px){.elementor-6515 .elementor-element.elementor-element-d3ddf64{--padding-top:0px;--padding-bottom:0px;--padding-left:20px;--padding-right:20px;}.elementor-6515 .elementor-element.elementor-element-1a982d0{--e-con-grid-template-columns:repeat(1, 1fr);--grid-auto-flow:row;}.elementor-6515 .elementor-element.elementor-element-9859f14{--e-con-grid-template-columns:repeat(1, 1fr);--grid-auto-flow:row;}.elementor-6515 .elementor-element.elementor-element-b9efd56{--e-con-grid-template-columns:repeat(1, 1fr);--grid-auto-flow:row;}}/* Start custom CSS for mega-menu, class: .elementor-element-f0f9a4b *//* 29-08 : en tablette le panneau du mega menu est dimensionne sur la largeur
   de l'ecran (content_width: full_width) alors qu'il vit dans un conteneur qui
   porte 24px de marge interne. Il depassait donc de 25px a droite et se faisait
   rogner par l'overflow:hidden du parent — colonne de droite tronquee sur toute
   la plage 768-1024. */
@media (max-width:1099px){
  .elementor-6515 .elementor-element.elementor-element-f0f9a4b .e-n-menu-content{width:100%!important;max-width:100%!important;}
}

/* 19/10 : « À propos » et « Actualités » menent a leur page au clic (bureau). Sur tablette et
   mobile, toucher la ligne ouvre toujours le sous-menu, comme avant : la fleche couvre toute la ligne. */
@media (max-width:1024px){
  .elementor-6515 .elementor-element.elementor-element-f0f9a4b .e-n-menu-title{position:relative;}
  .elementor-6515 .elementor-element.elementor-element-f0f9a4b .e-n-menu-title .e-n-menu-dropdown-icon{position:absolute!important;top:0;left:0;width:100%!important;height:100%!important;justify-content:flex-end;z-index:3;background:transparent!important;}
}/* End custom CSS */
/* Start custom CSS *//* Hauteur de l'en-tete, en un seul endroit : la barre, le decalage du panneau
   burger, le fil d'Ariane des pages interieures et les onglets collants s'y
   referent tous. Passee de 64 a 80 px le 20/08 (reunion Hamza : « le menu est
   trop colle au haut de la page »). */
:root{--dc-header-h:80px;}
/* Bascule instantanee de la barre quand c'est le mega menu qui la pilote.
   Le panneau du mega apparait sans delai alors que le fond de la barre mettait
   400 ms a blanchir : on voyait le panneau blanc arriver, puis la barre le
   rattraper. Le fondu de 400 ms reste pour le defilement, ou il est justement
   ce qu'on veut. */
.dc-navbar--instant{transition-duration:0s!important;}

/* Sous-titre des entrees de menu. Le widget n'a pas de champ prevu ; le champ
   titre accepte le HTML et le rend tel quel, comme les numeros de module de la
   fiche formation. Le texte reste donc editable dans le panneau Elementor.
   Il ne sert qu'en mobile : en barre horizontale il n'y a pas la place. */
.dc-mi-sub{display:none;}


/* ---------- ECHELLE TYPOGRAPHIQUE (charte graphique 2021, sect. 6 / charte web v3, sect. 05) ----------
   Le kit definit deja les bons niveaux au niveau des balises : h1 48 / h2 34 / h3 19 / h4 16.
   Mais le widget Titre d'Elementor impose
   .elementor-widget-heading .elementor-heading-title{font-size:var(--e-global-typography-primary-font-size)}
   or cette variable est vide dans le kit : la declaration devient invalide au calcul et la
   taille retombe en heritage sur le body, soit 16px. On rend la main aux styles de balise
   en ciblant le tag (specificite 0,2,1 > 0,2,0).

   Pourquoi ici et pas dans le kit : update-page-settings REMPLACE l'objet de reglages au lieu
   de le fusionner. Toucher au CSS personnalise du kit (post 7) imposerait de reecrire l'integralite
   de ses reglages. Le template d'en-tete est charge sur tout le site, meme portee, sans ce risque. */
.elementor-widget-heading h1.elementor-heading-title{font-size:48px;}
.elementor-widget-heading h2.elementor-heading-title{font-size:34px;}
.elementor-widget-heading h3.elementor-heading-title{font-size:19px;}
.elementor-widget-heading h4.elementor-heading-title{font-size:16px;}
@media(max-width:1024px){
  .elementor-widget-heading h1.elementor-heading-title{font-size:38px;}
  .elementor-widget-heading h2.elementor-heading-title{font-size:30px;}
}
@media(max-width:767px){
  .elementor-widget-heading h1.elementor-heading-title{font-size:32px;}
  .elementor-widget-heading h2.elementor-heading-title{font-size:26px;}
  .elementor-widget-heading h3.elementor-heading-title{font-size:18px;}
}

/* ---------- EN-TETE Digitalcity ---------- */
.dc-mega-panel .elementor-widget-heading{--e-global-color-primary:var(--dc-text);}

.dc-navbar{position:fixed!important;top:0!important;left:0!important;right:0!important;width:100%!important;}
/* Sans width:auto, Elementor donne 100% de largeur a chaque conteneur : les deux
   groupes de droite se partagent alors l'espace au lieu de prendre leur taille propre. */
.dc-nav-group{flex:0 0 auto!important;width:auto;}

/* En-tete en trois parts (wireframe V10 et charte v3 sect. 10) : logo a gauche,
   menu au centre, actions a droite. Le logo et les actions se partagent l'espace
   restant a parts EGALES (flex-basis 0), ce qui place mecaniquement le menu sur
   l'axe de la colonne, quelle que soit la longueur des libelles FR ou NL.
   Le !important est necessaire : Elementor pose flex-grow sur chaque conteneur
   depuis ses propres reglages, a une specificite superieure. */
.dc-logo,.dc-nav-actions{flex:1 1 0!important;min-width:0;}
.dc-logo img{height:28px;width:auto;max-width:none;display:block;}

/* Reunion Hamza du 20/08 : le bloc FR/NL rejoint le groupe d'actions, a droite,
   et prend le meme cadre que la loupe et le bouton « Se connecter ». Il etait
   jusqu'ici traite comme un element de menu, donc centre avec lui. */
.dc-navbar .dc-lang .elementor-heading-title{font-family:var(--dc-body);font-size:14px;font-weight:500;padding:0 12px;height:44px;display:inline-flex;align-items:center;white-space:nowrap;border-radius:var(--dc-radius-sm);border:1px solid transparent;transition:border-color .3s var(--dc-ease),background-color .3s var(--dc-ease);}
.dc-navbar:not(.dc-navbar--solid) .dc-lang .elementor-heading-title{border-color:rgba(255,255,255,.28);background:rgba(255,255,255,.10);}
.dc-navbar--solid .dc-lang .elementor-heading-title{border-color:var(--dc-gray-200);background:transparent;}
.dc-navbar .dc-lang{flex:0 0 auto!important;width:auto!important;}
/* Langue active en gras, coloree selon l'etat de la barre (charte sect. 10 : .dc-lang b). */
.dc-navbar .dc-lang b{font-weight:700;}
.dc-navbar:not(.dc-navbar--solid) .dc-lang b{color:#fff;}
.dc-navbar--solid .dc-lang b{color:var(--dc-bleu-titres);}
@media(max-width:1024px){.dc-lang{display:none;}}

/* mega menu : titres d'onglet */
.dc-mega .e-n-menu-title{padding:8px 12px!important;}
.dc-mega .e-n-menu-title-text{font-family:var(--dc-body);font-size:15px;font-weight:400;white-space:nowrap;}
/* Pastille de survol derriere l'item (charte sect. 10 : .dc-nav-item:hover{background:gray-100}).
   Uniquement sur la barre BLANCHE : sur le hero, un aplat gris clair derriere le libelle
   salirait le verre depoli, et l'apercu de la charte montre la barre en blanc. */
.dc-navbar--solid .dc-mega .e-n-menu-title{border-radius:var(--dc-radius-sm);transition:background-color .2s var(--dc-ease);}
.dc-navbar--solid .dc-mega .e-n-menu-title:hover{background-color:var(--dc-gray-100);}

/* Chevron du menu. La charte sect. 08 impose des pictogrammes AU TRAIT et precise
   « jamais de pictos pleins melanges aux pictos au trait ». Elementor pose ici deux
   glyphes PLEINS de Font Awesome, et deux formes differentes selon l'etat.
   La mediatheque refusant le SVG sur ce site, on redessine le chevron en CSS : deux
   bords d'un carre tourne. Une seule forme dans les deux etats, couleur pilotee par
   la variable d'etat de la barre. */
.dc-mega{--n-menu-dropdown-icon-gap:7px;}
.dc-mega .e-n-menu-dropdown-icon svg{display:none;}
/* Elementor pose width:fit-content et height:calc(...) sur ce bouton en 0,3,0 :
   avec le svg masque la boite tomberait a zero. On repasse devant en 0,4,0. */
.dc-mega.elementor-widget-n-menu .e-n-menu-title .e-n-menu-dropdown-icon{width:13px;height:13px;position:relative;}
.dc-mega .e-n-menu-dropdown-icon::before{
  content:"";position:absolute;top:50%;left:50%;width:7px;height:7px;
  border-right:1.2px solid var(--n-menu-title-color-normal);
  border-bottom:1.2px solid var(--n-menu-title-color-normal);
  transform:translate(-50%,-65%) rotate(45deg);
  transition:transform .25s var(--dc-ease),border-color .4s var(--dc-ease);
}
.dc-mega .e-n-menu-dropdown-icon[aria-expanded="true"]::before{transform:translate(-50%,-35%) rotate(-135deg);}
.dc-mega .e-n-menu-title:hover .e-n-menu-dropdown-icon::before{border-color:var(--n-menu-title-color-hover);}

/* mega menu : panneau. Fond gris tres clair et cartes blanches par-dessus
   (charte sect. 10), filet de separation avec la barre et marges de 24 px :
   le tout est pose en reglages natifs sur les quatre panneaux.

   Le decalage de 13 px : Elementor ouvre le panneau au bas de l'ITEM de menu
   (top:100% de .e-n-menu), pas au bas de la barre. L'item fait 39 px dans une barre
   de 64, il reste donc 13 px sous lui, et sans compensation le panneau remonte sur
   la barre et recouvre le logo et le menu. La variable prevue par Elementor,
   --n-menu-title-distance-from-content, reste sans effet ici : on decale donc le
   panneau lui-meme. 13 px = (64 - 39) / 2. */
.dc-mega-panel{box-shadow:0 8px 32px rgba(15,27,61,.10);margin-top:13px;}
.dc-mega-cols{width:100%;}
/* Specificite 0,3,0 : le kit pose .elementor-widget-heading .elementor-heading-title{color:...}
   et l'echelle ci-dessus pose la taille par balise. On passe au-dessus des deux. */
/* Le titre de colonne etait en gris logo (137,140,141), plus CLAIR que les
   liens de la liste (95,105,128) : il passait au second plan au lieu de coiffer
   la colonne. Le V10 le veut en couleur de texte pleine, 13 px
   (.mega-menu-col-title{font-size:.8125rem;color:var(--text-primary)}). On y
   ajoute un filet sous le titre pour detacher l'en-tete de sa liste. */
.dc-mega-panel .dc-mega-col-title .elementor-heading-title{font-family:var(--dc-body);font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--dc-text);padding-bottom:10px;border-bottom:1px solid var(--dc-gray-200);}
.dc-mega-link .elementor-icon-list-items{display:flex;flex-direction:column;gap:2px;}
.dc-mega-link .elementor-icon-list-item{padding:0!important;}
.dc-mega-link .elementor-icon-list-icon{display:none!important;}
.dc-mega-link .elementor-icon-list-item a{display:block;font-family:var(--dc-body);font-size:15px;line-height:1.5;padding:5px 0;transition:color .2s var(--dc-ease),padding .2s var(--dc-ease);}
/* Le kit pose .elementor-widget-icon-list .elementor-icon-list-text{color:var(--e-global-color-secondary)}
   sur le <span>, ce qui ecrase la couleur heritee du <a>. On remonte la specificite. */
.dc-navbar .dc-mega-link .elementor-icon-list-item a,
.dc-navbar .dc-mega-link .elementor-icon-list-text{color:var(--dc-text-light);}
.dc-navbar .dc-mega-link .elementor-icon-list-item a:hover,
.dc-navbar .dc-mega-link .elementor-icon-list-item a:hover .elementor-icon-list-text{color:var(--dc-bleu-logo);}
.dc-mega-link .elementor-icon-list-item a:hover{padding-left:8px;}

/* mega menu : carte mise en avant */
.dc-mega-feat-img{width:100%;aspect-ratio:16/9;}
.dc-mega-panel .dc-mega-feat .elementor-heading-title{font-size:16px;line-height:1.3;}
.dc-mega-feat-text p{font-size:14px;line-height:1.45;color:var(--dc-text-light);margin:0;}
.dc-mega-feat-btn{margin-top:auto;}
/* Bouton de la carte : variante contour ENCRE qui s'inverse au survol
   (charte sect. 10 : .mega-cta-btn). Prefixe par .dc-mega-panel pour valoir 0,4,0 :
   sans ce prefixe, .dc-link-boxed .elementor-button:hover du socle, ecrit plus bas
   dans ce meme fichier et donc prioritaire a specificite egale, repeignait le libelle
   et le filet en bleu sur le fond encre. */
.dc-mega-panel .dc-mega-feat-btn .elementor-button{background:#fff!important;border:1px solid var(--dc-text)!important;color:var(--dc-text)!important;}
.dc-mega-panel .dc-mega-feat-btn .elementor-button:hover{background:var(--dc-text)!important;border-color:var(--dc-text)!important;color:#fff!important;}
.dc-mega-panel .dc-mega-feat-btn .elementor-button:hover svg{fill:#fff!important;}

/* mega menu : articles a la une */
.dc-mega-article-thumb{width:80px;height:60px;flex:none;}
.dc-mega-panel .dc-mega-article-title .elementor-heading-title{font-size:14px;font-weight:600;line-height:1.3;color:var(--dc-text);}
.dc-mega-panel .dc-mega-article-date .elementor-heading-title{font-family:var(--dc-body);font-size:12px;font-weight:400;color:var(--dc-text-light);}
.dc-mega-article:hover .dc-mega-article-title .elementor-heading-title{color:var(--dc-bleu-logo);}

/* ---------- ETATS DE LA NAVBAR (wireframe V10 : transparent -> solid) ---------- */
/* Le script de bascule vit dans le widget HTML "Bascule etat navbar" de ce template. */
.dc-navbar{border-bottom:1px solid transparent;transition:background-color .4s var(--dc-ease),border-color .4s var(--dc-ease);}
/* L'en-tete transparent porte un voile sombre (degrade noir 45 % -> 0) pour que
   le logo et le menu restent lisibles sur la photo.

   [9 septembre 2026] Ce voile etait decale de 4 px vers le bas. Motif d'epoque :
   il couvrait les quatre pixels du filet de cible en haut des colonnes du hero
   V1/V4 et en ternissait la couleur. CE FILET N'EXISTE PLUS — verifie sur
   l'accueil V5 : aucun element ne porte de bordure haute de 3 a 8 px dans les
   1200 premiers pixels de la page.

   Le decalage ne protegeait donc plus rien ; il laissait une bande de 4 px non
   voilee en haut de chaque page interieure. Sur A propos, dont le heros est
   clair en haut, cela se voyait franchement : (51,107,142) sur les lignes 0 a 3
   contre (27,58,78) a partir de la ligne 4 — une ligne claire en travers de la
   page, au-dessus de l'ombre.

   Retire. Impact mesure sur l'accueil validee : AUCUN, pixel pour pixel
   identique sur les huit premieres lignes. */
.dc-navbar .elementor-widget-html{display:none!important;}

/* etat transparent : au-dessus du hero sombre */
/* Le widget du logo occupe 409 px et centrait son image : le logo commencait a
   154 px du bord alors que le bloc d'actions finit pile sur le bord oppose.
   D'ou l'impression d'un en-tete moins large qu'il ne l'est. Cale a gauche, les
   deux marges deviennent symetriques. */
.dc-navbar .dc-logo{text-align:left!important;}
.dc-navbar .dc-logo .elementor-widget-container{text-align:left;}
.dc-navbar .dc-logo img{filter:brightness(0) invert(1);transition:filter .4s var(--dc-ease);}
/* Voile noir sous la barre transparente (charte sect. 11 : « leger voile noir pour la
   lisibilite »). background-repeat:no-repeat est INDISPENSABLE : le degrade est
   dimensionne sur la boite de padding puis repete sous la bordure de 1 px, ce qui y
   fait redemarrer le noir et dessine un filet sombre au bas de la barre. */
.dc-navbar:not(.dc-navbar--solid){background-image:linear-gradient(180deg,rgba(0,0,0,.45),rgba(0,0,0,0));background-repeat:no-repeat;}
/* Couleur des items du mega menu : Elementor la pose a specificite 0,6,0 avec #1f2124
   par defaut. On redefinit donc la VARIABLE sur le widget lui-meme. Le chevron suit. */
.dc-navbar .elementor-widget-n-menu{--n-menu-title-color-normal:rgba(255,255,255,.9);--n-menu-title-color-hover:#fff;--n-menu-title-color-active:#fff;}
.dc-navbar .e-n-menu-title-text{transition:color .4s var(--dc-ease);}
.dc-navbar .dc-lang .elementor-heading-title{color:rgba(255,255,255,.7);transition:color .4s var(--dc-ease);}
.dc-navbar .dc-lang:hover .elementor-heading-title{color:#fff;}

/* etat transparent : loupe et CTA en verre depoli. Le rayon de 8 px est pose en
   reglage natif sur les deux boutons, identique dans les deux etats : c'est le meme
   composant, seul son remplissage change. */
.dc-navbar:not(.dc-navbar--solid) .dc-search-btn .elementor-button,
.dc-navbar:not(.dc-navbar--solid) .dc-nav-cta .elementor-button{
  background-color:rgba(255,255,255,.15);
  background-image:none;
  border:1px solid rgba(255,255,255,.3);
  color:#fff;
  transition:background-color .3s var(--dc-ease),border-color .3s var(--dc-ease),color .3s var(--dc-ease);
}
.dc-navbar:not(.dc-navbar--solid) .dc-search-btn .elementor-button:hover,
.dc-navbar:not(.dc-navbar--solid) .dc-nav-cta .elementor-button:hover{
  background-color:rgba(255,255,255,.25);
}
.dc-navbar:not(.dc-navbar--solid) .dc-search-btn .elementor-button svg{fill:#fff;color:#fff;}

/* etat solid : apres 30% du hero, ou sur toute page sans hero */
.dc-navbar--solid{background-color:rgba(255,255,255,.97)!important;background-image:none!important;border-bottom-color:var(--dc-gray-200);}
.dc-navbar--solid .dc-logo img{filter:none;}
.dc-navbar--solid .elementor-widget-n-menu{--n-menu-title-color-normal:var(--dc-text);--n-menu-title-color-hover:var(--dc-bleu-titres);--n-menu-title-color-active:var(--dc-bleu-titres);}
.dc-navbar--solid .dc-lang .elementor-heading-title{color:var(--dc-text-light);}
.dc-navbar--solid .dc-lang:hover .elementor-heading-title{color:var(--dc-text);}

/* CTA « Se connecter » : degrade de marque sur la barre blanche, comme l'apercu de
   la sect. 10 — qui est justement une barre blanche. Sur le hero il garde le verre
   depoli. Ce partage respecte la sect. 09, qui reserve le degrade a l'action
   principale d'une page « une seule fois » : il n'apparait jamais dans le premier
   ecran a cote des boutons du hero. Arbitre avec Yassine le 18 aout 2026. */
.dc-navbar--solid .dc-nav-cta .elementor-button{background-color:transparent!important;background-image:var(--dc-grad-brand)!important;border:1px solid transparent!important;color:#fff!important;}
.dc-navbar--solid .dc-nav-cta .elementor-button:hover{filter:brightness(1.07);}
/* color, et pas seulement fill : depuis que le glyphe est un masque peint en
   currentColor, l'etat solid heritait du blanc de l'etat transparent et la
   loupe devenait invisible sur le bouton blanc. Defaut visible sur toutes les
   pages interieures, ou la barre est solid des le chargement. */
.dc-navbar--solid .dc-search-btn .elementor-button{background-color:transparent!important;background-image:none!important;border:1px solid var(--dc-gray-200)!important;color:var(--dc-text);}
.dc-navbar--solid .dc-search-btn .elementor-button svg{fill:var(--dc-text);color:var(--dc-text);}
.dc-navbar--solid .dc-search-btn .elementor-button:hover{background-color:var(--dc-gray-50)!important;}

/* le panneau ouvert reste toujours sur fond clair, quel que soit l'etat de la barre */
.dc-navbar .dc-mega-panel .e-n-menu-title-text{color:var(--dc-text);}
@media(prefers-reduced-motion:reduce){
  .dc-navbar,.dc-navbar .dc-logo img,.dc-navbar .e-n-menu-title-text{transition:none;}
}

/* etat mobile : meme bascule transparent -> solid que le desktop.
   Arbitrage : le wireframe V10 dessinait une barre blanche opaque sous 767px ;
   la charte web v3 (28/07, posterieure et validee) tranche l'inverse dans ses
   evolutions du hero — « en-tete transparent, logo blanc et menu burger ».
   On suit la charte. Le script de bascule choisit desormais le hero visible
   (.dc-hero-grid ou .dc-hero-mobile) pour que l'etat transparent existe aussi
   sous 620px ; sur une page sans hero il pose --solid des le chargement.
   Le traitement verre depoli de la loupe, deja porte par
   .dc-navbar:not(.dc-navbar--solid), s'applique tel quel : rien a redire ici. */
@media(max-width:767px){
  .dc-nav-cta{display:none;}

  /* Ordre de la barre : logo a gauche, loupe puis burger a l'extreme droite.
     RESTAURE le 21/08, emporte lui aussi par la decoupe par index. Sans ces
     regles les trois blocs gardaient leur largeur de bureau et le burger se
     retrouvait au milieu de l'ecran. */
  .dc-logo,.dc-nav-actions,.dc-nav-group{flex:0 0 auto!important;width:auto!important;}
  .dc-nav-actions{order:2;margin-left:auto;}
  .dc-nav-group{order:3;}
  .dc-navbar{--gap:0px 12px!important;--column-gap:12px!important;}
  .dc-mega-panel{margin-top:0;}

  /* ================= MENU MOBILE — « quatre portes », version simple ========
     Chaque section est une carte qui annonce ce qu'elle contient : filet de
     couleur, intitule, sous-titre, chevron. Le second niveau se deplie SOUS sa
     carte, comme le widget le fait nativement.

     Version precedente retiree le 21/08 : elle sortait les quatre panneaux du
     flux en position:fixed plein ecran, decales hors champ par un transform, et
     les faisait glisser au :has(). Quatre couches fixes empilees en permanence,
     par-dessus lesquelles Elementor pose ses propres styles en ligne pour
     animer le depliage — ca tenait en rendu sans interface, pas sur un vrai
     telephone. On ne se bat plus avec le widget : il gere l'ouverture, on
     n'habille que l'apparence. */
  /* VOICI LA VRAIE PANNE DU 21/08 : ce bloc de positionnement avait ete emporte
     par ma decoupe par index. Sans lui le panneau reprenait le comportement par
     defaut d'Elementor — absolu a 28 px du haut de son widget, donc glisse sous
     la barre, sans hauteur maximale ni defilement. D'ou un menu inutilisable sur
     telephone alors que les cartes, elles, s'affichaient bien.
     Le panneau est ancre sous l'en-tete, prend la largeur de l'ecran, et defile
     a l'interieur. dvh d'abord pour les navigateurs mobiles dont la barre
     d'adresse mange une partie de vh ; la ligne vh reste en repli. */
  .dc-navbar .elementor-widget-n-menu .e-n-menu[data-layout=dropdown] .e-n-menu-wrapper{
    position:fixed;
    top:var(--dc-header-h);
    left:0;
    right:0;
    width:auto;
    margin-block-start:0;
    max-height:calc(100vh - var(--dc-header-h));
    max-height:calc(100dvh - var(--dc-header-h));
    overflow-y:auto;
    overscroll-behavior:contain;
    -webkit-overflow-scrolling:touch;
    background:#fff;
    padding:14px 15px 24px;
    /* Plein ecran : un panneau qui s'arrete en cours d'ecran laisse penser
       qu'il manque quelque chose, et la page derriere capte des appuis. */
    min-height:calc(100vh - var(--dc-header-h));
    min-height:calc(100dvh - var(--dc-header-h));
  }
  .dc-navbar .e-n-menu-heading{display:flex;flex-direction:column;gap:8px;width:100%;}

  /* --- les quatre portes --- */
  /* Elementor pose une largeur en dur sur le <li> : sans width:100% les cartes
     debordaient de la colonne et la fleche sortait de l'ecran. */
  .dc-navbar .e-n-menu-item{position:relative;overflow:hidden;width:100%!important;
    border:1px solid var(--dc-gray-200);border-radius:13px;background:#fff;}
  /* Filets de couleur retires le 21/08. Le cyan et le magenta disent
     « chercheurs d'emploi » et « travailleurs » partout ailleurs sur le site,
     a commencer par le hero juste dessous : les reutiliser pour Actualites et
     Acces rapide brouillait le code couleur au lieu de l'appuyer. Un seul
     filet, neutre, marque la carte sans rien signifier de faux. */
  .dc-navbar .e-n-menu-item::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;
    z-index:2;background:var(--dc-gray-200);}
  .dc-navbar .e-n-menu-item:has(.e-n-menu-dropdown-icon[aria-expanded="true"])::before{background:var(--dc-bleu-logo);}
  .dc-navbar .e-n-menu-title{padding:13px 14px 12px!important;background:transparent!important;
    display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border-radius:0!important;}
  .dc-navbar .e-n-menu-title-container{flex:1;min-width:0;}
  .dc-navbar .e-n-menu-title-text{display:block;font-family:var(--dc-display);font-size:15.5px;
    font-weight:600;letter-spacing:-.01em;color:var(--dc-text);line-height:1.25;}
  .dc-navbar .dc-mi-sub{display:block;font-family:var(--dc-body);font-size:12px;font-weight:400;
    letter-spacing:0;color:var(--dc-text-light);margin-top:2px;}
  /* On garde le chevron du widget : c'est un controle de depliage, pas un lien,
     et Elementor le fait pivoter a l'ouverture. On n'habille que sa boite. */
  .dc-navbar .elementor-widget-n-menu .e-n-menu-dropdown-icon{width:25px!important;height:25px!important;
    flex:none;border:1px solid var(--dc-gray-200)!important;border-radius:7px;
    display:flex;align-items:center;justify-content:center;margin-top:2px;padding:0;
    background:transparent;}
  .dc-navbar .elementor-widget-n-menu .e-n-menu-dropdown-icon svg{width:11px;height:11px;
    fill:var(--dc-text-light);}
  .dc-navbar .e-n-menu-item:active{background:var(--dc-gray-50);}

  /* --- second niveau, deplie sur place --- */
  .dc-navbar .e-n-menu-content .dc-mega-panel{box-shadow:none!important;border:0!important;
    padding:0 14px 14px!important;margin:0!important;background:transparent!important;}
  .dc-navbar .e-n-menu-content .dc-mega-cols{flex-direction:column!important;gap:16px!important;}

  /* --- Bouton burger --------------------------------------------------
     RESTAURE le 21/08 : une decoupe par index avait emporte ce bloc en meme
     temps que le bouton Retour. Le burger se retrouvait sans couleur sur la
     photo et la barre ne blanchissait plus a l'ouverture, ce qui laissait les
     titres du menu en blanc sur le panneau blanc. */
  .dc-navbar .e-n-menu-toggle{background:transparent;border:0;padding:4px;position:relative;}
  /* Zone tactile portee a 44 px sans deplacer le glyphe. */
  .dc-navbar .e-n-menu-toggle::after{content:"";position:absolute;inset:-8px;}
  .dc-navbar .e-n-menu-toggle,.dc-navbar a,.dc-navbar button{-webkit-tap-highlight-color:transparent;}
  .dc-navbar .e-n-menu-toggle{border-radius:var(--dc-radius-sm);transition:background-color .15s var(--dc-ease);}
  .dc-navbar--solid .e-n-menu-toggle:active{background:rgba(26,29,43,.07);}
  .dc-navbar:not(.dc-navbar--solid) .e-n-menu-toggle:active{background:rgba(255,255,255,.18);}
  /* Le kit peint TOUS les <button> : #008AB7 au repos, #0033A1 au survol et au
     FOCUS, en 0,2,1. Le burger gardant le focus apres un appui, il restait donc
     en pave bleu a glyphe blanc une fois le menu ouvert. On neutralise, et on
     garde un anneau de focus pour le clavier. */
  .dc-navbar .e-n-menu-toggle:hover,
  .dc-navbar .e-n-menu-toggle:focus{background-color:transparent!important;color:inherit!important;}
  .dc-navbar .e-n-menu-toggle:focus:not(:focus-visible){outline:none;}
  .dc-navbar .e-n-menu-toggle:focus-visible{outline:2px solid var(--dc-bleu-logo);outline-offset:2px;}
  .dc-navbar .e-n-menu-toggle-icon svg{transition:fill .4s var(--dc-ease);}
  .dc-navbar:not(.dc-navbar--solid) .e-n-menu-toggle-icon svg{fill:#fff;color:#fff;}
  .dc-navbar--solid .e-n-menu-toggle-icon svg{fill:var(--dc-text);color:var(--dc-text);}

  /* --- Barre blanche tant que le panneau est ouvert --------------------
     Le panneau est blanc : au-dessus de lui, une barre transparente laissait le
     logo et les titres en blanc sur blanc. aria-expanded sur le bouton burger
     est le seul marqueur d'ouverture que le widget expose. */
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]){background-color:rgba(255,255,255,.97)!important;
    background-image:none!important;border-bottom-color:var(--dc-gray-200);}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-logo img{filter:none;}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .elementor-widget-n-menu{
    --n-menu-title-color-normal:var(--dc-text);--n-menu-title-color-hover:var(--dc-text-light);
    --n-menu-title-color-active:var(--dc-text);}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .e-n-menu-toggle-icon svg{fill:var(--dc-text);color:var(--dc-text);}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .e-n-menu-toggle:active{background:rgba(26,29,43,.07);}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-search-btn .elementor-button{
    background-color:transparent!important;background-image:none!important;
    border:1px solid var(--dc-gray-200)!important;color:var(--dc-text);}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-lang .elementor-heading-title{color:var(--dc-text-light);}

}

/* Titre de page lu mais non affiche.
   En desktop l'accroche du hero vit dans les trois panneaux (h3) : aucun ne se
   prete au h1 sans privilegier arbitrairement une des trois cibles. On porte
   donc le h1 hors-champ visuel, avec le texte exact du hero mobile.
   position:absolute le sort du flux flex : il ne decale aucune colonne. */
.dc-sr-h1{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0;}

/* ==========================================================================
   SOCLE PARTAGE dc-*
   ========================================================================== */

/* CORRECTIF NOYAU (portee dc-*)
   Le widget Titre applique color:var(--e-global-color-primary) au niveau
   .elementor-widget-heading. On redefinit la variable sur nos conteneurs. */
.dc-header-text .elementor-widget-heading,
.dc-card-title,
.dc-agenda-title,
.dc-tile .elementor-widget-heading{--e-global-color-primary:var(--dc-text);}
.dc-header-text .elementor-heading-title.elementor-heading-title{font-size:34px;}
/* Bandeau de fin : palier Display 48 de l'echelle charte, et non le palier
   Section 34 des autres sections. Le wireframe va jusqu'a clamp(2.25rem,4vw,
   3.75rem), soit 58 px a 1440 ; 48 est le plus haut palier que la charte
   nomme, on s'y tient plutot que d'inventer une valeur. C'est la derniere
   adresse de la page, elle doit peser plus qu'un titre de section. */
.dc-cta-band .elementor-heading-title.elementor-heading-title{font-size:48px;}
.dc-tile .elementor-heading-title.elementor-heading-title{font-size:19px;}
@media(max-width:1024px){.dc-header-text .elementor-heading-title.elementor-heading-title{font-size:30px;}
.dc-cta-band .elementor-heading-title.elementor-heading-title{font-size:38px;}}
@media(max-width:767px){.dc-header-text .elementor-heading-title.elementor-heading-title{font-size:26px;}
.dc-cta-band .elementor-heading-title.elementor-heading-title{font-size:30px;}}

/* ---- BOUTONS ---- */
.dc-btn-white .elementor-button{background:#fff!important;color:var(--dc-text)!important;border:1px solid #fff!important;border-radius:var(--dc-radius-sm)!important;font-weight:600;padding:14px 28px!important;transition:var(--dc-transition);}
.dc-btn-white .elementor-button:hover{background:var(--dc-gray-100)!important;border-color:var(--dc-gray-100)!important;transform:translateY(-2px);}
.dc-btn-outline-white .elementor-button{background:transparent!important;color:#fff!important;border:1px solid rgba(255,255,255,.4)!important;border-radius:var(--dc-radius-sm)!important;font-weight:600;padding:14px 28px!important;transition:var(--dc-transition);}
.dc-btn-outline-white .elementor-button:hover{border-color:#fff!important;background:rgba(255,255,255,.08)!important;}
.dc-btn-primary .elementor-button{background:var(--dc-bleu-logo)!important;color:#fff!important;border:1px solid var(--dc-bleu-logo)!important;border-radius:var(--dc-radius-sm)!important;font-weight:600;padding:14px 28px!important;transition:var(--dc-transition);}
.dc-btn-primary .elementor-button:hover{background:var(--dc-bleu-titres)!important;border-color:var(--dc-bleu-titres)!important;transform:translateY(-2px);}
.dc-link-boxed .elementor-button{background:transparent!important;color:var(--dc-text)!important;border:1px solid var(--dc-gray-200)!important;border-radius:var(--dc-radius-sm)!important;font-weight:400;font-size:15px;padding:10px 20px!important;transition:var(--dc-transition);}
.dc-link-boxed .elementor-button:hover{border-color:var(--dc-bleu-logo)!important;color:var(--dc-bleu-logo)!important;}
.dc-link-boxed .elementor-button .elementor-button-content-wrapper{display:inline-flex;align-items:center;gap:10px;}
.dc-link-boxed .elementor-button svg{width:13px;height:13px;fill:currentColor;}
.dc-link-text .elementor-button{background:transparent!important;color:var(--dc-bleu-logo)!important;border:none!important;padding:4px 0!important;font-weight:600;font-size:14px;}
.dc-link-text .elementor-button .elementor-button-content-wrapper{display:inline-flex;align-items:center;gap:8px;transition:gap .25s var(--dc-ease);}
.dc-link-text .elementor-button:hover .elementor-button-content-wrapper{gap:13px;}
.dc-link-text .elementor-button svg{width:13px;height:13px;fill:currentColor;}

/* ---- PASTILLES ---- */
.dc-tag .elementor-heading-title.elementor-heading-title{display:inline-block;font-family:var(--dc-body);font-size:12px;font-weight:700;padding:5px 12px;border-radius:var(--dc-pill);line-height:1.4;}
.dc-tag-soft .elementor-heading-title.elementor-heading-title{background:var(--dc-gray-100);color:var(--dc-bleu-titres);}
.dc-tag-event .elementor-heading-title.elementor-heading-title{background:var(--dc-indigo);color:#fff;}
.dc-tag-chercheurs .elementor-heading-title.elementor-heading-title{background:var(--dc-cible-chercheurs);color:var(--dc-text);}
.dc-tag-white .elementor-heading-title.elementor-heading-title{background:#fff;color:var(--dc-text);}
.dc-eyebrow .elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.14em;color:var(--dc-bleu-logo);}
.dc-client-list{width:auto!important;}
.dc-client-chip .elementor-heading-title.elementor-heading-title{display:inline-block;font-family:var(--dc-body);font-size:13px;font-weight:600;color:var(--dc-text-light);background:#fff;border:1px solid var(--dc-gray-200);border-radius:var(--dc-pill);padding:7px 16px;transition:var(--dc-transition);}
.dc-client-chip:hover .elementor-heading-title{border-color:var(--dc-bleu-logo);color:var(--dc-bleu-titres);}

/* ---- GRILLES A FILET ---- */
.dc-hairline-grid{background-color:var(--dc-gray-200)!important;border:1px solid var(--dc-gray-200);border-radius:var(--dc-radius-lg);overflow:hidden;}

/* ---- EN-TETES DE SECTION ---- */
.dc-header-text{flex:1 1 auto;min-width:0;max-width:600px;}
.dc-subtitle p{font-size:18px;line-height:1.5;color:var(--dc-text-light);max-width:540px;margin:0;}
@media(max-width:767px){.dc-subtitle p{font-size:16px;}}
.dc-header-center{margin-left:auto;margin-right:auto;text-align:center;max-width:640px;}
.dc-header-center .dc-subtitle p{margin-left:auto;margin-right:auto;}
.dc-block-title h3.elementor-heading-title.elementor-heading-title{font-size:19px;color:var(--dc-text);}
.dc-note p{font-size:13px;line-height:1.5;color:var(--dc-text-light);margin:0;}

/* Loupe du header : nous avions la version PLEINE de Font Awesome. Le wireframe
   la dessine au trait (.navbar-search svg{fill:none;stroke-width:2}) et l'apercu
   de la charte la trace explicitement :
   <circle cx=11 cy=11 r=7/> + <path d="m21 21-4.3-4.3"/>, 2 px, fill:none.
   Meme redessin au masque que les autres pictogrammes. */
/* Bouton carre, cale sur la hauteur du CTA « Se connecter » (44 px). Le
   wireframe dessine 38x38 ; a cote d'un CTA de 44 la loupe paraissait tassee,
   et avec la marge interne d'Elementor elle sortait a 68x48, soit plus haute
   que le CTA. Un carre de 44 accorde les deux et garde le glyphe a 18 px. */
.dc-search-btn .elementor-button{width:44px;height:44px;min-height:0;padding:0;display:inline-flex;align-items:center;justify-content:center;}
.dc-search-btn .elementor-button svg{display:none;}
.dc-search-btn .elementor-button .elementor-button-icon::after{content:"";display:block;width:18px;height:18px;background-color:currentColor;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M21 21l-4.3-4.3'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M21 21l-4.3-4.3'/%3E%3C/svg%3E") center/contain no-repeat;}

/* ---- FLECHES ----
   Le wireframe V10 dessine TOUTES ses boites de fleche a l'identique : carre,
   1px de bordure claire (--border), glyphe filaire en gris de texte. Seule la
   taille change selon le contexte (32 dans les tuiles, 36 dans les cartes).

   Rayon : 8 px, et non les angles droits du wireframe. La charte tranche par
   son systeme, section 07 « Elevation & rayons » : « Rayon S 8 px · boutons,
   champs / Rayon L 16 px · cartes / Rayon XL 20 px · grandes surfaces /
   Pastille 40 px · etiquettes ». L'echelle **ne comporte aucun palier a zero**,
   et une boite de fleche cliquable releve du registre « bouton ». Les deux
   seules mentions d'« angles droits » de la charte sont explicitement
   attachees au hero — panneaux d'accueil et heros de pages interieures — et
   n'ont pas vocation a regir les cartes. Je les avais sur-appliquees ici.
   Exception maintenue : la fleche des panneaux du hero, que l'apercu de la
   charte dessine en cercle de 34 px.

   La couleur de bordure demande de la specificite : Elementor emet
   .elementor-<page> .elementor-element.elementor-element-<id>.elementor-view-default
   .elementor-icon{color:...;border-color:...} depuis le reglage Couleur du
   widget, soit 0,4,0. Une regle en .dc-arrow .elementor-icon vaut 0,2,0 et
   perd : la bordure prenait le gris de texte #5F6980 au lieu du gris de trait,
   et la boite pesait le double de ce que le wireframe dessine. On monte a
   Elementor va meme jusqu'a 0,5,0 (.elementor-<page> .elementor-element
   .elementor-element-<id> .elementor-view-default .elementor-icon) : sur la
   seule couleur de bordure, un !important est plus lisible qu'une surenchere
   de selecteurs. La couleur du glyphe, elle, vient bien du reglage du widget
   et doit y rester : c'est le gris de texte.

   Glyphe redessine au masque CSS : la bibliotheque gratuite d'Elementor n'offre
   que la fleche pleine, alors que le wireframe comme la charte tracent une
   fleche filaire de 2 px. C'est deja le trace du hero desktop et des lignes du
   hero mobile — une seule regle ici aligne toutes les cartes de la page.
   background-color:currentColor : la couleur de l'etat se pilote alors par une
   seule declaration color sur la boite.

   display:inline-flex et non flex : le reglage Alignement du widget Icone
   d'Elementor agit par text-align sur .elementor-icon-wrapper. Une boite en
   display:flex est de niveau bloc, donc insensible a text-align — le reglage
   etait emis (text-align:end) et sans le moindre effet. En inline-flex, le
   glyphe reste centre dans sa boite et l'alignement redevient pilotable
   depuis l'interface Elementor. */
.dc-arrow.elementor-widget-icon .elementor-icon.elementor-icon{width:36px;height:36px;border:1px solid var(--dc-gray-200);border-color:var(--dc-gray-200)!important;border-radius:var(--dc-radius-sm);display:inline-flex;align-items:center;justify-content:center;transition:var(--dc-transition);}
.dc-arrow .elementor-icon svg{display:none;}
.dc-arrow .elementor-icon::after{content:"";width:14px;height:14px;background-color:currentColor;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E") center/contain no-repeat;transition:var(--dc-transition);}
/* Survol : la boite se remplit d'encre, glyphe en blanc. C'est la regle du
   wireframe (.bento-card:hover .bento-card-arrow{background:var(--text-primary)}).
   Elle etait remplie de --bleu-logo #008AB7, un bleu cyan vif que je n'avais
   tire d'aucune des deux sources et qui jurait sur la carte blanche. L'encre
   rejoint aussi le survol des tuiles carrefour, qui passent en bleu nuit.

   Piege sur la couleur du glyphe : au repos il vaut currentColor, herite du
   reglage Couleur du widget. Mais ce reglage est emis par Elementor a 0,5,0 —
   ecrire color:#fff dans une regle de survol a 0,4,0 ne change donc RIEN, et le
   glyphe restait gris fonce sur le remplissage encre, illisible. Plutot que
   d'empiler un !important, on peint directement le fond du pseudo-element : sur
   ::after, Elementor n'ecrit rien, aucune concurrence. */
.dc-card:hover .dc-arrow .elementor-icon,.dc-agenda-row:hover .dc-arrow .elementor-icon{background:var(--dc-text);border-color:var(--dc-text)!important;}
.dc-card:hover .dc-arrow .elementor-icon::after,.dc-agenda-row:hover .dc-arrow .elementor-icon::after{background-color:#fff;transform:translateX(2px);}

/* ---- TUILES CARREFOUR ET ETAPES ---- */
.dc-tile{transition:background .3s var(--dc-ease);display:flex;}
/* Le degrade de survol ne s'applique qu'aux cartes blanches : sur le grand
   pave il remplacait la photo, qui disparaissait au passage de la souris. */
.dc-tile:not(.dc-tile-hero):hover{background-image:var(--dc-grad-hero)!important;}
/* SECTION A PROPOS — piste 1, « bento editorial » (validee le 20/08).
   Les numeros 01 a 05 sont remplaces par des intitules de theme : ces cinq
   entrees ne sont pas une sequence mais cinq portes d'entree, et un numero
   laissait croire a un parcours en cinq etapes. Chaque intitule prend une
   couleur de la palette des publics.
   La premiere tuile devient un grand pave photo sur deux rangees — meme
   grammaire que le bento des formations, deja valide en desktop. */
.dc-tile-tag .elementor-heading-title.elementor-heading-title{display:inline-block;
  font-family:var(--dc-body);font-size:10.5px;font-weight:700;letter-spacing:.1em;
  text-transform:uppercase;padding:4px 10px;border-radius:6px;margin-bottom:14px;
  transition:var(--dc-transition);}
.dc-tile-tag{align-items:flex-start;}
.dc-tt-bleu .elementor-heading-title.elementor-heading-title{background:#E6F4F9;color:#00668A;}
.dc-tt-indigo .elementor-heading-title.elementor-heading-title{background:#E8EDFB;color:var(--dc-bleu-titres);}
.dc-tt-cyan .elementor-heading-title.elementor-heading-title{background:#DEF8FC;color:#0E7C8C;}
.dc-tt-magenta .elementor-heading-title.elementor-heading-title{background:#FBE8FE;color:#9A25AE;}
.dc-tt-hero .elementor-heading-title.elementor-heading-title{background:rgba(255,255,255,.16);
  color:#fff;border:1px solid rgba(255,255,255,.3);}
.dc-tile:hover .dc-tile-tag .elementor-heading-title.elementor-heading-title{background:rgba(255,255,255,.18);color:#fff;}

/* Grille : un grand pave a gauche sur deux rangees, quatre cartes a droite. */
.dc-about-tiles{grid-template-columns:1.35fr 1fr 1fr!important;
  grid-template-rows:auto auto!important;}
/* Les paliers responsives de la grille A propos vivent ici et non dans la
   feuille de la page : le CSS de l'en-tete est charge APRES celui de la page,
   une regle !important posee la-bas ne pouvait pas surcharger celle-ci. */
@media(max-width:1024px){
  .dc-about-tiles{grid-template-columns:1fr 1fr!important;}
  .dc-tile-hero{grid-row:span 1;grid-column:span 2;min-height:300px!important;}
}
@media(max-width:767px){
  /* Deux colonnes pour les quatre petites cartes, le pave photo sur toute la
     largeur. Mesure avant : la section faisait 1 677 px pour cinq liens, dont
     950 px de cartes empilees a 170 px chacune — beaucoup de defilement pour
     peu d'information.
     La fleche disparait sur ces quatre cartes : la carte entiere est cliquable,
     la fleche n'ajoutait rien et coutait 50 px par carte. Le V10 fait le meme
     arbitrage sur ses cartes d'objectifs, ou il masque description et bouton en
     mobile pour ne garder que l'etiquette et le titre. Elle reste sur le grand
     pave, ou il y a la place. */
  .dc-about-tiles{grid-template-columns:1fr 1fr!important;}
  .dc-tile-hero{grid-column:1 / -1;min-height:250px!important;}
  .dc-about-tiles .dc-tile:not(.dc-tile-hero){min-height:0!important;padding:18px 16px 20px!important;}
  .dc-about-tiles .dc-tile:not(.dc-tile-hero) .dc-arrow{display:none;}
  .dc-tile-tag .elementor-heading-title.elementor-heading-title{margin-bottom:10px;font-size:10px;}
  .dc-about-tiles .dc-tile:not(.dc-tile-hero) .elementor-heading-title.elementor-heading-title{font-size:16px;}
  .dc-about-tiles .dc-tile:not(.dc-tile-hero) p{font-size:13px;line-height:1.4;}
}
.dc-tile-hero{grid-row:span 2;position:relative;overflow:hidden;justify-content:flex-end;}
/* La fleche des tuiles porte margin-top:auto, ce qui aligne bien son bord bas
   dans une carte blanche mais absorbe ici tout l'espace libre : le bloc de
   texte remontait en haut de la photo, la ou le voile est le plus clair. Sur
   le grand pave, c'est justify-content qui cale l'ensemble en bas. */
.dc-tile-hero .dc-arrow{margin-top:18px!important;}
/* Le voile doit couvrir la photo sans passer devant le texte : d'ou le z-index
   sur les enfants. Mesure du contraste sous le titre : 14,7:1. */
.dc-tile-hero::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:linear-gradient(0deg,rgba(11,14,26,.94) 0%,rgba(11,14,26,.8) 38%,rgba(11,14,26,.34) 72%,rgba(11,14,26,.12) 100%);
  transition:background .35s var(--dc-ease);}
.dc-tile-hero > *{position:relative;z-index:1;}

.dc-tile-hero:hover::before{background:linear-gradient(0deg,rgba(11,14,26,.95) 0%,rgba(30,20,80,.7) 38%,rgba(30,20,80,.3) 72%,rgba(30,20,80,.1) 100%);}
.dc-tile-hero .elementor-heading-title.elementor-heading-title{color:#fff;}
.dc-tile-hero h3.elementor-heading-title.elementor-heading-title{font-size:23px;}
.dc-tile-hero p{color:rgba(255,255,255,.76)!important;}
/* La fleche du socle est posee en 0,4,0 avec !important : il faut la meme
   specificite pour la reprendre sur le pave photo, sinon elle reste grise sur
   une image sombre et disparait presque. */
.dc-tile-hero .dc-arrow.elementor-widget-icon .elementor-icon.elementor-icon{
  border-color:rgba(255,255,255,.5)!important;background:rgba(255,255,255,.12);}
.dc-tile-hero .dc-arrow .elementor-icon::after{background-color:#fff!important;}
.dc-tile-hero:hover .dc-arrow.elementor-widget-icon .elementor-icon.elementor-icon{
  background:#fff!important;border-color:#fff!important;}
.dc-tile-hero:hover .dc-arrow .elementor-icon::after{background-color:var(--dc-text)!important;}
.dc-tile:hover .elementor-heading-title{color:#fff!important;}
.dc-tile:hover p{color:rgba(255,255,255,.8)!important;}
.dc-tile .dc-arrow{margin-top:auto;}
.dc-tile .dc-arrow.elementor-widget-icon .elementor-icon.elementor-icon{width:32px;height:32px;}
.dc-tile .dc-arrow .elementor-icon::after{width:13px;height:13px;}
.dc-tile:hover .dc-arrow .elementor-icon{border-color:rgba(255,255,255,.4)!important;}
/* meme raison que pour les cartes : on peint le pseudo-element, pas color */
.dc-tile:hover .dc-arrow .elementor-icon::after{background-color:#fff;transform:translateX(2px);}
.dc-step p{font-size:14px;line-height:1.55;color:var(--dc-text-light);margin:0;}

/* ---- CARTES ---- */
.dc-card{display:flex;transition:background .3s var(--dc-ease);cursor:pointer;}
.dc-card:hover{background-color:var(--dc-gray-50)!important;}
/* Le corps doit remplir la carte pour que margin-top:auto ait de la place :
   Elementor ramenait flex-grow a 0, le corps de la carte 5 mesurait 191 px
   dans 325 disponibles, et le pied ne pouvait pas descendre. */
.dc-card-body{flex:1 1 auto!important;display:flex;}
/* Pied de carte : la fleche est calee a droite, comme dans le wireframe
   (.bento-card-arrow en margin-left:auto). Elle etait alignee a gauche, sous
   la date.
   .dc-card-bottom et .dc-arrow sont deux classes du MEME widget Icone : lui
   poser display:flex faisait de .elementor-icon-wrapper un element flexible
   reduit a 36 px, dans lequel le text-align:end du reglage Alignement n'avait
   plus de prise. On le laisse donc en bloc : le wrapper reprend toute la
   largeur, et l'alignement se pilote entierement depuis l'interface Elementor,
   sans une seule regle de position ici. */
/* margin-top:auto pousse le pied en bas de la carte. La regle existait mais ne
   servait a rien : Elementor emet la marge du widget a une specificite
   superieure, et le lien restait colle sous le texte. Mesure sur les six
   cartes actualites : le lien flottait entre 25 et 157 px du bas, soit 132 px
   d'ecart pour deux cartes visibles cote a cote. Aligne desormais. */
.dc-card-bottom{margin-top:auto!important;}
/* Visuel de carte. Il portait un aplat de degrade bleu nuit : ni le wireframe
   ni la charte ne demandent cela, et sept pavés satures dominaient la section.
   La charte, section 13, dessine la carte formation avec un VISUEL photo et un
   leger degrade sombre en pied (.card-img) ; le wireframe pose un aplat gris
   clair, mais c'est la convention du filaire, pas une intention visuelle.
   On suit donc la charte. Photo provisoire commune : les visuels par formation
   sont un travail de contenu, a livrer par le client. */
/* ECHAFAUDAGE TEMPORAIRE — a retirer des que les visuels de formation existent.
   Reserve neutre legendee, exactement la convention du wireframe V10
   (.bento-card-image : aplat --bg-secondary et libelle centre en 13 px gris).
   Elle a d'abord porte un aplat de degrade bleu nuit — absent des deux sources
   et bien trop lourd — puis la photo du hero, qui se repetait sept fois sur la
   meme vue. Une reserve annonce ce qu'elle est, et rend la demande de contenu
   visible en reunion plutot que de la masquer.
   POUR REPASSER AUX PHOTOS : supprimer le bloc ::before ci-dessous et rebrancher
   une image de fond sur chaque conteneur .dc-card-img depuis Elementor ; le
   degrade de pied ::after, lui, est le traitement charte (section 13) et reste
   valable tel quel. */
.dc-card-img{aspect-ratio:16/10;width:100%;flex:none;position:relative;background-color:var(--dc-gray-100);background-size:cover;background-position:center center;}
/* Le libelle est pose en absolu et centre par ses propres soins : centrer via le
   conteneur ne marche pas, Elementor pilote --justify-content et --align-items
   depuis les reglages de la boite, a une specificite superieure. */
.dc-card-img.dc-visuel-attente::before{content:"Visuel \00E0  venir";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--dc-body);font-size:13px;color:var(--dc-text-light);letter-spacing:.02em;}
.dc-card-img::after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,rgba(15,27,61,.30),transparent 55%);pointer-events:none;}
/* pas de degrade sur une reserve grise, il n'y a rien a assombrir */
.dc-card-img.dc-visuel-attente::after{opacity:0;}
.dc-card-title .elementor-heading-title.elementor-heading-title{font-size:19px;transition:color .3s var(--dc-ease);}
.dc-card:hover .dc-card-title .elementor-heading-title{color:var(--dc-bleu-logo);}
.dc-card-title-lg .elementor-heading-title.elementor-heading-title{font-size:24px;}
@media(max-width:767px){.dc-card-title-lg .elementor-heading-title.elementor-heading-title{font-size:20px;}}
.dc-card-meta .elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-weight:400;font-size:14px;line-height:1.5;color:var(--dc-text-light);}
.dc-card-date .elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-size:13px;color:var(--dc-text-light);font-style:italic;}
.dc-card-excerpt p{font-size:15px;line-height:1.5;color:var(--dc-text-light);margin:0;}

/* ---- CARROUSEL ACTUALITES ----
   Wireframe V10, decision direction du 02/07 validee le 22/07 : le bandeau
   actualites devient un carrousel, pour montrer plus d'accroches sans allonger
   la page. La coquille etait en place mais inerte — fenetre en overflow:visible,
   conteneur de pastilles vide, fleches sans effet.

   Defilement natif plutot que translation d'un rail : pas de wrapper a inserer
   dans l'arbre Elementor, et le glissement au doigt fonctionne tout seul sur
   mobile, ce que le wireframe ne prevoyait pas.

   Chaque carte occupe un tiers de la fenetre (moins les gouttieres), donc trois
   visibles en desktop, deux sous 1024, une sous 768. Le !important et le
   width:auto sont a nouveau necessaires : Elementor pose flex et width:100% sur
   chaque conteneur a une specificite superieure. */
/* La carte media Videos / Podcasts est FIXE : elle sort de la fenetre de
   defilement et occupe la troisieme colonne, immobile pendant que les articles
   defilent a sa gauche. D'ou le conteneur .dc-actu-row, insere entre les deux
   fleches : [fleche][ fenetre 2 colonnes | carte media ][fleche].
   Largeurs : pour que les trois colonnes visibles restent egales, avec une
   gouttiere g de 24, on veut fenetre = 2C + g et media = C, donc
   C = (R - 2g)/3, fenetre = (2R - g)/3 et media = (R - 2g)/3. */
.dc-actu-row{display:flex;gap:24px;flex:1 1 auto;min-width:0;}
.dc-actu-row > .dc-carousel-viewport{flex:0 0 calc((200% - 24px)/3)!important;width:auto!important;min-width:0;}
.dc-actu-row > .dc-media-card{flex:0 0 calc((100% - 48px)/3)!important;width:auto!important;min-width:0;}
.dc-carousel-viewport{overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none;}
.dc-carousel-viewport::-webkit-scrollbar{display:none;}
.dc-carousel-viewport > *{flex:0 0 calc((100% - 24px)/2)!important;width:auto!important;}
@media(max-width:1024px){
  /* !important indispensable : Elementor emet flex-direction:var(--flex-direction)
     sur .elementor-568 .elementor-element.elementor-element-3801424, soit 0,2,0,
     et ne bascule la variable en colonne qu'au palier mobile. Entre 768 et 1024
     la rangee restait donc horizontale tout en subissant le width:100% ci-dessous :
     fenetre et carte media faisaient chacune la largeur de la rangee, et la carte
     Videos/Podcasts partait hors ecran a droite. Page a defilement horizontal de
     492 px a 768, 748 px a 1024. Invisible en mobile et en desktop, les deux
     largeurs que nous avions revues. */
  .dc-actu-row{flex-direction:column!important;}
  .dc-actu-row > .dc-carousel-viewport,.dc-actu-row > .dc-media-card{flex:0 0 auto!important;width:100%!important;}
}
@media(max-width:767px){
  /* La carte occupe 85 % de la fenetre et non 100 % : la suivante depasse donc
     de 15 % sur le bord droit. C'est l'affordance du V10 lui-meme, qui traite
     ses temoignages ainsi en mobile (.testimonial-card{flex:0 0 85%}) : on voit
     qu'il y a une suite sans avoir besoin d'une fleche. */
  /* La gouttiere de 24 px mangeait la moitie du depassement : avec 85 % pile,
     il ne restait que 23 px de la carte suivante sur un ecran de 360. On
     retranche la gouttiere de la largeur pour retrouver les 15 % pleins du
     V10, qui lui travaille sans gouttiere (gap:0). */
  .dc-carousel-viewport{gap:16px!important;}
  .dc-carousel-viewport > *{flex:0 0 calc(85% - 16px)!important;scroll-snap-align:start;}
  /* Le doigt cale la carte suivante au lieu de s'arreter n'importe ou. */
  .dc-carousel-viewport{scroll-snap-type:x mandatory;}
  /* Barre de defilement fine et visible, comme .testimonial-grid::-webkit-scrollbar
     dans le V10 (height:4px). Deuxieme signal que ca defile. */
  .dc-carousel-viewport{scrollbar-width:thin;-ms-overflow-style:auto;padding-bottom:10px;}
  .dc-carousel-viewport::-webkit-scrollbar{display:block;height:4px;}
  .dc-carousel-viewport::-webkit-scrollbar-track{background:var(--dc-gray-100);border-radius:2px;}
  .dc-carousel-viewport::-webkit-scrollbar-thumb{background:var(--dc-gray-300);border-radius:2px;}
  /* Les pastilles sont un frere de .dc-carousel-shell, pas de la rangee : en
     colonne elles se retrouvaient sous la carte Videos/Podcasts, a 370 px du
     carrousel qu'elles pilotent. display:contents fait remonter fenetre, carte
     media et pastilles au niveau de la section, ou order les remet dans
     l'ordre : carrousel, pastilles, carte media. */
  .dc-carousel-shell,.dc-actu-row{display:contents!important;}
  .dc-carousel-viewport{order:1;}
  /* Les pastilles appartiennent au carrousel : on les en rapproche et on
     ecarte la carte media, sans quoi elles semblaient annoncer le bloc
     Videos/Podcasts (24 px au-dessus, 20 px en dessous). */
  /* Elementor pose lui-meme 28 px au-dessus des pastilles : d'ou le !important.
     La fenetre ayant 10 px de marge basse pour sa barre de defilement, 8 px de
     marge donnent 18 px percus au-dessus, contre 40 en dessous. Les pastilles
     appartiennent visuellement au carrousel, plus au bloc Videos/Podcasts. */
  .dc-carousel-dots{order:2;margin-top:8px!important;}
  .dc-media-card{order:3;margin-top:40px!important;}
}

/* Les deux moities de la carte media se partagent sa hauteur. Elles etaient en
   flex:0 1 auto : elles ne prenaient que la hauteur de leur texte et laissaient
   115 px de vide sous « Podcasts », la carte etant alignee sur les cartes
   article, plus hautes. */
.dc-media-half{flex:1 1 0!important;min-width:0;}
/* CAUSE DU BUG « on ne voit que le L » (capture iPhone du 19/08, 14h40).
   Elementor emet --flex-wrap-mobile:wrap sur .dc-media-half. Or la moitie est
   une colonne A HAUTEUR DEFINIE (flex:1 1 0 lui donne sa part de la carte).
   Une colonne en flex-wrap:wrap dont le contenu depasse la hauteur ne coule
   pas : elle se replie EN COLONNES. Le titre part donc a droite, ecrase a la
   largeur d'un caractere - d'ou le « L » colle au bord - et « Voir les videos »
   sort de la carte. Chrome ne le montrait pas : sa hauteur de moitie suffisait
   au contenu, le repli ne se declenchait pas. Troisieme fois que cette variable
   mord sur cette page, apres le carrousel et les rangees agenda. */
.dc-media-card,.dc-media-half,.dc-media-top{flex-wrap:nowrap!important;}
.dc-media-ico{flex:0 0 auto!important;width:auto!important;}
.dc-media-title .elementor-heading-title{min-width:0;}

/* Carte article entierement cliquable : le lien « Lire la suite » s'etire sur
   toute la carte par un pseudo-element. C'est la seule facon d'obtenir la zone
   cliquable complete sans imbriquer un <a> dans un <a>, ce que le wireframe
   evite deja en gardant .blog-card en <div>. Le degrade du visuel est en
   pointer-events:none, il ne bloque donc pas le clic. */
.dc-blog-card{position:relative;}
/* Elementor pose position:relative sur .e-con et sur .elementor-widget : sans
   les remettre en statique, le pseudo-element s'etirait sur le seul widget du
   lien, et le visuel comme le titre restaient hors zone cliquable. Mesure a
   l'appui : elementFromPoint sur le visuel ne renvoyait aucun lien. */
.dc-blog-card .dc-card-body,.dc-blog-card .dc-card-bottom{position:static!important;}
.dc-blog-card .dc-link-text .elementor-button::after{content:"";position:absolute;inset:0;z-index:1;}

/* Pictogrammes Videos et Podcasts : le wireframe les dessine AU TRAIT
   (triangle de lecture ouvert, micro filaire, 2 px, 19 px dans une boite carree
   de 38 px bordee de blanc a 40 %). La charte le confirme en section 08 :
   « Pictogrammes au trait, epaisseur 2 px, angles arrondis ». La bibliotheque
   gratuite d'Elementor n'offre que les versions PLEINES, visiblement plus
   lourdes — on redessine au masque, comme les fleches. */
.dc-media-ico .elementor-icon{width:38px;height:38px;border:1px solid rgba(255,255,255,.4);border-color:rgba(255,255,255,.4)!important;border-radius:var(--dc-radius-sm);display:inline-flex;align-items:center;justify-content:center;}
.dc-media-ico .elementor-icon svg{display:none;}
.dc-media-ico .elementor-icon::after{content:"";width:19px;height:19px;background-color:#fff;}
.dc-ico-video .elementor-icon::after{-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linejoin='round'%3E%3Cpolygon points='6 4 20 12 6 20 6 4'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linejoin='round'%3E%3Cpolygon points='6 4 20 12 6 20 6 4'/%3E%3C/svg%3E") center/contain no-repeat;}
.dc-ico-podcast .elementor-icon::after{-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3z'/%3E%3Cpath d='M19 10v2a7 7 0 0 1-14 0v-2'/%3E%3Cline x1='12' y1='19' x2='12' y2='22'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3z'/%3E%3Cpath d='M19 10v2a7 7 0 0 1-14 0v-2'/%3E%3Cline x1='12' y1='19' x2='12' y2='22'/%3E%3C/svg%3E") center/contain no-repeat;}

/* Pastilles : 8 px, la vue courante s'allonge en pilule de 22 px (wireframe). */
.dc-carousel-dots{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:28px;}
/* Selecteur en deux classes, et non .dc-dot seul : le kit emet
   `.elementor-kit-7 button{...}` a 0,1,1, qui bat un simple 0,1,0 — les
   pastilles heritaient de la marge interne 14/24 et du bleu des boutons, et
   sortaient en pavés de 48x28. */
.dc-carousel-dots .dc-dot{width:8px;height:8px;min-height:0;padding:0;border:0;border-radius:50%;background:var(--dc-gray-200);cursor:pointer;transition:var(--dc-transition);}
.dc-carousel-dots .dc-dot:hover{background:var(--dc-text-light);}
.dc-carousel-dots .dc-dot[aria-current="true"]{width:22px;border-radius:4px;background:var(--dc-text);}

/* Une seule vue : on masque les commandes plutot que d'afficher des fleches
   qui ne menent nulle part. Elles reapparaissent des qu'il y a de quoi defiler. */
.dc-carousel-shell[data-pages="1"] .dc-carousel-arrow{display:none;}
.dc-carousel-shell[data-pages="1"] ~ .dc-carousel-dots{display:none;}
.dc-carousel-arrow[aria-disabled="true"]{opacity:.35;pointer-events:none;}

/* Date d'article : le widget Titre la rendait a 16 px, gras, en bleu logo.
   Le wireframe la veut a 13 px / 600 en gris de texte, et la charte dit la meme
   chose de ses metadonnees de carte. Elle concurrencait le titre. */
.dc-blog-date .elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-size:13px;font-weight:600;color:var(--dc-text-light);}
.dc-service-icon .elementor-icon{display:block;}

/* ---- CARTES A FILET GAUCHE ---- */
.dc-fin-card{border:1px solid var(--dc-gray-200);border-left:3px solid var(--dc-bleu-logo);border-radius:var(--dc-radius-sm);background:#fff;}
.dc-fin-card-title h3.elementor-heading-title.elementor-heading-title,
.dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-size:15px;font-weight:700;color:var(--dc-text);letter-spacing:0;}
.dc-fin-card p{font-size:14px;line-height:1.5;color:var(--dc-text-light);margin:0;}

/* ---- BENTO FORMATIONS ---- */
/* Proportions du bento — wireframe V10 : la grille vaut 1.2fr / 1fr et la carte
   pleine largeur 1fr / 2fr. Ces regles existaient deja mais ne servaient a rien :
   Elementor pose flex-grow ET width:100% sur chaque conteneur depuis ses propres
   reglages, a une specificite superieure. Mesure avant correction : 589/589 au
   lieu de 642/536, et 573/605 au lieu de 393/785. Meme piege que .dc-logo dans
   l'en-tete — il faut le !important et le width:auto. */
.dc-bento-left{flex:1.2 1 0!important;width:auto!important;min-width:0;}
.dc-bento-right{flex:1 1 0!important;width:auto!important;min-width:0;}
.dc-bento-large .dc-card-img{aspect-ratio:auto;flex:0 0 60%!important;min-height:200px;}
/* La carte pleine largeur passe en grille, comme dans le wireframe. En flex, le
   rapport d'aspect 16/9 du visuel entre en concurrence avec la base flexible et
   donnait 371/807 au lieu de 393/785 ; une grille 1fr 2fr est exacte par
   construction, quelle que soit la hauteur imposee par le corps. */
.dc-bento-fw{display:grid!important;grid-template-columns:1fr 2fr;}
/* Le visuel remplit toute la hauteur de la cellule. Avec aspect-ratio:16/9 sa
   hauteur devenait definie (221 px pour 393 de large) et l'etirement de grille
   ne s'appliquait plus : il restait 18 px de blanc sous l'image, alors que le
   corps mesure 239. On garde un plancher en pixels pour que la reserve garde
   une forme large si le corps venait a etre plus court, et on laisse la grille
   etirer pour le reste.
   aspect-ratio:auto est indispensable : ce conteneur porte aussi la classe
   .dc-card-img, dont le 16/10 redonnait au visuel une hauteur definie et
   neutralisait a nouveau l'etirement — le blanc avait disparu, mais parce que
   c'etait l'image qui imposait sa hauteur au corps, pas l'inverse. Le defaut
   serait revenu des qu'un corps plus long aurait depasse le ratio. */
.dc-bento-fw-img{aspect-ratio:auto;width:auto!important;min-width:0;min-height:200px;align-self:stretch;}
.dc-bento-fw-body{width:auto!important;min-width:0;}
.dc-bento-fw .dc-card-bottom{margin-top:16px;}
/* Repli mobile du bento. Les deux colonnes restaient cote a cote : la rangee
   n'etait jamais passee en colonne, et les cartes de droite sortaient du cadre,
   rognees par le conteneur d'onglets. La carte pleine largeur, elle, gardait sa
   grille 1fr/2fr et ecrasait son visuel sur un tiers d'ecran. */
@media(max-width:767px){
  /* Empilement en BLOC et non en flex-column. Les regles desktop posent sur ces
     conteneurs des flex-grow et des bases nulles en !important ; en repliant la
     rangee en colonne, ces bases devenaient des hauteurs, la carte se voyait
     imposer 391 px pour 611 px de contenu, et le corps passait sous le visuel.
     Le flux en bloc ne peut ni superposer ni juxtaposer : c'est deterministe. */
  .dc-bento-row,.dc-bento-right{display:block!important;}
  .dc-bento-row > *,.dc-bento-right > *{width:100%!important;}
  .dc-bento-row > * + *,.dc-bento-right > * + *{margin-top:1px;}
  .dc-bento-left{display:flex!important;flex-direction:column!important;height:auto!important;}
  /* !important obligatoire : les regles desktop posent flex:1.2 1 0!important
     sur ces colonnes. En mobile la rangee passe en colonne, et une base de 0
     avec croissance devient une base de HAUTEUR nulle : la carte se voyait
     imposer 391 px pour un contenu de 611, visuel et corps se superposaient et
     le texte disparaissait derriere la reserve grise. */
  .dc-bento-left,.dc-bento-right,.dc-bento-fw-img,.dc-bento-fw-body{flex:0 0 auto!important;}
  /* La grande carte redevient une carte comme les autres : son visuel a 60 % de
     la hauteur n'a plus de sens une fois la colonne de droite passee dessous. */
  .dc-bento-large .dc-card-img{aspect-ratio:16/10;min-height:0;flex:none!important;}
  .dc-bento-fw{grid-template-columns:1fr!important;}
  .dc-bento-fw-img{min-height:0;aspect-ratio:16/10;}
  /* V10 mobile : .bento-card-body{padding:1.25rem 1.5rem} au lieu de 24/32.
     Huit pixels de moins en haut et en bas, seize de plus de largeur de texte
     donc moins de titres replies. */
  .dc-bento-row .dc-card-body{padding:20px 24px!important;}
  /* Le carrousel garde son defilement horizontal : le conteneur est regle en
     colonne pour le mobile cote Elementor, ce qui empilait les six articles et
     allongeait la page — exactement ce que le carrousel doit eviter. Une carte
     par vue, au doigt. */
  /* nowrap en plus de row : Elementor pose --flex-wrap-mobile:wrap sur les
     conteneurs, la rangee se repliait et les six articles s'empilaient. La
     section actualites faisait 3 928 px de haut en mobile. */
  .dc-carousel-viewport{flex-direction:row!important;flex-wrap:nowrap!important;}
}

/* ---- BLOC MEDIA SOMBRE ---- */
/* [20/10] :where() garde la specificite d'origine (0,1,0) : un :not(.x) nu l'aurait
   doublee et aurait renverse des regles de page a egalite. */
.dc-media-card:not(:where(.dc-media-natif)){background-image:var(--dc-grad-hero)!important;}
.dc-media-eyebrow .elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:rgba(255,255,255,.6);}
.dc-media-title .elementor-heading-title.elementor-heading-title{font-size:26px;line-height:1.12;color:#fff;}
@media(max-width:991px){.dc-media-title .elementor-heading-title.elementor-heading-title{font-size:22px;}}
.dc-media-lead p{font-size:16px;line-height:1.6;color:rgba(255,255,255,.78);max-width:62ch;margin:0;}

/* ---- TEMOIGNAGES VIDEO ---- */
.dc-testi-card{overflow:hidden;}
.dc-testi-thumb{position:relative;aspect-ratio:16/9;width:100%;flex:none;background-image:var(--dc-grad-img);}
.dc-testi-play .elementor-icon{width:52px;height:52px;border-radius:50%;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.5);display:flex;align-items:center;justify-content:center;transition:var(--dc-transition);}
.dc-testi-play .elementor-icon svg{fill:#fff;margin-left:2px;}
.dc-testi-card:hover .dc-testi-play .elementor-icon{background:rgba(255,255,255,.28);transform:scale(1.06);}
.dc-testi-duration{position:absolute;right:12px;bottom:12px;}
.dc-testi-duration .elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-size:12px;font-weight:600;color:#fff;background:rgba(10,10,10,.6);padding:3px 8px;border-radius:var(--dc-radius-sm);}
.dc-testi-name h3.elementor-heading-title.elementor-heading-title{font-size:17px;color:var(--dc-text);}
.dc-testi-role .elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-size:13px;font-weight:400;color:var(--dc-text-light);}

/* ---- AGENDA ---- */
.dc-agenda-row{transition:background .2s var(--dc-ease);cursor:pointer;border-bottom:1px solid var(--dc-gray-200);}
.dc-agenda-row:last-child{border-bottom:none;}
.dc-agenda-row:hover{background-color:var(--dc-gray-50)!important;}
/* 62 px, la valeur de l'apercu agenda de la charte (le wireframe dit 64).
   Sans !important, Elementor ramenait la pastille a 55 px : width:100% sur le
   conteneur, et le flex de la ligne la comprimait. */
.dc-agenda-date{background-image:var(--dc-grad-hero)!important;border-radius:var(--dc-radius);width:62px!important;flex:0 0 62px!important;text-align:center;}
.dc-agenda-day .elementor-heading-title.elementor-heading-title{font-family:var(--dc-display);font-size:21px;font-weight:700;line-height:1;color:#fff;}
.dc-agenda-month .elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.08em;color:rgba(255,255,255,.85);}
.dc-agenda-body{flex:1 1 auto;min-width:0;}
.dc-agenda-title .elementor-heading-title.elementor-heading-title{font-size:17px;}
.dc-agenda-time .elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-weight:400;font-size:13px;color:var(--dc-text-light);}
.dc-agenda-mode .elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-size:13px;font-weight:500;color:var(--dc-text-light);}
@media(max-width:767px){.dc-agenda-meta .dc-tag-soft{display:none;}}
/* Meme cause que le carrousel : Elementor pose --flex-wrap-mobile:wrap sur ses
   conteneurs. La rangee agenda mesurait pastille 62 + corps 300 + fleche 36
   pour 300 px utiles : elle se repliait et la fleche partait seule sur une
   deuxieme ligne, 202 px de haut pour deux lignes de texte. En nowrap le corps
   se comprime (flex:1 1 0) et les trois blocs tiennent sur la ligne, comme dans
   le V10 ou .agenda-row reste une rangee en mobile (gap 1rem, padding 1rem 1.25rem). */
@media(max-width:767px){
  .dc-agenda-row{flex-wrap:nowrap!important;gap:16px!important;padding:16px 20px!important;}
  .dc-agenda-body{flex:1 1 0!important;width:auto!important;min-width:0;}
  .dc-agenda-row > .dc-arrow{flex:0 0 auto!important;width:auto!important;align-self:center;}
}

/* ---- CTA FINAL ---- */
/* Empeche la cesure d'un mot compose : « Parlons-en » se coupait apres le
   trait d'union sur les ecrans etroits et laissait « en » seul sur la ligne. */
.dc-nb{white-space:nowrap;}
/* CTA en carte plutot qu'en bandeau pleine largeur (reunion du 20/08). Le
   bandeau sombre etait suivi du pied de page, sombre lui aussi : deux aplats
   fonces colles l'un a l'autre, sans respiration. La carte, posee sur du blanc,
   redonne un cadre au CTA et separe les deux. Rayon 20 px = palier XL de la
   charte (sect. 07, « grandes surfaces »). */
.dc-cta-band{background-image:none!important;background-color:#fff!important;
  padding-top:72px!important;padding-bottom:72px!important;}
.dc-cta-band > .e-con-inner{background-image:var(--dc-grad-hero-deep)!important;
  background-color:#0a0a0a;
  border-radius:20px;position:relative;overflow:hidden;
  padding:88px 64px!important;}
.dc-cta-band > .e-con-inner::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(50% 80% at 50% 0,rgba(139,92,246,.22),transparent 60%);}
.dc-cta-band > .e-con-inner > *{position:relative;z-index:1;}
/* Version mobile de la carte. Placee ici, apres les regles de bureau : a
   specificite et importance egales, c'est l'ordre dans la feuille qui tranche,
   et le meme bloc place plus haut dans le fichier ne prenait pas. */
@media(max-width:767px){
  .dc-cta-band{padding-top:44px!important;padding-bottom:44px!important;}
  .dc-cta-band > .e-con-inner{padding:48px 24px!important;border-radius:18px;}
}
.dc-cta-lead p{font-size:18px;line-height:1.6;color:rgba(255,255,255,.74);max-width:52ch;margin:0 auto;}

/* ---- HERO DES PAGES INTERIEURES ---- */
.dc-hero-profile{position:relative;}
.dc-breadcrumb p{font-size:13px;color:rgba(255,255,255,.7);margin:0;}
.dc-breadcrumb a{color:rgba(255,255,255,.7);border-bottom:1px solid rgba(255,255,255,.3);padding-bottom:1px;}
.dc-breadcrumb a:hover{color:#fff;border-bottom-color:#fff;}
.dc-hero-title h1.elementor-heading-title.elementor-heading-title{font-size:56px;line-height:1.08;letter-spacing:-.03em;color:#fff!important;max-width:720px;}
@media(max-width:1024px){.dc-hero-title h1.elementor-heading-title.elementor-heading-title{font-size:42px;}}
@media(max-width:767px){.dc-hero-title h1.elementor-heading-title.elementor-heading-title{font-size:34px;}}
/* Etiquette du hero des pages interieures : la charte distingue deux composants.
   La pastille de cible du hero d'accueil est une pilule coloree (sect. 14), mais
   .pagehero-tag de la sect. 11 est une etiquette BLANCHE A ANGLES DROITS. */
.dc-hero-profile .dc-tag .elementor-heading-title.elementor-heading-title{border-radius:0;}
.dc-hero-sub p{font-size:18px;line-height:1.5;color:rgba(255,255,255,.85);max-width:52ch;margin:0;}
.dc-hero-actions{width:auto!important;}

/* ---- LIENS CROISES ENTRE PROFILS ---- */
.dc-crosslinks-label .elementor-heading-title.elementor-heading-title{font-family:var(--dc-body);font-size:15px;font-weight:600;color:var(--dc-text);}
.dc-crosslinks-links{width:auto!important;}


/* Le libelle « Ou retrouver votre profil » sortait en encre a 16 px sur le
   bandeau bleu nuit, donc pratiquement illisible. Le wireframe le veut a 13 px
   en blanc a 50 %, au meme calibre que les trois liens qui le suivent. */
.dc-cta-profiles p,.dc-cta-profiles p span{font-size:13px;color:rgba(255,255,255,.5);}


/* ============================================================================
   BANDE MORTE 768-1024 px DE L'EN-TETE — correctif porte en production
   le 27 aout 2026, sur decision de Yassine.
   ----------------------------------------------------------------------------
   Signale par Veronique : « menu totalement invisible sur la version tablette
   portrait largeur 820px ». Verifie, reproduit, et plus grave que l'intitule.

   CAUSE. Tout le CSS d'en-tete mobile est enferme dans @media(max-width:767px),
   alors que le widget n-menu bascule en burger des le point de rupture
   TABLETTE. Mesure de data-layout sur le widget : « dropdown » de 0 a 1024 px,
   « horizontal » a partir de 1025. Entre 768 et 1024, le burger existait donc
   sans aucun de nos styles :
     - pose au centre exact de la barre (x=410 sur 820), faute de l'ordre 2/3 ;
     - glyphe rgb(31,33,36) sur la photo du hero : contraste 1,3:1 ;
     - panneau ouvert en position:absolute, fond transparent, titres en
       rgba(255,255,255,.9) -> texte blanc sur le fond blanc de la page.
   Ouvrir le menu a 820 px donnait un rectangle blanc vide. La navigation
   etait donc INACCESSIBLE sur iPad portrait (768), iPad Air (820),
   iPad Pro 11 (834), Surface et la plupart des tablettes Android.

   CORRECTIF. On rejoue a l'identique le bloc mobile deja valide, borne a la
   bande 768-1024. Les selecteurs ciblent [data-layout=dropdown], qui est la
   bonne condition et s'eteint tout seul au-dela de 1024.
   Seule exception : on NE masque PAS « Se connecter » ici, la barre a la place.

   Pose dans le socle de l'en-tete (609) et non dans le CSS d'une page :
   il doit s'appliquer a tout le site. La copie qui vivait dans le CSS de la
   page 2410 a ete retiree le meme jour pour eviter le doublon.
   Sauvegarde de l'etat anterieur :
   v2-correctifs/sauvegarde-609-avant-menu-tablette.css
   ============================================================================ */

@media (min-width:768px) and (max-width:1024px){
  .dc-logo,.dc-nav-actions,.dc-nav-group{flex:0 0 auto!important;width:auto!important;}
  .dc-nav-actions{order:2;margin-left:auto;}
  .dc-nav-group{order:3;}
  .dc-navbar{--gap:0px 12px!important;--column-gap:12px!important;}
  .dc-mega-panel{margin-top:0;}
  .dc-navbar .elementor-widget-n-menu .e-n-menu[data-layout=dropdown] .e-n-menu-wrapper{ position:fixed; top:var(--dc-header-h); left:0; right:0; width:auto; margin-block-start:0; max-height:calc(100vh - var(--dc-header-h)); max-height:calc(100dvh - var(--dc-header-h)); overflow-y:auto; overscroll-behavior:contain; -webkit-overflow-scrolling:touch; background:#fff; padding:14px 15px 24px; min-height:calc(100vh - var(--dc-header-h)); min-height:calc(100dvh - var(--dc-header-h)); }
  .dc-navbar .e-n-menu-heading{display:flex;flex-direction:column;gap:8px;width:100%;}
  .dc-navbar .e-n-menu-item{position:relative;overflow:hidden;width:100%!important; border:1px solid var(--dc-gray-200);border-radius:13px;background:#fff;}
  .dc-navbar .e-n-menu-item::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px; z-index:2;background:var(--dc-gray-200);}
  .dc-navbar .e-n-menu-item:has(.e-n-menu-dropdown-icon[aria-expanded="true"])::before{background:var(--dc-bleu-logo);}
  .dc-navbar .e-n-menu-title{padding:13px 14px 12px!important;background:transparent!important; display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border-radius:0!important;}
  .dc-navbar .e-n-menu-title-container{flex:1;min-width:0;}
  .dc-navbar .e-n-menu-title-text{display:block;font-family:var(--dc-display);font-size:15.5px; font-weight:600;letter-spacing:-.01em;color:var(--dc-text);line-height:1.25;}
  .dc-navbar .dc-mi-sub{display:block;font-family:var(--dc-body);font-size:12px;font-weight:400; letter-spacing:0;color:var(--dc-text-light);margin-top:2px;}
  .dc-navbar .elementor-widget-n-menu .e-n-menu-dropdown-icon{width:25px!important;height:25px!important; flex:none;border:1px solid var(--dc-gray-200)!important;border-radius:7px; display:flex;align-items:center;justify-content:center;margin-top:2px;padding:0; background:transparent;}
  .dc-navbar .elementor-widget-n-menu .e-n-menu-dropdown-icon svg{width:11px;height:11px; fill:var(--dc-text-light);}
  .dc-navbar .e-n-menu-item:active{background:var(--dc-gray-50);}
  .dc-navbar .e-n-menu-content .dc-mega-panel{box-shadow:none!important;border:0!important; padding:0 14px 14px!important;margin:0!important;background:transparent!important;}
  .dc-navbar .e-n-menu-content .dc-mega-cols{flex-direction:column!important;gap:16px!important;}
  .dc-navbar .e-n-menu-toggle{background:transparent;border:0;padding:4px;position:relative;}
  .dc-navbar .e-n-menu-toggle::after{content:"";position:absolute;inset:-8px;}
  .dc-navbar .e-n-menu-toggle,.dc-navbar a,.dc-navbar button{-webkit-tap-highlight-color:transparent;}
  .dc-navbar .e-n-menu-toggle{border-radius:var(--dc-radius-sm);transition:background-color .15s var(--dc-ease);}
  .dc-navbar--solid .e-n-menu-toggle:active{background:rgba(26,29,43,.07);}
  .dc-navbar:not(.dc-navbar--solid) .e-n-menu-toggle:active{background:rgba(255,255,255,.18);}
  .dc-navbar .e-n-menu-toggle:hover, .dc-navbar .e-n-menu-toggle:focus{background-color:transparent!important;color:inherit!important;}
  .dc-navbar .e-n-menu-toggle:focus:not(:focus-visible){outline:none;}
  .dc-navbar .e-n-menu-toggle:focus-visible{outline:2px solid var(--dc-bleu-logo);outline-offset:2px;}
  .dc-navbar .e-n-menu-toggle-icon svg{transition:fill .4s var(--dc-ease);}
  .dc-navbar:not(.dc-navbar--solid) .e-n-menu-toggle-icon svg{fill:#fff;color:#fff;}
  .dc-navbar--solid .e-n-menu-toggle-icon svg{fill:var(--dc-text);color:var(--dc-text);}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]){background-color:rgba(255,255,255,.97)!important; background-image:none!important;border-bottom-color:var(--dc-gray-200);}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-logo img{filter:none;}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .elementor-widget-n-menu{ --n-menu-title-color-normal:var(--dc-text);--n-menu-title-color-hover:var(--dc-text-light); --n-menu-title-color-active:var(--dc-text);}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .e-n-menu-toggle-icon svg{fill:var(--dc-text);color:var(--dc-text);}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .e-n-menu-toggle:active{background:rgba(26,29,43,.07);}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-search-btn .elementor-button{ background-color:transparent!important;background-image:none!important; border:1px solid var(--dc-gray-200)!important;color:var(--dc-text);}
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-lang .elementor-heading-title{color:var(--dc-text-light);}
  /* « Se connecter » reste visible sur tablette : il faut donc aussi l'habiller
     quand le panneau est ouvert, sinon il passe en blanc sur blanc. Le cas ne
     se posait pas en mobile, ou le bouton est masque. */
  .dc-navbar:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-nav-cta .elementor-button{
    background-color:transparent!important;background-image:var(--dc-grad-brand)!important;
    border:1px solid transparent!important;color:#fff!important;}

  /* Traitement tablette — CORRIGE le 27/08 apres essai en conditions reelles.
     Ma premiere version bornait la colonne de cartes a 560 px, pour eviter des
     cartes etirees sur toute la largeur. Deux defauts, tous deux verifies :

     1. LE SOUS-MENU ETAIT ROGNE. Elementor dimensionne le panneau deroulant
        sur le VIEWPORT (820 px), pas sur la carte (512 px avec mon plafond).
        Les deux n'etaient plus d'accord : 308 px de contenu passaient sous
        overflow:hidden. « TRAVAILLEURS », « Catalogue des formations » et le
        bouton « Voir le catalogue » etaient coupes net.
        En mobile le probleme n'existe pas : carte 360 / contenu 390, l'ecart
        est absorbe par le padding.
     2. 823 PX DE BLANC sous les quatre cartes, le panneau occupant tout
        l'ecran pour 278 px de contenu. Ca se lit comme une page cassee.

     Correctif : plus de plafond — les cartes reprennent la pleine largeur,
     comme en mobile, donc carte et contenu sont de nouveau d'accord. Et le
     panneau se dimensionne a son contenu au lieu d'occuper tout l'ecran : on
     voit la page derriere, ce qui le fait lire comme un menu deroulant.
     Mesure apres correctif : vide residuel 38 px au lieu de 823, et le
     sous-menu s'etale sur deux colonnes, lisible en entier.

     Une alternative avait ete essayee et ecartee : le tiroir lateral ancre a
     droite (convention courante sur tablette). Il regle les memes defauts mais
     ecrase le sous-menu dans 420 px et lui fait perdre ses deux colonnes. */
  .dc-navbar .elementor-widget-n-menu .e-n-menu[data-layout=dropdown] .e-n-menu-wrapper{
    min-height:0!important;height:auto!important;
    max-height:calc(100dvh - var(--dc-header-h))!important;
    padding:14px 24px 24px!important;
    box-shadow:0 18px 44px rgba(26,29,43,.16);}
}

/* ============================================================================
   NOM ACCESSIBLE DU BOUTON RECHERCHE (WCAG 2.4.4) — 27 aout 2026
   Le bouton loupe n'affiche qu'une icone : c'etait un lien sans aucun nom, et
   un lecteur d'ecran annoncait « lien » sans destination.
   On lui donne le libelle « Rechercher », masque VISUELLEMENT mais conserve
   dans l'arbre d'accessibilite — surtout pas display:none, qui l'en sortirait
   aussi. Aucun effet a l'ecran.
   ============================================================================ */
.dc-search-btn .elementor-button-text{
  position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;}


/* ==========================================================================
   PAGES INTERIEURES — systeme graphique V5            (7 septembre 2026)
   --------------------------------------------------------------------------
   Pose ICI, dans le socle, et non recopie dans chaque page. Les trois pages
   livrees le 10 septembre — A propos (1307), Liste des actualites (1732),
   Fiche actualite — partagent le meme vocabulaire ; le dupliquer trois fois
   nous aurait donne trois versions divergentes des la premiere correction.
   C'est exactement ce qui s'est produit entre la V4 et la banque.

   SANS RISQUE POUR L'ACCUEIL LIVREE (568), qui reste figee : tout ce qui suit
   est ecrit sur des classes que 568 ne porte pas. Aucune regle existante n'est
   redefinie.
   Les jetons employes (--dc-display, --dc-body, --dc-text, --dc-bleu-logo,
   --dc-radius, --dc-ease, --dc-grad-text...) sont tous definis dans le kit
   (post 7) ou plus haut dans ce fichier.
   ========================================================================== */

/* --- 1. RYTHME DES FONDS ---------------------------------------------------
   Repris de la V4 sans changement de valeurs : plusieurs taches radiales tres
   basses (5 a 15 %) plus un grain a 12 %. Sur un fond clair qui porte du texte
   sombre, au-dela le fond ne parait pas texture, il parait sale.
   Le blanc franc (.dc-wash-off) revient sur les sections denses, qui ont
   besoin de calme : c'est l'alternance qui fait le rythme, pas la couleur.
   -------------------------------------------------------------------------- */
.dc-wash{position:relative;isolation:isolate;}
.dc-wash > *{position:relative;z-index:1;}
.dc-wash::before{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background-repeat:no-repeat,no-repeat,no-repeat,repeat;
  background-size:100% 100%,100% 100%,100% 100%,160px 160px;
  background-image:
    var(--dc-wash-1),var(--dc-wash-2),var(--dc-wash-3),
    url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3'/></filter><rect width='160' height='160' filter='url(%23n)' opacity='.12'/></svg>");}
.dc-wash-1{
  --dc-wash-1:radial-gradient(58% 46% at 84% 6%,  rgba(139,92,246,.15), rgba(139,92,246,0) 70%);
  --dc-wash-2:radial-gradient(52% 44% at 6% 88%,  rgba(0,138,183,.13),  rgba(0,138,183,0) 72%);
  --dc-wash-3:radial-gradient(64% 40% at 42% 52%, rgba(46,85,218,.08),  rgba(46,85,218,0) 76%);}
.dc-wash-2{
  --dc-wash-1:radial-gradient(54% 44% at 10% 8%,  rgba(0,138,183,.12),  rgba(0,138,183,0) 72%);
  --dc-wash-2:radial-gradient(50% 42% at 92% 78%, rgba(46,85,218,.10),  rgba(46,85,218,0) 74%);
  --dc-wash-3:radial-gradient(60% 38% at 50% 40%, rgba(139,92,246,.06), rgba(139,92,246,0) 78%);}
.dc-wash-3{
  --dc-wash-1:radial-gradient(56% 46% at 18% 14%, rgba(139,92,246,.09), rgba(139,92,246,0) 74%);
  --dc-wash-2:radial-gradient(48% 40% at 88% 84%, rgba(0,138,183,.075), rgba(0,138,183,0) 76%);
  --dc-wash-3:radial-gradient(58% 36% at 56% 50%, rgba(217,70,239,.05), rgba(217,70,239,0) 78%);}
/* 4 — variante ajoutee pour les pages interieures, qui ont plus de sections
   que l'accueil : la plus chaude des quatre, elle sert de fin de page. */
.dc-wash-4{
  --dc-wash-1:radial-gradient(60% 48% at 6% 10%,  rgba(217,70,239,.085),rgba(217,70,239,0) 74%);
  --dc-wash-2:radial-gradient(52% 44% at 94% 70%, rgba(126,63,242,.09), rgba(126,63,242,0) 74%);
  --dc-wash-3:radial-gradient(58% 38% at 46% 46%, rgba(0,138,183,.055), rgba(0,138,183,0) 78%);}
.dc-wash-off{background-color:#fff;}

/* --- 2. LA SECTION SOMBRE --------------------------------------------------
   Une par page, jamais deux : c'est la respiration qui casse la suite des
   fonds clairs. Sur l'accueil c'est l'agenda ; sur les pages interieures,
   la section designee au cas par cas.
   -------------------------------------------------------------------------- */
.dc-nuit{background:#0A0728!important;position:relative;isolation:isolate;}
.dc-nuit > *{position:relative;z-index:1;}
/* 17-09-2026 — LE GRAIN EST RETIRE.
   Yassine : « pour l'agenda tu peux aussi retirer le grain comme sur l'accueil ».
   Releve sur les neuf gabarits : les DEUX pages deja validees par le client —
   l'accueil (« Evenements a venir ») et A propos (« Notre ecosysteme ») —
   rendent trois couches, sans bruit. Les trois pages profil en rendaient
   quatre. Le grain etait donc l'exception, pas la regle, et il ne tenait que
   parce que les deux pages validees le neutralisaient CHACUNE dans leur propre
   CSS. On le retire a la source : les cinq sections de nuit du site rendent
   desormais la meme chose. */
.dc-nuit::before{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background-repeat:no-repeat,no-repeat,no-repeat;
  background-size:100% 100%,100% 100%,100% 100%;
  background-image:
    radial-gradient(62% 58% at 10% 4%,  rgba(126,63,242,.46), rgba(126,63,242,0) 68%),
    radial-gradient(56% 52% at 92% 98%, rgba(0,138,183,.38),  rgba(0,138,183,0)  70%),
    radial-gradient(44% 38% at 64% 26%, rgba(217,70,239,.15), rgba(217,70,239,0) 74%);}
/* Encre sur fond de nuit. On REDEFINIT LA VARIABLE plutot que d'ecrire une
   couleur : le pied de page reemet `.elementor-widget-heading
   .elementor-heading-title{color:var(--e-global-color-primary)}` a 0,2,0 et il
   est charge apres nous. Une variable s'herite au lieu d'entrer en
   concurrence, l'ordre de chargement ne la derange donc pas. */
.dc-nuit .elementor-widget-heading{--e-global-color-primary:#fff;}
.dc-nuit .dc-subtitle p,.dc-nuit .dc-subtitle,
.dc-nuit .elementor-widget-text-editor p{color:rgba(255,255,255,.82);}
.dc-nuit .dc-eyebrow .elementor-heading-title{color:#8CE8FF;}

/* --- 3. LES MOTS EN DEGRADE ------------------------------------------------
   Dispositif de la charte (sect. 04, .grad-text) : le segment de titre qui
   porte le sens passe en degrade pourpre -> magenta -> cyan. Reserve aux
   FONDS CLAIRS — sur un fond qui porte deja ces couleurs, le texte est blanc,
   sinon il se confond avec son fond.
   -------------------------------------------------------------------------- */
.dc-grad-mots{
  background:var(--dc-grad-text);
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent;}

/* --- 4. HEROS DE PAGE INTERIEURE -------------------------------------------
   La charte les decrit comme « la meme architecture que les pages profil :
   image de fond, voile sombre, fil d'Ariane, etiquette et titre » sous un
   en-tete transparent a logo blanc. Le script de la navbar connait deja
   .dc-hero-profile et .dc-article-hero : il suffit qu'une section porte l'une
   des deux pour que la barre reste transparente au-dessus d'elle.
   -------------------------------------------------------------------------- */
.dc-hero-profile .dc-page-etiquette .elementor-heading-title{
  display:inline-flex;align-items:center;
  font-family:var(--dc-body);font-size:13px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;
  color:#8CE8FF;margin:0;}
.dc-hero-profile h1.elementor-heading-title.elementor-heading-title{
  font-family:var(--dc-display);font-weight:800;
  font-size:clamp(34px,4.6vw,62px);line-height:1.08;letter-spacing:-.025em;
  color:#fff;max-width:20ch;text-wrap:balance;margin:0;}
.dc-hero-profile .dc-subtitle p{
  font-size:18px;line-height:1.6;color:rgba(255,255,255,.80);
  max-width:62ch;margin:0;}

/* [7/9/2026] La grille d'actualites et l'article a la une ont ete RETIRES d'ici :
   ils n'existent que sur la page 1732, qui portait deja ses propres regles depuis
   aout — dont des !important. Deux sources pour un meme reglage, c'est le bug de
   demain : le composant reste donc dans le CSS de sa page. Le socle ne garde que
   le vocabulaire PARTAGE par les trois pages interieures. */


/* [7/9/2026] Retire d'ici aussi : la typographie d'article, les apparitions et
   les arrondis. La fiche article est UN gabarit (1690) qui porte deja son propre
   CSS depuis aout, sous les classes .dc-article-hero / .dc-article-layout /
   .dc-article-content / .dc-related. Rien a gagner a en ecrire une seconde
   version ici sous d'autres noms.
   REGLE retenue pour ce socle : il porte le VOCABULAIRE partage par plusieurs
   pages — le rythme des fonds, la section sombre, les mots en degrade, le heros
   de page interieure. Les composants restent dans le CSS de leur page. */


/* --- 5. CONTRASTE DU HEROS DE PAGE INTERIEURE ------------------------------
   Mesure du 7 septembre sur /actualites/ : fil d'Ariane a 3,47:1 et etiquette a
   4,45:1, sous le minimum AA de 4,5. Cause : le voile du heros descend de 0,92
   en bas a 0,30 en haut, et le bloc de texte se trouve a ~62 % de la hauteur,
   la ou le voile ne vaut plus que 0,54 — insuffisant des que la photo est
   claire a cet endroit.
   Deux corrections, l'une structurelle, l'autre locale :
   1. le PLANCHER DU VOILE passe de 0,30 a 0,55 dans les reglages des deux
      heros. Calcul du pire cas (zone de photo blanche) : a 0,70 de voile sous
      le texte, le fil d'Ariane a 82 % de blanc donne 5,19:1 et l'etiquette
      cyan 4,54:1. Avec 0,94 en bas et 0,55 en haut, le voile vaut 0,70 a
      l'endroit du texte. La photo reste visible a 45 % en haut du cadre.
   2. le fil d'Ariane passe de 70 % a 82 % de blanc.
   Principe a retenir, deja note en aout : sur une photo, le contraste ne doit
   pas dependre de la photo. Changer un visuel ne doit jamais pouvoir casser la
   lisibilite — c'est le voile qui garantit, pas le cadrage. */
.dc-breadcrumb p{color:rgba(255,255,255,.82);}
.dc-breadcrumb a{color:rgba(255,255,255,.82);border-bottom-color:rgba(255,255,255,.42);}
.dc-breadcrumb a:hover{color:#fff;border-bottom-color:#fff;}


/* --- 6. LE BOUTON « HAUT DE PAGE » ------------------------------------------
   Descendu du CSS de la V5 le 7 septembre : il vit desormais sur toutes les
   pages qui reprennent le pave contact, et il n'a pas a etre recopie sur
   chacune. Sur A propos, faute de ces regles, il sortait avec le violet par
   defaut du kit — blanc sur #8B5CF6, soit 4,23:1, sous le minimum AA.
   L'accueil livree (568) ne porte pas ce bouton : elle n'est pas concernee.
   -------------------------------------------------------------------------- */
/* [11 septembre 2026] SON APPARITION ETAIT SECHE, POUR DEUX RAISONS.
   Yassine : « l'apparition pourrait etre plus douce et moins directe ».

   1. L'OPACITE N'ETAIT PAS TRANSITIONNEE DU TOUT. La declaration ci-dessous
      etait ecrite a 0,1,0 ; Elementor emet pour chaque widget
      `.elementor-element.elementor-element-XXXXXXX{transition:background,
      border,border-radius,box-shadow,transform}` a 0,2,0, qui gagne et
      REMPLACE la liste. Valeur calculee mesuree sur le bouton :
      `background, border, border-radius, box-shadow, transform` — opacite
      absente. Le bouton passait donc de 0 a 1 d'un coup, et seuls les 8 px de
      montee s'animaient. Classe doublee pour reprendre la main.
   2. IL ARRIVAIT BEAUCOUP TROP TOT. Il etait accroche au seuil de la barre de
      navigation, mesure a **280 px** de defilement — alors que le heros mobile
      en fait **844**. Il se montrait donc pendant qu'on est encore DANS le
      heros, la ou « remonter en haut » ne veut rien dire. C'est la moitie de
      l'impression de brutalite : ce n'est pas seulement le geste, c'est le
      moment.

   CORRECTIF : il se pose au lieu d'apparaitre, et il attend qu'on ait
   reellement quitte le premier ecran.
   - le geste est celui de la maison — opacite + montee de 10 px + echelle
     0,88 -> 1 sur `cubic-bezier(.16,1,.3,1)`, la courbe « se pose » adoptee le
     9 septembre pour les logos de l'ecosysteme ;
   - le moment est lie au DEFILEMENT et non a un seuil : `animation-timeline:
     scroll()` entre 70vh et 105vh. Il n'y a plus d'instant ou il « apparait »,
     il se forme pendant qu'on descend, et il se retire de la meme facon en
     remontant. En `vh`, la plage s'adapte a l'appareil.
   Le seuil de la barre reste en secours, pour les navigateurs sans timeline de
   defilement et pour le mode « mouvement reduit » — ou un fondu de 0,42 s
   suffit, sans echelle. */
.dc-to-top.dc-to-top{position:fixed!important;right:24px;bottom:24px;z-index:900;
  opacity:0;visibility:hidden;pointer-events:none;
  transform:translateY(10px) scale(.88);
  transition:opacity .42s cubic-bezier(.16,1,.3,1),
             transform .42s cubic-bezier(.16,1,.3,1),
             visibility .42s linear;}
body:has(.dc-navbar--solid) .dc-to-top.dc-to-top{
  opacity:1;visibility:visible;pointer-events:auto;transform:none;}

@keyframes dc-to-top-pose{
  from{opacity:0;visibility:hidden;pointer-events:none;
       transform:translateY(10px) scale(.88);}
  2%  {visibility:visible;}
  to  {opacity:1;visibility:visible;pointer-events:auto;transform:none;}}
@supports (animation-timeline: scroll()){
  @media (prefers-reduced-motion: no-preference){
    .dc-to-top.dc-to-top{
      animation:dc-to-top-pose 1s cubic-bezier(.16,1,.3,1) both;
      animation-timeline:scroll(root);
      animation-range:70vh 105vh;}
  }
}
.dc-to-top .elementor-button{
  width:46px;height:46px;padding:0!important;border-radius:50%!important;
  display:flex!important;align-items:center;justify-content:center;
  background:var(--dc-bleu-titres)!important;color:#fff!important;
  border:none!important;
  /* CORRIGE le 27/08 : j'avais invente « 0 6px 20px rgba(26,29,43,.22) ».
     La charte section 07 nomme la troisieme de ses ombres « ombre flottante »,
     et c'est exactement l'usage ici. */
  box-shadow:var(--dc-shadow-lg);}
.dc-to-top .elementor-button:hover{background:var(--dc-text)!important;}
.dc-to-top .elementor-button svg{width:16px;height:16px;fill:currentColor;}
.dc-to-top .elementor-button-icon{margin:0!important;}
/* Le libelle « Haut de page » est masque VISUELLEMENT mais reste dans l'arbre
   d'accessibilite. C'etait display:none : le lecteur d'ecran n'annoncait alors
   qu'un « lien » sans destination, sur un bouton qui n'a aucun texte visible.
   Defaut introduit par moi le 27/08, corrige le meme jour — et il touchait
   precisement le sujet souleve par Veronique. */
/* Motif « lisible par lecteur d'ecran seulement », applique a tous les boutons
   qui n'affichent qu'une icone. Le libelle reste dans l'arbre d'accessibilite
   mais occupe 1x1 px hors flux.
   Concerne : le retour en haut, et les deux fleches du carrousel Actualites,
   qui etaient des liens sans aucun nom — un lecteur d'ecran annoncait
   « lien » sans destination (WCAG 2.4.4). */
.dc-to-top .elementor-button-text,
.dc-carousel-arrow .elementor-button-text{
  position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;}
html{scroll-behavior:smooth;}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto;}}
@media (max-width:767px){.dc-to-top{right:16px;bottom:16px;}}

/* --- 7. « LIRE LA SUITE » DES CARTES D'ARTICLE -----------------------------
   Mesure du 7 septembre : #008AB7 sur blanc vaut 3,95:1, sous les 4,5 exiges
   pour du texte de 14 px. #00688A donne 5,02:1 — c'est deja l'extremite bleue
   de --dc-grad-brand-aa, la variante conforme du degrade de marque, donc pas
   une couleur inventee.
   Portee : le widget Articles d'Elementor, present sur la liste des actualites
   et sur la fiche article. L'accueil livree n'en a pas.
   -------------------------------------------------------------------------- */
.elementor-posts .elementor-post__read-more{color:#00688A!important;}


/* --- 8. L'ETIQUETTE DU HEROS, UNE SEULE FOIS -------------------------------
   Le 7 septembre au soir, A propos et la liste des actualites livraient DEUX
   traitements differents de la meme chose : un cartouche blanc a texte sombre
   d'un cote, une etiquette cyan en capitales de l'autre. Deux pages livrees le
   meme jour ne peuvent pas nommer leur rubrique de deux facons.
   On garde la seconde : c'est le vocabulaire de la V5, celui des intitules de
   section (.dc-eyebrow), et il n'ajoute pas une boite blanche sur une photo.
   Portee : .dc-hero-profile uniquement. L'accueil livree (568) ne porte pas
   cette classe — verifie dans son HTML, elle n'y apparait que dans le script
   de la barre de navigation.
   -------------------------------------------------------------------------- */
.dc-hero-profile .dc-tag .elementor-heading-title.elementor-heading-title{
  background:transparent;border:0;padding:0;border-radius:0;
  font-family:var(--dc-body);font-size:13px;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:#8CE8FF;}


/* --- 9. LA PAGE 404 ---------------------------------------------------------
   Constatee la nuit du 8 septembre, jamais ouverte par personne : le gabarit
   404 du theme n'a aucune reserve en haut, et son titre passait DERRIERE la
   barre de navigation, qui est en position:fixed. Seule la phrase
   « Il semble que rien n'a ete trouve » restait lisible — la page avait l'air
   cassee, pas vide.
   Il n'existe pas de gabarit Elementor pour le 404 ; on ne peut donc pas
   ajouter de balisage, seulement mettre en forme celui du theme
   (`main.site-main > .page-header h1.entry-title` et `.page-content p`).
   C'est suffisant pour qu'elle ne fasse plus accident : la navigation complete
   est de toute facon dans l'en-tete juste au-dessus.
   Portee : `body.error404`, qu'aucune autre page ne porte.
   A REMPLACER par un vrai gabarit 404 au lot 6, avec un mot et un chemin de
   retour ecrits pour la circonstance.
   -------------------------------------------------------------------------- */
body.error404 .site-main,
body.search .site-main{
  min-height:52vh;
  display:flex;flex-direction:column;justify-content:center;align-items:center;
  text-align:center;
  max-width:720px;margin-inline:auto;
  padding:calc(var(--dc-header-h,80px) + 104px) 24px 104px;}
body.error404 .site-main .page-header,
body.search .site-main .page-header{margin:0;}
body.error404 .site-main .entry-title,
body.search .site-main > .page-header .entry-title{
  font-family:var(--dc-display);font-weight:800;
  font-size:clamp(28px,4vw,44px);line-height:1.12;letter-spacing:-.02em;
  color:var(--dc-text);margin:0 0 14px;text-wrap:balance;}
body.error404 .site-main .page-content{margin:0;}
/* La page de resultats partage le meme gabarit de theme et le meme defaut :
   son titre passait aussi sous la barre fixe. En revanche son contenu est une
   LISTE, pas un message centre — on lui rend l'alignement a gauche et toute la
   largeur, seule la reserve haute est commune.
   NOTE D'HYGIENE, a traiter avant la mise en production : la recherche remonte
   nos pages de travail (« Accueil — version ajustee », « Banque de sections »,
   « proposition du 3 septembre »). Le bouton de recherche de l'en-tete est
   inerte, donc la page n'est pas atteignable au clic, mais l'URL `?s=` existe.
   Exclure ces pages demande un filtre PHP dans le theme enfant : a faire au
   moment du menage de mise en production, avec le retrait d'EMCP Tools. */
body.search .site-main{text-align:left;align-items:stretch;max-width:1180px;min-height:0;}
body.search .site-main > .page-header .entry-title{text-align:left;margin-bottom:32px;}
body.error404 .site-main .page-content p,
body.search .site-main .page-content p{
  font-family:var(--dc-body);font-size:17px;line-height:1.6;
  color:var(--dc-text-light);margin:0;}


/* --- 10. L'AGENDA SUR FOND DE NUIT -----------------------------------------
   L'accueil pose sa section sombre sur « Evenements a venir ». Les trois pages
   profil ont le MEME bloc, au meme endroit de la page : leur donner le meme
   traitement fait que les pages se repondent, au lieu que chacune invente sa
   respiration.
   Ces regles etaient jusqu'ici dans le CSS de l'accueil, avec la classe
   QUADRUPLEE (0,5,0) pour battre le socle. On en pose ici une version simple :
   l'accueil garde la sienne, qui pese plus lourd et gagne ; les pages profil
   prennent celle-ci. Aucune des deux ne se marche dessus.
   -------------------------------------------------------------------------- */
.dc-nuit .dc-agenda-title .elementor-heading-title,
.dc-nuit .dc-agenda-day .elementor-heading-title{color:#fff;}
.dc-nuit .dc-agenda-month .elementor-heading-title,
.dc-nuit .dc-agenda-time .elementor-heading-title,
.dc-nuit .dc-agenda-meta .elementor-heading-title{color:rgba(255,255,255,.82);}
/* PIEGE RENCONTRE : sur les pages profil, l'agenda n'est PAS construit comme
   celui de l'accueil. Les rangees y sont des cartes BLANCHES posees dans une
   grille a filet (`.dc-hairline-grid`, fond gris), alors que sur l'accueil
   elles sont transparentes sur le fond sombre. Passer la section en `dc-nuit`
   mettait donc du texte blanc sur des cartes blanches : titres invisibles.
   On neutralise les deux fonds — c'est ce qui fait que les deux constructions
   donnent le meme resultat sur fond de nuit. */
.dc-nuit .dc-agenda-list,
.dc-nuit .dc-hairline-grid{background:transparent!important;background-color:transparent!important;
  border-color:rgba(255,255,255,.16)!important;}
.dc-nuit .dc-agenda-row{background:transparent!important;background-color:transparent!important;}
.dc-nuit .dc-agenda-row{border-color:rgba(255,255,255,.16)!important;}
.dc-nuit .dc-agenda-row:hover{background:rgba(255,255,255,.05)!important;}
.dc-nuit .dc-tag-soft .elementor-heading-title{
  background:rgba(255,255,255,.10)!important;color:rgba(255,255,255,.88)!important;
  border-color:rgba(255,255,255,.20)!important;}
.dc-nuit .dc-tag-event .elementor-heading-title{
  background:rgba(140,232,255,.16)!important;color:#8CE8FF!important;
  border-color:rgba(140,232,255,.32)!important;}
/* Le bouton « Voir tout l'agenda » : contour clair, texte cyan. Meme traitement
   que sur l'accueil, ou il avait demande trois passes — la couleur est posee
   sur le SPAN autant que sur le lien, Elementor imbriquant le libelle dans un
   `<span class="elementor-button-text">` qui porte sa propre couleur. */
.dc-nuit .dc-link-boxed .elementor-button,
.dc-nuit .dc-link-boxed .elementor-button-text{color:#8CE8FF!important;}
.dc-nuit .dc-link-boxed .elementor-button{
  border-color:rgba(140,232,255,.45)!important;background:transparent!important;}
.dc-nuit .dc-link-boxed .elementor-button svg{fill:#8CE8FF!important;}


/* [8/9/2026] #00789F REMPLACE PAR #00688A. Le premier avait ete choisi pour sa
   provenance — l'extremite bleue de --dc-grad-brand-aa — mais cette variante a
   ete calculee pour du texte sur BLANC. Or nos sections portent des lavis : sur
   le lavis lavande (231,226,248) le #00789F retombe a 3,97:1. Mesure sur les
   quatre fonds du site, #00688A est la premiere teinte qui passe partout —
   6,27:1 sur blanc, 4,97:1 sur le lavis le plus soutenu. Un seul bleu de petit
   texte, pas deux. */
/* --- 11. LE BLEU DE MARQUE EN PETIT TEXTE, PARTOUT SAUF SUR L'ACCUEIL LIVREE
   Mesure : #008AB7 sur blanc vaut 3,95:1, sous les 4,5 exiges en dessous de
   18,66 px. #00688A donne 5,02:1 — c'est deja l'extremite bleue de
   --dc-grad-brand-aa, aucune couleur inventee.
   Le probleme touche `.dc-link-text` et `.dc-btn-primary`, presents sur toutes
   les pages du site... y compris l'accueil LIVREE (568), qui est figee et que
   la cliente a en main.
   D'ou `body:not(.page-id-568)` : WordPress pose un identifiant de page sur le
   `body`, on s'en sert pour corriger PARTOUT SAUF la. C'est plus propre que de
   repeter un correctif scope sur chacune des huit autres pages, et le jour ou
   l'accueil sera remplacee il n'y aura qu'a retirer le `:not()`.
   La question de fond — un bleu de charte non conforme en petit texte — reste
   posee au client ; ceci ne fait que ne pas livrer le defaut en attendant.
   -------------------------------------------------------------------------- */
body:not(.page-id-568) .dc-link-text .elementor-button,
body:not(.page-id-568) .dc-link-text .elementor-button-text{color:#00688A!important;}
body:not(.page-id-568) .dc-link-text .elementor-button svg{fill:#00688A!important;}
/* Meme cause pour les intitules de section : `.dc-eyebrow` sort en #008AB7 a
   12 px gras, soit 3,95:1. Sur fond de nuit il reste en cyan clair — la regle
   `.dc-nuit .dc-eyebrow` plus haut pese plus lourd et gagne. */
body:not(.page-id-568) .dc-eyebrow .elementor-heading-title.elementor-heading-title{color:#00688A;}
/* Le bouton plein : c'est le FOND qui portait #008AB7, avec du blanc dessus. */
.dc-btn-primary .elementor-button{background-color:#00688A!important;}
/* maj 8/9/2026 */


/* --- 12. L'AGENDA EN MOBILE ------------------------------------------------
   Mesure du 8 septembre a 390 px : la page d'accueil defilait horizontalement,
   458 px de contenu pour 390 de fenetre. L'en-tete paraissait coupable — il
   mesurait 458 — mais c'etait un SYMPTOME : un element `position:fixed` en
   `width:100%` s'etire au bloc conteneur, qui vaut la largeur du document des
   que celui-ci deborde. Isole en masquant les sections une a une : c'est
   l'agenda.
   Cause : `.dc-agenda-row` reste en `flex-direction:row` sous 767 px. La date
   prend 66 px, le mot roulant 204, et la colonne de texte est ecrasee a
   ZERO — son contenu sort du cadre a droite.
   **Defaut ANTERIEUR** : la V4, que je n'ai pas touchee, deborde a l'identique.
   C'est la meme famille que ce qui avait ete releve le 3 septembre sur la
   banque (« Agenda B, conteneur de ligne en flex-direction:row, titres
   ecrases »), jamais corrige parce que le mobile etait hors perimetre.
   Il ne l'est plus depuis ce matin.
   Portee : partout SAUF l'accueil livree, qui reste le temoin de la discussion.
   -------------------------------------------------------------------------- */
@media (max-width:767px){
  /* SPECIFICITE : le CSS de la page pose
     `.elementor-3574 .elementor-element.elementor-element-8af07d5 .dc-agenda-row
      {align-items:center!important}` — 0,4,0 avec !important. Un !important ne
     suffit donc pas, il faut aussi passer devant en specificite : on ajoute
     `.elementor-element` ET on DOUBLE `.dc-agenda-row` : `body:not(...)` ne pese
     qu'UNE classe plus un element, donc j'etais a 0,3,1 contre leur 0,4,0 — et
     les classes priment sur les elements. Avec la classe doublee : 0,4,1.
     C'est le troisieme correctif de ce projet ou la reponse est « ajouter de la
     specificite », jamais « ajouter un !important ». */
  body:not(.page-id-568) .elementor-element.dc-agenda-row.dc-agenda-row{
    flex-direction:column!important;align-items:flex-start!important;
    gap:10px!important;padding-right:20px!important;}
  body:not(.page-id-568) .dc-agenda-date{
    flex-direction:row!important;align-items:baseline!important;
    gap:8px!important;width:auto!important;flex:0 0 auto!important;}
  body:not(.page-id-568) .dc-roll,
  body:not(.page-id-568) .dc-agenda-body{width:100%!important;flex:1 1 auto!important;}
  /* le titre d'evenement doit pouvoir revenir a la ligne : sans cela il pousse
     la rangee au-dela du cadre meme en colonne. */
  body:not(.page-id-568) .dc-agenda-title .elementor-heading-title{
    white-space:normal!important;overflow-wrap:anywhere;}
  /* La date etait centree — reliquat de sa colonne etroite en desktop. En pile,
     elle doit s'aligner sur le reste, sinon elle flotte au milieu de rien. */
  /* `justify-content` etait le MAUVAIS AXE : .dc-agenda-date est une colonne
     flex, son alignement horizontal se joue sur `align-items`. Piege deja
     documente — viser la colonne, pas la rangee. Et le `text-align:center`
     vient du reglage natif du widget, emis par Elementor sur l'element : il
     faut le reprendre sur le widget ET sur le titre. */
  body:not(.page-id-568) .dc-agenda-date{align-items:flex-start!important;}
  body:not(.page-id-568) .dc-agenda-day,
  body:not(.page-id-568) .dc-agenda-month,
  body:not(.page-id-568) .dc-agenda-day .elementor-heading-title,
  body:not(.page-id-568) .dc-agenda-month .elementor-heading-title{
    text-align:left!important;}
}

/* ===========================================================================
   MENU MOBILE PLEIN ECRAN — 8 septembre 2026
   Demande de Hamza, via Yassine : « quelque chose en fullscreen », et « les
   petites lignes grises a gauche de Services, A propos, ca fait tres vibe
   code ». Les deux remarques ont la meme cause : le menu etait une LISTE DE
   COMPOSANTS posee dans une page blanche — quatre boites blanches sur fond
   blanc, dont la seule existence tenait a un filet gris et a un arrondi, et
   58 % de l'ecran vide dessous.

   On le traite comme un ECRAN. Fond nuit avec ses degrades radiaux, le meme
   vocabulaire que la section Evenements ; grandes capitales du site ; les
   sous-titres qui existaient deja dans le balisage, simplement rendus
   lisibles ; et pour separer, le filet pleine largeur des rangees de
   l'agenda — un geste editorial, pas une carte.

   Tout est en CSS sur le widget « Menu imbrique » deja en place : aucun
   remaniement de structure, donc reversible en supprimant ce bloc.
   Le burger existe jusqu'a 1024 px inclus (verifie), d'ou la borne.
   =========================================================================== */
@media (max-width:1024px){

  /* Le panneau couvre desormais toute la hauteur : la croix de fermeture, qui
     vit dans le meme conteneur que lui, se retrouve DESSOUS. Elle doit passer
     au-dessus, sinon on ouvre le menu sans pouvoir le refermer. */
  .e-n-menu .e-n-menu-toggle{
    position:relative!important;z-index:2147483642!important;}

  /* --- LE FOND ----------------------------------------------------------
     Le panneau est deja en position:fixed : il ne reste qu'a l'habiller et a
     lui donner toute la hauteur. Les degrades radiaux sont ceux de .dc-nuit,
     aux memes proportions. */
  .e-n-menu .e-n-menu-wrapper{
    background-color:#0A0728!important;
    /* Degrades renforces : la nappe d'Evenements a ete reglee pour une SECTION,
       pas pour un ecran entier. Etalee sur 844 px de haut elle se dilue et le
       fond retombe sur son bleu nuit de base, tres sombre. On garde exactement
       la meme base et les memes teintes — c'est le lien avec la section — et on
       remonte les opacites et les rayons. Le milieu de l'ecran s'eclaire, les
       angles restent profonds. */
    background-image:
      radial-gradient(78% 54% at 10% 4%, rgba(126,63,242,.66), rgba(126,63,242,0) 70%),
      radial-gradient(72% 52% at 94% 76%, rgba(0,138,183,.56), rgba(0,138,183,0) 72%),
      radial-gradient(62% 44% at 82% 10%, rgba(217,70,239,.34), rgba(217,70,239,0) 74%),
      radial-gradient(58% 40% at 4% 92%, rgba(46,85,218,.30), rgba(46,85,218,0) 76%)!important;
    /* Le panneau demarrait sous la barre : les 64 px du haut laissaient voir la
       page, d'ou la couture derriere le logo — et l'impression que le logo se
       deplace a l'ouverture. Il couvre maintenant tout l'ecran. */
    top:0!important;
    height:100dvh!important;max-height:100dvh!important;
    padding:0!important;border:0!important;box-shadow:none!important;
    overflow-y:auto!important;-webkit-overflow-scrolling:touch;}

  /* La liste occupe l'ecran, avec de l'air en haut et une reserve en bas pour
     le pied de menu (langue + connexion), ramene plus loin. */
  .e-n-menu .e-n-menu-heading{
    display:flex!important;flex-direction:column!important;
    gap:0!important;width:100%!important;max-width:none!important;
    padding:88px 24px calc(96px + env(safe-area-inset-bottom))!important;}

  /* --- PLUS DE CARTES ---------------------------------------------------
     C'est le point de Hamza. On retire le contour, l'arrondi et le fond : il
     ne reste que le filet du bas, pleine largeur. */
  .e-n-menu .e-n-menu-item.e-n-menu-item{
    width:100%!important;background:none!important;background-color:transparent!important;
    border:0!important;border-radius:0!important;box-shadow:none!important;
    border-bottom:1px solid rgba(255,255,255,.13)!important;
    margin:0!important;padding:0!important;}
  .e-n-menu .e-n-menu-item:last-child{border-bottom:0!important;}
  /* LE RAIL. C'est precisement ce que Hamza a decrit : un `::before` absolu de
     3 px de large en #E2E5ED, colle a gauche de chaque entree. Il rognait au
     passage la premiere lettre des sous-titres. */
  .e-n-menu .e-n-menu-item::before,
  .e-n-menu .e-n-menu-item::after{display:none!important;content:none!important;}
  .e-n-menu .e-n-menu-title{
    border:0!important;border-radius:0!important;background:transparent!important;
    box-shadow:none!important;
    padding:22px 0!important;width:100%!important;min-height:0!important;
    align-items:flex-start!important;}
  .e-n-menu .e-n-menu-title-container{
    flex:1 1 auto!important;width:auto!important;max-width:none!important;}

  /* --- LA TYPOGRAPHIE ---------------------------------------------------
     Le grand titre prend la place laissee par les boites. Le sous-titre etait
     deja dans le balisage : il n'est pas ajoute, il est rendu visible. */
  .e-n-menu .e-n-menu-title-text{
    font-family:var(--dc-display,'Rubik',sans-serif)!important;
    font-size:clamp(26px,7.2vw,32px)!important;font-weight:600!important;
    line-height:1.1!important;letter-spacing:-.02em!important;
    color:#FFFFFF!important;}
  .e-n-menu .e-n-menu-title-text .dc-mi-sub{
    font-family:var(--dc-body,'Roboto',sans-serif)!important;
    font-size:13px!important;font-weight:400!important;line-height:1.4!important;
    letter-spacing:0!important;margin-top:5px!important;
    color:rgba(255,255,255,.58)!important;}

  /* --- LE CHEVRON -------------------------------------------------------
     Il etait dans une boite contouree, donc dans la meme famille que les
     cartes. Il redevient un simple signe. */
  .e-n-menu .e-n-menu-item .e-n-menu-dropdown-icon.e-n-menu-dropdown-icon{
    border:0!important;border-width:0!important;border-radius:0!important;background:transparent!important;
    /* La largeur est fixee plus bas, dans le bloc du 2e passage : ne pas la
       reposer ici, ce selecteur double gagnerait et rendrait le bouton a 4 px. */
    padding:0!important;
    align-self:center!important;}
  .e-n-menu .e-n-menu-dropdown-icon svg,
  .e-n-menu .e-n-menu-dropdown-icon i{
    fill:rgba(255,255,255,.55)!important;color:rgba(255,255,255,.55)!important;
    width:18px!important;height:18px!important;
    transition:transform .3s var(--dc-ease,cubic-bezier(.22,.61,.36,1))!important;}
  .e-n-menu .e-n-menu-item.e-active .e-n-menu-dropdown-icon svg,
  .e-n-menu .e-n-menu-item.e-active .e-n-menu-dropdown-icon i{
    transform:rotate(180deg)!important;}

  /* --- LE SECOND NIVEAU -------------------------------------------------
     L'accordeon deplie sur place. Pas d'ecran a pousser, donc pas de bouton
     retour a inventer : on referme la ou on a ouvert.
     Le contenu est celui du mega menu de bureau, dessine pour un fond CLAIR :
     aplats blancs, intitules sombres, filets gris. Tout doit basculer. */
  .e-n-menu .e-n-menu-content{
    background:transparent!important;border:0!important;box-shadow:none!important;
    padding:0 0 20px!important;}
  /* Aplats : on neutralise tout sauf le bouton du panneau, qui garde le sien. */
  .e-n-menu .e-n-menu-content *:not(.elementor-button):not(.elementor-button *){
    background-color:transparent!important;box-shadow:none!important;}
  .e-n-menu .e-n-menu-content .e-con,
  .e-n-menu .e-n-menu-content .e-con-inner{
    padding-left:0!important;padding-right:0!important;
    border:0!important;border-radius:0!important;}
  /* Filets : ceux du mega menu sont gris sur blanc — ils deviennent des
     cheveux clairs, ou disparaissent. */
  .e-n-menu .e-n-menu-content *{border-color:rgba(255,255,255,.14)!important;}
  .e-n-menu .e-n-menu-content .elementor-divider,
  .e-n-menu .e-n-menu-content .elementor-divider-separator,
  .e-n-menu .e-n-menu-content hr{display:none!important;}

  /* Intitules de groupe (« Entreprises », « Travailleurs »…) : ils etaient en
     bleu nuit sur blanc, donc invisibles ici. */
  .e-n-menu .e-n-menu-content .elementor-widget-heading .elementor-heading-title,
  .e-n-menu .e-n-menu-content h4{
    font-size:10.5px!important;font-weight:700!important;letter-spacing:.13em!important;
    text-transform:uppercase!important;color:rgba(255,255,255,.46)!important;
    margin:16px 0 2px!important;border:0!important;padding-bottom:0!important;}

  /* Liens : Elementor imbrique le libelle dans un span qui porte sa propre
     couleur. Viser le lien seul ne suffit jamais. */
  .e-n-menu .e-n-menu-content a{
    padding:8px 0!important;display:block!important;border:0!important;}
  .e-n-menu .e-n-menu-content a,
  .e-n-menu .e-n-menu-content .elementor-icon-list-text,
  .e-n-menu .e-n-menu-content .elementor-icon-list-item > a > span{
    color:rgba(255,255,255,.84)!important;font-size:15px!important;}
  .e-n-menu .e-n-menu-content a:hover .elementor-icon-list-text,
  .e-n-menu .e-n-menu-content a:focus-visible .elementor-icon-list-text{
    color:#FFFFFF!important;}
  /* Le paragraphe de bas de panneau et son bouton : lisibles sur la nuit. */
  .e-n-menu .e-n-menu-content p{color:rgba(255,255,255,.62)!important;}

  /* --- L'ENTREE EN SCENE ------------------------------------------------
     Les quatre entrees montent en decale. C'est la seule chose empruntee au
     dehors : le principe du decalage, pas une apparence. */
  .e-n-menu .e-n-menu-toggle[aria-expanded="true"] ~ .e-n-menu-wrapper .e-n-menu-item{
    animation:dc-menu-monte .42s var(--dc-ease,cubic-bezier(.22,.61,.36,1)) both;}
  .e-n-menu .e-n-menu-toggle[aria-expanded="true"] ~ .e-n-menu-wrapper .e-n-menu-item:nth-child(1){animation-delay:.05s}
  .e-n-menu .e-n-menu-toggle[aria-expanded="true"] ~ .e-n-menu-wrapper .e-n-menu-item:nth-child(2){animation-delay:.11s}
  .e-n-menu .e-n-menu-toggle[aria-expanded="true"] ~ .e-n-menu-wrapper .e-n-menu-item:nth-child(3){animation-delay:.17s}
  .e-n-menu .e-n-menu-toggle[aria-expanded="true"] ~ .e-n-menu-wrapper .e-n-menu-item:nth-child(4){animation-delay:.23s}

  /* --- LE PIED DE MENU --------------------------------------------------
     Langue et connexion existent dans l'en-tete mais sont masques sous
     1025 px. Le menu ouvert est le seul endroit ou ils ont leur place sur
     telephone — et ils remplissent le bas de l'ecran par quelque chose
     d'utile plutot que par du vide. */
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-lang,
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-nav-cta{
    display:flex!important;position:fixed!important;z-index:10000!important;
    bottom:calc(22px + env(safe-area-inset-bottom))!important;
    align-items:center!important;}
  /* Un voile sous le pied, sinon le contenu defilant passe derriere les deux
     commandes et les rend illisibles. */
  .e-n-menu .e-n-menu-wrapper::after{
    content:"";position:fixed;left:0;right:0;bottom:0;height:110px;pointer-events:none;
    background:linear-gradient(to top,#0A0728 34%,rgba(10,7,40,0));z-index:1;}
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-lang{left:24px!important;}
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-nav-cta{right:24px!important;}
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-lang *{
    color:rgba(255,255,255,.62)!important;}
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-lang b,
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-lang strong{color:#FFFFFF!important;}

  /* --- LA BARRE PENDANT L'OUVERTURE -------------------------------------
     Le fond passe en nuit : logo et croix doivent redevenir blancs. */
  /* Le panneau d'Elementor monte a z-index 2147483640, et il vit DANS l'en-tete.
     Langue et connexion aussi — mais sous `.dc-nav-actions`, qui porte
     z-index:1000 et forme donc un contexte d'empilement : quel que soit le
     z-index de ses enfants, tout le groupe reste sous le panneau. C'est le
     PARENT qu'il faut lever, pas l'enfant. */
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-nav-actions,
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-logo{
    z-index:2147483641!important;}
  /* [9 septembre] Ne PAS ecrire `border:0` ici. Le raccourci remet aussi la
     COULEUR de bordure a `currentColor`, soit le bleu nuit du texte. La barre
     porte `border-bottom:1px solid transparent` avec une transition de 400 ms
     sur `border-color` : a la fermeture du menu, la largeur repasse a 1 px
     instantanement pendant que la couleur s'anime depuis ce presque-noir. D'ou
     une ligne noire qui apparait sous l'en-tete puis s'efface.
     On neutralise donc la COULEUR, pas la bordure. */
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-navbar{
    background:transparent!important;box-shadow:none!important;
    border-color:transparent!important;}
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-navbar img{
    filter:brightness(0) invert(1)!important;}
  .e-n-menu .e-n-menu-toggle[aria-expanded="true"] svg,
  .e-n-menu .e-n-menu-toggle[aria-expanded="true"] i{
    fill:#FFFFFF!important;color:#FFFFFF!important;}
  /* La loupe et son cadre etaient regles pour le panneau blanc : encre sombre
     sur fond sombre des que le menu s'ouvre. */
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-search-btn a,
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-search-btn button,
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-search-btn > *{
    background:rgba(255,255,255,.10)!important;
    border-color:rgba(255,255,255,.30)!important;}
  /* Le glyphe est un SVG d'icone Elementor qui peint en `currentColor` : c'est
     la COULEUR DE TEXTE du span qu'il faut changer, pas seulement `fill`.
     Meme piege que les libelles de bouton — chez Elementor, viser le span. */
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-search-btn,
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-search-btn *{
    color:#FFFFFF!important;}
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-search-btn svg,
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-search-btn svg *,
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-search-btn i{
    fill:#FFFFFF!important;stroke:#FFFFFF!important;}
}

@keyframes dc-menu-monte{
  from{opacity:0;transform:translateY(14px)}
  to{opacity:1;transform:none}}

@media (prefers-reduced-motion:reduce){
  .e-n-menu .e-n-menu-item{animation:none!important;}
}

/* ===========================================================================
   RETOUCHES APRES RELECTURE DE YASSINE SUR TELEPHONE — 8 septembre 2026
   Comparaison avec la demo des trois pistes, direction 1.
   =========================================================================== */
@media (max-width:1024px){

  /* --- LE CHEVRON ETAIT SOMBRE ------------------------------------------
     Exactement le meme piege que la loupe : le glyphe est un SVG d'icone
     Elementor qui peint en `currentColor`, et le bouton gardait sa couleur de
     texte d'origine (#1A1D2B). Regler `fill` ne suffit pas — c'est la troisieme
     fois aujourd'hui. Chez Elementor, repeindre la COULEUR DE TEXTE. */
  .e-n-menu .e-n-menu-item .e-n-menu-dropdown-icon,
  .e-n-menu .e-n-menu-item .e-n-menu-dropdown-icon *{
    color:rgba(255,255,255,.55)!important;}

  /* --- L'ECRAN POUSSE, COMME DANS LA DEMO --------------------------------
     Le widget deroule un accordeon : le panneau ouvert s'insere entre les
     entrees et repousse les trois autres hors de l'ecran. On perd donc ses
     reperes SANS gagner la pleine surface — le pire des deux.
     Elementor pose `.e-active` sur `.e-n-menu-content` : on s'en sert pour
     masquer les entrees non ouvertes. La section occupe alors l'ecran seule,
     son titre reste en tete et sert de reperage. */
  .e-n-menu .e-n-menu-heading:has(.e-n-menu-content.e-active)
    .e-n-menu-item:not(:has(.e-n-menu-content.e-active)){display:none!important;}
  .e-n-menu .e-n-menu-item:has(.e-n-menu-content.e-active){border-bottom:0!important;}
  .e-n-menu .e-n-menu-item:has(.e-n-menu-content.e-active) .e-n-menu-title{
    padding-top:0!important;}

  /* Le retour. La rangee de titre est deja le declencheur de fermeture : on lui
     ajoute la mention, elle herite du clic. Pas de bouton supplementaire a
     inventer, donc pas de seconde affordance pour un seul geste. */
  .e-n-menu .e-n-menu-item:has(.e-n-menu-content.e-active) .e-n-menu-title-container::before{
    content:"\2039\00A0\00A0Retour";display:block;
    font-family:var(--dc-body,'Roboto',sans-serif);font-size:12px;font-weight:500;
    letter-spacing:.06em;color:rgba(255,255,255,.55);margin-bottom:14px;}
  /* Le chevron devient redondant avec « Retour », et pointer vers le bas quand
     on est deja dedans est faux. */
  .e-n-menu .e-n-menu-item:has(.e-n-menu-content.e-active) .e-n-menu-dropdown-icon{
    display:none!important;}

  .e-n-menu .e-n-menu-content.e-active{
    animation:dc-menu-glisse .34s var(--dc-ease,cubic-bezier(.22,.61,.36,1)) both;}

  /* --- LE PIED SANS CONTOURS --------------------------------------------
     La pastille de langue portait un cadre : c'est la meme famille que ce que
     Hamza a fait retirer. Elle redevient du texte. Et le bouton passe en blanc
     plein plutot qu'en degrade : un bouton en degrade viole sur un fond en
     degrade viole se bat avec son propre fond. En blanc, il devient le seul
     point clair de l'ecran — ce qu'une action principale doit etre. */
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-lang,
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-lang *{
    background:transparent!important;background-image:none!important;
    border:0!important;box-shadow:none!important;padding:0!important;
    font-size:13px!important;}
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-nav-cta .elementor-button{
    background:#FFFFFF!important;background-image:none!important;
    border:0!important;box-shadow:none!important;border-radius:8px!important;
    padding:11px 18px!important;}
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-nav-cta .elementor-button,
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-nav-cta .elementor-button *{
    color:#0A0728!important;fill:#0A0728!important;
    font-size:12.5px!important;font-weight:600!important;}
}

@keyframes dc-menu-glisse{
  from{opacity:0;transform:translateX(18px)}
  to{opacity:1;transform:none}}

@media (max-width:1024px){
  /* « Retour » se placait A COTE du titre : le conteneur est un flex en ligne,
     donc le ::before devient un element flex voisin. Il doit passer en colonne
     le temps de l'ecran ouvert. */
  .e-n-menu .e-n-menu-item:has(.e-n-menu-content.e-active) .e-n-menu-title-container{
    flex-direction:column!important;align-items:flex-start!important;}

  /* Le degrade du bouton resistait : le socle le pose avec `!important` a
     specificite egale. On double les classes plutot que d'empiler les
     `!important` — c'est le reflexe a avoir contre le socle. */
  .dc-nav-cta.dc-nav-cta .elementor-button.elementor-button{background-image:none!important;}
  body:has(.e-n-menu-toggle[aria-expanded="true"]) .dc-nav-cta.dc-nav-cta .elementor-button.elementor-button{
    background:#FFFFFF!important;background-image:none!important;}

  /* Reserve du bas : le dernier lien passait sous le pied. */
  .e-n-menu .e-n-menu-content{padding-bottom:34px!important;}
  .e-n-menu .e-n-menu-heading{
    padding-bottom:calc(122px + env(safe-area-inset-bottom))!important;}
}

/* ===========================================================================
   2e RELECTURE TELEPHONE — 8 septembre 2026
   =========================================================================== */
@media (max-width:1024px){

  /* --- LE CHEVRON : je m'etais trompe de cible depuis le debut -----------
     Ce n'est PAS le SVG. Le SVG fait 0x0 et ne peint rien. Le chevron visible
     est `.e-n-menu-dropdown-icon::before` — un carre de 7 px tourne a 45°,
     dessine avec des BORDURES, dont la couleur vient de
     `var(--n-menu-title-color-hover)`. Mes regles sur `fill` et `color` ne
     pouvaient donc rien changer.
     Et j'avais ecrase le bouton a `width:auto` : il ne faisait plus que 4 px,
     d'ou le chevron coupe a droite. On lui rend une vraie boite. */
  .e-n-menu .e-n-menu-item .e-n-menu-dropdown-icon{
    position:relative!important;
    width:26px!important;min-width:26px!important;height:26px!important;
    padding:0!important;margin:0!important;flex:none!important;}
  .e-n-menu .e-n-menu-title .e-n-menu-dropdown-icon::before,
  .e-n-menu .e-n-menu-title:hover .e-n-menu-dropdown-icon::before,
  .e-n-menu .e-n-menu-title.e-current .e-n-menu-dropdown-icon::before{
    border-color:rgba(255,255,255,.62)!important;
    border-width:0 1.6px 1.6px 0!important;
    width:9px!important;height:9px!important;
    left:50%!important;top:50%!important;right:auto!important;bottom:auto!important;
    margin:-6px 0 0 -6px!important;}

  /* --- LE DOUBLE APPUI --------------------------------------------------
     La rangee de titre est un `div` sans `cursor:pointer` qui porte des styles
     de survol. Sur iOS, un element non reconnu comme cliquable + un style de
     survol = le premier appui sert a appliquer le survol, le second seulement
     declenche. C'est ce que Yassine a decrit : « le chevron devient blanc et
     c'est tout ».
     Deux remedes ensemble : on declare la rangee cliquable, et on supprime tout
     ecart entre repos et survol sur les appareils sans souris — s'il n'y a rien
     a reveler, il n'y a plus de premier appui a consommer. */
  .e-n-menu .e-n-menu-title,
  .e-n-menu .e-n-menu-title-container,
  .e-n-menu .e-n-menu-dropdown-icon{cursor:pointer!important;}
  @media (hover:none){
    .e-n-menu .e-n-menu-title:hover .e-n-menu-title-text,
    .e-n-menu .e-n-menu-title .e-n-menu-title-text{color:#FFFFFF!important;}
    .e-n-menu .e-n-menu-title:hover{background:transparent!important;}
  }

  /* --- LES TITRES SE DEMARQUENT DAVANTAGE --------------------------------
     Remarque de Yassine, deja faite par Hamza sur l'en-tete de bureau. Le titre
     et son sous-titre flottaient au milieu d'un grand vide : rien ne disait ou
     un bloc s'arretait. On resserre le sous-titre CONTRE son titre, on ouvre
     l'espace ENTRE les blocs, et on monte le filet d'un cran. Le titre grossit
     un peu — mais c'est le regroupement qui fait la difference, pas la taille. */
  .e-n-menu .e-n-menu-title-text{
    font-size:clamp(29px,8.4vw,36px)!important;font-weight:700!important;
    letter-spacing:-.025em!important;}
  .e-n-menu .e-n-menu-title-text .dc-mi-sub{
    margin-top:2px!important;font-size:13.5px!important;
    color:rgba(255,255,255,.62)!important;}
  .e-n-menu .e-n-menu-title{padding:30px 0!important;}
  .e-n-menu .e-n-menu-item.e-n-menu-item{
    border-bottom-color:rgba(255,255,255,.17)!important;}

  /* --- LE CONTENU PASSAIT SOUS LE LOGO -----------------------------------
     Il glissait derriere le logo et la loupe, qui flottent sans fond. Un aplat
     de masquage ne convient pas : le fond est un degrade, un rectangle plein
     ferait une bande visible. On fait defiler la LISTE plutot que le panneau,
     et on lui pose un masque de degrade — le texte s'efface donc AVANT
     d'atteindre le logo, et le fond, lui, n'est pas touche. */
  .e-n-menu .e-n-menu-wrapper{overflow:hidden!important;}
  .e-n-menu .e-n-menu-wrapper::after{display:none!important;}
  .e-n-menu .e-n-menu-heading{
    height:100dvh!important;max-height:100dvh!important;
    overflow-y:auto!important;overflow-x:hidden!important;
    -webkit-overflow-scrolling:touch;
    -webkit-mask-image:linear-gradient(to bottom,
      transparent 0, transparent 50px, #000 74px, #000 calc(100% - 152px), transparent calc(100% - 98px));
    mask-image:linear-gradient(to bottom,
      transparent 0, transparent 50px, #000 74px, #000 calc(100% - 152px), transparent calc(100% - 98px));}
}

@media (max-width:1024px){
  /* Elementor pose une HAUTEUR EN DUR sur le panneau pour animer l'accordeon
     (ici 553 px pour 1069 px de contenu) et la coupe avec `overflow:hidden`.
     En accordeon c'etait sans consequence : le panneau grandissait dans une
     page qui defilait. En ecran pousse, la liste est devenue le conteneur
     defilant, et cette hauteur figee tronque le contenu. On la libere : c'est
     la liste qui defile, plus le panneau qui se plie. */
  .e-n-menu .e-n-menu-item:has(.e-n-menu-content.e-active),
  .e-n-menu .e-n-menu-content.e-active{
    height:auto!important;max-height:none!important;overflow:visible!important;}
}

/* ===========================================================================
   3e RELECTURE TELEPHONE — 8 septembre 2026
   =========================================================================== */
@media (max-width:1024px){

  /* --- LE CHEVRON POINTE A DROITE ---------------------------------------
     Dans la demo il pointe a droite, et c'est desormais le seul geste juste :
     une fleche vers le BAS annonce un depliage sur place — c'etait vrai de
     l'accordeon, ca ne l'est plus depuis qu'on pousse un ecran. Vers la droite,
     elle annonce qu'on va ailleurs. La forme suit le comportement.
     Agrandi aussi : 11 px de cote au lieu de 9, trait a 2 px. */
  .e-n-menu .e-n-menu-title .e-n-menu-dropdown-icon::before,
  .e-n-menu .e-n-menu-title:hover .e-n-menu-dropdown-icon::before,
  .e-n-menu .e-n-menu-title.e-current .e-n-menu-dropdown-icon::before{
    width:11px!important;height:11px!important;
    border-width:0 2px 2px 0!important;
    border-color:rgba(255,255,255,.68)!important;
    transform:rotate(-45deg)!important;
    margin:-8px 0 0 -8px!important;}

  /* --- LES INTITULES DE GROUPE -------------------------------------------
     C'est de ceux-la que parlait Yassine — « Entreprises », « Travailleurs »,
     « Chercheurs d'emploi » — et c'etait deja la remarque de Hamza sur
     l'en-tete de bureau. A 46 % d'opacite et 10,5 px, ils se noyaient dans la
     liste qu'ils sont censes ouvrir.
     On ne les fait pas crier : on leur donne un filet au-dessus, le meme geste
     que les rangees du premier niveau. C'est le filet qui separe, l'intitule
     n'a plus qu'a etre lisible. */
  .e-n-menu .e-n-menu-content .elementor-widget-heading .elementor-heading-title,
  .e-n-menu .e-n-menu-content h4{
    font-size:11.5px!important;color:rgba(255,255,255,.74)!important;
    letter-spacing:.14em!important;margin:0 0 4px!important;}
  .e-n-menu .e-n-menu-content .elementor-widget-heading{
    border-top:1px solid rgba(255,255,255,.15)!important;
    padding-top:20px!important;margin-top:24px!important;}
  /* Note : j'avais ecrit ici une exception pour retirer le filet du PREMIER
     groupe. Le selecteur `> *:first-child .elementor-widget-heading` remonte au
     conteneur unique du panneau et attrapait donc TOUS les intitules — le filet
     ne s'affichait nulle part. Retiree : le filet au-dessus du premier groupe
     separe utilement l'en-tete de section de la liste. */
}

@media (max-width:1024px){
  /* --- LA 4e ENTREE PARTAIT HORS ECRAN -----------------------------------
     Signale par Yassine : seules trois entrees visibles, la quatrieme cachee a
     droite. La liste est un flex EN COLONNE avec `flex-wrap:wrap`, et je lui ai
     donne une hauteur fixe (100dvh) pour pouvoir la faire defiler. Or une
     colonne flex qui deborde et qui a le droit de se replier ne descend pas :
     elle demarre une SECONDE COLONNE, a droite, hors du cadre. Ca ne se voyait
     pas sur mon banc parce que les quatre entrees y tenaient de 60 px.
     `nowrap` : le debordement redevient du defilement. */
  .e-n-menu .e-n-menu-heading{flex-wrap:nowrap!important;}
  .e-n-menu .e-n-menu-item{flex:0 0 auto!important;}
}

@media (max-width:1024px){
  /* --- LES QUATRE ENTREES DOIVENT TENIR A L'ECRAN ------------------------
     Signale par Yassine : la quatrieme tombe sous la ligne de flottaison.
     Mesure d'une entree a 375x667 : 151 px = titre 116 + panneau REPLIE 34 + 1.
     Ces 34 px sont ma reserve de bas de panneau, que j'appliquais aussi quand
     il est ferme — 34 px de vide sous chaque sous-titre, quatre fois.
     Elle ne vaut que pour le panneau ouvert. */
  .e-n-menu .e-n-menu-content{padding-bottom:0!important;}
  .e-n-menu .e-n-menu-content.e-active{padding-bottom:34px!important;}

  /* Et la respiration suit desormais la HAUTEUR d'ecran plutot qu'une valeur
     figee. C'est la lecon du 3 septembre sur la reserve du pave contact :
     ne jamais figer en px ce qui doit s'adapter a la hauteur de fenetre.
     A 667 px : 21 px de part et d'autre, les 4 entrees tiennent avec de la
     marge. A 844 : 27 px, l'ecran reste occupe sans etre etale. */
  .e-n-menu .e-n-menu-title{padding:clamp(18px,3.2vh,32px) 0!important;}
  .e-n-menu .e-n-menu-heading{
    padding-top:clamp(72px,11vh,96px)!important;
    padding-bottom:calc(100px + env(safe-area-inset-bottom))!important;}

  /* --- L'INTITULE DE GROUPE ETAIT PLUS FAIBLE QUE SES LIENS ---------------
     La hierarchie etait a l'envers : « ENTREPRISES » sortait a 11,5 px et 74 %
     d'opacite, ses liens a 15 px et 84 %. L'intitule etait donc plus PETIT et
     plus PALE que ce qu'il annonce — il se lisait comme une legende, pas comme
     un titre.
     On l'inverse par le contraste et le rythme, pas par la couleur : un aplat
     de couleur ici entrerait en conflit avec le code cyan/magenta des publics,
     deja porteur de sens ailleurs sur le site. */
  .e-n-menu .e-n-menu-content .elementor-widget-heading .elementor-heading-title,
  .e-n-menu .e-n-menu-content h4{
    font-size:12px!important;font-weight:800!important;
    color:rgba(255,255,255,.95)!important;
    letter-spacing:.18em!important;
    margin:0 0 14px!important;}
  /* Les liens reculent d'un cran : ils restent la cible, l'intitule redevient
     le repere. */
  .e-n-menu .e-n-menu-content a,
  .e-n-menu .e-n-menu-content .elementor-icon-list-text,
  .e-n-menu .e-n-menu-content .elementor-icon-list-item > a > span{
    color:rgba(255,255,255,.76)!important;}
  .e-n-menu .e-n-menu-content .elementor-widget-heading{
    padding-top:22px!important;margin-top:26px!important;}
}

@media (max-width:1024px){
  /* --- L'ECART ENTRE L'EN-TETE DE SECTION ET SON PREMIER GROUPE ----------
     Mesure a 375x667 : 71 px entre le bas de « Par public » et le haut de
     « ENTREPRISES ». Il additionne deux reserves qui ne se connaissent pas —
     le bas de la rangee de titre (21 px) et la reserve d'inter-groupe
     (26 + 22). Or quand la section est ouverte, la rangee de titre n'est plus
     une rangee de liste : c'est un en-tete d'ecran, elle n'a pas besoin du
     rythme des rangees.
     On ne touche PAS a l'inter-groupe, qui est juste : on ne corrige que le
     premier, cible par sa colonne dans `.dc-mega-cols`. Ramene a ~36 px :
     assez pour marquer le changement de registre, pas de quoi manger un
     dixieme de l'ecran. */
  .e-n-menu .e-n-menu-item:has(.e-n-menu-content.e-active) .e-n-menu-title{
    padding-bottom:12px!important;}
  .e-n-menu .e-n-menu-content .dc-mega-cols > *:first-child .elementor-widget-heading{
    margin-top:8px!important;padding-top:16px!important;}
}

@media (max-width:1024px){
  /* --- SOUS-TITRE : un cran plus bas -------------------------------------
     Mesure a 375 px : l'ecart de BOITE est de 2 px, mais l'ecart OPTIQUE entre
     le bas des lettres de « Services » et le haut de « Par public » est de
     8,5 px — l'interligne du titre en fournit deja une partie. Pour un titre de
     31,5 px, l'usage place un sous-titre entre 0,2 et 0,35 fois sa taille, soit
     6 a 11 px : on etait donc dans la fourchette, mais dans son bas.
     Porte au milieu de la fourchette (11,5 px optiques). Le rapport avec
     l'ecart entre blocs (43 px) reste de 1 a 4 : le regroupement tient. */
  .e-n-menu .e-n-menu-title-text .dc-mi-sub{margin-top:5px!important;}

  /* --- L'AMORCE DE DEFILEMENT --------------------------------------------
     Le fondu s'eteignait a 569 px pour un pied a 611 : il restait 42 px de vide
     entre la derniere chose visible et le bas de l'ecran. C'est un « faux bas
     de page » — l'oeil voit le contenu s'arreter, puis du vide, et conclut que
     la liste est finie. La convention est l'inverse : laisser une ligne
     VISIBLEMENT COUPEE au bord, c'est le signal de defilement le plus fiable.
     On descend donc le fondu pour que la coupe se fasse juste au-dessus des
     commandes, sans repasser derriere elles. */
  .e-n-menu .e-n-menu-heading{
    -webkit-mask-image:linear-gradient(to bottom,
      transparent 0, transparent 50px, #000 74px,
      #000 calc(100% - 130px), transparent calc(100% - 66px))!important;
    mask-image:linear-gradient(to bottom,
      transparent 0, transparent 50px, #000 74px,
      #000 calc(100% - 130px), transparent calc(100% - 66px))!important;}
}

@media (max-width:1024px){
  /* --- LE FILET PASSE SOUS L'INTITULE, COMME SUR LE BUREAU ---------------
     Verifie dans le mega menu de bureau : l'intitule porte
     `border-bottom:1px solid #E2E5ED` avec 10 px de padding. J'avais mis le
     filet AU-DESSUS du groupe. Trois raisons de s'aligner :
     1. C'est le meme composant, le meme contenu, les memes quatre sections.
        Deux traitements pour un seul objet selon l'ecran, c'est une
        incoherence gratuite — et c'est le genre de chose qu'on compare.
     2. Le filet fait davantage de travail dessous. Au-dessus, c'est une
        separation neutre : elle dit « frontiere ». Dessous, il APPARTIENT a
        l'intitule et le souligne — la convention du titre de colonne et de son
        filet. C'est aussi la meilleure reponse a la remarque de Yassine :
        un intitule souligne ne peut plus se confondre avec ses liens.
     3. L'espace entre groupes redevient du blanc pur, reglable a part. */
  .e-n-menu .e-n-menu-content .elementor-widget-heading{
    border-top:0!important;padding-top:0!important;margin-top:30px!important;}
  .e-n-menu .e-n-menu-content .dc-mega-cols > *:first-child .elementor-widget-heading{
    margin-top:20px!important;padding-top:0!important;}
  .e-n-menu .e-n-menu-content .elementor-widget-heading .elementor-heading-title,
  .e-n-menu .e-n-menu-content h4{
    border-bottom:1px solid rgba(255,255,255,.18)!important;
    padding-bottom:10px!important;margin:0 0 14px!important;}
}



/* ############################################################################
   #  APPARITIONS AU DEFILEMENT — SYSTEME COMMUN  (10 septembre 2026)
   #
   #  Demande de Yassine, reprise d'une demande d'Hamza : « des animations
   #  d'apparition sur toutes les pages », avec le modele d'une maconnerie qui
   #  monte carte par carte (composant framer-motion : opacite 0, y 30,
   #  echelle .95, decalage de 50 ms).
   #
   #  POURQUOI PAS GSAP — ce que Hamza avait propose.
   #  Nous avons deja paye ce choix une fois, le 3 septembre : les apparitions
   #  d'Elementor passent par jQuery Waypoints, et LiteSpeed RETARDE tout script
   #  jusqu'a la premiere interaction reelle du visiteur. Resultat constate au
   #  navigateur : six sections restaient `visibility:hidden` au chargement —
   #  une page blanche sous le heros. GSAP + ScrollTrigger, c'est 95 Ko de plus
   #  soumis exactement au meme differe. Le meme effet s'ecrit ici en CSS pur
   #  avec `animation-timeline: view()`, qui est justement la version native de
   #  ce que fait ScrollTrigger : zero octet, zero script, et surtout aucun
   #  risque de contenu invisible, puisque l'etat au repos est l'etat VISIBLE.
   #  Navigateur sans `animation-timeline` (Firefox aujourd'hui) : le contenu
   #  s'affiche simplement, sans effet. Jamais de page blanche, dans aucun cas.
   #
   #  POURQUOI DANS LE SOCLE ET PLUS DANS LA PAGE.
   #  Le systeme vivait dans le CSS de l'accueil (3574). C'est la quatrieme fois
   #  cette semaine qu'une regle de COMPOSANT se retrouve enfermee dans une
   #  PAGE, et donc absente des trois autres. Il vit desormais ici, avec l'ovale
   #  du header et la bande CTA : une seule definition pour les quatre pages.
   #
   #  LA PORTEE EN PIXELS, ET NON EN POURCENTS.
   #  L'ancienne regle disait `entry 0% entry 55%`. Or la plage `entry` a la
   #  LONGUEUR DE L'ELEMENT : 55 % d'une section de 900 px, c'est 495 px de
   #  defilement ; 55 % du corps d'un article de 1900 px, c'en est 1045, et
   #  l'apparition ne finit jamais. On fixe donc la course en pixels : chaque
   #  apparition dure le meme defilement partout, quelle que soit la hauteur du
   #  bloc.
   ############################################################################ */

/* 1. Rien n'est jamais masque au chargement. */
.elementor-invisible{visibility:visible!important;}
/* 2. L'apparition JS d'Elementor est neutralisee : elle repartirait de zero
      sur un contenu deja visible, donc elle clignoterait. */
.animated{animation:none!important;}

/* [11/9] Yassine : « c'est difficilement perceptible non ? ». Il a raison, et
   la cause n'est pas la course mais la PORTEE : 420 px de defilement pour
   24 px de montee, ca fait un mouvement 17 fois plus lent que le doigt qui
   defile — l'oeil ne le lit pas comme un mouvement, il le lit comme un flou.
   On resserre la portee et on allonge la course : 40 px sur 300 px de
   defilement, soit un rapport de 1 pour 7,5. La difference se voit. */
@keyframes dc-reveal{
  from{opacity:0;transform:translate3d(0,40px,0);}
  to{opacity:1;transform:none;}}
@keyframes dc-reveal-fondu{
  from{opacity:0;}
  to{opacity:1;}}
@keyframes dc-reveal-carte{
  from{opacity:0;transform:translate3d(0,44px,0) scale(.955);}
  to{opacity:1;transform:none;}}
@keyframes dc-reveal-texte{
  from{opacity:0;transform:translate3d(0,20px,0);}
  to{opacity:1;transform:none;}}

@supports (animation-timeline: view()){
@media (prefers-reduced-motion: no-preference){

  /* ---- LES SECTIONS ----------------------------------------------------
     Les heros sont exclus : ils sont au-dessus de la ligne de flottaison,
     donc deja entierement entres — les animer ne produirait rien, sinon un
     risque de premier rendu vide.
     Accueil V5   : enfants 1 et 2 = heros bureau + heros mobile.
     A propos     : enfant 1 = heros.
     Actualites   : enfant 1 = heros ; la section des articles est exclue,
                    ses cartes apparaissent une a une (plus bas) ; l'article
                    a la une n'a qu'un fondu, voir la note.
     Fiche        : enfant 1 = heros, enfant 2 = le corps de l'article (on
                    n'anime pas un texte qu'on est en train de lire),
                    enfant 3 = « A lire aussi ». */
  .elementor-3574 > .e-con:nth-child(n+3),
  .elementor-1307 > .e-con:nth-child(n+2),
  .elementor-1732 > .e-con:nth-child(n+2):not(.dc-featured):not(.dc-articles-section),
  .dc-article-root > .e-con:nth-child(n+3),
  .animated-slow{
    animation:dc-reveal .6s cubic-bezier(.22,.61,.36,1) both!important;
    animation-timeline:view()!important;
    /* [11/9] Yassine : « on dirait qu'ils apparaissent trop tot et c'est pour ca
       qu'on la voit pas bien ». Exact, et c'est le DEPART qui est en cause, pas
       la duree. `entry 0%` se declenche quand le PREMIER PIXEL de la section
       franchit le bas de l'ecran : l'animation se joue donc tout en bas, hors
       de la zone ou l'oeil lit, et quand la section arrive au milieu elle est
       posee depuis longtemps. On retarde le depart : l'apparition commence
       quand la section est deja bien entree et se termine vers le milieu de
       l'ecran — la ou on la regarde. */
    animation-range:entry 140px entry 400px!important;}

  /* ---- L'ARTICLE A LA UNE : FONDU SEUL ---------------------------------
     Son panneau et son image portent un parallaxe pilote en JS, qui lit leur
     position a l'ecran. Deplacer le parent pendant le defilement, c'est lui
     donner une position qui bouge pour une autre raison que le defilement :
     le parallaxe se met a lutter contre l'apparition. Une opacite ne deplace
     aucune boite — les deux effets cohabitent sans se voir. */
  .elementor-1732 > .e-con.dc-featured{
    animation:dc-reveal-fondu .7s linear both!important;
    animation-timeline:view()!important;
    animation-range:entry 140px entry 420px!important;}

  /* ---- LES CARTES D'ARTICLES, UNE A UNE --------------------------------
     C'est le modele que Yassine a envoye : opacite, montee, et une legere
     mise a l'echelle, decalees de carte en carte.
     Le decalage ne se fait PAS par `animation-delay` : sur une animation de
     defilement, le delai s'exprime dans l'unite de la plage, pas en secondes.
     Il se fait en decalant le DEBUT de la plage colonne par colonne — ce qui
     a un avantage sur le stagger de framer-motion : il reste vrai quel que
     soit le sens ou la vitesse du defilement, et il se rejoue a la remontee.
     En maconnerie les cartes d'une meme rangee n'ont deja pas la meme
     hauteur, donc le decalage geometrique s'ajoute au notre : la vague n'est
     jamais mecanique. */
  /* [10/9, correction du « survol sec »] `both` -> `backwards`.
     C'EST LA VRAIE CAUSE, et elle n'a rien a voir avec la courbe : une
     propriete pilotee par une ANIMATION ne peut pas etre TRANSITIONNEE. Avec
     `fill-mode: both`, la carte reste indefiniment sous le controle de
     `dc-reveal-carte` une fois l'apparition finie — le `transform` du survol
     s'applique bien (il est en !important, il gagne contre l'animation) mais
     sans transition : il saute.
     `backwards` ne remplit QUE la phase d'avant : une fois l'apparition jouee,
     l'element revient a son style de base et le survol redevient
     transitionnable. L'etat de repos etant justement opacite 1 / transform
     none, on ne perd rien.
     C'est aussi pour cela que l'article a la une paraissait doux : il n'a
     qu'un fondu, sans transform, donc rien ne bloquait sa transition. */
  .elementor-1732 .dc-articles-grid .elementor-grid > *,
  .elementor-1690 .dc-related-grid .elementor-grid > *{
    animation:dc-reveal-carte .62s cubic-bezier(.22,.61,.36,1) backwards!important;
    animation-timeline:view()!important;
    animation-range:entry 120px entry 360px!important;}
  .elementor-1732 .dc-articles-grid .elementor-grid > *:nth-child(3n+2),
  .elementor-1690 .dc-related-grid .elementor-grid > *:nth-child(3n+2){
    animation-range:entry 182px entry 422px!important;}
  .elementor-1732 .dc-articles-grid .elementor-grid > *:nth-child(3n+3),
  .elementor-1690 .dc-related-grid .elementor-grid > *:nth-child(3n+3){
    animation-range:entry 244px entry 484px!important;}

  /* ---- DANS LE CORPS DE L'ARTICLE : LES SEULS POINTS D'APPUI -----------
     Pas les paragraphes : un texte qui bouge pendant qu'on le lit est une
     gene, pas un effet. Seulement ce qui scande la lecture — les intertitres
     et la citation — et d'un geste deux fois plus discret. */
  .dc-article-body > h2,
  .dc-article-body > blockquote{
    animation:dc-reveal-texte .5s cubic-bezier(.22,.61,.36,1) both!important;
    animation-timeline:view()!important;
    animation-range:entry 90px entry 280px!important;}
}}

/* GARDE-FOU. Elementor ne respecte pas prefers-reduced-motion ; nous si, et il
   faut aussi eteindre les notres. Cette regle vient APRES le bloc @supports :
   elle gagne a specificite egale. */
@media (prefers-reduced-motion: reduce){
  .elementor-invisible{visibility:visible!important;opacity:1!important;
    animation:none!important;animation-name:none!important;}
  .animated,.animated-slow{animation:none!important;animation-name:none!important;}
  .elementor-3574 > .e-con,.elementor-1307 > .e-con,.elementor-1732 > .e-con,
  .dc-article-root > .e-con,
  .elementor-1732 .dc-articles-grid .elementor-grid > *,
  .elementor-1690 .dc-related-grid .elementor-grid > *,
  .dc-article-body > h2,.dc-article-body > blockquote{
    animation:none!important;animation-name:none!important;
    opacity:1!important;transform:none!important;}
}


/* ---------------------------------------------------------------------------
   LE CHAMP DE L'INFOLETTRE — 10 septembre 2026, nuit
   Le champ n'a pas d'etiquette visible : son texte de substitution est donc la
   SEULE indication de ce qu'on doit y taper, et il compte a ce titre comme du
   texte au sens de la norme. Mesure : blanc a 40 % d'alpha, lui-meme a 60 %
   d'opacite, sur le bleu nuit du pave — soit 2,15:1 pour 4,5 exiges.
   On garde l'effet de retrait voulu (le texte saisi reste bien plus present,
   a 14:1), mais on remonte la substitution juste au-dessus du seuil.
   0,46 donnait encore 4,23:1 — le pave est en degrade, donc on prend un peu de
   marge : 0,52 met le point le plus clair du champ a 5,4:1 et le plus sombre
   au-dessus de 4,5.
   -------------------------------------------------------------------------- */
.dc-newsletter input::placeholder,
.dc-cta-band input::placeholder{
  color:rgba(255,255,255,.52)!important;opacity:1!important;}


/* ############################################################################
   #  LA TOUCHE « GLOSSY » — 11 septembre 2026
   #
   #  Mot de la cliente dans son mail. On ne l'invente pas : la V5 a deja sa
   #  grammaire de brillance — une arete claire en haut, un corps qui fonce, un
   #  reflet qui traverse en biais. C'est la grammaire du verre, et c'est ce
   #  qu'on lit comme « tech » sans tomber dans le vernis.
   #
   #  TROIS BORNES QU'ON SE DONNE :
   #  1. PAS SUR L'ACCUEIL. Elle est validee et livree ; les regles sont donc
   #     portees par les trois autres pages nommement.
   #  2. PAS DE GRAIN SUR L'ECOSYSTEME. Yassine l'avait fait retirer la — c'est
   #     un choix, pas un oubli. L'arete et le reflet, oui ; le grain, non.
   #  3. RIEN QUI PORTE DE L'INFORMATION. Un reflet ne doit jamais baisser un
   #     contraste : toutes les valeurs ci-dessous sont sous 0,14 d'alpha, et le
   #     banc a ete repasse apres.
   ############################################################################ */

/* --- L'ARETE ET LE REFLET SUR LES SURFACES SOMBRES -------------------------
   L'arete du haut fait l'epaisseur : c'est elle qui transforme un aplat en
   panneau. Le reflet la prolonge en diagonale, tres large et tres faible, pour
   que la surface ait un sens de lumiere au lieu d'etre uniforme. */
.elementor-1307 .dc-cta-band,
.elementor-1307 .dc-nuit,
.elementor-1732 .dc-cta-band,
.elementor-1732 .dc-newsletter,
.dc-article-root .dc-article-hero{
  position:relative;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16)!important;}
.elementor-1307 .dc-cta-band::after,
.elementor-1307 .dc-nuit::after,
.elementor-1732 .dc-cta-band::after,
.elementor-1732 .dc-newsletter::after,
.dc-article-root .dc-article-hero::after{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:0;
  background-image:linear-gradient(112deg,
    rgba(255,255,255,0) 22%,
    rgba(255,255,255,.075) 38%,
    rgba(255,255,255,.02) 47%,
    rgba(255,255,255,0) 62%);}
.elementor-1307 .dc-cta-band > *,
.elementor-1307 .dc-nuit > *,
.elementor-1732 .dc-cta-band > *,
.elementor-1732 .dc-newsletter > *,
.dc-article-root .dc-article-hero > *{position:relative;z-index:1;}

/* --- L'ARETE SUR LES BOUTONS : RETIREE — 11 septembre 2026 ------------------
   Elle a produit exactement le defaut que Yassine a repere : « en dessous de
   Telecharger le rapport il y a une ligne », « en mobile les lignes sous les
   boutons prennent toute la largeur ».
   La cause de fond : une arete de verre suppose une SURFACE PLEINE ET SOMBRE.
   Or sur ce site les classes qui distinguent les boutons (`dc-link-text`,
   `dc-btn-white`, `dc-btn-outline-white`) sont posees sur les CONTENEURS de
   widget, pas sur les liens eux-memes — impossible de viser juste par
   selecteur. Deux tentatives d'exclusion l'ont montre : sur un lien-texte
   transparent l'ombre du bas devient un trait, et sur un bouton blanc aussi.
   On la retire. Le glossy demande par la cliente est deja porte par les bandes
   sombres et les onglets du carrefour, la ou il y a vraiment une surface.
   A ne pas reintroduire sans une classe posee sur le lien lui-meme.
   -------------------------------------------------------------------------- */


/* ############################################################################
   #  DEUX COMPOSANTS QUI DIVERGEAIENT D'UNE PAGE A L'AUTRE — 11 septembre 2026
   #
   #  Releve par Yassine avant l'envoi des liens : « le header n'est pas le meme
   #  sur l'accueil et les autres pages, notamment la taille du logo » et « le
   #  CTA est plus large sur la V5 que sur A propos, alors que c'est exactement
   #  le meme ». Il a raison sur les deux, et c'est la MEME cause que les quatre
   #  cas deja consignes cette semaine : une regle de COMPOSANT ecrite dans le
   #  CSS d'une PAGE. Elle ne s'applique alors qu'a cette page, et le composant
   #  se met a exister en deux versions.
   ############################################################################ */

/* --- LE LOGO ---------------------------------------------------------------
   Mesure : 132 x 47 sur l'accueil V5, 100 x 36 sur les trois autres pages. La
   regle `width:132px` ne vivait que dans le CSS de l'accueil. C'est la V5 qui
   fait foi — c'est elle qui est validee — donc les autres s'alignent sur elle,
   et la regle vient ici, avec le reste du header.
   -------------------------------------------------------------------------- */
.dc-navbar .dc-logo img{width:132px!important;max-width:132px!important;height:auto!important;}

/* --- LA BANDE CTA ----------------------------------------------------------
   Interieur a 1320 px sur la V5 et Actualites, 1312 sur A propos : 8 px, mais
   sur un bloc identique pose cote a cote, ca se voit. La cause n'est pas la
   bande, c'est ma regle de largeur de page sur A propos
   (`.elementor-1307 .e-con.e-con-boxed > .e-con-inner{max-width:1312px}`) qui
   attrape aussi la bande au passage.
   La bande reprend donc sa largeur ICI, en doublant ses classes : le socle se
   charge APRES le CSS des pages, donc a specificite egale il gagne — et la
   regle de page compte quatre classes, il en faut donc autant.
   -------------------------------------------------------------------------- */
.dc-cta-band.dc-cta-band > .e-con-inner.e-con-inner{max-width:1320px!important;}







/* ############################################################################
   #  LA BANDE CTA SUR TELEPHONE — 11 septembre 2026
   #  Yassine : « le CTA mobile de la page a propos n'est pas exactement le meme
   #  que sur la V5 ». Exact, et c'est la SIXIEME fois cette semaine : les
   #  regles mobiles de cette bande etaient ecrites `.elementor-3574`, donc
   #  elles ne servaient que l'accueil. Mesure a 390 px avant correction :
   #    V5        : boutons en colonne, pleine largeur, gap 10
   #    A propos  : boutons en ligne, 173 + 256 px dans 294 disponibles
   #  Elles vivent desormais ici, sur `.dc-cta-band`, donc partout.
   #  Classes doublees : le CSS des pages passe avant celui du socle, mais
   #  certaines de ses regles comptent quatre classes.
   ############################################################################ */
@media (max-width:767px){
  .dc-cta-band.dc-cta-band .dc-cta-actions.dc-cta-actions{
    flex-direction:column!important;align-items:stretch!important;gap:10px!important;}
  .dc-cta-band.dc-cta-band .dc-cta-actions.dc-cta-actions > *{width:100%!important;}
  .dc-cta-band.dc-cta-band .dc-cta-actions.dc-cta-actions .elementor-button{
    width:100%!important;justify-content:center!important;}
  /* La mention « Ou retrouver votre profil : » prend sa ligne ; les trois
     profils restent cote a cote en dessous. Le selecteur ne vise que les
     `span` — les profils sont des `a`, ils ne sont donc pas etires. */
  .dc-cta-band.dc-cta-band .dc-cta-profiles.dc-cta-profiles p{gap:10px 20px!important;}
  .dc-cta-band.dc-cta-band .dc-cta-profiles.dc-cta-profiles p span{
    flex:0 0 100%!important;text-align:center!important;}
}

/* --- LES TRAITS PLEINE LARGEUR SOUS LES LIENS SOULIGNES --------------------
   Deuxieme cause du meme symptome que ce matin, et elle n'a rien a voir avec
   la premiere : ces liens-la portent un VRAI `border-bottom` — c'est leur
   style, un lien souligne. Le probleme est que le `<a>` est etire par son
   conteneur flex : sur telephone il fait 342 px de large pour 138 px de texte,
   donc le soulignement traverse tout l'ecran. On le fait se caler sur son
   texte. Sur bureau il l'etait deja.
   -------------------------------------------------------------------------- */
@media (max-width:1024px){
  /* Les trois familles de liens SOULIGNES — et elles seulement. Les boutons
     pleins (`dc-btn-white`) et a contour (`dc-btn-outline-white`) doivent au
     contraire rester en pleine largeur sur telephone : chez eux le trait fait
     partie du bouton, pas du texte.
     Chemin complet par page : une premiere version a deux classes perdait
     contre les regles de mise en page des cartes. */
  .elementor-1307 .dc-btn-primary .elementor-button.elementor-button,
  .elementor-1307 .dc-link-boxed .elementor-button.elementor-button,
  .elementor-1307 .dc-link-text .elementor-button.elementor-button,
  .elementor-1732 .dc-btn-primary .elementor-button.elementor-button,
  .elementor-1732 .dc-link-boxed .elementor-button.elementor-button,
  .elementor-1732 .dc-link-text .elementor-button.elementor-button,
  .dc-article-root .dc-btn-primary .elementor-button.elementor-button,
  .dc-article-root .dc-link-boxed .elementor-button.elementor-button,
  .dc-article-root .dc-link-text .elementor-button.elementor-button{
    width:fit-content!important;max-width:100%!important;
    align-self:flex-start!important;margin-inline:0!important;}
}



/* ############################################################################
   #  LE SURVOL DES CARTES : UNE SEULE COURBE — 10 septembre 2026
   #  Yassine : « l'effet au survol des articles est trop sec, alors qu'il est
   #  bien sur l'article a la une ».
   #  Mesure : les deux durent 0,45 s, mais pas avec la meme courbe.
   #    grille d'articles et « Nos espaces » : cubic-bezier(.4, 0, .2, 1)
   #    article a la une                     : cubic-bezier(.22, .61, .36, 1)
   #  La premiere est la courbe « standard » de Material : elle demarre a pleine
   #  vitesse, d'ou la secheresse. La seconde demarre doucement et freine
   #  longuement — c'est elle qu'on ressent comme « bien ».
   #  La variable --dc-ease vaut la premiere : on ne la change PAS (elle sert
   #  ailleurs, y compris sur l'accueil validee), on nomme la seconde et on la
   #  pose sur les survols de cartes. Duree portee a .5 s pour laisser la
   #  courbe s'exprimer.
   ############################################################################ */
.elementor-1732 .dc-articles-grid .elementor-post,
.elementor-1690 .dc-related-grid .elementor-post,
.elementor-1307 .elementor-element-32c416f > .e-con.dc-space-card{
  transition:transform .5s cubic-bezier(.22,.61,.36,1),
             box-shadow .5s cubic-bezier(.22,.61,.36,1)!important;}



/* ############################################################################
   #  LE SURVOL DES CARTES D'ARTICLES : LE VRAI CORRECTIF — 10 septembre 2026
   #  Troisieme fois que Yassine le signale, et les deux premieres tentatives
   #  visaient a cote :
   #    1. changer la courbe — elle etait deja douce, ce n'etait pas la cause ;
   #    2. passer l'apparition en `backwards` — insuffisant : une animation de
   #       DEFILEMENT reste « en cours » meme au-dela de sa plage, donc elle
   #       garde la main sur `transform`.
   #
   #  LA REGLE EN JEU : une propriete pilotee par une animation ne peut pas
   #  etre transitionnee. Les cartes portent `dc-reveal-carte`, qui anime leur
   #  `transform` ; le `transform` du survol s'applique donc bien (il est en
   #  !important) mais SANS transition — d'ou le saut. L'article a la une, lui,
   #  n'a qu'un fondu : rien ne bloque sa transition, et c'est pour cela qu'il
   #  paraissait doux.
   #
   #  LA SORTIE : ne pas se disputer la meme propriete. L'apparition garde
   #  `transform` ; le survol passe sur `top`, que rien n'anime. Le rendu est
   #  identique a l'oeil — 6 px vers le haut — et la transition fonctionne.
   ############################################################################ */
.elementor-1732 .dc-articles-grid .elementor-post,
.elementor-1690 .dc-related-grid .elementor-post{
  position:relative!important;top:0!important;
  transition:top .5s cubic-bezier(.22,.61,.36,1),
             box-shadow .5s cubic-bezier(.22,.61,.36,1)!important;}
.elementor-1732 .dc-articles-grid .elementor-post:hover,
.elementor-1732 .dc-articles-grid .elementor-post:focus-within,
.elementor-1690 .dc-related-grid .elementor-post:hover,
.elementor-1690 .dc-related-grid .elementor-post:focus-within{
  top:-6px!important;transform:none!important;
  box-shadow:0 24px 48px -20px rgba(15,27,61,.28)!important;}

/* ===========================================================================
   LES PASTILLES DU CARROUSEL ETAIENT DES CIBLES DE 8 x 8 PX — 11/9/2026
   Seul echec normatif trouve dans la passe mobile. WCAG 2.2 AA, critere 2.5.8
   « Taille de cible (minimum) » : 24 x 24 px CSS, ou a defaut un espacement
   tel qu'un disque de 24 px centre sur chaque cible n'en rencontre aucune
   autre. Nos pastilles font 8 px avec 8 px d'ecart, soit 16 px d'axe en axe :
   les deux issues sont fermees.
   On ne change pas le DESSIN, qui vient du wireframe (8 px, la vue courante en
   pilule de 22) : on lui ajoute une zone tactile invisible par `::after`, et on
   porte l'ecart a 16 px pour que deux zones se touchent sans se recouvrir.
   Axe en axe : 24 px. Cible reelle : 24 x 24.
   ACCUEIL LIVREE (568) : l'ecart y reste a 8 px — la page est figee et un
   changement d'ecart se VOIT. Elle recoit tout de meme la zone tactile, qui
   elle ne se voit pas : ses pastilles passent de 8 a ~16 x 24 px utiles.
   Le jour ou elle sera remplacee, retirer le `:not()`.
   =========================================================================== */
.dc-carousel-dots .dc-dot{position:relative;}
.dc-carousel-dots .dc-dot::after{content:"";position:absolute;inset:-8px;}
body:not(.page-id-568) .dc-carousel-dots.dc-carousel-dots{gap:16px;}

/* ===========================================================================
   LA FLECHE « HAUT DE PAGE » N'ETAIT PLUS JAMAIS VISIBLE — 11 septembre 2026
   Yassine : « sur mobile et desktop on ne voit plus la fleche qui permet de
   remonter en haut ». Exact, et sur les deux pages qui la portent (accueil V5
   et A propos). Elle n'etait ni masquee ni supprimee : elle n'etait plus FIXE.

   Mesure, fenetre de 844 px, en faisant reellement defiler :
     scrollY    0 -> bouton a y=6197     2000 -> y=4989
     scrollY 5000 -> y=1166              6500 -> y=-351
   Il descend avec la page au lieu de rester colle en bas a droite. A aucun
   moment il ne croise la fenetre. Son `opacity`/`visibility` fonctionnent tres
   bien — c'est sa POSITION qui etait perdue.

   CAUSE : le bouton vit dans `.dc-cta-band`, et cette section porte depuis la
   nuit du 10 septembre l'apparition au defilement `dc-reveal`, qui anime son
   `transform`. **Un ancetre transforme devient le bloc conteneur de ses
   descendants `position:fixed`** : le bouton se cale alors sur la section, pas
   sur la fenetre. Et le piege est plus vicieux qu'il n'y parait — meme en fin
   d'animation la valeur calculee vaut `matrix(1,0,0,1,0,0)`, une matrice
   IDENTITE, qui n'est pas `none` : le bloc conteneur ne disparait jamais.
   Regle a retenir : une animation de `transform` sur un conteneur casse tout
   `position:fixed` a l'interieur, y compris quand elle ne deplace rien.

   CORRECTIF : meme parade que celle trouvee le 10 septembre pour le survol des
   cartes — **ne pas se disputer `transform`, passer par `top`**. La section
   monte de 40 px en `position:relative` + `top`, ce qui donne exactement le
   meme geste a l'oeil, ne cree aucun bloc conteneur, et rend le bouton a la
   fenetre. Seule la section qui porte le bouton change, reperee par `:has()` —
   les sept autres gardent `dc-reveal` et son `transform` composite.
   =========================================================================== */
/* [11 septembre 2026, seconde passe] LE WIDGET A ETE SORTI DE LA BANDE CTA.
   Trois choses tenaient au meme fait — le bouton vivait dans une section de
   contenu — et elles se sont resolues ensemble :
   1. l'apparition au defilement de cette section cassait son `position:fixed`
      (un ancetre transforme devient bloc conteneur des descendants fixes) ;
   2. toute parade en CSS echouait : remplacer le `transform` par `top` rendait
      bien la position, mais l'apparition anime aussi l'OPACITE, et le bouton,
      correctement place, restait invisible tant que la section n'etait pas
      entree — voir le journal ;
   3. et surtout, `.dc-cta-band > .e-con-inner` porte `position:relative` et
      `z-index:1`. C'est un CONTEXTE D'EMPILEMENT : le `z-index:900` du bouton
      n'y valait qu'a l'interieur, et le contexte entier se retrouvait a z=1 —
      a egalite avec celui du pied de page, qui gagne par l'ordre du DOM. Le
      bouton passait donc DERRIERE « Accessibilite ». C'est exactement le piege
      deja paye sur le menu mobile : quand un element ne remonte pas malgre son
      z-index, chercher l'ancetre qui a cree le contexte.
   Le widget est donc deplace dans le conteneur du heros (enfant 1 des deux
   pages) : z:auto, position:relative sans z-index, aucune animation, pas de
   `.e-con-inner`. Il ne cree aucun contexte, le bouton retrouve la racine et
   son z-index:900 vaut enfin quelque chose.
   Consequence heureuse : la bande CTA peut reprendre son apparition, plus rien
   ne l'en empeche. La regle qui la lui retirait est donc supprimee. */

/* ===========================================================================
   L'HOTE DU BOUTON « HAUT DE PAGE » — 11 septembre 2026
   Premier essai : le conteneur du heros. Il marche sur A propos, dont le heros
   est unique — **pas sur l'accueil**, ou les deux heros sont exclusifs :
   `.dc-hero-grid` est en `display:none` sous 1025 px et `.dc-hero-mobile`
   au-dessus. Le bouton disparaissait donc exactement sur la moitie des
   appareils. Mesure a 390 px : boite 0x0 en 0,0, parent `display:none`.
   A retenir : **un element `position:fixed` n'echappe pas au `display:none`
   d'un ancetre** — il echappe au flux, pas a l'affichage.
   D'ou un conteneur de premier niveau qui ne porte QUE lui : sans marge, sans
   hauteur, sans fond, visible a toutes les largeurs, et hors de l'apparition
   au defilement (sinon le `transform` et l'`opacite` de celle-ci reprendraient
   le bouton en otage — c'est tout le probleme qu'on vient de sortir).
   =========================================================================== */
.dc-to-top-hote{padding:0!important;min-height:0!important;gap:0!important;
  background:none!important;}
@supports (animation-timeline: view()){
  @media (prefers-reduced-motion: no-preference){
    .elementor-3574 > .e-con.dc-to-top-hote{animation:none!important;}
  }
}

/* ===========================================================================
   LE CADRE CARRE QUI CLIGNOTE AU TOUCHER — 11 septembre 2026
   Yassine, sur les onglets d'A propos : « il y a un cadre avec bordure carree
   qui apparait puis disparait ». Ce n'est ni une bordure ni un contour de
   focus — verifie : `outline-style` vaut `none` pendant toute la transition,
   et un clic ne deplace meme pas le focus.
   C'est **la surbrillance de toucher du navigateur** :
   `-webkit-tap-highlight-color` vaut `rgba(51,181,229,.4)` par defaut — un
   rectangle cyan translucide peint sur la boite touchee pendant ~200 ms.
   Elle etait deja neutralisee dans la barre de navigation en aout, et nulle
   part ailleurs : elle clignotait donc sur TOUS les elements tactiles du site,
   pas seulement sur ces onglets.
   On la retire partout — la retroaction au toucher existe deja par les etats
   actifs (l'onglet change de fond, les boutons s'enfoncent), et un rectangle
   cyan par-dessus une charte ne dit rien de plus.
   Le contour de focus CLAVIER est conserve : c'est un autre mecanisme
   (`:focus-visible`), et lui doit rester visible.
   =========================================================================== */
a,button,summary,label,select,input,textarea,
[role="tab"],[role="button"],.elementor-button,
.e-n-tab-title,.e-n-menu-title,.elementor-accordion-title,.dc-dot{
  -webkit-tap-highlight-color:transparent;}

/* ===========================================================================
   LA PAGINATION DES LISTES D'ARTICLES — 11 septembre 2026
   Yassine : « sur la page desktop on a pas mis les numeros de page et
   Precedent / Suivant en bas alors qu'il est dans le wireframe ».
   Verification faite, le reglage n'avait jamais manque : le widget porte
   `pagination_type: numbers_and_prev_next` avec ses libelles francais depuis
   le debut. **Il n'y avait simplement pas de deuxieme page** — 7 articles
   publies, moins celui mis a la une, font exactement les 6 de la premiere
   page, et Elementor n'emet rien quand il n'y a qu'une page. Le composant
   etait la, muet faute de matiere.
   On descend donc a 3 articles par page : c'est le seul decoupage EQUILIBRE
   de 6 (3+3). Sur bureau cela donne une rangee pleine de trois cartes, sur
   telephone une pile de trois au lieu de six — la section passe de 3 262 a
   ~1 700 px, ce qui est un gain en soi.
   Pour revenir a six par page il suffit de publier les deux articles finis qui
   dorment en brouillon (1769 « Atelier no-code » et 1770 « Temoignage :
   Sarah ») : 8 a paginer, et le reglage peut remonter.

   Le style reprend EXACTEMENT celui du catalogue (`.dc-cf-pg`) : meme boite de
   40 px, meme filet, meme rayon, meme etat courant en encre pleine. Deux
   paginations sur un site doivent etre le meme objet. Pose dans le socle et
   non dans la page : la liste, l'archive et tout gabarit futur la partagent.
   =========================================================================== */
.elementor-pagination{display:flex!important;flex-wrap:wrap;align-items:center;
  justify-content:center;gap:6px;margin-top:48px;}
.elementor-pagination .page-numbers{
  min-width:40px;height:40px;display:inline-flex;align-items:center;
  justify-content:center;box-sizing:border-box;
  background:#fff;color:var(--dc-text);
  border:1px solid var(--dc-gray-200);border-radius:var(--dc-radius-sm);
  font-family:var(--dc-body);font-size:14px;font-weight:400;
  padding:4px 12px;text-decoration:none;
  transition:background-color .2s var(--dc-ease),border-color .2s var(--dc-ease);}
.elementor-pagination a.page-numbers:hover{
  background:var(--dc-gray-50);border-color:var(--dc-text);}
.elementor-pagination .page-numbers.current{
  background:var(--dc-text);color:#fff;border-color:var(--dc-text);}
.elementor-pagination .page-numbers.prev,
.elementor-pagination .page-numbers.next{font-weight:500;}
/* `prev` et `next` sortent en <span> quand ils ne menent nulle part : ils
   doivent alors se LIRE comme inactifs, pas comme des boutons qui ignorent le
   clic. */
/* [13/9] `--dc-gray-300` (#C8CDD8) donnait **1,59:1** sur blanc — mesure du
   banc. L'etat desactive est certes exempte du critere 1.4.3 (« composants
   d'interface inactifs »), mais a 1,59 il n'est pas « discret », il est presque
   absent : on ne voit plus qu'une boite vide. `--dc-gray-500` (#8891A5) donne
   **3,1:1** — assez pour se lire comme un bouton eteint, assez peu pour ne pas
   se confondre avec un bouton actif. */
.elementor-pagination span.page-numbers.prev,
.elementor-pagination span.page-numbers.next{
  color:var(--dc-gray-500);border-color:var(--dc-gray-200);background:#fff;}
.elementor-pagination .page-numbers.dots{
  border-color:transparent;background:transparent;color:var(--dc-gray-300);}
.elementor-pagination a.page-numbers:focus-visible{
  outline:2px solid var(--dc-bleu-logo);outline-offset:2px;}
@media (max-width:767px){
  .elementor-pagination{gap:4px;margin-top:32px;}
  /* 21/09/2026 — passe de 36 a 44 px. C'etait la seule cible tactile de la
     pagination sous le seuil, et c'est le `height` EXPLICITE de cette regle
     qui gagnait : une page qui n'ajoute que du rembourrage ne peut pas
     grandir la boite, `box-sizing:border-box` la rabat a la hauteur declaree.
     Corrige ICI et pas dans /actualites/ : la pagination est un composant du
     socle, partage par la liste et par l'archive. */
  .elementor-pagination .page-numbers{min-width:40px;height:40px;font-size:13px;padding:4px 10px;}
}

/* Meme geste pour la TABLETTE, qui est une surface tactile au meme titre que
   le telephone : la regle de base laissait 40 px de 768 a l'infini. On borne
   a 1024 pour que le bureau (>=1025) garde exactement la pagination validee.
   Meme palier que les pastilles de filtre d'/actualites/, par coherence. */
@media (min-width:768px) and (max-width:1024px){
  .elementor-pagination .page-numbers{min-width:40px;height:40px;}
}

/* ---------------------------------------------------------------------------
   ALIGNEMENT DES DEUX PAGINATIONS — 21 septembre 2026
   Yassine : « la pagination doit etre la meme que sur la page actualites non ?
   pour garder de la coherence ». Verifie : elles differaient sur trois points
   (taille mobile 44 contre 36, police 13/14 contre 16, ecart 14 px contre 2).

   LA REFERENCE EST COMMUNE AUX DEUX WIREFRAMES V10 : `min-width:2.5rem;
   height:2.5rem; font-size:.875rem` et `gap:.25rem` — soit 40 px, 14 px, 4 px.
   Ils ne divergent que sur la hauteur mobile (le wireframe catalogue descend a
   36 px, celui d'actualites ne prevoit aucune variante et reste a 40). On
   retient 40 partout : c'est le seul chiffre qui rend les deux pages
   identiques sans rapetisser une commande reelle.

   J'avais porte cette pagination a 44 px ce matin, comme cible tactile. On
   revient a 40 px POUR L'OEIL et on garde 44 px POUR LE DOIGT, par une zone
   invisible — la technique deja employee partout ailleurs aujourd'hui. Le
   dessin suit le wireframe, la cible reste conforme.
   L'ecart de 14 px venait d'une marge de 5 px de chaque cote QUI S'AJOUTAIT au
   `gap` de 4 px du conteneur. On retire la marge : le gap seul fait foi.
   Avec 4 px d'ecart et 2 px d'extension de chaque cote, les zones se touchent
   sans se recouvrir. */
.elementor-pagination .page-numbers{margin:0!important;position:relative;}
.elementor-pagination .page-numbers::after{
  content:"";position:absolute;inset:-2px;}

/* ###########################################################################
   #  LE CODE COULEUR PAR PUBLIC — 15 septembre 2026
   #  Decision de la reunion du 14, mot pour mot : « on avait une couleur
   #  dominante par type de profil qu'on va retrouver dans les pages profils.
   #  Donc le bleu, le rose fuchsia et le bleu turquoise. »
   #
   #  Les trois teintes existaient dans le kit depuis le debut
   #  (--dc-cible-travailleurs / -entreprises / -chercheurs) mais n'etaient
   #  CONSOMMEES nulle part : les trois pages profil etaient batties sur le seul
   #  vocabulaire commun, donc strictement de la meme couleur. C'est aussi, pour
   #  partie, le « trop repetitif » du debrief de Noemie.
   #
   #  DEUX DES TROIS TEINTES NE PEUVENT PAS PORTER DE TEXTE.
   #  Sur blanc : #D946EF = 3,46:1 et #22D3EE = 1,81:1, pour 4,5 exiges. Les
   #  employer telles quelles rendrait les trois pages non conformes. Chaque
   #  public a donc TROIS jetons :
   #    --dc-ac        la teinte de la charte, decorative (filets, aplats)
   #    --dc-ac-txt    la meme assombrie jusqu'a 4,5:1 sur les TROIS fonds
   #                   clairs du site (blanc, gray-50, gray-100)
   #    --dc-ac-clair  la meme eclaircie, pour les fonds de nuit (hero)
   #
   #  PORTEE — et c'est le point technique interessant.
   #  Premiere version : des selecteurs en `body.page-id-N`. Ca marche sur les
   #  vraies pages et **ca ne suit pas sur une copie**, qui a un autre
   #  identifiant — je m'en suis apercu en capturant des copies d'audit qui
   #  sortaient sans leur couleur. Le mecanisme etait juste, son ancrage etait
   #  fragile.
   #  Version retenue : les composants lisent le jeton avec une VALEUR DE
   #  REPLI egale a la couleur actuelle du site. Aucune page n'est touchee tant
   #  que le jeton n'est pas defini. Et le jeton est defini dans le `custom_css`
   #  de CHAQUE page profil, donc dans `post-<id>.css`, qui ne se charge que sur
   #  cette page — et qui est recopie tel quel dans une copie. Plus aucun
   #  identifiant en dur, et le dispositif suit la page partout ou elle va.
   ########################################################################### */
.dc-eyebrow .elementor-heading-title.elementor-heading-title{
  color:var(--dc-ac-txt,#00688A)!important;}
/* Le lien de lecture demande plus de specificite que les autres : le correctif
   de contraste du 8/9 pose `body:not(.page-id-568) .dc-link-text
   .elementor-button{color:#00688A!important}` (0,3,1 AVEC !important), qui
   battait ma regle en 0,2,0 — l'accent ne prenait pas, et ca ne se voyait que
   sur ce composant-la parce que les regles voisines du meme correctif, elles,
   n'ont pas de !important. On reprend donc son ecriture exacte, en doublant une
   classe pour passer devant, et on couvre aussi le libelle et la fleche, que le
   correctif colore separement. */
body:not(.page-id-568) .dc-link-text .elementor-button.elementor-button,
body:not(.page-id-568) .dc-link-text .elementor-button-text{
  color:var(--dc-ac-txt,#00688A)!important;}
body:not(.page-id-568) .dc-link-text .elementor-button.elementor-button svg{
  fill:var(--dc-ac-txt,#00688A)!important;}
.dc-card:hover .dc-card-title .elementor-heading-title{
  color:var(--dc-ac-txt,var(--dc-bleu-logo));}
.dc-fin-card{border-left-color:var(--dc-ac,var(--dc-bleu-logo))!important;}
.dc-service-icon .elementor-icon,
.dc-service-icon .elementor-icon svg{
  color:var(--dc-ac-txt,var(--dc-bleu-logo))!important;
  fill:var(--dc-ac-txt,var(--dc-bleu-logo))!important;}
/* 16-09-2026 — LES DEUX JETONS ETAIENT INVERSES SUR LE BOUTON PLEIN.
   Yassine, deux fois : « les icones, boutons, chiffres ne sont pas de la meme
   couleur que la pastille ». Il voyait juste.

   La regle du site, relevee sur l'accueil VALIDEE : la couleur de charte sert
   de FOND, jamais d'encre sur clair. La pastille « Chercheurs d'emploi » est un
   aplat #22D3EE avec de l'encre sombre dessus, a 9,26:1. Les deux seuls endroits
   ou ce cyan est de l'encre sont sur fond SOMBRE — le heros (photo voilee) et la
   carte media (degrade bleu nuit). Sur blanc il ne rend que 1,81:1.

   Le bouton plein faisait l'inverse : son fond portait `--dc-ac-txt`, la variante
   ASSOMBRIE, et son survol la couleur de charte. D'ou l'ecart visible avec la
   pastille, criant sur la page chercheur d'emploi ou les deux tons sont les plus
   eloignes (#00688A contre #22D3EE).

   On remet dans le bon sens : fond = couleur de charte, encre = `--dc-ac-sur`,
   exactement le couple de la pastille. Le survol assombrit.
   Contrastes mesures : 4,82:1 (travailleur) / 10,56:1 (entreprises) /
   9,26:1 (chercheur d'emploi). */
.dc-btn-primary .elementor-button{
  background-color:var(--dc-ac,#00688A)!important;
  border-color:var(--dc-ac,#00688A)!important;
  color:var(--dc-ac-sur,#fff)!important;}
.dc-btn-primary .elementor-button .elementor-button-text,
.dc-btn-primary .elementor-button svg{
  color:var(--dc-ac-sur,#fff)!important;fill:var(--dc-ac-sur,#fff)!important;}
.dc-btn-primary .elementor-button:hover{
  background-color:var(--dc-ac-txt,var(--dc-bleu-titres))!important;
  border-color:var(--dc-ac-txt,var(--dc-bleu-titres))!important;
  color:#fff!important;}
.dc-btn-primary .elementor-button:hover .elementor-button-text,
.dc-btn-primary .elementor-button:hover svg{color:#fff!important;fill:#fff!important;}
.dc-hero-profile .dc-page-etiquette .elementor-heading-title,
/* sur les trois pages profil, l'etiquette de public n'est pas
   `.dc-page-etiquette` (c'est le cas d'Actualites V2) mais une pastille
   `.dc-tag .dc-tag-white` degarnie de son fond par la regle du 8/9 plus haut.
   Verifie au rendu avant d'ecrire ce selecteur : la premiere version ne
   touchait rien. */
.dc-hero-profile .dc-tag .elementor-heading-title.elementor-heading-title{
  color:var(--dc-ac-clair,#8CE8FF)!important;}
/* Le bouton plein du hero est blanc sur photo : il ne prend pas l'accent, il
   garde son contraste. */
.dc-hero-profile .dc-btn-white .elementor-button{
  background-color:#fff!important;border-color:#fff!important;}

/* --- LE BENTO DES FORMATIONS : LE CONTENU DEBORDAIT DE LA CARTE ------------
   Reunion du 14, Hamza sur la page profil travailleur : « le board frame
   destine aux travailleurs. La, tout ca, ca doit etre mis differemment. Ca ne
   fonctionne pas. »
   Mesure : la carte dominante fait 411 px de haut — hauteur imposee par la
   colonne de droite, deux cartes de 200 px plus un filet — alors que son
   contenu en demande 458 (247 de visuel + 211 de corps). Les 47 px manquants
   sont pris sur le bas : la fleche de lecture sortait de la carte, coupee en
   deux. Ce n'etait pas un defaut de dessin, c'etait un debordement.

   La regle : dans une carte a hauteur imposee, c'est le VISUEL qui absorbe la
   variation, jamais le texte. Le corps garde sa hauteur naturelle, l'image
   prend ce qui reste, avec un plancher pour qu'elle ne disparaisse pas.
   -------------------------------------------------------------------------- */
.dc-bento-left{overflow:hidden;}
.dc-bento-left > .dc-card-img{
  flex:1 1 auto!important;aspect-ratio:auto!important;
  min-height:150px!important;height:auto!important;}
.dc-bento-left > .dc-card-body{flex:0 0 auto!important;}

/* --- LE « DOUBLE CONTOUR » ---------------------------------------------------
   Hamza, reunion du 14 : « ca aussi, forcement, il y a des doubles contours,
   ce genre de choses ».
   Trouve : sur les pages profil, le bento imbrique une grille a filet DANS une
   grille a filet (`.dc-hairline-grid > .dc-hairline-grid.dc-bento-right`). Or
   `.dc-hairline-grid` porte a la fois un fond gris — c'est lui qui fabrique les
   filets, par la gouttiere — ET une bordure de 1 px. Imbriquees, les deux se
   cumulent : la gouttiere de la grille exterieure (1 px de gris) touche la
   bordure de l'interieure (1 px de gris), et on lit un trait de 2 px la ou tout
   le site en a un de 1. Les angles arrondis se doublent de la meme facon.
   La grille interieure n'a pas besoin de bordure : la bordure appartient au
   bloc, la gouttiere appartient a la grille. Une seule des deux porte le cadre.
   -------------------------------------------------------------------------- */
.dc-hairline-grid .dc-hairline-grid{
  border:0!important;border-radius:0!important;}

/* --- « SE CONNECTER » : LE DEGRADE DECORATIF PORTAIT DU TEXTE BLANC ---------
   Releve par l'audit AA du 15 septembre, sur les cinq pages du lot : 4,46:1
   pour 4,5 exiges a 14 px / 600. Ce n'est pas un defaut de ces pages — c'est le
   bouton de l'EN-TETE, donc il est sur tout le site depuis le 18 aout.
   La cause est deja consignee et deja resolue ailleurs : « le degrade de marque
   ne peut pas porter de texte blanc en AA » — `--dc-grad-brand` mesure 4,23:1
   du cote violet et 3,95:1 du cote bleu. Une variante conforme avait ete
   calculee le 27 aout pour les seules surfaces portant du texte, mais elle
   n'avait jamais ete posee dans le kit ni appliquee ici.
   Elle est ecrite en dur ci-dessous plutot que reintroduite comme jeton : un
   jeton de plus dans le kit se consomme par reflexe, alors que cette variante
   ne doit servir QUE sous du texte. Le degrade decoratif ne bouge pas.
   Mesures : 5,41:1 cote violet, 5,02:1 cote bleu, 5,86:1 au point median.
   -------------------------------------------------------------------------- */
.dc-navbar--solid .dc-nav-cta .elementor-button{
  background-image:linear-gradient(135deg,#7E3FF2 0%,#00789F 100%)!important;}


/* --- 8 bis. LA PASTILLE DE CIBLE DU HEROS PROFIL ---------------------------
   Arbitrage de Yassine, 15 septembre 2026 (D3) : l'etiquette de public du hero
   des trois pages profil passe en PASTILLE PLEINE a la couleur du public,
   texte blanc.
   CE QUE CELA REMPLACE : le traitement pose le 7 septembre (section 8
   ci-dessus) — texte teinte, fond transparent, angles droits — qui suivait la
   sect. 11 de la charte. Hamza, reunion du 14 : « evitez les bords droits
   [...] arrondi des deux cotes » et « une couleur dominante par type de
   profil ». Le client tranche contre la charte sur CE composant, en
   connaissance de cause. La section 8 reste en place pour tout .dc-tag du hero
   qui ne porte pas la classe ci-dessous.
   CONTRASTE — le point qui a failli passer inapercu. La teinte de charte ne
   peut pas porter du blanc : #D946EF = 3,46:1 et #22D3EE = 1,81:1, pour 4,5
   exiges a 13 px. On emploie donc --dc-ac-txt, le jeton DEJA assombri a 4,5:1
   et defini dans le custom_css de chaque page profil. Le contraste etant
   symetrique, blanc SUR ce jeton donne le meme rapport : 5,01 / 10,56 / 5,03.
   Aucune couleur nouvelle n'est introduite.
   PORTEE : .dc-hero-profile + .dc-tag-pastille, classe portee par le seul
   widget d'etiquette des trois pages profil. Cinq classes, donc devant la
   regle de la section 8 qui en compte quatre.
   -------------------------------------------------------------------------- */
.dc-hero-profile .dc-tag.dc-tag-pastille .elementor-heading-title.elementor-heading-title{
  /* 16/09 — ALIGNEMENT SUR L'ACCUEIL, qui est validee a 100 %.
     La premiere version employait --dc-ac-txt, le jeton ASSOMBRI, pour porter
     du blanc. Resultat : la pastille « chercheur d'emploi » sortait en #0B7A8B
     sur la page profil contre #22D3EE sur l'accueil — deux couleurs pour un
     meme objet. Releve par Yassine a l'oeil, confirme a la mesure.
     L'accueil resout autrement : elle garde la couleur de charte et adapte la
     COULEUR DU TEXTE — encre sur le fuchsia et le turquoise, blanc sur le bleu
     fonce. C'est elle qui fait reference. */
  background:var(--dc-ac,#00688A)!important;
  color:var(--dc-ac-sur,#1A1D2B)!important;   /* la section 8 pose color:var(--dc-ac-clair)!important
                             sur 4 classes ; il faut donc !important ici aussi,
                             nos 5 classes faisant la difference. */
  padding:6px 14px;
  border-radius:var(--dc-pill,999px);
  letter-spacing:.12em;}


/* --- 8 ter. LE HEROS PROFIL PREND LA COULEUR DE SON PUBLIC -----------------
   Constat de Yassine, 16 septembre : les trois pages profil portaient la MEME
   photo (`photo-hero-2048`, qui coiffe d'ailleurs sept pages du site) et le
   MEME voile — un degrade plat a deux paliers. C'est la cause premiere du
   « tout se ressemble » que Noemie a releve.
   Les deux pages validees font mieux : A propos superpose un lineaire a quatre
   paliers et un radial ; Actualites V2 emploie des radiaux AUX COULEURS DE LA
   MARQUE. Les pages profil avaient le traitement le plus pauvre du site.
   Ce qu'on pose : le voile sombre de lisibilite reste (il porte le contraste
   du titre), et on ajoute DEUX radiaux a la couleur du public. Une seule
   regle, trois resultats : elle lit `--dc-ac`, defini dans le custom_css de
   chaque page profil. Changer la couleur d'un public reste une ligne.
   ORDRE DES COUCHES : la PREMIERE couche est AU-DESSUS. Les radiaux passent
   donc avant le voile sombre, sinon ils seraient peints derriere et invisibles
   — le piege du 8 septembre, deja paye une fois.
   -------------------------------------------------------------------------- */
.dc-hero-profile::before{
  background-image:
    radial-gradient(54% 66% at 86% 6%,
      color-mix(in srgb, var(--dc-ac,#00688A) 46%, transparent) 0%,
      color-mix(in srgb, var(--dc-ac,#00688A) 0%, transparent) 70%),
    radial-gradient(44% 56% at 4% 94%,
      color-mix(in srgb, var(--dc-ac,#00688A) 26%, transparent) 0%,
      color-mix(in srgb, var(--dc-ac,#00688A) 0%, transparent) 72%),
    /* voile renforce le 16/09 : les nouvelles photos sont plus claires que
       l'ancienne sous le sous-titre. Mesure au pixel, texte a 82 % d'opacite
       compris : entreprises tombait a 3,79:1 et chercheurs a 4,07:1. */
    linear-gradient(0deg, rgba(15,27,61,.95) 0%, rgba(15,27,61,.78) 55%, rgba(15,27,61,.62) 100%)
    !important;}


/* ===========================================================================
   LE TEMOIGNAGE EN GRANDE PHOTO — 16 septembre 2026
   ---------------------------------------------------------------------------
   Noemie, 27 aout : « si ce principe devient le traitement de chaque formation,
   service, actualite, evenement, podcast, etc., nous risquons d'obtenir a terme
   un site tres coherent mais graphiquement repetitif. » Elle proposait quatre
   traitements pour en sortir ; le deuxieme est explicite :
   « **grande photo + citation, plutot qu'un nouveau pave** ».
   Mesure du 16/09 : sur les pages profil, CINQ sections de contenu sur sept
   etaient des grilles de paves. Sur A propos V2 — la page qu'elle a aimee —
   trois sur sept, et la plus dense est une liste, pas une grille.
   Ce bloc remplace la grille de trois vignettes de temoignage.
   =========================================================================== */
.dc-testi-large{display:grid;grid-template-columns:minmax(0,44%) minmax(0,1fr);
  gap:44px;align-items:center;}
.dc-testi-large .dc-testi-large-img img{
  display:block;width:100%;height:100%;object-fit:cover;
  aspect-ratio:4/5;border-radius:var(--dc-radius-lg,16px);}
.dc-testi-large-corps{min-width:0;}
.dc-testi-large-quote p,.dc-testi-large-quote{
  font-family:var(--dc-display);font-size:clamp(22px,2.2vw,30px);font-weight:600;
  line-height:1.35;letter-spacing:-.015em;color:var(--dc-text);margin:0 0 22px;}
/* le filet reprend la couleur du public : c'est la seule marque d'accent */
.dc-testi-large-quote{border-left:3px solid var(--dc-ac,#00688A);padding-left:26px;}
.dc-testi-large-name .elementor-heading-title{
  font-family:var(--dc-body);font-size:16px;font-weight:700;color:var(--dc-text);margin:0;}
.dc-testi-large-role .elementor-heading-title{
  font-family:var(--dc-body);font-size:14px;font-weight:400;
  color:var(--dc-text-light);margin:4px 0 0;}
@media (max-width:767px){
  .dc-testi-large{grid-template-columns:1fr;gap:26px;}
  .dc-testi-large .dc-testi-large-img img{aspect-ratio:16/10;}
}

/* ===========================================================================
   LES TROIS PAGES PROFIL : DEUX GRILLES DE PAVES EN MOINS   (16-09-2026)
   ---------------------------------------------------------------------------
   Releve a la mesure sur les trois pages publiees, a 1440 px :

     travailleur  3 grilles de paves blancs
     entreprises  4, dont DEUX COLLEES dans « Financer et organiser » (3 + 3)
     chercheur    4, dont DEUX COLLEES dans « Pourquoi vous former » (4 + 3)

   Et deux de ces grilles sont STRICTEMENT LES MEMES d'une page a l'autre :
   la grille arrondie de 421 x 136 (.dc-fin-card) et la grille numerotee de
   327 px (.dc-tile.dc-step, « Votre parcours en 4 etapes » / « Comment ca se
   passe ? »). C'est ce que Hamza decrit en reunion du 14 septembre :
   « les trois pages la c'est quasiment les memes ». Et c'est le reproche que
   Noemie repete depuis la V1 d'A propos : les paves qui reviennent.

   Aucun contenu ne bouge, aucun ordre ne bouge — le wireframe V10 est fige.
   Seul le MOTIF change, et uniquement pour du vocabulaire deja valide par le
   client sur A propos V2 : la liste a filets de « Nos rapports de veille ».

   Les deux regles vivent dans le socle et portent sur des classes partagees :
   une seule ecriture couvre les trois pages, et l'equipe editoriale continue
   de voir des conteneurs nommes avec leurs widgets, pas un bloc de code.
   =========================================================================== */

/* --- A. LE FINANCEMENT DEVIENT UNE LISTE A FILETS -------------------------
   .dc-fin-card portait un cadre blanc arrondi, 24 px de chair et un filet
   d'accent de 3 px a gauche : trois pavés cote a cote qui disent tous la meme
   chose (« un dispositif, ce qu'il couvre »). C'est une liste de definitions,
   pas trois offres a comparer. On la rend telle quelle : le dispositif a
   gauche dans la couleur du public, ce qu'il couvre a droite, un filet entre
   les rangees, aucun cadre. Exactement la construction de .dc-pub-card sur
   A propos V2 (validee le 14/09), a ceci pres qu'il n'y a pas de visuel.

   `:has(> .dc-fin-card)` cible le parent sans dependre de son identifiant :
   il change a chaque page (207008c / 0e7ef96 / 748bfaf). Le !important est
   obligatoire — Elementor pose display:grid et grid-template-columns depuis
   ses propres reglages, sous `.elementor-685 .elementor-element.elementor-
   element-207008c`, soit trois classes. */
.e-con:has(> .dc-fin-card){
  display:flex!important;flex-direction:column!important;
  gap:0!important;grid-template-columns:none!important;
  border-top:1px solid var(--dc-gray-200)!important;}

.e-con > .dc-fin-card{
  display:grid!important;
  grid-template-columns:minmax(0,290px) minmax(0,1fr)!important;
  column-gap:40px!important;row-gap:6px!important;
  align-items:start!important;
  padding:22px 0!important;
  background:none!important;background-color:transparent!important;
  border:0!important;border-bottom:1px solid var(--dc-gray-200)!important;
  border-radius:0!important;box-shadow:none!important;
  transition:background-color .3s var(--dc-ease)!important;}
.e-con > .dc-fin-card:hover{
  background-color:var(--dc-gray-50)!important;box-shadow:none!important;transform:none!important;}

/* Le dispositif porte la couleur du public — c'est ce qui remplace le filet
   d'accent de 3 px, et ce qui garde le code couleur par public demande le
   14/09. --dc-ac-txt et non --dc-ac : c'est le jeton DEJA assombri a 4,5:1,
   le seul des deux qui passe AA a 17 px sur fond clair. Le magenta brut
   #D946EF de la page travailleur ne donne que 3,1:1. */
.dc-fin-card > .dc-fin-card-title{margin:0!important;}
.dc-fin-card-title h3.elementor-heading-title.elementor-heading-title,
.dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{
  font-size:17px!important;line-height:1.35!important;
  color:var(--dc-ac-txt,var(--dc-bleu-logo))!important;}
.e-con > .dc-fin-card > .elementor-widget-text-editor{margin:0!important;}
.dc-fin-card p{font-size:15px!important;line-height:1.6!important;}

/* Sous 768 px la rangee redevient une pile : un titre, son texte, un filet.
   On garde les filets — ce sont eux qui disent que c'est une liste. */
@media(max-width:767px){
  .e-con > .dc-fin-card{
    grid-template-columns:minmax(0,1fr)!important;
    row-gap:4px!important;padding:18px 0!important;}
  .dc-fin-card-title h3.elementor-heading-title.elementor-heading-title,
  .dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{font-size:16px!important;}
  .dc-fin-card p{font-size:14px!important;}
}

/* --- B. LE PARCOURS : UNE FRISE A CERCLES NUMEROTES  (18-09, v2) ----------
   Premiere version (16/09) : un trait continu et quatre grands chiffres
   suspendus dessous. Yassine : « j'aime bien comme ca mais faudrait la aussi
   quelque chose d'un peu plus design et moins classique non ? » — et il a
   envoye `21st.dev/@7ovr/components/how-it-works-2`, dont le dispositif est
   exactement celui-ci : des CERCLES NUMEROTES bordes, relies par un trait.

   On le transpose a l'horizontale, pour garder la compacite de la rangee : le
   chiffre entre dans un cercle de 52 px borde dans la couleur du public, et
   chaque etape tire un segment jusqu'a la suivante.

   POURQUOI DES SEGMENTS ET NON UN TRAIT CONTINU EN ARRIERE-PLAN : le fond de
   la section change d'une page a l'autre (lavis clair ici, blanc ailleurs).
   Un trait unique passant DERRIERE les cercles obligerait a leur donner la
   couleur du fond pour le masquer — donc a coder la couleur du fond en dur a
   quatre endroits. Chaque etape dessine donc son propre segment, du bord de
   son cercle au cercle suivant : aucun trait ne croise aucun cercle, et rien
   ne depend du fond.

   `:has(> .dc-tile.dc-step)` reste indispensable : sur la page entreprises,
   .dc-hairline-grid enveloppe aussi les cartes d'offre. */
.dc-hairline-grid:has(> .dc-tile.dc-step){
  display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))!important;
  gap:0!important;
  background:none!important;background-color:transparent!important;
  border:0!important;border-radius:0!important;overflow:visible!important;}

.dc-hairline-grid > .dc-tile.dc-step{
  position:relative!important;
  display:flex!important;flex-direction:column!important;
  background:none!important;background-color:transparent!important;
  background-image:none!important;
  border:0!important;border-radius:0!important;box-shadow:none!important;
  padding:0 36px 0 0!important;min-height:0!important;}
.dc-hairline-grid > .dc-tile.dc-step:last-child{padding-right:0!important;}

/* le cercle */
.dc-hairline-grid > .dc-tile.dc-step .dc-tile-num{
  margin:0 0 20px!important;align-items:flex-start!important;}
.dc-hairline-grid > .dc-tile.dc-step .dc-tile-num .elementor-heading-title.elementor-heading-title{
  display:flex!important;align-items:center!important;justify-content:center!important;
  width:52px!important;height:52px!important;box-sizing:border-box!important;
  border:2px solid var(--dc-ac-txt,var(--dc-bleu-logo))!important;border-radius:50%!important;
  font-family:var(--dc-display)!important;font-size:19px!important;font-weight:800!important;
  line-height:1!important;letter-spacing:0!important;
  color:var(--dc-ac-txt,var(--dc-bleu-logo))!important;
  background:transparent!important;}

/* le segment qui relie au cercle suivant */
.dc-hairline-grid > .dc-tile.dc-step::after{
  content:"";position:absolute;top:25px;left:66px;right:22px;height:2px;
  background:var(--dc-ac-txt,var(--dc-bleu-logo));opacity:.32;}
.dc-hairline-grid > .dc-tile.dc-step:last-child::after{display:none;}

/* Le survol de tuile repeint un degrade et passe le texte en blanc — c'est le
   survol d'une TUILE, pas d'une etape. On le neutralise. */
.dc-hairline-grid > .dc-tile.dc-step:hover{
  background:none!important;background-color:transparent!important;
  background-image:none!important;transform:none!important;}
.dc-hairline-grid > .dc-tile.dc-step:hover .elementor-heading-title{color:var(--dc-text)!important;}
.dc-hairline-grid > .dc-tile.dc-step:hover .dc-tile-num .elementor-heading-title{
  color:var(--dc-ac-txt,var(--dc-bleu-logo))!important;}
.dc-hairline-grid > .dc-tile.dc-step:hover p{color:var(--dc-text-light)!important;}

.dc-hairline-grid > .dc-tile.dc-step .elementor-widget-heading:not(.dc-tile-num)
  .elementor-heading-title.elementor-heading-title{font-size:18px!important;line-height:1.3!important;}
.dc-hairline-grid > .dc-tile.dc-step p{font-size:15px!important;line-height:1.6!important;}

@media(min-width:768px) and (max-width:1024px){
  .dc-hairline-grid:has(> .dc-tile.dc-step){grid-template-columns:repeat(2,minmax(0,1fr))!important;}
  .dc-hairline-grid > .dc-tile.dc-step{padding:0 28px 26px 0!important;}
  .dc-hairline-grid > .dc-tile.dc-step:nth-child(2n){padding-right:0!important;}
  .dc-hairline-grid > .dc-tile.dc-step:nth-child(2n)::after{display:none;}
  .dc-hairline-grid > .dc-tile.dc-step:last-child::after{display:none;}
}
/* Mobile : la frise se redresse. Le segment devient vertical, le long de la
   colonne des cercles — c'est la lecture verticale de how-it-works-2. */
@media(max-width:767px){
  .dc-hairline-grid:has(> .dc-tile.dc-step){grid-template-columns:minmax(0,1fr)!important;}
  .dc-hairline-grid > .dc-tile.dc-step{padding:0 0 26px 70px!important;}
  .dc-hairline-grid > .dc-tile.dc-step:last-child{padding-bottom:0!important;}
  .dc-hairline-grid > .dc-tile.dc-step .dc-tile-num{
    position:absolute!important;top:0;left:0;margin:0!important;}
  .dc-hairline-grid > .dc-tile.dc-step::after{
    top:66px;left:25px;right:auto;bottom:-4px;width:2px;height:auto;}
  .dc-hairline-grid > .dc-tile.dc-step .dc-tile-num .elementor-heading-title.elementor-heading-title{
    width:52px!important;height:52px!important;}
}


/* .dc-tile:hover pose un degrade de fond et passe tout le texte en blanc —
   c'est le survol d'une TUILE. Sur une frise sans cadre, il repeindrait un
   pave la ou on vient de l'enlever. On le neutralise pour les seules etapes. */
.dc-hairline-grid > .dc-tile.dc-step:hover{
  background:none!important;background-color:transparent!important;
  background-image:none!important;transform:none!important;}
.dc-hairline-grid > .dc-tile.dc-step:hover .elementor-heading-title{color:var(--dc-text)!important;}
.dc-hairline-grid > .dc-tile.dc-step:hover p{color:var(--dc-text-light)!important;}
/* ===========================================================================
   LE CARREFOUR DES PAGES PROFIL : ICONES AU TRAIT, CARTE ENTIEREMENT CLIQUABLE
   (16-09-2026)
   ---------------------------------------------------------------------------
   1. LES ICONES. Les trois cartes portaient des glyphes FontAwesome PLEINS
      (fa-book-open, fa-award, fa-compass...), reconnaissables a leur viewBox
      en « 0 0 576 512 » et a leur remplissage. Le wireframe V10 dessine tout
      autre chose :

        <svg width="32" height="32" viewBox="0 0 24 24" fill="none"
             stroke="currentColor" stroke-width="1.5">

      C'est-a-dire du TRAIT, pas de la masse — ce que la charte appelle en
      section 08 « pictogrammes au trait, epaisseur 2 px, angles arrondis ».
      Les quatre SVG du wireframe ont ete televerses tels quels et affectes aux
      neuf emplacements des trois pages.

      Le socle posait `fill:var(--dc-ac-txt)!important` sur ces SVG — ecrit
      pour des glyphes pleins, il remplissait les nouveaux traces et les
      rendait a l'etat de taches. On rend donc le remplissage a `none` et on
      passe la couleur au CONTOUR.

      A noter : les deux pages deja validees par le client (Accueil, A propos
      V2) ne portent AUCUN pictogramme decoratif — leur seule icone est la
      fleche de 13 a 16 px. Un pictogramme de 26 px etait donc doublement hors
      systeme. */
.dc-service-icon .elementor-icon svg,
.dc-service-icon .elementor-icon svg *{
  fill:none!important;
  stroke:var(--dc-ac-txt,var(--dc-bleu-logo))!important;
  stroke-width:1.5!important;
  stroke-linecap:round!important;stroke-linejoin:round!important;
  vector-effect:non-scaling-stroke;}
.dc-service-icon .elementor-icon svg{width:32px!important;height:32px!important;}

/* 2. LA CARTE DEVIENT LE LIEN. `.dc-card` porte `cursor:pointer` et change de
      fond et de couleur de titre au survol : elle PROMET d'etre cliquable.
      Mais seul le libelle « Voir les formations » l'etait reellement — la
      cible utile mesurait 14 px de haut au lieu des 263 px de la carte.

      C'est exactement le defaut deja releve et corrige sur les cartes de
      publications d'A propos V2 et sur `.dc-blog-card` : meme remede, le lien
      etire. Le `::after` du bouton se deploie sur toute la carte ; le bouton
      reste le seul element focusable, donc la navigation au clavier et le nom
      accessible sont inchanges — un seul lien, un seul libelle.

      Les titres et textes repassent au-dessus de la nappe pour rester
      selectionnables a la souris. */
.dc-service-card{position:relative;}
.dc-service-card .dc-card-body,
.dc-service-card .dc-card-bottom{position:static!important;}
.dc-service-card .dc-link-text .elementor-button::after{
  content:"";position:absolute;inset:0;z-index:1;}
/* Le titre et le texte restent SOUS la nappe, contrairement a ce qu'on avait
   fait sur `.dc-pub-card`. Mesure : en les remontant a z-index:2, le centre de
   la carte — c'est-a-dire le texte, donc l'essentiel de la surface — cessait
   d'etre cliquable ; seules les marges l'etaient. On perd la selection du
   texte a la souris, et c'est le compromis admis de ce motif (c'est ce que
   fait `.stretched-link` de Bootstrap) : une carte-lien se clique en entier. */

/* La fleche s'ecarte quand on survole la CARTE, plus seulement le libelle.
   La regle d'origine (`.dc-link-text .elementor-button:hover`) ne se
   declenchait qu'au survol des 14 px du texte : on voyait la carte reagir
   sans que son lien bouge. */
.dc-service-card:hover .dc-link-text .elementor-button-content-wrapper{gap:13px;}

/* --- LE FILET SOUS LE LIEN DE CARTE : POSE PUIS RETIRE  (16-09-2026) --------
   Le wireframe souligne le libelle des cartes du carrefour
   (`border-bottom:1px solid; padding-bottom:.25rem`). Pose le 16/09, puis
   retire le meme jour : Yassine le trouve moins bien que sans. On garde donc
   `.dc-link-text` tel qu'il est partout ailleurs sur le site — le libelle dans
   la couleur du public, sans filet, la fleche qui s'ecarte au survol.
   Ecrit ici pour que la question ne se represente pas. */

/* --- L'ICONE DE SERVICE : APLAT POSE PUIS RETIRE  (16-09-2026) -------------
   J'avais mis l'icone dans un aplat de 48 px, de ma propre initiative, pour
   que la couleur de charte apparaisse vraiment sur la page. Yassine : « t'as
   mis un fond sur l'icone alors que je te l'ai jamais demande ». Retire.
   L'icone reste un TRACE, dans `--dc-ac-txt` comme tout ce qui est de l'encre
   sur fond clair. Ecrit ici pour ne pas y revenir. */

/* ===========================================================================
   LE BENTO, DEUXIEME VERSION : TROIS CARTES-PHOTO DE MEME POIDS  (16-09-2026)
   ---------------------------------------------------------------------------
   La premiere version — une grande carte-photo et deux rangees blanches — a ete
   ecartee par Yassine pour deux raisons, toutes deux justes, et que j'avais
   niees a tort :

   1. ELLE REPRODUISAIT UN MOTIF EXISTANT. « Des infrastructures a Auderghem »,
      sur A propos, est deja une grande carte-photo avec le titre pose en bas a
      gauche et trois rangees a cote. Ma version en etait le miroir. J'avais
      affirme qu'il n'y avait pas de ressemblance sans aller regarder.

   2. ELLE PROMOUVAIT UNE FORMATION AU HASARD. Rien ne justifie de mettre
      « Microsoft 365 Security » en avant plutot que « Power BI » : les trois
      ont le meme statut editorial. Une hierarchie visuelle sans hierarchie
      editoriale est une promesse fausse.

   Trois cartes-photo de meme poids repondent aux deux. Et la crainte que
   j'avais — « trois blocs identiques, donc un pave » — ne tient pas ici : la
   grille juste au-dessus (le carrefour) est faite de cartes BLANCHES a filets,
   celle-ci de cartes SOMBRES a photo. Les deux ne se confondent pas.

   `display:contents` sur la colonne de droite : les deux petites cartes y sont
   imbriquees, et il faut qu'elles deviennent des cellules de la rangee pour que
   les trois soient sur une seule ligne, sans toucher a l'arbre Elementor.
   =========================================================================== */
.dc-hairline-grid:has(> .dc-bento-large){
  flex-direction:row!important;
  display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;
  gap:1px!important;min-height:460px!important;
  background:var(--dc-gray-200)!important;}
.dc-hairline-grid:has(> .dc-bento-large) > .dc-bento-right{
  display:contents!important;}

/* Les trois cartes partagent le meme traitement. */
.dc-bento-large,
.dc-bento-right > .dc-bento-fw{
  position:relative!important;overflow:hidden!important;isolation:isolate;
  display:flex!important;flex-direction:column!important;
  grid-template-columns:none!important;
  width:auto!important;min-width:0!important;flex:none!important;
  min-height:460px!important;}

/* La photo passe en fond et remplit la carte. Sur les deux petites elle etait
   une colonne de 198 px ; sur la grande, une bande de 190 px de haut. */
.dc-bento-large > .dc-card-img,
.dc-bento-right > .dc-bento-fw > .dc-card-img{
  position:absolute!important;inset:0!important;
  width:100%!important;height:100%!important;
  flex:none!important;min-height:0!important;aspect-ratio:auto!important;
  background-size:cover!important;background-position:50% 42%!important;
  margin:0!important;border-radius:0!important;z-index:0;}

/* Le voile : dense en bas ou vit le texte, nul en haut ou vit l'image. */
.dc-bento-large::after,
.dc-bento-right > .dc-bento-fw::after{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(0deg,
    rgba(15,27,61,.94) 0%, rgba(15,27,61,.74) 40%,
    rgba(15,27,61,.26) 72%, rgba(15,27,61,0) 100%);}

/* `flex:0 0 auto` est indispensable sur le corps des DEUX petites cartes.
   Sans lui, Elementor leur pose une croissance : le corps s'etirait sur les
   460 px de la carte, `margin-top:auto` n'avait plus d'espace a consommer et
   se resolvait a 0 — le texte restait EN HAUT, sur la partie claire de la
   photo, la ou le voile ne voile rien. Mesure avant correction : corps de la
   grande carte 219 px de haut avec 240,8 px de marge ; corps des petites
   460 px avec 0. Le voile est construit pour du texte en bas ; il faut donc
   que le corps y descende vraiment. */
.dc-bento-large > .dc-card-body,
.dc-bento-right > .dc-bento-fw > .dc-card-body{
  position:relative;z-index:2;
  flex:0 0 auto!important;margin-top:auto!important;
  width:auto!important;min-width:0!important;padding:28px!important;}
.dc-bento-large,
.dc-bento-right > .dc-bento-fw{justify-content:flex-end!important;}

.dc-bento-large .dc-card-title .elementor-heading-title.elementor-heading-title,
.dc-bento-fw .dc-card-title .elementor-heading-title.elementor-heading-title{
  color:#fff!important;font-size:23px!important;line-height:1.2!important;}
.dc-bento-large .dc-card-meta .elementor-heading-title.elementor-heading-title,
.dc-bento-fw .dc-card-meta .elementor-heading-title.elementor-heading-title{
  color:rgba(255,255,255,.90)!important;}
.dc-bento-large .dc-card-date .elementor-heading-title.elementor-heading-title,
.dc-bento-fw .dc-card-date .elementor-heading-title.elementor-heading-title{
  color:rgba(255,255,255,.82)!important;}
.dc-bento-large:hover,
.dc-bento-right > .dc-bento-fw:hover{background-color:transparent!important;}

/* La fleche : cercle blanc sur fond sombre, l'inverse du reste du site. */
.dc-bento-large .dc-arrow .elementor-icon.elementor-icon,
.dc-bento-fw .dc-arrow .elementor-icon.elementor-icon{
  border-color:rgba(255,255,255,.55)!important;background:transparent!important;}
.dc-bento-large .dc-arrow .elementor-icon::after,
.dc-bento-fw .dc-arrow .elementor-icon::after{background-color:#fff!important;}
.dc-bento-large:hover .dc-arrow .elementor-icon.elementor-icon,
.dc-bento-fw:hover .dc-arrow .elementor-icon.elementor-icon{
  background:#fff!important;border-color:#fff!important;}
.dc-bento-large:hover .dc-arrow .elementor-icon::after,
.dc-bento-fw:hover .dc-arrow .elementor-icon::after{background-color:var(--dc-text)!important;}

@media(min-width:768px) and (max-width:1024px){
  .dc-hairline-grid:has(> .dc-bento-large){
    grid-template-columns:repeat(3,minmax(0,1fr))!important;min-height:400px!important;}
  .dc-bento-large,.dc-bento-right > .dc-bento-fw{min-height:400px!important;}
  .dc-bento-large > .dc-card-body,
  .dc-bento-right > .dc-bento-fw > .dc-card-body{padding:20px!important;}
  .dc-bento-large .dc-card-title .elementor-heading-title.elementor-heading-title,
  .dc-bento-fw .dc-card-title .elementor-heading-title.elementor-heading-title{font-size:19px!important;}
}
@media(max-width:767px){
  .dc-hairline-grid:has(> .dc-bento-large){
    grid-template-columns:minmax(0,1fr)!important;min-height:0!important;}
  .dc-bento-large,.dc-bento-right > .dc-bento-fw{min-height:320px!important;}
  .dc-bento-large > .dc-card-body,
  .dc-bento-right > .dc-bento-fw > .dc-card-body{padding:20px!important;}
  .dc-bento-large .dc-card-title .elementor-heading-title.elementor-heading-title,
  .dc-bento-fw .dc-card-title .elementor-heading-title.elementor-heading-title{font-size:21px!important;}
}

/* --- LE SOUS-TITRE DU CTA DE BAS DE PAGE : UN SEUL MOT RESTAIT SEUL ---------
   (16-09-2026) Releve par Yassine sur la page profil travailleur : « Notre
   equipe vous oriente vers la formule la plus adaptee a votre situation. »
   cassait en laissant « situation. » seul sur la deuxieme ligne.

   La cause est ICI, dans le socle : `.dc-cta-lead p{max-width:52ch}` rabote le
   paragraphe a 526 px alors qu'il lui en faut 593. Le correctif existait deja
   — pose le 3 septembre dans le CSS de l'accueil (3574), repris le 10 dans
   celui d'A propos (4215) — mais page par page, donc les trois pages profil ne
   l'ont jamais recu. C'est le meme element sur toutes les pages : il n'a rien
   a faire dans un CSS de page. On le remonte au socle.

   `text-wrap:balance` fait le reste : quand la phrase est vraiment trop longue
   pour une ligne (718 px sur entreprises, 702 sur chercheur d'emploi), il
   repartit les deux lignes a egalite au lieu d'abandonner un mot orphelin.

   Largeurs mesurees, necessaires pour tenir sur une ligne :
     travailleur 593  |  entreprises 718  |  chercheur d'emploi 702  |  A propos 577
   Avec 620 px, travailleur et A propos tiennent sur une ligne ; les deux autres
   font deux lignes equilibrees. */
.dc-cta-band .dc-cta-lead{
  max-width:min(620px,92%)!important;margin-inline:auto!important;}
.dc-cta-band .dc-cta-lead p{
  max-width:100%!important;margin-inline:auto!important;text-wrap:balance;}

/* --- LE LIEN D'EVITEMENT : COULEUR ET CIBLE  (16-09-2026) -------------------
   « Aller au contenu » sortait en #008AB7 sur blanc, soit 3,95:1 a 16 px pour
   4,5 exiges. Meme cause que l'oeil-de-boeuf du 15 septembre : #008AB7 est la
   couleur de marque, pas une couleur d'encre. On emploie #00688A (6,27:1), le
   jeton de texte du site. Sa cible manquante est corrigee dans l'en-tete. */
.skip-link,
.skip-link:focus,
.skip-link:visited{color:#00688A!important;}

/* --- L'AGENDA DES PAGES PROFIL REPREND LE STYLE DE L'ACCUEIL  (17-09-2026) --
   Releve par Yassine : « la section des evenements devrait reprendre le style
   de celle de la page d'accueil, pour plus de coherence ». Mesure des deux :

     | element        | accueil (validee)     | pages profil        |
     |----------------|-----------------------|---------------------|
     | la liste       | .dc-agenda-list, AUCUN cadre | .dc-hairline-grid, cadre de 1 px |
     | le jour        | 56 px Rubik 800       | 21 px Rubik 700     |
     | le mois        | 12 px Roboto 700      | 11 px Roboto 500    |
     | colonne date   | 112 px                | 62 px               |
     | hauteur rangee | 106 px                | 97 px               |

   On aligne tout cela. Le ciblage passe par `.dc-hairline-grid > .dc-agenda-row`
   — c'est la construction PROPRE AUX PAGES PROFIL. L'accueil emploie
   `.dc-agenda-list` et n'est donc pas touchee : on ne retouche pas une page
   validee pour en aligner une autre.

   CE QU'ON NE REPREND PAS, ET POURQUOI. L'accueil affiche en plus un grand mot
   en display (`.dc-roll`, 44,6 px Rubik 900 : « PORTES OUVERTES », « ATELIER »).
   Cet element n'existe pas dans le balisage des pages profil, et l'y fabriquer
   depuis la pastille donnerait « DIGITAL DAY » en gros au-dessus du titre
   « Digital Day : portes ouvertes & demos des formations » — la meme
   information deux fois, a deux tailles. C'est exactement le defaut corrige sur
   les cartes de publications d'A propos (« une information principale doit
   avoir un emplacement principal »). Les rangees des pages profil ne portent
   pas la meme donnee que celles de l'accueil : la coherence s'arrete ou la
   redite commence. */
.dc-nuit .dc-hairline-grid:has(> .dc-agenda-row){
  border-width:0!important;border-radius:0!important;}
.dc-hairline-grid > .dc-agenda-row{
  min-height:106px!important;padding:20px 40px 20px 0!important;}
/* La date etait posee sur un pave bleu arrondi (degrade 135deg, rayon 14) —
   l'accueil, elle, la pose a nu sur la nuit. C'est le dernier ecart entre les
   deux constructions, et le plus visible : il transformait le chiffre en
   vignette au lieu d'un reperage typographique. */
.dc-hairline-grid > .dc-agenda-row > .dc-agenda-date{
  flex:0 0 112px!important;width:112px!important;min-width:112px!important;
  background:none!important;background-image:none!important;background-color:transparent!important;
  border-radius:0!important;padding:0!important;}
.dc-hairline-grid > .dc-agenda-row .dc-agenda-day .elementor-heading-title.elementor-heading-title{
  font-family:var(--dc-display)!important;font-size:56px!important;font-weight:800!important;
  line-height:.88!important;letter-spacing:-.03em!important;}
.dc-hairline-grid > .dc-agenda-row .dc-agenda-month .elementor-heading-title.elementor-heading-title{
  font-size:12px!important;font-weight:700!important;letter-spacing:.06em!important;}

/* Sous 768 px le grand chiffre reprend une taille de poche : a 56 px il
   mangeait la moitie de la rangee et le titre passait a la ligne trois fois. */
@media(max-width:767px){
  .dc-hairline-grid > .dc-agenda-row{min-height:0!important;padding:18px 0!important;}
  .dc-hairline-grid > .dc-agenda-row > .dc-agenda-date{
    flex:0 0 62px!important;width:62px!important;min-width:62px!important;}
  .dc-hairline-grid > .dc-agenda-row .dc-agenda-day .elementor-heading-title.elementor-heading-title{
    font-size:30px!important;}
}

/* --- « VOUS N'ETES PAS ... ? » DEVIENT LE BANDEAU DE LA CARTE CTA -----------
   (17-09-2026) Premiere tentative hier soir : resserrer l'ecart. Yassine, ce
   soir : « je trouve toujours pas ca terrible. Comment on pourrait faire pour
   plus l'integrer au design ? » Il a raison — resserrer ne repond pas a la
   question, la ligne restait un element blanc isole entre une section de nuit
   et une carte sombre.

   On la SOUDE a la carte. Mesure : les deux boites interieures font exactement
   **1312 px au meme x (64)** — elles sont deja alignees, il ne manquait que le
   fond. La ligne devient donc le bandeau superieur d'un seul bloc sombre de fin
   de page : arrondi en haut, filet de separation, la carte perd son arrondi
   haut et les deux se touchent.

   L'ordre du wireframe est respecte : les liens sortants restent AVANT le CTA,
   ils changent seulement de fond. Et la fonction y gagne — « vous n'etes pas
   travailleur ? » se lit desormais comme la premiere ligne du bloc « parlons-en »
   au lieu d'une phrase en suspens.

   Reversible d'une regle : supprimer ce bloc rend les deux sections separees. */
.dc-crosslinks{padding-block:72px 0!important;}
.dc-crosslinks > .e-con-inner{
  padding:26px 64px!important;
  /* LE DEGRADE DU CTA, SOUS UN VOILE.  Proposition de Yassine, meilleure que
     mes deux essais : « au lieu d'avoir une couleur en fond, j'avais pense a
     juste mettre un voile et avoir le meme degrade que le cta derriere ».

     Historique des deux essais ecartes :
       1. le meme degrade, sans voile — un 135 deg parcourt une bande de 90 px
          bien plus vite qu'une carte de 354 : au raccord, le bas du bandeau
          etait deja bleu la ou le haut de la carte etait encore noir.
       2. un aplat #0A0A0A — raccord invisible a gauche, mais Yassine : « noir
          ca va pas ».

     Le voile resout le decalage de phase : il ecrase l'ecart entre les deux
     degrades tout en laissant passer la teinte, donc les deux boites se lisent
     comme une seule matiere. Et il DIFFERENCIE la bande, ce que ni le degrade
     nu ni l'aplat ne faisaient : elle est la meme chose, en retrait.
     Le filet de separation acheve de rendre la transition deliberee. */
  background-color:#0A0A0A!important;
  background-image:
    linear-gradient(rgba(0,0,0,.42), rgba(0,0,0,.42)),
    linear-gradient(135deg,#0A0A0A 0%,#1A0F2E 35%,#0F1B3D 70%,#1E3A8A 100%)!important;
  border-radius:20px 20px 0 0!important;
  border-bottom:1px solid rgba(255,255,255,.14)!important;}
/* La carte perd son arrondi haut : les deux boites n'en forment plus qu'une. */
.dc-crosslinks + .e-con{padding-block-start:0!important;}
.dc-crosslinks + .e-con > .e-con-inner{border-radius:0 0 20px 20px!important;}

/* Encre et boutons passent en clair. Le libelle a .78 rend 12,1:1 sur le
   debut du degrade, les boutons a .32 de filet restent visibles sans peser. */
.dc-crosslinks .elementor-heading-title,
.dc-crosslinks .elementor-heading-title *{color:rgba(255,255,255,.78)!important;}
.dc-crosslinks .elementor-button,
.dc-crosslinks .elementor-button-text{color:#fff!important;}
.dc-crosslinks .elementor-button{
  background:transparent!important;
  border:1px solid rgba(255,255,255,.32)!important;}
.dc-crosslinks .elementor-button:hover{
  background:rgba(255,255,255,.10)!important;
  border-color:rgba(255,255,255,.55)!important;}

/* En mobile le bandeau se met en pile : le libelle au-dessus, les deux liens
   dessous, sinon les boutons sortent du cadre a 342 px de large. */
/* Entre 768 et 1024 px, la bande CTA passe a 40 px de marge laterale quand la
   ligne de liens restait a 64 : les deux boites ne faisaient plus la meme
   largeur (772 contre 820 a 900 px) et la soudure se voyait. Mesure faite a
   sept paliers — 1440, 1200, 1024, 900, 768, 600, 390 — c'est le seul ou elles
   divergeaient. */
@media(min-width:768px) and (max-width:1024px){
  .dc-crosslinks{padding-inline:40px!important;}
}
@media(max-width:767px){
  .dc-crosslinks{padding-block:48px 0!important;}
  .dc-crosslinks > .e-con-inner{padding:20px 22px!important;border-radius:16px 16px 0 0!important;}
  .dc-crosslinks + .e-con > .e-con-inner{border-radius:0 0 16px 16px!important;}
}

/* --- ZOOM DE L'IMAGE AU SURVOL, SUR LES TROIS CARTES DU BENTO  (17-09-2026) --
   Demande par Yassine. L'image est un fond (`background-image`) sur
   `.dc-card-img`, pas une balise `<img>` : on met donc a l'echelle la BOITE
   elle-meme, pas son contenu. Elle est en `position:absolute; inset:0` sous le
   voile, et la carte porte `overflow:hidden` — le debordement est donc rogne,
   et le voile comme le texte, qui sont au-dessus, ne bougent pas.

   1,06 et non 1,10 : a 1,10 sur une carte de 436 x 460, le sujet se decale de
   22 px et sort du cadrage choisi. La duree de 600 ms et la courbe du site
   (--dc-ease) alignent ce survol sur celui des autres cartes.

   `prefers-reduced-motion` : la consigne systeme de l'utilisateur prime, et une
   mise a l'echelle au survol est exactement le genre d'animation qu'elle vise. */
.dc-bento-large > .dc-card-img,
.dc-bento-right > .dc-bento-fw > .dc-card-img{
  transition:transform .6s var(--dc-ease)!important;
  transform-origin:50% 45%;
  will-change:transform;}
.dc-bento-large:hover > .dc-card-img,
.dc-bento-right > .dc-bento-fw:hover > .dc-card-img{
  transform:scale(1.06)!important;}
@media(prefers-reduced-motion:reduce){
  .dc-bento-large > .dc-card-img,
  .dc-bento-right > .dc-bento-fw > .dc-card-img{transition:none!important;}
  .dc-bento-large:hover > .dc-card-img,
  .dc-bento-right > .dc-bento-fw:hover > .dc-card-img{transform:none!important;}
}

/* ===========================================================================
   LE ROULEAU DE L'AGENDA REMONTE AU SOCLE  (17-09-2026)
   ---------------------------------------------------------------------------
   Yassine : « la section la est exactement la meme qui est censee etre sur la
   page d'accueil, dans le wireframe et sur l'ancienne version de la homepage.
   Copie juste ce que y a sur la homepage si ce sont les memes sections. »

   Verifie : le CSS de l'agenda est IDENTIQUE, au caractere pres, dans
   wireframe-accueil-v10.html et dans les trois wireframes de profil
   (`.agenda-section`, `.agenda-list`, `.agenda-row`, `.agenda-date`...).
   Ce sont bien les memes sections.

   La structure Elementor des trois pages profil a donc ete remplacee par une
   COPIE de celle de l'accueil, contenu de chaque page reinjecte. Restait le
   style : tout le systeme du mot roulant (`.dc-roll`) vivait dans le CSS DE LA
   PAGE 3574, donc les copies sortaient a 16 px au lieu de 44. Les 15 regles
   generiques et leurs trois blocs @media sont remontes ici tels quels ; les
   trois regles prefixees `.elementor-3574` restent la-bas, elles ne concernent
   que l'accueil.

   `.dc-roll-img` (la photo revelee au survol) n'a pas d'element correspondant
   dans les rangees de profil : ces regles y sont inertes, et elles attendent le
   jour ou les evenements auront un visuel.
   =========================================================================== */
/* La pastille de type fait doublon avec le mot roulant, qui dit deja la meme
   chose en gros. C'est la reponse a l'objection que j'avais soulevee hier
   (« DIGITAL DAY au-dessus de Digital Day : ... ») : l'accueil ne l'affiche
   pas, et les copies ne doivent pas l'afficher non plus. */
.dc-agenda-row .dc-tag-event{display:none!important;}



/* --- le rouleau --- */
/* La fenetre et les deux etats font exactement la meme hauteur ; a l'arrondi
   sous-pixel pres, le haut du second mot depassait alors de 2 a 3 px sous le
   premier — une barre bleue visible sous l'accent du « E » de SEANCE.
   On intercale donc un ECART entre les deux etats : au repos le second est
   hors de la fenetre avec de la marge, et le deplacement au survol vaut la
   hauteur PLUS cet ecart. Deux variables, pour que les variantes n'aient
   qu'a redefinir la hauteur. */
.dc-roll{
  --dc-roll-h:clamp(44px,5.2vw,64px);
  --dc-roll-gap:8px;
  overflow:hidden!important;
  height:var(--dc-roll-h)!important;
  row-gap:var(--dc-roll-gap)!important;
  flex:1 1 auto!important;min-width:0;
  justify-content:flex-start!important;}

.dc-roll > *{
  height:var(--dc-roll-h)!important;
  display:flex!important;align-items:center!important;
  margin:0!important;flex:0 0 auto!important;
  transition:margin-top .5s cubic-bezier(.76,0,.24,1);}

.dc-agenda-row:hover .dc-roll > *:first-child,
.dc-agenda-row:focus-within .dc-roll > *:first-child{
  margin-top:calc(-1 * (var(--dc-roll-h) + var(--dc-roll-gap)))!important;}


.dc-roll .elementor-heading-title{
  font-family:var(--dc-display)!important;
  /* 72 px etait la valeur du source, mais ses mots font un seul terme court
     (Discover, Design...). Le notre le plus long, « PORTES OUVERTES », fait
     15 signes : a 66 px il depassait la largeur disponible et le rouleau, qui
     est en overflow:hidden, le coupait en « PORTES OUVERT ».
     La taille est donc calee sur le mot le plus long, pas sur la reference. */
  font-size:clamp(22px,3.1vw,50px)!important;font-weight:900!important;
  line-height:1!important;letter-spacing:-.045em!important;
  text-transform:uppercase!important;margin:0!important;white-space:nowrap;}

.dc-roll-a .elementor-heading-title{color:var(--dc-text,#1A1D2B)!important;}

.dc-roll-b .elementor-heading-title{color:var(--dc-bleu-titres,#0033A1)!important;font-style:italic!important;}


/* --- la photo revelee, a droite --- */
.dc-roll-img{
  position:absolute!important;right:20px;top:50%;z-index:20;
  width:192px!important;height:128px!important;pointer-events:none;
  overflow:hidden;border-radius:8px;box-shadow:0 24px 48px -12px rgba(0,0,0,.45);
  opacity:0;transform:translateY(-50%) translateX(16px) scale(.95) rotate(3deg);
  transition:opacity .5s ease-out, transform .5s ease-out;}

.dc-roll-img img{width:100%!important;height:100%!important;object-fit:cover!important;
  display:block;border-radius:8px;filter:grayscale(1);transition:filter .5s ease-out;}

.dc-agenda-row:hover .dc-roll-img,
.dc-agenda-row:focus-within .dc-roll-img{
  opacity:1;transform:translateY(-50%) translateX(0) scale(1) rotate(0deg);}

.dc-agenda-row:hover .dc-roll-img img{filter:grayscale(0);}


/* La fleche s'efface pour laisser la place a la photo revelee — mais SEULEMENT
   dans les rangees qui ont une photo. La regle etait globale : sur la liste
   classique, qui n'a pas de photo, la fleche disparaissait au survol sans que
   rien ne la remplace. On la conditionne a la presence de .dc-roll-img. */
.dc-agenda-row:has(.dc-roll-img):hover .dc-arrow{opacity:0;transition:opacity .3s ease-out;}

.dc-roll-img{right:28px!important;}


/* Le mot roulant : blanc au repos, cyan quand il monte. C'est le seul endroit
   de la section ou la couleur bouge, donc le seul qui merite l'accent. */
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-roll-a .elementor-heading-title,.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-roll-a p{color:#fff!important;}

.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-roll-b .elementor-heading-title,.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-roll-b p{color:#8CE8FF!important;}


/* ===========================================================================
   AGENDA EN MOBILE — 9 septembre 2026
   Remarque de Yassine : « tout le texte est blanc et proche en plus », et il
   propose de reprendre la STRUCTURE de la V1 en gardant le style de la V5.

   Constat, en comparant les deux pages a 375 px :
     V1  — rangee horizontale de 126 px : bloc date, PASTILLE DE CATEGORIE,
           titre fonce sur carte claire, horaires en gris. Quatre valeurs
           differentes, donc une hierarchie lisible.
     V5  — colonne de 191 px, tout en blanc sur la nuit. Plus grand, moins
           lisible.
   Et la cause est dans le balisage : `.dc-tag-event` (la categorie) et
   `.dc-tag-soft` (la modalite) EXISTENT mais sont masquees — remplacees par le
   grand mot anime `.dc-roll`. Sur le bureau ce mot est un beau geste ; en
   mobile il occupe une ligne entiere pour redire ce que la pastille dirait en
   trois centimetres.

   On rend donc a la rangee mobile ce que la V1 avait, avec les jetons de la V5.
   Le bureau n'est pas touche : tout est sous 767 px.
   =========================================================================== */
@media (max-width:767px){

  /* Le grand mot cede la place : il redit la categorie et coute une ligne. */
  .elementor-3574 .dc-agenda-row .dc-roll{display:none!important;}

  /* La rangee redevient une carte, comme en V1 — mais en verre sur la nuit
     plutot qu'en aplat clair. */
  /* [correctif] Pas de cadre : un simple filet dessous, comme sur le bureau.
     Le cadre isolait chaque evenement alors que l'agenda est une SUITE — le
     filet separe sans enfermer, et c'est deja le geste de la page. */
  .elementor-3574 .dc-agenda-row{
    background:transparent!important;
    border:0!important;border-radius:0!important;
    border-bottom:1px solid rgba(255,255,255,.15)!important;
    padding:20px 0 18px!important;
    gap:10px!important;}
  .elementor-3574 .dc-agenda-list > *:last-child .dc-agenda-row,
  .elementor-3574 .dc-agenda-row:last-child{border-bottom:0!important;}

  /* Le bloc date porte l'accent. C'est lui qui donne la couleur, comme le bloc
     sombre de la V1 donnait le contraste. */
  .elementor-3574 .dc-agenda-date{
    flex-direction:row!important;align-items:baseline!important;gap:7px!important;}
  /* Le socle repeint le jour en blanc via `.dc-nuit` QUADRUPLE (0,6,0) : il
     fallait passer au-dessus, sinon la couleur ne prenait pas. Troisieme fois
     que la reponse est « ajouter de la specificite contre le socle ». */
  .elementor-3574 .dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-day .elementor-heading-title,
  .elementor-3574 .dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-day > div{
    font-size:30px!important;font-weight:800!important;line-height:1!important;
    color:#FFFFFF!important;letter-spacing:-.02em!important;}  /* [9/9] remis en blanc a la demande de Yassine */
  .elementor-3574 .dc-agenda-month,
  .elementor-3574 .dc-agenda-month *{
    font-size:12px!important;font-weight:700!important;letter-spacing:.12em!important;
    text-transform:uppercase!important;color:rgba(255,255,255,.72)!important;}

  /* [correctif] La pastille de categorie est RETIREE : elle redisait le titre.
     « Journee portes ouvertes » + « Portes ouvertes », « Seance d'information :
     validation des competences » + « Seance d'info », « Atelier decouverte des
     metiers » + « Atelier » — les trois faisaient doublon. Reste la modalite,
     qui elle apporte une information que le titre ne porte pas.
     La couleur passe donc sur le BLOC DATE, ou elle ne repete rien. */
  .elementor-3574 .dc-agenda-row .dc-tag-event{display:none!important;}
  /* [correctif] La modalite portait DEUX contours : le sien, deja pose par le
     socle sur son enfant, et celui que j'avais ajoute par-dessus. On ne garde
     que celui d'origine et on se contente de le rendre visible. */
  .elementor-3574 .dc-agenda-row .dc-tag-soft{
    display:inline-block!important;background:transparent!important;
    border:0!important;padding:0!important;}
  .elementor-3574 .dc-agenda-row .dc-tag-soft > *{
    display:inline-block!important;
    font-size:11.5px!important;font-weight:600!important;line-height:1.3!important;
    color:rgba(255,255,255,.78)!important;}

  /* La meta se remet en ligne : pastille, modalite, puis horaires a la ligne. */
  .elementor-3574 .dc-agenda-meta{
    flex-direction:row!important;flex-wrap:wrap!important;
    align-items:center!important;gap:8px!important;margin-top:8px!important;}
  .elementor-3574 .dc-agenda-time,
  .elementor-3574 .dc-agenda-time *{
    flex-basis:100%!important;font-size:12.5px!important;
    color:rgba(255,255,255,.72)!important;margin-top:2px!important;}

  .elementor-3574 .dc-agenda-title,
  .elementor-3574 .dc-agenda-title *{
    font-size:17px!important;font-weight:700!important;line-height:1.3!important;
    color:#FFFFFF!important;}

  /* La fleche se cale en haut a droite plutot que sous le texte. */
  .elementor-3574 .dc-agenda-row > .dc-arrow{
    position:absolute!important;right:14px!important;top:14px!important;
    align-self:auto!important;}
  .elementor-3574 .dc-agenda-row{position:relative!important;}
  .elementor-3574 .dc-agenda-body{padding-right:34px!important;}
}
@media (max-width:767px){

  /* trop etroit pour un rouleau de 72 px et une photo : on garde le mot, on
     retire la revelation. */
  .dc-roll-img{display:none!important;}

  .dc-roll,.dc-roll > *{height:auto!important;}

  .dc-roll > *:nth-child(2){display:none!important;}

  .dc-roll .elementor-heading-title{white-space:normal;}
}

@media (prefers-reduced-motion:reduce){

  .dc-roll > *{transition:none!important;}

  .dc-agenda-row:hover .dc-roll > *:first-child{margin-top:0!important;}

  .dc-roll-img{transition:none!important;}
}

@media (prefers-reduced-motion:reduce){

  .elementor-3574 .dc-agenda-row:hover .dc-roll-b .elementor-heading-title,
  .elementor-3574 .dc-agenda-row:focus-within .dc-roll-b .elementor-heading-title{
    animation:none!important;background-position:0% 50%!important;}
}

/* ===========================================================================
   L'AGENDA DE NUIT, AU COMPLET, REMONTE AU SOCLE  (17-09-2026)
   ---------------------------------------------------------------------------
   Suite du remplacement des sections : une fois la structure de l'accueil
   copiee sur les trois pages profil, le rendu restait faux parce que TOUT
   l'habillage vivait dans le CSS de la page 3574 — y compris des regles
   pourtant ecrites sans prefixe de page, donc pensees comme generiques.

   Defaut mesure avant ce transfert : le chiffre du jour sortait en #0033A1 sur
   le fond de nuit #0A0728, soit **1,85:1** — illisible, et tres loin des 4,5
   exiges. Le mois tombait a 3,56:1. Sur l'accueil les memes elements rendent
   19,55:1, parce que la regle qui les passe en blanc est restee la-bas.

   Les 18 regles generiques sont reprises telles quelles. Elles emploient
   `.dc-nuit` quadruple pour passer devant les reglages natifs d'Elementor —
   c'est la solution deja retenue sur l'accueil, on ne la reecrit pas.
   =========================================================================== */
/* ---- AGENDA : encadrement propre a l'accueil ---- */
.dc-agenda-list{border:1px solid var(--dc-gray-200);border-radius:var(--dc-radius-lg);overflow:hidden;}
c'est-a-dire exactement le motif du lien etire, applique au bouton
   « Lire la suite ». Verifie sur la page LIVE, qui n'a recu aucun correctif :
   les six cartes repondent au clic sur l'image, le titre et les coins.
   Mon correctif etait redondant — et sa surqualification de z-index risquait de
   sortir le texte de la zone cliquable. Il a ete SUPPRIME.

   Lecon : ne pas conclure d'une donnee Elementor a un comportement de rendu.
   Le lien du conteneur est bien inerte ; la carte, elle, ne l'etait pas.

   CE QUI RESTE VRAI, et qui est le defaut le plus serieux des deux :
   les 14 rangees .dc-agenda-row des trois pages profil. Le socle leur donne
   cursor:pointer et un survol qui les eclaircit — elles PROMETTENT donc d'etre
   cliquables — mais elles ne contiennent aucun lien interne et aucun lien etire
   n'existe pour elles. Elles etaient reellement mortes.
   Corrige le 27/08 : html_tag=a sur les 14 (pages 685, 880, 1090). Sans risque
   d'imbrication, ces rangees ne contenant que des titres et une icone.

   CE QUI RESTE A FAIRE : les 4 cartes .dc-pub-card de la page A propos (1307).
   Elles contiennent un lien interne, donc html_tag=a les emboiterait. Il leur
   faut le motif du lien etire — que le socle n'applique qu'a .dc-blog-card.
   Une ligne suffira, sur le modele existant :
     .dc-pub-card{position:relative;}
/* [7 septembre 2026] Retire avec le ruban : le ruban d'images et tous ses reglages de lisibilite.
   Le pave contact est revenu a celui de la V1/V2 (demande de Noemie du 7/9,
   « Pave contact : reprendre le meme que sur la V1 »). Le traitement de la
   carte vient desormais du socle (post 609), plus rien ici.
   L'etat d'avant est restaurable : modele Elementor 3572, et page 2662. */



/* ############################################################################
   #  V4 — AGENDA, d'apres « rolling list » (21st.dev / daiwiikharihar)
   #  Valeurs relevees dans le source.
   #
   #  TRANSPOSITION. La reference est une liste de PROCESS : quatre mots courts
   #  et abstraits (Discover, Design, Develop, Deploy). Un agenda est plus
   #  dense — date, titre, horaire, lieu, public. On ne peut pas mettre le
   #  titre d'un evenement en 72 px : « Atelier decouverte des metiers du
   #  numerique » ferait quatre lignes et le rouleau, qui a une hauteur fixe,
   #  le rognerait.
   #  C'est donc le TYPE d'evenement qui devient le mot roulant — PORTES
   #  OUVERTES, SEANCE D'INFO, ATELIER : court, et c'est l'information qu'on
   #  scanne en premier dans un agenda. La date reste a gauche dans sa pastille,
   #  le titre complet et l'horaire restent lisibles dessous, et la photo se
   #  revele a droite.
   #
   #  VALEURS DU SOURCE, reprises telles quelles :
   #    rouleau : hauteur 80 px, translateY(-50%) au survol,
   #              500 ms, cubic-bezier(.76,0,.24,1)
   #    mot     : 72 px, graisse 900, majuscules, tracking serre
   #    photo   : 128x192, rayon 8 px, ombre portee, au repos
   #              opacity 0 / scale .95 / rotate 3deg / translateX 16px,
   #              au survol tout revient a zero, 500 ms ease-out
   #              niveaux de gris au repos, couleur au survol
   #
   #  COUT D'EDITION A CONNAITRE : l'effet exige DEUX copies du mot (l'etat
   #  normal et l'etat italique). Elles sont toutes deux editables dans
   #  l'editeur, mais changer le libelle d'un evenement demande de le faire aux
   #  deux endroits. C'est le prix de cet effet sans JavaScript ; si c'est juge
   #  trop fragile, la variante « date en objet graphique » de la banque ne le
   #  paie pas.
   ############################################################################ */

.dc-agenda-row{position:relative;}
.dc-agenda-row:hover .dc-roll > *:first-child,
.dc-agenda-row:focus-within .dc-roll > *:first-child{
  margin-top:calc(-1 * (var(--dc-roll-h) + var(--dc-roll-gap)))!important;}
.dc-agenda-row:hover .dc-roll-img,
.dc-agenda-row:focus-within .dc-roll-img{
  opacity:1;transform:translateY(-50%) translateX(0) scale(1) rotate(0deg);}
.dc-agenda-row:hover .dc-roll-img img{filter:grayscale(0);}
/* l'ancienne pastille de type fait doublon avec le mot roulant */
.dc-agenda-row .dc-tag-event{display:none!important;}
/* La fleche s'efface pour laisser la place a la photo revelee — mais SEULEMENT
   dans les rangees qui ont une photo. La regle etait globale : sur la liste
   classique, qui n'a pas de photo, la fleche disparaissait au survol sans que
   rien ne la remplace. On la conditionne a la presence de .dc-roll-img. */
.dc-agenda-row:has(.dc-roll-img):hover .dc-arrow{opacity:0;transition:opacity .3s ease-out;}
/* --- AGENDA : les fleches respirent ---
   Elles etaient a 28 px du bord, soit exactement le padding de la ligne : elles
   semblaient collees au filet du cadre. */
.dc-agenda-row{padding-right:40px!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-subtitle,.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-subtitle p,
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-month,.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-meta,.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-time,
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-month .elementor-heading-title,
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-time .elementor-heading-title{color:rgba(255,255,255,.82)!important;}
/* La liste perd sa carte blanche : sur fond de nuit, un filet suffit. */
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-list{background:transparent!important;border-color:rgba(255,255,255,.16)!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-row{border-color:rgba(255,255,255,.16)!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-row:hover{background:rgba(255,255,255,.05)!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-tag-soft .elementor-heading-title,
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-tag-event .elementor-heading-title{
  color:#fff!important;background:rgba(255,255,255,.14)!important;
  border:1px solid rgba(255,255,255,.30)!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-arrow,.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-arrow .elementor-icon,
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-arrow svg{color:#fff!important;fill:#fff!important;
  border-color:rgba(255,255,255,.34)!important;}
/* [8 septembre 2026] LE FOND DE SURVOL ETAIT SUR LE MAUVAIS ELEMENT.
   Il etait pose sur le WIDGET `.dc-arrow`, qui n'a aucun arrondi, alors que la
   boite visible est `.elementor-icon` a l'interieur, arrondie a 8 px. On voyait
   donc un rectangle a angles droits depasser derriere la boite arrondie.
   Invisible jusqu'ici parce que la fleche etait masquee depuis le 3 septembre.
   Le fond passe sur l'icone. Le socle remplit deja cette boite d'encre au
   survol — invisible sur fond de nuit, d'ou ce correctif clair. */
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-row:hover .dc-arrow{background:transparent!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-row:hover .dc-arrow .elementor-icon{
  background:rgba(255,255,255,.16)!important;
  border-color:rgba(255,255,255,.52)!important;}
/* ===========================================================================
   AGENDA EN MOBILE — 9 septembre 2026
   Remarque de Yassine : « tout le texte est blanc et proche en plus », et il
   propose de reprendre la STRUCTURE de la V1 en gardant le style de la V5.

   Constat, en comparant les deux pages a 375 px :
     V1  — rangee horizontale de 126 px : bloc date, PASTILLE DE CATEGORIE,
           titre fonce sur carte claire, horaires en gris. Quatre valeurs
           differentes, donc une hierarchie lisible.
     V5  — colonne de 191 px, tout en blanc sur la nuit. Plus grand, moins
           lisible.
   Et la cause est dans le balisage : `.dc-tag-event` (la categorie) et
   `.dc-tag-soft` (la modalite) EXISTENT mais sont masquees — remplacees par le
   grand mot anime `.dc-roll`. Sur le bureau ce mot est un beau geste ; en
   mobile il occupe une ligne entiere pour redire ce que la pastille dirait en
   trois centimetres.

   On rend donc a la rangee mobile ce que la V1 avait, avec les jetons de la V5.
   Le bureau n'est pas touche : tout est sous 767 px.
   =========================================================================== */
@media (max-width:767px){

  /* Le grand mot cede la place : il redit la categorie et coute une ligne. */
  .elementor-3574 .dc-agenda-row .dc-roll{display:none!important;}

  /* La rangee redevient une carte, comme en V1 — mais en verre sur la nuit
     plutot qu'en aplat clair. */
  /* [correctif] Pas de cadre : un simple filet dessous, comme sur le bureau.
     Le cadre isolait chaque evenement alors que l'agenda est une SUITE — le
     filet separe sans enfermer, et c'est deja le geste de la page. */
  .elementor-3574 .dc-agenda-row{
    background:transparent!important;
    border:0!important;border-radius:0!important;
    border-bottom:1px solid rgba(255,255,255,.15)!important;
    padding:20px 0 18px!important;
    gap:10px!important;}
  .elementor-3574 .dc-agenda-list > *:last-child .dc-agenda-row,
  .elementor-3574 .dc-agenda-row:last-child{border-bottom:0!important;}

  /* Le bloc date porte l'accent. C'est lui qui donne la couleur, comme le bloc
     sombre de la V1 donnait le contraste. */
  .elementor-3574 .dc-agenda-date{
    flex-direction:row!important;align-items:baseline!important;gap:7px!important;}
  /* Le socle repeint le jour en blanc via `.dc-nuit` QUADRUPLE (0,6,0) : il
     fallait passer au-dessus, sinon la couleur ne prenait pas. Troisieme fois
     que la reponse est « ajouter de la specificite contre le socle ». */
  .elementor-3574 .dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-day .elementor-heading-title,
  .elementor-3574 .dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-day > div{
    font-size:30px!important;font-weight:800!important;line-height:1!important;
    color:#FFFFFF!important;letter-spacing:-.02em!important;}  /* [9/9] remis en blanc a la demande de Yassine */
  .elementor-3574 .dc-agenda-month,
  .elementor-3574 .dc-agenda-month *{
    font-size:12px!important;font-weight:700!important;letter-spacing:.12em!important;
    text-transform:uppercase!important;color:rgba(255,255,255,.72)!important;}

  /* [correctif] La pastille de categorie est RETIREE : elle redisait le titre.
     « Journee portes ouvertes » + « Portes ouvertes », « Seance d'information :
     validation des competences » + « Seance d'info », « Atelier decouverte des
     metiers » + « Atelier » — les trois faisaient doublon. Reste la modalite,
     qui elle apporte une information que le titre ne porte pas.
     La couleur passe donc sur le BLOC DATE, ou elle ne repete rien. */
  .elementor-3574 .dc-agenda-row .dc-tag-event{display:none!important;}
  /* [correctif] La modalite portait DEUX contours : le sien, deja pose par le
     socle sur son enfant, et celui que j'avais ajoute par-dessus. On ne garde
     que celui d'origine et on se contente de le rendre visible. */
  .elementor-3574 .dc-agenda-row .dc-tag-soft{
    display:inline-block!important;background:transparent!important;
    border:0!important;padding:0!important;}
  .elementor-3574 .dc-agenda-row .dc-tag-soft > *{
    display:inline-block!important;
    font-size:11.5px!important;font-weight:600!important;line-height:1.3!important;
    color:rgba(255,255,255,.78)!important;}

  /* La meta se remet en ligne : pastille, modalite, puis horaires a la ligne. */
  .elementor-3574 .dc-agenda-meta{
    flex-direction:row!important;flex-wrap:wrap!important;
    align-items:center!important;gap:8px!important;margin-top:8px!important;}
  .elementor-3574 .dc-agenda-time,
  .elementor-3574 .dc-agenda-time *{
    flex-basis:100%!important;font-size:12.5px!important;
    color:rgba(255,255,255,.72)!important;margin-top:2px!important;}

  .elementor-3574 .dc-agenda-title,
  .elementor-3574 .dc-agenda-title *{
    font-size:17px!important;font-weight:700!important;line-height:1.3!important;
    color:#FFFFFF!important;}

  /* La fleche se cale en haut a droite plutot que sous le texte. */
  .elementor-3574 .dc-agenda-row > .dc-arrow{
    position:absolute!important;right:14px!important;top:14px!important;
    align-self:auto!important;}
  .elementor-3574 .dc-agenda-row{position:relative!important;}
  .elementor-3574 .dc-agenda-body{padding-right:34px!important;}
}

/* --- LA DATE DE L'AGENDA DE NUIT, EN BLANC  (17-09-2026) --------------------
   Mon extraction des regles generiques de l'accueil a laisse passer celle-ci.
   Sans elle, le chiffre du jour garde la couleur posee dans les REGLAGES du
   widget — #0033A1, heritee de la copie — que le socle ne peut pas contrer :
   Elementor l'emet sous `.elementor-685 .elementor-element.elementor-element-XXX
   .elementor-heading-title`, soit quatre classes, contre les deux de la regle
   `.dc-nuit .dc-agenda-day` du socle.

   Mesure avant : **1,85:1** sur le fond de nuit #0A0728 — illisible.
   La classe `.dc-nuit` quadruplee donne six classes : elle passe devant, et
   c'est la solution deja retenue sur l'accueil. Apres : 19,55:1. */
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-day .elementor-heading-title,
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-day > div{color:#fff!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-month .elementor-heading-title,
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-month > div{
  color:rgba(255,255,255,.82)!important;}

/* --- LES TROIS OFFRES DE LA PAGE ENTREPRISES : TRIPTYQUE, PAS GRILLE --------
   (17-09-2026) Dernier point d'adjacence signale dans la revue : sur la page
   entreprises, le carrefour (3 cartes blanches dans une grille a filet, cadre
   arrondi) est suivi de pres par les trois cartes d'offre, qui portaient
   exactement le meme habillage — cadre de 1 px, rayon de 16, fond blanc.
   Deux grilles de trois cartes encadrees a quelques centaines de pixels l'une
   de l'autre : c'est la lecture que Noemie reproche.

   Les trois offres n'ont ni icone, ni lien, ni image : ce ne sont pas des
   portes d'entree mais trois facons de dire la meme offre. On leur retire le
   cadre et on ne garde que les filets — un triptyque. Le carrefour reste seul
   a porter la grille encadree, et il la merite : c'est la navigation.

   La grille a filet fabrique ses traits par la GOUTTIERE (fond gris + gap de
   1 px). En retirant le fond, il faut donc redessiner les traits a la main :
   filets verticaux entre les colonnes, filets horizontaux en haut et en bas. */
.dc-hairline-grid:has(> .dc-offer-card){
  background:none!important;background-color:transparent!important;
  border:0!important;border-radius:0!important;overflow:visible!important;
  border-top:1px solid var(--dc-gray-200)!important;
  border-bottom:1px solid var(--dc-gray-200)!important;
  gap:0!important;}
.dc-hairline-grid > .dc-offer-card{
  background:none!important;background-color:transparent!important;
  border-radius:0!important;padding:30px 34px!important;}
.dc-hairline-grid > .dc-offer-card + .dc-offer-card{
  border-left:1px solid var(--dc-gray-200)!important;}
/* Sous 768 px les trois passent en pile : le filet vertical devient horizontal,
   sinon les colonnes de 110 px coupent les mots. */
@media(max-width:767px){
  .dc-hairline-grid > .dc-offer-card{padding:22px 0!important;}
  .dc-hairline-grid > .dc-offer-card + .dc-offer-card{
    border-left:0!important;border-top:1px solid var(--dc-gray-200)!important;}
}

/* --- #008AB7 EMPLOYE COMME ENCRE : TROIS DERNIERS CAS  (17-09-2026) ---------
   Balayage des cinq pages du lot a la recherche de la couleur de marque posee
   en couleur de TEXTE. Trois occurrences restaient, toutes a 16 px ou moins,
   donc toutes sous le seuil de 4,5 :

     .dc-testi-large-name  « Thomas V. »            16 px  ->  3,95:1
     .dc-testi-large-role  « Formation Data... »    16 px  ->  3,95:1
     .dc-cf-searchw        « RECHERCHER »           12 px  ->  3,95:1

   Mesure faite sur les pixels rendus, donc a l'oeil et non au calcul.
   C'est la meme cause que l'oeil-de-boeuf du 15 et que le lien d'evitement
   d'hier : #008AB7 est une couleur de MARQUE. Son equivalent d'encre est
   #00688A, a 6,27:1, que le site emploie deja partout par defaut.

   Le nom du temoin prend en plus la couleur du public : c'est une signature,
   elle a sa place dans l'identite de la page. Le role reste neutre. */
.dc-testi-large-name,
.dc-testi-large-name .elementor-heading-title{
  color:var(--dc-ac-txt,#00688A)!important;}
.dc-testi-large-role,
.dc-testi-large-role .elementor-heading-title{
  color:var(--dc-text-light,#5F6980)!important;}
.dc-cf-searchw,
.dc-cf-searchw .elementor-heading-title,
.dc-cf-searchw label{color:#00688A!important;}

/* --- L'AGENDA : LES TROIS ECARTS QUI RESTAIENT AVEC L'ACCUEIL  (18-09-2026) --
   Yassine : « enleve le cadre autour, passe le bouton en blanc et enleve le
   voile blanc au survol. Je t'ai dit de faire comme sur la page d'accueil. »
   Il a raison sur les trois. J'avais remonte au socle les regles GENERIQUES de
   l'accueil, mais pas celles qui portaient son prefixe de page — or ce sont
   justement elles qui faisaient ces trois choix. Mesure comparee :

     |              | accueil                 | pages profil (avant)      |
     |--------------|-------------------------|---------------------------|
     | cadre liste  | 0 px                    | 1 px blanc a 16 %         |
     | bouton       | blanc, filet blanc .55  | cyan #8CE8FF, filet .45   |
     | survol rangee| transparent             | blanc a 5 %               |

   Le cadre servait aussi de masque pour la photo revelee au survol : c'est
   pour cela qu'il avait ete retire sur l'accueil le 7 septembre. Les pages
   profil n'ont pas cette photo, mais la coherence prime — et sans cadre la
   liste respire. */
.dc-nuit .dc-agenda-list{border:0!important;overflow:visible!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-link-boxed .elementor-button.elementor-button{
  color:#fff!important;border-color:rgba(255,255,255,.55)!important;background:transparent!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-link-boxed .elementor-button .elementor-button-text{
  color:#fff!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-link-boxed .elementor-button.elementor-button svg{fill:#fff!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-link-boxed .elementor-button.elementor-button:hover{
  background:#fff!important;border-color:#fff!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-link-boxed .elementor-button.elementor-button:hover .elementor-button-text{
  color:#0F1B3D!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-link-boxed .elementor-button.elementor-button:hover svg{fill:#0F1B3D!important;}
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-agenda-row:hover{background:transparent!important;}

/* Le sous-titre tenait sur une ligne sur l'accueil et cassait en deux sur les
   profils : meme plafond de 540 px, mais « Webinaires, Job Days et Digital Days
   pour les travailleurs en activite. » est plus long que « Les prochains
   rendez-vous Digitalcity.brussels, toutes cibles. ». On ouvre le plafond dans
   la seule section de nuit, et `balance` repartit les lignes a egalite si une
   page a un jour un sous-titre encore plus long. */
.dc-nuit .dc-subtitle,
.dc-nuit .dc-subtitle p{max-width:min(700px,100%)!important;text-wrap:balance;}

/* --- LE BANDEAU DE FIN DE PAGE : LE NOIR NE VA PAS  (18-09-2026) -----------
   Yassine : « faut mettre une autre couleur qui va mieux avec alors parce que
   noir ca va pas ». L'aplat #0A0A0A etait le DEBUT du degrade de la carte,
   choisi pour que le raccord soit invisible a gauche — mais un bandeau noir
   pur au-dessus d'une carte qui tire vers le bleu nuit se lit comme un trou.
   On prend #0F1B3D, le bleu de nuit de la marque, qui est le troisieme arret
   du meme degrade : il appartient a la famille et il a du corps. */
/* (l'aplat bleu de nuit a ete remplace par le degre du CTA sous voile —
   voir le bloc « VOUS N'ETES PAS ... ? DEVIENT LE BANDEAU DE LA CARTE CTA ») */

/* ===========================================================================
   LES TEMOIGNAGES REDEVIENNENT DES VIDEOS  (18-09-2026)
   ---------------------------------------------------------------------------
   Yassine : « pour la section des temoignages ca ne va pas, deja parce que dans
   le wireframe ce sont des videos, et la je trouve que la section est trop
   haute ». Les deux sont exacts. Le wireframe pose :

     .testimonial-card      { background:#fff; border:1px solid var(--border); }
     .testimonial-play-btn  { 56 px, rond, fond noir a 70 %, centre sur la vignette }
     .testimonial-card-duration  ( « 3:12 », « 4:05 », « 2:48 » )

   Trois cartes par page, dont le wireframe fournit lui-meme le contenu — noms,
   roles et durees. Le grand bloc « citation + photo » que j'avais construit le
   16 pour casser la repetition de paves s'en ecartait, et il mesurait 1055 px
   de haut a lui seul.

   Ce motif regle les deux problemes d'un coup : il est conforme, et il
   n'existe NULLE PART ailleurs sur la page — une vignette de lecture ne se
   confond ni avec le carrefour, ni avec les cartes-photo du bento, ni avec la
   liste a filets. La crainte de repetition tombe d'elle-meme.

   La vignette reste une reserve « Visuel a venir » tant que les vraies videos
   n'existent pas : on ne simule pas un media qu'on n'a pas. Le bouton de
   lecture est dessine en CSS — c'est un signe, pas un contenu, et il n'a donc
   rien a faire dans l'arbre de l'editeur.
   =========================================================================== */
.dc-testi-grid{
  display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;
  gap:24px!important;}
.dc-testi-video{
  background:#fff!important;border:1px solid var(--dc-gray-200)!important;
  border-radius:var(--dc-radius-lg)!important;overflow:hidden!important;
  transition:box-shadow .3s var(--dc-ease),border-color .3s var(--dc-ease);}
.dc-testi-video:hover{
  border-color:var(--dc-gray-300)!important;
  box-shadow:0 6px 24px rgba(26,29,43,.07)!important;}

/* La vignette : format 16/10 comme les autres visuels du site, reserve grise
   tant que la video n'existe pas. */
.dc-testi-thumb{
  position:relative!important;aspect-ratio:16/10!important;
  background-color:var(--dc-gray-100)!important;
  border-bottom:1px solid var(--dc-gray-200)!important;
  align-items:flex-end!important;justify-content:flex-end!important;
  padding:12px!important;}
/* Le bouton de lecture, 56 px comme au wireframe, dessine en deux temps :
   le disque, puis le triangle en bordures. */
.dc-testi-thumb::before{
  content:"";position:absolute;top:50%;left:50%;
  width:56px;height:56px;margin:-28px 0 0 -28px;border-radius:50%;
  background:rgba(0,0,0,.70);transition:background .3s var(--dc-ease),transform .3s var(--dc-ease);}
.dc-testi-thumb::after{
  content:"";position:absolute;top:50%;left:50%;
  margin:-9px 0 0 -5px;width:0;height:0;
  border-left:16px solid #fff;border-top:9px solid transparent;border-bottom:9px solid transparent;}
.dc-testi-video:hover .dc-testi-thumb::before{
  background:var(--dc-ac,var(--dc-bleu-logo));transform:scale(1.06);}

/* La duree, en bas a droite de la vignette. */
.dc-testi-duree .elementor-heading-title.elementor-heading-title{
  position:relative;z-index:2;
  display:inline-block;background:rgba(0,0,0,.72);color:#fff!important;
  font-size:12px!important;font-weight:700!important;letter-spacing:.02em;
  padding:3px 8px;border-radius:4px;line-height:1.3!important;}

.dc-testi-body{padding:18px 20px 20px!important;}
.dc-testi-nom .elementor-heading-title.elementor-heading-title{
  font-size:17px!important;font-weight:700!important;color:var(--dc-text)!important;
  line-height:1.3!important;}
.dc-testi-role .elementor-heading-title.elementor-heading-title{
  font-size:14px!important;font-weight:400!important;
  color:var(--dc-text-light,#5F6980)!important;line-height:1.45!important;}

@media(min-width:768px) and (max-width:1024px){
  .dc-testi-grid{gap:18px!important;}
  .dc-testi-body{padding:14px 16px 16px!important;}
  .dc-testi-nom .elementor-heading-title.elementor-heading-title{font-size:16px!important;}
  .dc-testi-thumb::before{width:44px;height:44px;margin:-22px 0 0 -22px;}
  .dc-testi-thumb::after{margin:-7px 0 0 -4px;border-left-width:13px;border-top-width:7px;border-bottom-width:7px;}
}
@media(max-width:767px){
  .dc-testi-grid{grid-template-columns:minmax(0,1fr)!important;gap:16px!important;}
}

/* --- LE BANDEAU DE SERVICE PREND LA COULEUR DU PUBLIC  (18-09-2026) --------
   Yassine : « pour la section "Vous avez deja les competences ?" je vois que tu
   as mis une section qui ne prend pas toute la largeur, pourquoi ? Apres c'est
   pas moche, mais faudrait juste changer le fond alors parce que la c'est trop
   classique. »

   POURQUOI PAS PLEINE LARGEUR : c'est une carte de 1312 px, comme la bande CTA
   de fin de page. Le site a fait ce choix partout pour ses blocs sombres — le
   wireframe, lui, les fait pleine largeur. On ne revient pas dessus a deux
   jours de la livraison : ce serait changer le CTA de l'accueil et d'A propos,
   deux pages validees.

   POURQUOI C'ETAIT TROP CLASSIQUE : mesure faite, la page portait TROIS blocs
   sombres au meme degre — ce bandeau, le bandeau de liens et le CTA, tous en
   `linear-gradient(135deg,#0F1B3D...)`. Trois fois la meme chose.

   Ce bandeau est le SERVICE DIFFERENCIANT du profil (le wireframe le dit :
   « mise en avant du service differenciant pour ce profil »). Il prend donc la
   couleur du public, posee en deux radiales sur la nuit de marque — la meme
   construction que les heros. Le CTA garde le degre neutre : lui parle a tout
   le monde. Les trois blocs sombres cessent d'etre interchangeables.

   Le voile de nuit reste dense sous le texte : les radiales montent a 52 % la
   ou il n'y a rien, et retombent a 18 % la ou vit le libelle. */
.dc-validation-card{
  background-color:#0B1230!important;
  background-image:
    radial-gradient(62% 78% at 88% 8%,
      color-mix(in srgb, var(--dc-ac,#00688A) 52%, transparent) 0%,
      color-mix(in srgb, var(--dc-ac,#00688A) 0%, transparent) 72%),
    radial-gradient(52% 64% at 6% 96%,
      color-mix(in srgb, var(--dc-ac,#00688A) 30%, transparent) 0%,
      color-mix(in srgb, var(--dc-ac,#00688A) 0%, transparent) 70%),
    linear-gradient(120deg, rgba(11,18,48,.92) 0%, rgba(11,18,48,.72) 52%, rgba(11,18,48,.58) 100%)
    !important;}
/* L'intitule « SERVICE » et le bouton reprennent l'encre du public sur clair,
   mais ici le fond est sombre : ils passent en blanc, comme sur le hero. */
.dc-validation-card .dc-eyebrow .elementor-heading-title.elementor-heading-title{
  color:rgba(255,255,255,.80)!important;}

/* --- LE BANDEAU DE LIENS N'AVAIT PAS LA LARGEUR DU CTA  (18-09-2026) -------
   Yassine, deux fois : « la largeur ne correspond pas au cta ». Ma mesure
   disait le contraire — parce que je ne testais que jusqu'a 1440 px.

   Releve a vingt paliers, de 360 a 1920 : elles coincident partout SAUF
   au-dessus de 1440, ou le CTA fait **1320 px** et le bandeau **1312**.
   Huit pixels d'ecart, decale de quatre. Sur un ecran de 1512 ou 1920, ca se
   voit — et c'est exactement ce que Yassine voyait.

   La cause : `.dc-cta-band.dc-cta-band > .e-con-inner.e-con-inner
   {max-width:1320px}` — une regle propre a la bande CTA, posee en doublant ses
   classes pour passer devant le plafond general de 1312 px des pages. Le
   bandeau, lui, subissait le plafond commun. On lui donne le meme traitement,
   avec la meme technique de specificite.

   LECON : tester deux ou trois largeurs ne suffit pas pour une question
   d'alignement. Il faut balayer, et inclure les ECRANS LARGES — je travaillais
   a 1440 alors que sa machine est plus large que ca. */
.dc-crosslinks.dc-crosslinks > .e-con-inner.e-con-inner{max-width:1320px!important;}

/* ===========================================================================
   « FINANCER VOTRE FORMATION » : LE FILET DU WIREFRAME, SANS LA BOITE
   (18-09-2026, troisieme version)
   ---------------------------------------------------------------------------
   Yassine : « j'aime vraiment pas cette section, c'est juste du texte. »

   Les deux versions precedentes, et pourquoi elles ne suffisaient pas :
     1. liste a filets, intitule en gras 17 px — juste, mais plate.
     2. intitule en display 34 px — superbe sur « CP 200 », desastreux sur
        « Validation des competences » (trois lignes) et sur la page chercheur
        d'emploi, ou aucun intitule n'est un code.

   Ce que dit le wireframe : trois cartes bordees avec un
   `border-left:3px solid var(--text-primary)`. On avait retire la carte pour
   eviter le pave — mais on avait retire le FILET avec, et c'est lui qui portait
   le signe visuel. On le remet, epaissi a 4 px et sur toute la hauteur de la
   rangee, dans la couleur du public. Aucune boite, aucun fond : le filet
   structure la liste a lui seul, et la section cesse d'etre « juste du texte ».

   Les rangees ne sont plus separees par un trait horizontal : les barres
   verticales font deja la separation, et deux traits par rangee, c'est un
   quadrillage. L'air entre les rangees suffit. */
.e-con:has(> .dc-fin-card){
  display:flex!important;flex-direction:column!important;
  gap:22px!important;grid-template-columns:none!important;
  border-top:0!important;}

.e-con > .dc-fin-card{
  display:grid!important;
  grid-template-columns:minmax(0,238px) minmax(0,1fr)!important;
  column-gap:44px!important;row-gap:6px!important;
  align-items:start!important;
  padding:6px 0 6px 26px!important;
  background:none!important;background-color:transparent!important;
  border:0!important;border-radius:0!important;box-shadow:none!important;
  position:relative;
  transition:none!important;}
.e-con > .dc-fin-card:hover{background:none!important;transform:none!important;}
/* la barre : 4 px, toute la hauteur, dans la couleur du public */
.e-con > .dc-fin-card::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:4px;
  background:var(--dc-ac,var(--dc-bleu-logo));border-radius:2px;}

.dc-fin-card > .dc-fin-card-title{padding-top:0!important;}
.dc-fin-card > .dc-fin-card-title::before{display:none;}
.dc-fin-card-title h3.elementor-heading-title.elementor-heading-title,
.dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{
  font-family:var(--dc-display)!important;
  font-size:22px!important;font-weight:800!important;
  line-height:1.2!important;letter-spacing:-.015em!important;
  color:var(--dc-ac-txt,var(--dc-bleu-logo))!important;
  text-wrap:balance;}
.dc-fin-card > .elementor-widget-text-editor{padding-top:2px!important;}
.dc-fin-card p{font-size:16px!important;line-height:1.65!important;
  color:var(--dc-text-light,#5F6980)!important;}

@media(min-width:768px) and (max-width:1024px){
  .e-con > .dc-fin-card{grid-template-columns:minmax(0,200px) minmax(0,1fr)!important;
    column-gap:30px!important;padding-left:22px!important;}
  .dc-fin-card-title h3.elementor-heading-title.elementor-heading-title,
  .dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{font-size:19px!important;}
}
@media(max-width:767px){
  .e-con:has(> .dc-fin-card){gap:18px!important;}
  .e-con > .dc-fin-card{grid-template-columns:minmax(0,1fr)!important;
    row-gap:6px!important;padding:4px 0 4px 18px!important;}
  .dc-fin-card-title h3.elementor-heading-title.elementor-heading-title,
  .dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{font-size:20px!important;}
  .dc-fin-card p{font-size:15px!important;}
}


/* --- LES QUATRE ARGUMENTS DU PROFIL CHERCHEUR : COLONNES, PAS CARTES --------
   (18-09-2026) Dernier point de repetition reel sur les trois pages profil.
   « Pourquoi vous former chez nous » alignait QUATRE cartes blanches de
   310 x 143 — cadre de 1 px, rayon de 8, fond blanc — sur une page qui porte
   deja le carrefour en cartes blanches. Deux grilles de pavés blancs.

   Ce ne sont pas des portes d'entree : ni icone, ni lien, ni image. Ce sont
   quatre arguments, quatre phrases courtes. Ils deviennent donc quatre
   colonnes separees par des filets verticaux, sans boite — le meme dispositif
   que les trois offres de la page entreprises, deja pose le 17/09.

   Et ils ne se confondent pas avec la LISTE qui les suit dans la meme section
   (« Comment vous inscrire : les seances d'information ») : celle-la est
   verticale, avec un filet d'accent et un intitule en display ; celle-ci est
   horizontale, avec des filets verticaux et un titre de 17 px. Deux lectures
   distinctes dans une meme section, c'est ce qui casse la monotonie. */
.dc-arg-card{
  background:none!important;background-color:transparent!important;
  border:0!important;border-radius:0!important;box-shadow:none!important;
  padding:4px 26px 4px 0!important;}
.dc-arg-card + .dc-arg-card{
  border-left:1px solid var(--dc-gray-200)!important;padding-left:26px!important;}
/* La grille perd sa gouttiere : les filets doivent se toucher d'une colonne a
   l'autre, sinon on lit quatre traits flottants au lieu d'une separation. */
.e-con:has(> .dc-arg-card){gap:0!important;}
.dc-arg-title .elementor-heading-title.elementor-heading-title{
  font-size:17px!important;font-weight:700!important;line-height:1.3!important;
  color:var(--dc-text)!important;}
/* Un filet d'accent court au-dessus de chaque argument, comme sur la liste de
   financement : c'est le signe qui dit « debut d'element » sans faire de boite. */
.dc-arg-card{position:relative;padding-top:18px!important;}
.dc-arg-card::before{
  content:"";position:absolute;top:0;left:0;width:24px;height:2px;
  background:var(--dc-ac,var(--dc-bleu-logo));}
.dc-arg-card + .dc-arg-card::before{left:26px;}
.dc-arg-card p{font-size:15px!important;line-height:1.6!important;
  color:var(--dc-text-light,#5F6980)!important;}

@media(min-width:768px) and (max-width:1024px){
  .dc-arg-card{padding-right:20px!important;}
  .dc-arg-card + .dc-arg-card{padding-left:20px!important;}
  .dc-arg-card + .dc-arg-card::before{left:20px;}
}
/* Sous 768 px les quatre passent en pile : le filet vertical devient
   horizontal, sinon des colonnes de 80 px coupent les mots. */
@media(max-width:767px){
  .dc-arg-card{padding:18px 0 22px!important;}
  .dc-arg-card + .dc-arg-card{
    border-left:0!important;border-top:1px solid var(--dc-gray-200)!important;
    padding-left:0!important;padding-top:18px!important;}
  .dc-arg-card + .dc-arg-card::before{left:0;}
}

/* --- LE MOT ROULANT DE L'AGENDA : LE REFLET  (18-09-2026) ------------------
   Yassine : « au survol le titre devient bleu alors que sur l'accueil c'etait
   un degrade glossy non ? » Exact. Le mot qui monte au survol (`.dc-roll-b`)
   sortait en #8CE8FF plat sur les pages profil, alors que l'accueil lui donne
   un degrade de marque anime — un reflet qui balaye le mot de droite a gauche.

   Encore une regle restee prefixee `.elementor-3574` : je n'avais remonte au
   socle que les generiques. On la generalise, avec son keyframes.

   A SAVOIR POUR LES AUDITS (note reprise de l'accueil) : le texte est en
   `background-clip:text`, sa couleur CSS calculee vaut donc `transparent`.
   Toute sonde de contraste le signalera a tort — il se mesure au pixel.
   Le palier le plus sombre du degrade est #B9A7FF, tres au-dessus du minimum
   AA pour du texte de cette taille sur le fond de nuit. */
.dc-nuit.dc-nuit.dc-nuit.dc-nuit .dc-roll-b .elementor-heading-title{
  background-image:linear-gradient(100deg,
    #8CE8FF 0%, #EAFBFF 34%, #B9A7FF 66%, #8CE8FF 100%)!important;
  background-size:220% 100%;
  background-position:100% 50%;
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;
  color:transparent!important;
  /* [8 septembre 2026] LE DERNIER GLYPHE ETAIT TRANCHE — signale par Yassine :
     « le titre est coupe a droite quand le texte se penche ».
     Ce n'etait PAS un rognage. En `background-clip:text`, seule la zone
     couverte par le FOND recoit de l'encre, et cette zone s'arrete a la boite
     de l'element — donc a la CHASSE du texte. L'italique fait deborder l'encre
     du glyphe au-dela de sa chasse : la partie penchee tombe hors de la zone
     peinte et reste transparente. Le S de « OUVERTES » etait coupe net.
     Un `padding-right` etend la boite de peinture (background-clip utilise la
     boite de padding) sans deplacer le texte. .12em couvre l'inclinaison a
     toutes les tailles, la police etant mise a l'echelle en clamp().
     A retenir : sur du texte en degrade, TOUJOURS reserver la sur-chasse de
     l'italique — le defaut ne se voit que sur la derniere lettre. */
  padding-right:.12em;}
@keyframes dc-gloss{from{background-position:100% 50%;}to{background-position:0% 50%;}}
.dc-agenda-row:hover .dc-roll-b .elementor-heading-title,
.dc-agenda-row:focus-within .dc-roll-b .elementor-heading-title{
  animation:dc-gloss 1.1s cubic-bezier(.22,.61,.36,1) both;}

/* L'animation est une decoration : elle disparait si le systeme demande moins
   de mouvement. Le degrade, lui, reste — c'est la couleur du mot, pas un
   effet. */
@media (prefers-reduced-motion:reduce){
  .dc-agenda-row:hover .dc-roll-b .elementor-heading-title,
  .dc-agenda-row:focus-within .dc-roll-b .elementor-heading-title{
    animation:none!important;background-position:0% 50%!important;}
}

/* --- LE BANDEAU DE SERVICE : DEUX COLONNES PLUTOT QU'UNE  (18-09-2026) -----
   Yassine : « dans le wireframe le texte dans le bloc prend toute la largeur
   alors que la il est sur la gauche. Quel est le meilleur choix ? »

   Il a raison sur le constat : le wireframe pose `.media-banner-grid
   {grid-template-columns:1fr}` et une carte en colonne — le texte occupe donc
   toute la largeur de la carte.

   MAIS. La carte fait 1312 px. Un paragraphe sur 1312 px, c'est environ
   140 signes par ligne, quand l'oeil en lit confortablement 65 a 75. Suivre le
   wireframe a la lettre donnerait une ligne deux fois trop longue. Ce n'est
   pas une hypothese : c'est pour cette raison que le socle plafonne deja tous
   ses paragraphes autour de 540 a 620 px.

   Mesure de l'etat precedent : eyebrow, titre, texte et bouton empiles a
   gauche sur 558 px au plus, et **754 px de vide colore a droite**. Le
   wireframe a raison de vouloir remplir le bloc, il a tort sur le moyen.

   On met donc DEUX COLONNES : l'intitule et le titre a gauche, le texte et le
   bouton a droite. Le bloc est rempli, la ligne reste a 60 signes, et la
   couleur du public continue de respirer entre les deux. */
.dc-validation-card{
  display:grid!important;
  grid-template-columns:minmax(0,46%) minmax(0,54%)!important;
  grid-template-rows:auto auto!important;
  column-gap:64px!important;row-gap:0!important;
  align-items:start!important;align-content:center!important;}
.dc-validation-card > .dc-media-eyebrow{grid-column:1;grid-row:1;}
.dc-validation-card > .dc-media-title{grid-column:1;grid-row:2;align-self:start;}
.dc-validation-card > .dc-media-lead{grid-column:2;grid-row:1 / span 2;}
.dc-validation-card > .dc-btn-outline-white,
.dc-validation-card > .elementor-widget-button{grid-column:2;grid-row:3;margin-top:22px!important;}
.dc-validation-card > .dc-media-title .elementor-heading-title.elementor-heading-title{
  font-size:30px!important;line-height:1.18!important;text-wrap:balance;}
.dc-validation-card > .dc-media-lead p{max-width:none!important;}

/* Sous 1025 px la largeur disponible ne permet plus deux colonnes lisibles :
   on repasse en pile, ce qui redevient exactement le wireframe. */
@media(max-width:1024px){
  .dc-validation-card{
    display:flex!important;flex-direction:column!important;align-items:flex-start!important;}
  .dc-validation-card > .dc-media-title .elementor-heading-title.elementor-heading-title{
    font-size:25px!important;}
  .dc-validation-card > .elementor-widget-button{margin-top:18px!important;}
}

/* ===========================================================================
   UN TEMOIGNAGE A LA FOIS  (18-09-2026)
   ---------------------------------------------------------------------------
   Yassine : « pour ce que t'as mis pour les temoignages elle risque de dire
   que ca fait trop paves non ? [...] tu laisses ce qu'il y avait avant et tu
   mets une video a la place de l'image et tu fais en sorte qu'on puisse passer
   d'un temoignage a l'autre, et tu reduis la hauteur de la section. »

   Les TROIS blocs du wireframe restent dans l'arbre Elementor — noms, roles et
   durees restent editables un par un — mais la section n'en montre qu'un,
   couche en large : la video a gauche, l'identite a droite. Ce n'est plus une
   grille, donc plus un pave ; et une seule vignette 16/9 tient dans moins de
   place que trois vignettes empilees avec leur legende.

   Mesure avant / apres en pied de ce bloc.
   =========================================================================== */
.dc-testi-grid{display:block!important;position:relative;}

/* les deux temoignages en attente ne sont pas supprimes, ils attendent */
.dc-testi-video{display:none!important;}

.dc-testi-video.dc-testi-on{
  display:grid!important;grid-template-columns:minmax(0,38%) minmax(0,1fr)!important;
  align-items:stretch!important;}

/* un bloc unique ne « se souleve » pas au survol : il n'y a rien a distinguer
   de rien. Seul le bouton de lecture reagit, parce que c'est lui la cible. */
.dc-testi-video.dc-testi-on:hover{
  border-color:var(--dc-gray-200)!important;box-shadow:none!important;}

.dc-testi-on .dc-testi-thumb{
  aspect-ratio:16/9!important;height:100%!important;
  border-bottom:0!important;border-right:1px solid var(--dc-gray-200)!important;}

.dc-testi-on .dc-testi-body{
  display:flex!important;flex-direction:column!important;
  justify-content:center!important;padding:28px 38px 70px!important;}

.dc-testi-on .dc-testi-nom .elementor-heading-title.elementor-heading-title{
  font-size:26px!important;line-height:1.25!important;}
.dc-testi-on .dc-testi-role .elementor-heading-title.elementor-heading-title{
  font-size:15px!important;margin-top:8px!important;}

/* --- la barre de navigation --- */
.dc-testi-nav{display:flex!important;align-items:center;gap:10px;margin-top:20px;}
/* Sur grand ecran la barre se loge DANS la carte, en bas de la colonne de
   texte : posee dessous elle rajoutait 60 px a une section deja parmi les plus
   hautes de la page (720 px mesures, contre 572 a 823 pour les autres). */
@media(min-width:901px){
  .dc-testi-grid{position:relative;}
  .dc-testi-nav{position:absolute;right:34px;bottom:24px;
    width:auto!important;margin:0!important;}
  .dc-testi-rang{margin:0 0 0 6px!important;}
}
.dc-testi-nav[hidden]{display:none!important;}

/* le theme habille tout `button` : sans !important les fleches sortaient en
   gros paves colores et les pastilles en rectangles. */
.dc-testi-nav .dc-testi-fl{width:40px!important;height:40px!important;flex:0 0 40px!important;
  min-width:0!important;padding:0!important;margin:0!important;
  border:1px solid var(--dc-gray-200)!important;border-radius:50%!important;
  background:#fff!important;background-image:none!important;box-shadow:none!important;
  display:flex!important;align-items:center!important;justify-content:center!important;
  cursor:pointer;transition:var(--dc-transition);}
.dc-testi-nav .dc-testi-fl svg{width:16px;height:16px;fill:none;
  stroke:var(--dc-text);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;}
.dc-testi-nav .dc-testi-fl:hover{background:var(--dc-ac,var(--dc-bleu-logo))!important;
  border-color:var(--dc-ac,var(--dc-bleu-logo))!important;}
.dc-testi-nav .dc-testi-fl:hover svg{stroke:#fff;}
.dc-testi-nav .dc-testi-fl:focus-visible{outline:2px solid var(--dc-bleu-logo);outline-offset:2px;}

.dc-testi-points{display:flex;align-items:center;gap:7px;margin-left:8px;}
.dc-testi-nav .dc-testi-point{width:8px!important;height:8px!important;
  min-width:0!important;flex:0 0 8px!important;padding:0!important;margin:0!important;
  border:0!important;border-radius:50%!important;
  background:var(--dc-gray-300)!important;background-image:none!important;
  box-shadow:none!important;cursor:pointer;transition:var(--dc-transition);}
.dc-testi-nav .dc-testi-point:hover{background:var(--dc-text-light)!important;}
.dc-testi-nav .dc-testi-point[aria-selected="true"]{width:22px!important;
  flex:0 0 22px!important;border-radius:4px!important;
  background:var(--dc-ac,var(--dc-bleu-logo))!important;}
.dc-testi-nav .dc-testi-point:focus-visible{outline:2px solid var(--dc-bleu-logo);outline-offset:3px;}

.dc-testi-nav .dc-testi-rang{margin:0 0 0 10px!important;white-space:nowrap!important;
  font-family:var(--dc-body)!important;font-size:13px!important;font-weight:600!important;
  color:var(--dc-text-light)!important;letter-spacing:.02em;line-height:1!important;}

@media(max-width:900px){
  .dc-testi-video.dc-testi-on{grid-template-columns:minmax(0,1fr)!important;}
  .dc-testi-on .dc-testi-thumb{
    border-right:0!important;border-bottom:1px solid var(--dc-gray-200)!important;}
  .dc-testi-on .dc-testi-body{padding:22px 20px 24px!important;}
  .dc-testi-on .dc-testi-nom .elementor-heading-title.elementor-heading-title{
    font-size:21px!important;}
}

/* ===========================================================================
   LE PARCOURS S'ALLUME A LA LECTURE  (18-09-2026)
   ---------------------------------------------------------------------------
   Yassine : « ca va c'est pas trop statique ? j'avais pense a faire une
   animation qui met le focus sur une etape puis une autre [...] faire grandir
   le chiffre qui est en focus et reduire l'opacite des textes qui ne le sont
   pas. T'en penses quoi c'est une bonne idee ? »

   Oui — a une condition : que ce soit LA LECTURE qui declenche, pas une
   horloge. En boucle automatique, le texte s'eteint sous l'oeil de qui le lit,
   et WCAG 2.2.2 reclame alors un bouton pause. Ici chaque etape s'allume quand
   elle entre a l'ecran, dans l'ordre, et reste allumee : le balayage 01 → 04
   a lieu une fois, puis plus rien ne bouge.

   Tout est conditionne a `.dc-parcours-anime`, classe posee par le script :
   sans JavaScript, les etapes restent simplement visibles. Sur ce site ou
   LiteSpeed retarde le JS, c'est la seule maniere sure de ne rien eteindre.
   =========================================================================== */
.dc-parcours-anime .dc-step{
  opacity:.40;
  transition:opacity .65s var(--dc-ease,cubic-bezier(.22,.61,.36,1));}
.dc-parcours-anime .dc-step .dc-tile-num .elementor-heading-title{
  display:inline-block;transform:scale(.80);transform-origin:left center;
  transition:transform .65s var(--dc-ease,cubic-bezier(.22,.61,.36,1)),
             color .65s var(--dc-ease,cubic-bezier(.22,.61,.36,1));}

.dc-parcours-anime .dc-step.dc-step-on{opacity:1;}
.dc-parcours-anime .dc-step.dc-step-on .dc-tile-num .elementor-heading-title{
  transform:scale(1);color:var(--dc-ac-txt,var(--dc-bleu-logo))!important;}

/* le systeme peut demander moins de mouvement : le script allume tout d'un
   coup, mais on neutralise aussi la transition au cas ou la classe serait
   deja posee. */
@media (prefers-reduced-motion:reduce){
  .dc-parcours-anime .dc-step,
  .dc-parcours-anime .dc-step .dc-tile-num .elementor-heading-title{
    transition:none!important;opacity:1!important;transform:none!important;}
}

/* ===========================================================================
   « FINANCER VOTRE FORMATION » — LE RAIL  (18-09-2026)
   ---------------------------------------------------------------------------
   Yassine, trois fois : « faudrait quelque chose de plus design non ? », puis
   « tu n'as pas du tout pris en compte mes remarques sur la section Financer
   votre formation. Pourquoi ? Pourtant je t'avais donné des bons exemples »,
   puis « j'aime vraiment pas, c'est juste du texte ».
   Il avait raison, et il avait fourni la reference : how-it-works-2 (21st.dev,
   @7ovr), dont le fichier m'a ete transmis le 18.

   CE QUE LA REFERENCE APPORTE, et qu'on reprend :
     - une TUILE a icone en trait par entree (`size-10`, filet de 1 px, fond
       sourd) : chaque entree gagne un point d'ancrage visuel ;
     - un FILET VERTICAL qui relie les tuiles (`w-px flex-1`) : les trois blocs
       cessent d'etre trois paragraphes cote a cote, ils deviennent une suite ;
     - un rythme vertical genereux entre les entrees.

   CE QU'ON N'EN REPREND PAS, et pourquoi : la reference travaille sur une
   colonne de lecture de 672 px. Nos sections font 1312 px — une colonne de
   672 px laisserait 640 px de vide a droite, exactement le defaut releve sur
   le bandeau de service le 18 au matin. On garde donc l'agencement en deux
   colonnes deja en place (intitule a gauche, texte a droite) et on AJOUTE la
   tuile et le filet devant. La largeur reste remplie, la ligne de texte reste
   a environ 70 signes.

   Les icones sont des WIDGETS Elementor, pas des fonds CSS : elles se
   remplacent dans l'editeur, comme le reste. Et elles sont en trait, 1,5 px.
   =========================================================================== */
.dc-fin-rail{
  display:flex!important;flex-direction:column!important;
  gap:30px!important;grid-template-columns:none!important;
  border-top:0!important;}

.dc-fin-rail > .dc-fin-card{
  display:grid!important;
  grid-template-columns:40px minmax(0,228px) minmax(0,1fr)!important;
  column-gap:28px!important;row-gap:6px!important;
  align-items:start!important;
  padding:0!important;position:relative!important;
  background:none!important;background-color:transparent!important;
  border:0!important;border-radius:0!important;box-shadow:none!important;
  transition:none!important;}
.dc-fin-rail > .dc-fin-card:hover{background:none!important;transform:none!important;}

/* la barre d'accent de la version precedente n'a plus lieu d'etre : c'est la
   tuile qui tient ce role, et les deux ensemble feraient doublon. */
.dc-fin-rail > .dc-fin-card::before{display:none!important;content:none!important;}

/* --- PAS DE FILET ENTRE LES TUILES, ET C'EST VOULU ---
   La reference relie ses tuiles par un trait vertical, parce qu'elle decrit
   QUATRE ETAPES : on fait l'une, puis l'autre. Ici, « CP 200 », « CP 209 ou
   CP 219 » et « Validation des competences » sont des VOIES AU CHOIX — on en
   emprunte une. Un fil qui les enchaine promettrait une progression qui
   n'existe pas, et le lecteur chercherait un ordre.
   Raison de forme, accessoire mais reelle : le parcours en 4 etapes, deux
   sections plus bas, emploie deja un rail relie (pastilles numerotees jointes
   par des segments). Deux rails relies a cette distance, c'est la repetition
   que Noemie releve. On garde de la reference ce qui sert — la TUILE a icone
   en trait — et on laisse le trait a la section qui decrit vraiment une suite. */

/* --- LA TUILE --- */
.dc-fin-ico{
  grid-column:1!important;grid-row:1 / span 2!important;
  width:40px!important;padding:0!important;margin:0!important;}
.dc-fin-ico .elementor-icon-wrapper{line-height:0;}
.dc-fin-ico .elementor-icon{
  width:40px!important;height:40px!important;
  display:flex!important;align-items:center!important;justify-content:center!important;
  border:1px solid var(--dc-gray-200);border-radius:var(--dc-radius-sm);
  background:var(--dc-gray-50);
  transition:var(--dc-transition);}
/* icone EN TRAIT : c'est `stroke` qui la colore, jamais `fill` */
.dc-fin-ico .elementor-icon svg{
  display:block!important;width:19px!important;height:19px!important;
  fill:none!important;stroke:var(--dc-ac-txt,var(--dc-bleu-logo))!important;
  stroke-width:1.5!important;}
.dc-fin-rail > .dc-fin-card:hover .dc-fin-ico .elementor-icon{
  border-color:var(--dc-ac,var(--dc-bleu-logo));
  background:#fff;}

/* --- L'INTITULE ET LE TEXTE --- */
.dc-fin-rail > .dc-fin-card > .dc-fin-card-title{
  grid-column:2!important;grid-row:1!important;
  margin:0!important;padding:0!important;align-self:center!important;}
.dc-fin-rail .dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{
  font-family:var(--dc-display)!important;
  font-size:20px!important;font-weight:800!important;
  line-height:1.25!important;letter-spacing:-.015em!important;
  color:var(--dc-ac-txt,var(--dc-bleu-logo))!important;text-wrap:balance;}
.dc-fin-rail > .dc-fin-card > .elementor-widget-text-editor{
  grid-column:3!important;grid-row:1 / span 2!important;
  margin:0!important;padding:0!important;}
.dc-fin-rail .dc-fin-card p{
  font-size:16px!important;line-height:1.65!important;
  color:var(--dc-text-light,#5F6980)!important;max-width:64ch;}

@media(max-width:1024px){
  .dc-fin-rail > .dc-fin-card{
    grid-template-columns:40px minmax(0,190px) minmax(0,1fr)!important;
    column-gap:22px!important;}
  .dc-fin-rail .dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{
    font-size:18px!important;}
}
@media(max-width:767px){
  /* en dessous, l'intitule passe au-dessus du texte : trois colonnes sur
     390 px laisseraient 90 px au paragraphe. */
  .dc-fin-rail{gap:26px!important;}
  .dc-fin-rail > .dc-fin-card{
    grid-template-columns:36px minmax(0,1fr)!important;
    column-gap:16px!important;row-gap:5px!important;}
  .dc-fin-rail > .dc-fin-card > .dc-fin-card-title{grid-column:2!important;grid-row:1!important;}
  .dc-fin-rail > .dc-fin-card > .elementor-widget-text-editor{
    grid-column:2!important;grid-row:2!important;}
  .dc-fin-ico{width:36px!important;}
  .dc-fin-ico .elementor-icon{width:36px!important;height:36px!important;}
  .dc-fin-ico .elementor-icon svg{width:17px!important;height:17px!important;}
  .dc-fin-rail .dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{
    font-size:18px!important;}
  .dc-fin-rail .dc-fin-card p{font-size:15px!important;}
}

/* la note « Hors prise en charge… » suivait l'alignement centre de l'entete,
   au-dessus d'un bloc desormais aligne a gauche. */
.dc-fin-rail ~ .dc-note p,.dc-fin-rail + .dc-note p{text-align:left!important;}
.dc-section:has(.dc-fin-rail) .dc-note p{text-align:left!important;margin-top:26px!important;}

/* ===========================================================================
   LES INTITULES DE BLOC S'ALIGNENT SUR LEUR CONTENU  (18-09-2026)
   ---------------------------------------------------------------------------
   Releve en relisant entreprises et chercheur section par section : « Prise en
   charge par votre commission paritaire », « Ils nous font confiance » et
   « Comment vous inscrire » etaient CENTRES juste au-dessus d'un rail aligne a
   gauche. Mesure : l'intitule commencait a 508 px, le rail a 64 px — 444 px
   d'ecart entre un titre et ce qu'il titre.

   Cause : ces widgets ont une largeur au contenu, et le conteneur de section
   les centre (`align-items:center`), comme il centre a juste titre le GRAND
   titre de section. Mais un intitule intermediaire n'est pas un titre de
   section : il annonce le bloc qui suit, donc il part d'ou ce bloc part.
   Le titre de section, lui, reste centre — c'est le rythme de tout le site.
   =========================================================================== */
.dc-section:has(.dc-fin-rail) .dc-block-title,
.dc-section:has(.dc-fin-rail) .dc-client-list,
.dc-section:has(.dc-fin-rail) .dc-note{
  /* `text-align:left` ne suffisait pas : le widget a une largeur AU CONTENU et
     c'est le conteneur qui le centre. Il faut lui rendre toute la largeur. */
  align-self:stretch!important;width:100%!important;
  margin-left:0!important;margin-right:0!important;}
.dc-section:has(.dc-fin-rail) .dc-block-title .elementor-heading-title{
  text-align:left!important;}
.dc-section:has(.dc-fin-rail) .dc-client-list{
  justify-content:flex-start!important;}
.dc-section:has(.dc-fin-rail) .dc-block-title{margin-bottom:6px!important;}

/* ===========================================================================
   LA CARTE DE TEMOIGNAGE CESSE D'ETRE VIDE A DROITE  (18-09-2026)
   ---------------------------------------------------------------------------
   Yassine : « ca va, il n'y a pas trop d'espace vide a droite sans contenu ? »
   Mesure : carte 1312 x 282, colonne de texte 812 x 280, texte reel 736 x 62.
   **80 % de la colonne etait vide.** Il a raison.

   La cause n'est pas le decoupage mais l'echelle : le wireframe ne donne que
   deux lignes — un nom et un role. Deux lignes dans une colonne de 812 px
   seront toujours perdues. On n'invente pas de citation pour combler ; on
   RAMENE LA CARTE A LA TAILLE DE SON CONTENU.

   La scene passe a 1000 px et se cale a gauche, sous le titre de section. La
   video occupe 52 %, l'identite 48 % : le nom et le role deviennent une
   legende de video, ce qu'ils sont. Le vide tombe a ce qu'il faut d'air.
   =========================================================================== */
/* Yassine : « la section doit prendre la largeur comme avant, la t'as
   raccourci ». Exact — la retrecir reglait le vide mais cassait le rythme de
   la page. On revient a la pleine largeur ; le vide se traite par la
   composition (voir le bloc suivant), pas par la largeur. */
.dc-testi-grid{max-width:100%!important;}

.dc-testi-on .dc-testi-body{padding:26px 32px 64px!important;}
.dc-testi-on .dc-testi-nom .elementor-heading-title.elementor-heading-title{
  font-size:23px!important;}

@media(max-width:1040px){
  .dc-testi-grid{max-width:100%!important;}
}

/* ===========================================================================
   « FINANCER VOTRE FORMATION » — REPRODUIRE `image021`  (18-09-2026)
   ---------------------------------------------------------------------------
   Yassine : « je veux vraiment que la section financer y ressemble, meme les
   chiffres sont coupes sur le bas, faudrait reproduire ca aussi. Et il y a des
   icones alors qu'elles ne sont pas dans le wireframe. Le contenu du texte doit
   etre plus a droite comme sur l'image. »

   Relecture de la reference (retours-client-aout/noemie/image021.jpg), au
   detail pres :
     1. le grand element typographique DEBORDE SA LIGNE — sa moitie basse est
        coupee par le filet. C'est ce qui donne au bloc son allure de titrage
        de magazine plutot que de liste ;
     2. il n'y a AUCUNE icone ;
     3. l'intitule et le texte sont TRES A DROITE du grand element, avec un
        large vide entre les deux ;
     4. rien ne reagit au survol : c'est un bloc de lecture, pas une liste de
        commandes.

   Les icones ont ete supprimees de l'arbre Elementor, pas masquees ici.
   =========================================================================== */
.dc-fin-rail{gap:0!important;border-top:1px solid var(--dc-gray-200)!important;}

.dc-fin-rail > .dc-fin-card{
  /* le grand element a gauche, puis un large vide, puis le texte tres a droite */
  /* LA REFERENCE a des jetons courts (« 68 %% », « 2.4x ») qui tiennent sur une
     ligne. Nos intitules vont jusqu'a « Validation des competences » : a 62 px
     dans 300 px ils passaient a trois lignes et DEBORDAIENT VERS LE HAUT, dans
     la ligne precedente. On elargit la colonne, on baisse le corps, et on
     reserve de la hauteur : la coupe redevient un geste, pas un accident. */
  /* Yassine : « le texte a droite devrait etre encore plus a droite, comme sur
     l'image ». Mesure de la reference : le texte commence a ~55 %% de la
     largeur du bloc. On y va. */
  grid-template-columns:minmax(0,470px) minmax(0,1fr)!important;
  column-gap:180px!important;row-gap:0!important;
  align-items:end!important;
  padding:34px 0 0!important;
  border-bottom:1px solid var(--dc-gray-200)!important;
  /* plus rien ne deborde : le rognage n'a plus d'objet */
  overflow:visible!important;
  position:relative;
  transition:none!important;}

/* plus aucun effet au survol sur le contenu */
.dc-fin-rail > .dc-fin-card:hover{background:none!important;background-image:none!important;}

.dc-fin-rail > .dc-fin-card > .dc-fin-card-title{
  grid-column:1!important;grid-row:1!important;
  /* l'ancrage BAS servait la coupe : c'est lui qui posait le mot sur le filet
     pour qu'il le traverse. Sans coupe il n'a plus de raison d'etre, et il
     decalait le grand mot sous le texte des que celui-ci passait a trois
     lignes — visible des 768 px. Les deux colonnes se centrent maintenant
     l'une sur l'autre. */
  align-self:center!important;margin:0!important;padding:0!important;}
/* « on descendrait pas un peu le texte qui est a droite pour qu'il soit plus
   proche de la ligne, comme sur l'image ». Exact : dans `image021` le bloc de
   droite est cale BAS, sa derniere ligne a quelques pixels du filet. */
.dc-fin-rail > .dc-fin-card > .elementor-widget-text-editor{
  grid-column:2!important;grid-row:1!important;
  align-self:end!important;margin:0!important;padding:0 0 14px!important;}

/* le grand mot deborde vers le bas : `margin-bottom` negatif le fait passer
   sous le filet, `overflow:hidden` de la ligne le coupe net. */
.dc-fin-rail .dc-fin-card-title h3.elementor-heading-title.elementor-heading-title,
.dc-fin-rail .dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{
  font-family:var(--dc-display)!important;
  /* Yassine : « les deux premiers se lisent bien mais le troisieme a le p
     coupe, ca porte a confusion ; si tout est un peu plus coupe on comprend
     mieux l'effet de style ». Juste : une coupe timide se lit comme un defaut,
     une coupe franche se lit comme un parti pris. Et le mot grandit pour
     repondre a la hauteur du bloc de droite, comme dans la reference. */
  font-size:clamp(32px,3.9vw,54px)!important;font-weight:800!important;
  line-height:.96!important;letter-spacing:-.032em!important;
  /* Yassine : « je trouve ca plat, fade, sans saveur ». Il a raison : un mot
     en aplat uni sur un fond presque blanc ne porte rien. La charte repond
     elle-meme — c'est un site de degrades. Le grand mot passe donc en DEGRADE
     de la couleur du public, du vif vers l'encre. La coupe reste : elle donne
     la composition, le degrade donne la matiere. Les deux ne se disputent pas.
     `background-clip:text` demande une couleur transparente ; le `color` reste
     declare au-dessus comme repli si la propriete n'est pas supportee. */
  color:var(--dc-ac-txt,var(--dc-bleu-logo))!important;
  background-image:linear-gradient(104deg,
    var(--dc-ac,#00688A) 0%, var(--dc-ac-txt,#00688A) 52%,
    var(--dc-text,#1A1D2B) 118%)!important;
  -webkit-background-clip:text!important;background-clip:text!important;
  -webkit-text-fill-color:transparent!important;
  /* sur du texte en degrade, TOUJOURS reserver la sur-chasse : sans ce
     rembourrage la derniere lettre sort de la zone peinte et reste
     transparente (piege releve le 8 septembre sur l'agenda). */
  padding-right:.06em!important;
  /* PLUS DE COUPE  (18-09-2026). Hamza, sur cette section : « le texte ne
     s'affiche pas correctement ». C'est le verdict qui compte : un lecteur qui
     n'a pas la reference sous les yeux ne lit pas un parti pris, il lit un
     bug — et si lui le lit comme ca, Noemie aussi. Le mot reprend sa hauteur
     entiere. Ce qui reste de `image021` : l'ecart d'echelle entre le grand mot
     et le texte, les filets, et le vide a gauche du texte. Ce qui porte
     desormais la matiere, c'est le DEGRADE, pas le rognage. */
  margin:0!important;display:block;text-wrap:balance;}

/* « le texte a droite peut-etre un peu monotone » (Hamza). Trois paragraphes
   de meme longueur, meme corps, meme gris : rien n'accroche, et surtout rien
   ne dit CE QU'ON GAGNE, qui est pourtant l'information de la section.
   On ne reecrit pas — les mots sont ceux du wireframe. On donne seulement du
   relief a ce qui repond : le groupe de mots decisif passe en encre du public.
   Le paragraphe respire aussi davantage et sa ligne raccourcit : 56 signes de
   long en 16 px, c'etait une ligne de roman sous un titre d'affiche. */
.dc-fin-rail .dc-fin-card p{
  font-size:17px!important;line-height:1.7!important;
  color:var(--dc-text-light,#5F6980)!important;max-width:44ch;}
.dc-fin-rail .dc-fin-card p strong{
  font-weight:600!important;color:var(--dc-ac-txt,var(--dc-text))!important;}
/* le texte se cale sur le MILIEU du grand mot, plus sur sa ligne de base :
   sans la coupe, l'ancrage bas laissait le bloc flotter sous le titre. */
.dc-fin-rail > .dc-fin-card{align-items:center!important;}
.dc-fin-rail > .dc-fin-card > .elementor-widget-text-editor{
  align-self:center!important;padding-bottom:0!important;}

@media(max-width:1024px){
  .dc-fin-rail > .dc-fin-card{
    grid-template-columns:minmax(0,320px) minmax(0,1fr)!important;
    column-gap:44px!important;}
  .dc-fin-rail .dc-fin-card-title h3.elementor-heading-title.elementor-heading-title,
  .dc-fin-rail .dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{
    font-size:36px!important;margin-bottom:-10px!important;}
}
@media(max-width:767px){
  /* sur mobile on renonce a la coupe : une ligne de 30 px rognee devient
     illisible. Le motif garde ses filets et son ecart d'echelle. */
  .dc-fin-rail > .dc-fin-card{
    grid-template-columns:minmax(0,1fr)!important;
    row-gap:10px!important;padding:22px 0!important;
    align-items:start!important;overflow:visible!important;}
  .dc-fin-rail > .dc-fin-card > .dc-fin-card-title{grid-column:1!important;grid-row:1!important;}
  .dc-fin-rail > .dc-fin-card > .elementor-widget-text-editor{
    grid-column:1!important;grid-row:2!important;padding-bottom:0!important;}
  .dc-fin-rail .dc-fin-card-title h3.elementor-heading-title.elementor-heading-title,
  .dc-fin-rail .dc-fin-card-title h4.elementor-heading-title.elementor-heading-title{
    font-size:28px!important;margin-bottom:0!important;line-height:1.1!important;}
}

/* ===========================================================================
   TEMOIGNAGES — LA COMPOSITION DE `image019`, 2e PASSE  (18-09-2026)
   ---------------------------------------------------------------------------
   Retours de Yassine sur la 1re passe, tous justes :
     - le bouton etait en haut a droite alors que la reference le met EN BAS ;
     - j'avais pose un guillemet de citation alors qu'il n'y a PAS de citation
       (la reference en a une, nous non — le wireframe ne fournit que le nom et
       le role). Un guillemet qui n'ouvre rien est un ornement ;
     - la photo entierement teintee « ne donne pas bien » — le duotone plein
       etait trop fort ;
     - l'ovale est de trop : on revient aux coins arrondis d'avant ;
     - et il aimait la carte ENCADREE d'avant.

   On garde donc de la reference ce qui tient : la composition en deux parties
   (editorial a gauche, media a droite) et la BARRE DU BAS separee par un filet,
   qui rassemble la navigation et le lien. Le reste revient a la carte du site.
   =========================================================================== */
.dc-section:has(.dc-testi-grid) > .e-con-inner{
  display:grid!important;
  grid-template-columns:minmax(0,1fr)!important;
  grid-template-rows:auto auto!important;row-gap:0!important;}

/* l'entete reprend sa place, pleine largeur, au-dessus de la carte */
.dc-section:has(.dc-testi-grid) > .e-con-inner > .e-con:first-child{
  grid-column:1!important;grid-row:1!important;padding-right:0!important;}

.dc-testi-grid{display:block!important;position:relative;}
.dc-testi-video{display:none!important;}

/* LA CARTE REVIENT : cadre, coins arrondis, fond blanc */
.dc-testi-video.dc-testi-on{
  display:grid!important;
  grid-template-columns:minmax(0,46%) minmax(0,54%)!important;
  grid-template-rows:1fr auto!important;
  column-gap:0!important;row-gap:0!important;
  background:#fff!important;
  border:1px solid var(--dc-gray-200)!important;
  border-radius:var(--dc-radius-lg)!important;
  overflow:hidden!important;box-shadow:none!important;}

/* l'identite a gauche, centree dans la hauteur du media */
.dc-testi-on .dc-testi-body{
  grid-column:1!important;grid-row:1!important;
  display:flex!important;flex-direction:column!important;
  justify-content:center!important;align-self:stretch!important;
  padding:34px 40px!important;background:none!important;}
/* plus de guillemet : il n'y a pas de citation */
/* Yassine : « c'est mieux avec une citation a gauche, afin de remplir un peu
   la case comme image019, avec les guillemets comme ils etaient ».
   La citation revient — elle etait absente parce que le wireframe n'en fournit
   pas. Les textes poses sont des TEXTES D'ATTENTE, a remplacer par les vraies
   paroles ; ils sont nommes comme tels dans l'editeur. */
/* « les guillemets sont mal places, ils sont en haut a gauche dans le coin,
   ils devraient etre alignes avec le texte ». Le glyphe portait sa propre
   chasse a gauche, ce qui le decalait par rapport a la premiere lettre de la
   citation. Un retrait negatif le recale sur la verticale du texte, et il
   descend au contact du paragraphe qu'il ouvre. */
/* --- LE VOILE DU MEDIA, PORTE PAR LA CARTE ---------------------------------
   Ni `::before` ni `::after` de la vignette ne sont libres : le premier dessine
   le disque du bouton de lecture, le second son triangle. La superposition
   d'Elementor emploie elle aussi `::before` — elle ecrasait le disque.
   Le voile passe donc sur la CARTE, limite a la colonne du media, et les deux
   pseudo-elements du bouton remontent au-dessus de lui. */
.dc-testi-video.dc-testi-on{position:relative!important;}
.dc-testi-video.dc-testi-on::after{
  content:"";position:absolute;top:0;bottom:0;left:46%;right:0;
  z-index:1;pointer-events:none;
  /* Yassine : « on enleverait pas le voile rose sur l'image, ca risque de
     faire trop ». D'accord : ici la couleur du public est deja partout — le
     guillemet, la pastille de navigation, le nom. Sur la photo elle devient
     une couche de trop. Il ne reste que le degrade sombre qui porte la duree. */
  background-image:
    linear-gradient(to top, rgba(12,18,48,.40) 0%, rgba(12,18,48,.10) 34%,
                    rgba(12,18,48,0) 60%);}
.dc-testi-on .dc-testi-thumb::before,
.dc-testi-on .dc-testi-thumb::after{z-index:3!important;}
.dc-testi-on .dc-testi-duree{position:relative;z-index:3;}

/* la citation et son guillemet se touchent : le glyphe ouvre le paragraphe,
   il n'est pas une vignette posee en haut de la carte */
.dc-testi-cit{margin:0!important;padding:0!important;}
.dc-testi-cit p{margin:0 0 20px!important;}

.dc-testi-on .dc-testi-body::before{
  content:"\201C";
  /* UNE REGLE PLUS ANCIENNE posait `position:absolute` sur ce pseudo-element :
     le glyphe se retrouvait epingle au coin haut-gauche de la carte, loin de
     la citation qu'il ouvre — « ils sont en haut a gauche dans le coin ».
     On le remet dans le flux : il redevient la premiere ligne du bloc. */
  position:static!important;display:block!important;
  font-family:var(--dc-display);font-size:52px;font-weight:800;
  line-height:.86;height:auto;margin:0 0 2px -.055em!important;
  color:var(--dc-ac-txt,var(--dc-bleu-logo));}
.dc-testi-cit p{
  font-family:var(--dc-body)!important;font-size:17px!important;
  line-height:1.6!important;color:var(--dc-text)!important;
  margin:0 0 22px!important;max-width:46ch;}

.dc-testi-on .dc-testi-nom .elementor-heading-title.elementor-heading-title{
  font-size:24px!important;font-weight:700!important;color:var(--dc-text)!important;}
.dc-testi-on .dc-testi-role .elementor-heading-title.elementor-heading-title{
  font-size:15px!important;margin-top:6px!important;}

/* LE MEDIA a droite : coins arrondis simples, photo naturelle.
   La couleur du public revient par le VOILE DU BAS, exactement comme sur les
   images du bento — un seul geste colore pour tout le site. */
.dc-testi-on .dc-testi-thumb{
  grid-column:2!important;grid-row:1 / span 2!important;
  aspect-ratio:auto!important;height:100%!important;min-height:340px!important;
  align-self:stretch!important;margin:0!important;
  border:0!important;border-radius:0!important;
  background-blend-mode:normal!important;background-color:var(--dc-gray-100)!important;
  background-size:cover!important;background-position:center center!important;}

/* --- LA BARRE DU BAS : filet, navigation a gauche, lien a droite ---------- */
.dc-testi-nav-w{
  grid-column:1!important;grid-row:2!important;
  padding:0 40px 30px!important;}
.dc-testi-nav{
  position:static!important;margin:0!important;width:auto!important;
  padding-top:20px!important;border-top:1px solid var(--dc-gray-200)!important;}

/* le lien quitte le haut de la section pour rejoindre cette barre : il repond
   a la navigation au lieu de flotter au-dessus. */
.dc-section:has(.dc-testi-grid) .dc-link-boxed{
  position:absolute!important;right:0!important;bottom:30px!important;
  z-index:3!important;margin:0!important;
  padding-right:40px!important;}

@media(max-width:900px){
  .dc-testi-video.dc-testi-on{
    grid-template-columns:minmax(0,1fr)!important;
    grid-template-rows:auto auto auto!important;}
  .dc-testi-on .dc-testi-thumb{
    grid-column:1!important;grid-row:1!important;
    min-height:0!important;aspect-ratio:16/10!important;}
  .dc-testi-on .dc-testi-body{grid-column:1!important;grid-row:2!important;padding:24px 22px 0!important;}
  .dc-testi-nav-w{grid-column:1!important;grid-row:3!important;padding:0 22px 22px!important;}
  /* LE VOILE SUIT LE MEDIA, PAS LA COLONNE. En pile, `left:46%` laissait un
     rectangle gris en travers de la citation — le voile etait reste cale sur
     la colonne de droite du bureau. Meme largeur et meme ratio que la
     vignette : il se superpose exactement a elle. */
  .dc-testi-video.dc-testi-on::after{
    left:0!important;right:0!important;top:0!important;bottom:auto!important;
    aspect-ratio:16/10!important;}
  .dc-section:has(.dc-testi-grid) .dc-link-boxed{
    position:static!important;padding:0!important;margin-top:16px!important;}
}

/* ===========================================================================
   LA BANDE SERVICE : DE L'AIR SOUS L'INTITULE  (18-09-2026)
   ---------------------------------------------------------------------------
   Yassine : « sur les sections du style "vous avez deja les competences ?",
   le texte "validation des competences" est trop proche du texte en dessous ».
   Mesure : l'intitule finit a la meme ligne que celle ou commence le titre —
   ZERO pixel entre les deux. Les deux se lisaient comme un seul bloc, alors
   que l'un annonce l'autre.
   Vaut pour les trois publics : l'intitule est « Validation des competences »
   sur travailleur, « Mise a disposition d'espaces » sur entreprises,
   « Accompagnement emploi » sur chercheur.
   =========================================================================== */
.dc-media-eyebrow{margin-bottom:14px!important;}
.dc-media-title{margin-top:0!important;}
.dc-media-lead{margin-top:14px!important;}
@media(max-width:767px){
  .dc-media-eyebrow{margin-bottom:10px!important;}
}


/* ===========================================================================
   PASSE MOBILE : LES CIBLES TACTILES  (18-09-2026)
   ---------------------------------------------------------------------------
   Releve a 390 px sur les neuf pages en ligne. Deux commandes passent sous la
   barre des 24 x 24 px du critere WCAG 2.5.8, et ce ne sont pas des liens
   dans une phrase — l'exemption « inline » ne les couvre pas :

     .dc-testi-point   8 x 8    les pastilles du lecteur de temoignages
     .dc-link-text     ... x 22 les liens d'action en bas des cartes service

   La pastille garde sa taille A L'OEIL — c'est un point, il doit rester un
   point. C'est sa ZONE SENSIBLE qui grandit, par un pseudo-element centre.
   Et l'ecart passe de 7 a 16 px : deux zones de 24 px espacees de 24 px de
   centre a centre se touchent sans se chevaucher. Sans cet ecart on aurait
   fabrique un defaut pire que celui qu'on corrige — la pastille voisine qui
   repond a la place de celle qu'on vise.

   Le reste du releve est conforme ou exempte : le numero de telephone et
   « Nous contacter » du pied sont des liens DANS un bloc de texte (exemption
   inline), les trois reseaux font 34 px, les colonnes du pied 31 px de haut
   sur toute la largeur.
   =========================================================================== */
/* Pas de `pointer:coarse` ici : la regle serait invisible a qui verifie en
   reduisant la fenetre de son ordinateur, et l'ecart supplementaire ne coute
   rien a la souris. C'est la LARGEUR qui decide. */
@media(max-width:1024px){
  .dc-testi-points{gap:16px!important;}
  .dc-testi-nav .dc-testi-point{position:relative!important;}
  .dc-testi-nav .dc-testi-point::after{
    content:"";position:absolute;left:50%;top:50%;
    width:24px;height:24px;transform:translate(-50%,-50%);}
  .dc-link-text .elementor-button{padding-top:6px!important;padding-bottom:6px!important;}
}


/* ===========================================================================
   LA TUILE DE RENVOI DU CATALOGUE — LE MODELE DE LA V5  (18-09-2026)
   ---------------------------------------------------------------------------
   Hamza : « fais la meme chose que la page d'accueil, sans le bouton. »
   Yassine : « tu as repris un ancien modele, je le vois a la derniere carte
   [...] reprends le modele de la V5, c'est celui qui est defini comme page
   d'accueil actuellement. Il manque l'anim au survol aussi. »

   Exact, et verifie : `page_on_front` vaut 3574, et la tuile qu'on y trouve
   n'est PAS un aplat de couleur. C'est une PHOTO en fond, un voile sombre
   monte du bas, un texte blanc — et elle zoome au survol, comme les trois
   cartes a cote d'elle. J'avais reproduit l'etat anterieur de cette tuile
   (aplat degrade + « + » en filigrane), qui ne vit plus que dans l'historique
   du CSS de l'accueil.

   Les regles vivaient dans le CSS de la page d'accueil, prefixees
   `.elementor-3574`. Elles servent maintenant a trois pages : elles montent au
   socle, sans le prefixe et sans rien changer d'autre.

   Une difference d'implementation, et une seule : l'accueil porte la photo sur
   un `::before`, avec l'URL ecrite en dur dans le CSS. Ici c'est le conteneur
   `.dc-suite-visuel` — un vrai conteneur Elementor — qui la porte, en fond
   d'element. Rendu identique, mais la photo se remplace dans l'editeur au lieu
   de se chercher dans une feuille de style.
   =========================================================================== */
.dc-card-suite{
  background-color:#170B3B!important;
  overflow:hidden!important;position:relative!important;isolation:isolate!important;}

/* LA PHOTO EST PORTEE PAR LA CARTE, PAS PAR LE VISUEL — et c'est structurel.
   Premiere tentative : j'avais mis la photo en fond du conteneur
   `.dc-suite-visuel` et passe celui-ci en absolu, pour qu'elle reste
   remplacable dans l'editeur. Resultat : le visuel sortant du flux, le texte
   remontait en HAUT de la tuile, la ou le voile est transparent — titre blanc
   sur photo claire, illisible.
   Dans la V5, `.dc-suite-visuel` reste EN FLUX et vide : c'est un espaceur de
   184 px qui pousse le texte vers le bas, la ou le voile est opaque. La photo,
   elle, est peinte par le `::before` de la carte, sur toute sa surface, et
   c'est lui qui zoome. On reprend ce montage tel quel ; la photo se declare
   par page avec `--dc-suite-photo`. */
.dc-card-suite .dc-suite-visuel{
  background-image:none!important;background-color:transparent!important;
  /* l'espaceur doit faire la MEME hauteur que les photos voisines, sinon le
     texte de la tuile ne demarre pas sur la meme ligne qu'elles : 204 px
     contre 184 sur l'accueil. C'est le ratio des cartes qui la donne. */
  aspect-ratio:16/9!important;height:auto!important;min-height:0!important;}
.dc-card-suite::before{
  content:""!important;position:absolute!important;
  top:0!important;right:0!important;bottom:0!important;left:0!important;
  z-index:0!important;pointer-events:none!important;
  /* [20/10] la photo est desormais le FOND NATIF de la carte (reglable dans
     Elementor : Style > Arriere-plan) ; le ::before la reprend par `inherit`. */
  background-image:inherit!important;
  background-size:cover!important;background-position:50% 50%!important;
  background-repeat:no-repeat!important;
  transition:transform .55s cubic-bezier(.22,.61,.36,1)!important;}
.dc-card-suite:hover::before,
.dc-card-suite:focus-within::before{transform:scale(1.05)!important;}

/* Le voile, AU-DESSUS de l'image et SOUS le texte. */
.dc-card-suite::after{
  content:""!important;position:absolute!important;
  top:0!important;right:0!important;bottom:0!important;left:0!important;
  z-index:1!important;pointer-events:none!important;
  background-image:linear-gradient(0deg,
    rgba(9,7,30,.92) 0%, rgba(9,7,30,.60) 34%,
    rgba(9,7,30,.18) 62%, rgba(9,7,30,0) 100%)!important;}

/* le « + » de l'ancienne version n'a plus lieu d'etre */
.dc-card-suite .dc-suite-visuel::before,
.dc-card-suite .dc-suite-visuel::after{content:none!important;display:none!important;}

/* Le contenu etait a z-index 1, comme le voile — et un `::after` peint APRES
   ses freres a z-index egal. Le voile passait donc par-dessus le texte. */
.dc-card-suite > *:not(.dc-suite-visuel){position:relative!important;z-index:2!important;}
.dc-card-suite .dc-card-body{justify-content:flex-end!important;}
.dc-card-suite .dc-tag{display:none!important;}

.dc-card-suite .dc-card-title,
.dc-card-suite .dc-card-title *,
.dc-card-suite .dc-suite-lien,
.dc-card-suite .dc-suite-lien *{color:#FFFFFF!important;}
.dc-card-suite .dc-card-meta,
.dc-card-suite .dc-card-meta *{color:rgba(255,255,255,.82)!important;}

/* Le renvoi est dessine comme un lien mais n'est PAS un widget bouton : la
   carte est deja un <a>, et un bouton a l'interieur emboiterait deux liens. */
.dc-suite-lien .elementor-heading-title.elementor-heading-title{
  display:inline-flex;align-items:center;gap:8px;
  font-family:var(--dc-body);font-size:14px;font-weight:500;}
.dc-suite-lien .elementor-heading-title::after{
  content:"\2192";transition:transform .3s var(--dc-ease);}
.dc-card-suite:hover .dc-suite-lien .elementor-heading-title::after{
  transform:translateX(4px);}
/* le renvoi est detache du texte par une respiration, comme sur l'accueil */
.dc-card-suite .dc-suite-lien.dc-card-bottom{
  margin-top:18px!important;padding-top:14px!important;}

/* L'ANIM QUI MANQUAIT : les trois cartes voisines zooment aussi.
   ET SON COROLLAIRE, que j'avais oublie : la carte doit ROGNER. Sans
   `overflow:hidden`, l'image agrandie de 5 % sort de son cadre et deborde sur
   la carte voisine — Yassine : « quand on survole les cartes 2 et 3 les images
   sortent de leur bloc alors qu'il n'y a pas ca sur la page d'accueil ».
   Mesure : les quatre cartes de l'accueil sont a `overflow:hidden`, les trois
   premieres des pages profil etaient a `visible`. Le zoom sans le rognage,
   c'est la moitie de la regle. */
.dc-hairline-grid > .dc-card{overflow:hidden!important;}
.dc-hairline-grid .dc-card .dc-card-img{
  transition:transform .55s cubic-bezier(.22,.61,.36,1)!important;}
.dc-hairline-grid .dc-card:hover .dc-card-img,
.dc-hairline-grid .dc-card:focus-within .dc-card-img{transform:scale(1.05)!important;}

@media(max-width:600px){
  .dc-card-suite .dc-card-body{padding:18px!important;}
  .dc-card-suite .dc-card-title .elementor-heading-title.elementor-heading-title{
    font-size:22px!important;line-height:1.22!important;}
}


/* ===========================================================================
   LES COLONNES A FILETS : DU RELIEF A L'INTERIEUR DU BLOC  (18-09-2026)
   ---------------------------------------------------------------------------
   Hamza, sur la bande « Financer et organiser vos formations » : « pareil ici
   stp » — c'est-a-dire la meme remarque que sur le rail : « un peu monotone,
   voir ce que tu peux faire pour travailler sur la mise en page a l'interieur
   des blocs ».

   Juste : trois colonnes de meme largeur, meme intitule de 19 px, meme
   paragraphe de 15 px gris. L'oeil n'a aucune raison d'entrer dans l'une
   plutot que dans l'autre.

   Trois gestes, aucun mot ajoute :
     1. l'intitule monte a 21 px et gagne de l'air sous lui ;
     2. le groupe de mots qui REPOND passe en encre du public — c'est le meme
        traitement que le rail deux blocs plus haut, donc une regle de lecture
        et non un effet de plus ;
     3. le filet qui separe les colonnes se teinte : gris en haut, couleur du
        public en bas. Il cesse d'etre une bordure de tableau.
   =========================================================================== */
/* Les trois colonnes N'ONT PAS de bloc, et c'est un choix de Yassine apres
   l'avoir vu pose : « j'enleverai les blocs pour les 3 colonnes, tant pis on
   laisse comme ca, avec le texte en couleur ». Ce qui marche sur le rail — un
   paragraphe long, seul dans une grande colonne — encombre ici : trois blocs
   de deux lignes cote a cote redeviennent trois pavés. Les filets separent,
   le mot colore accroche, c'est assez. */
.dc-hairline-grid > .dc-offer-card,
.dc-arg-grid > .dc-arg-card{position:relative;}

.dc-hairline-grid > .dc-offer-card .dc-card-title .elementor-heading-title.elementor-heading-title,
.dc-arg-grid .dc-arg-title .elementor-heading-title.elementor-heading-title{
  font-size:21px!important;line-height:1.22!important;margin-bottom:12px!important;}

.dc-hairline-grid > .dc-offer-card p,
.dc-arg-grid > .dc-arg-card p{
  font-size:15.5px!important;line-height:1.66!important;}
.dc-hairline-grid > .dc-offer-card p strong,
.dc-arg-grid > .dc-arg-card p strong{
  font-weight:600!important;color:var(--dc-ac-txt,var(--dc-text))!important;}

/* le filet separateur se teinte vers le bas : il devient un trait de
   composition au lieu d'une bordure de tableau. `border-image` accepte un
   degrade la ou `border-left` n'accepte qu'un aplat. */
.dc-hairline-grid > .dc-offer-card + .dc-offer-card,
.dc-arg-grid > .dc-arg-card + .dc-arg-card{
  border-left:1px solid transparent!important;
  border-image:linear-gradient(to bottom,
    var(--dc-gray-200) 0%, var(--dc-gray-200) 38%,
    color-mix(in srgb, var(--dc-ac,#00688A) 55%, transparent) 100%) 1!important;}

@media(max-width:767px){
  /* en pile, le filet redevient horizontal : un degre vertical n'y veut plus
     rien dire. */
  .dc-hairline-grid > .dc-offer-card + .dc-offer-card,
  .dc-arg-grid > .dc-arg-card + .dc-arg-card{
    border-left:0!important;border-image:none!important;
    border-top:1px solid var(--dc-gray-200)!important;}
}


/* --- LE TEXTE DE DROITE DEVIENT UN BLOC  (18-09-2026) -----------------------
   Hamza : « travailler sur la mise en page A L'INTERIEUR DE BLOCS ou ce genre
   de choses ». Yassine : « je suis pas fan [des deux niveaux seuls], Hamza
   parlait de bloc non ? Suis les indications d'Hamza a la lettre. »

   Il a raison sur la lecture : « bloc » n'est pas une figure de style, c'est la
   chose demandee. Le texte n'est plus pose dans le vide a cote du grand mot —
   il est CONTENU : un lavis de la couleur du public, un rembourrage franc, un
   coin arrondi. Le rail devient une suite de blocs, pas une suite de lignes.

   Les deux niveaux de lecture restent — ils servent le texte et ne coutent
   rien — mais ils rentrent d'un cran : c'est le bloc qui porte la mise en
   page, pas eux.

   Et ils reglent au passage le defaut releve sur entreprises : « le texte est
   du coup trop proche de la ligne en bas ». Le rembourrage du bloc l'en
   ecarte, par construction.
   -------------------------------------------------------------------------- */
/* PAS DE `.elementor-widget-container` : Elementor 4 a supprime ce niveau, le
   widget contient directement les <p>. Ma premiere version stylait un noeud
   qui n'existe pas — le bloc ne s'affichait tout simplement pas. */
.dc-fin-rail .dc-fin-card .elementor-widget-text-editor{
  padding:22px 26px!important;
  border-radius:var(--dc-radius,16px)!important;
  background:linear-gradient(135deg,
    color-mix(in srgb, var(--dc-ac,#00688A) 7%, #fff) 0%,
    color-mix(in srgb, var(--dc-ac,#00688A) 3%, #fff) 100%)!important;
  border:1px solid color-mix(in srgb, var(--dc-ac,#00688A) 14%, transparent)!important;}

/* Yassine : « le texte doit prendre toute la largeur dans le bloc non ? Parce
   que la il est que sur la gauche. » Oui — la mesure de ligne etait heritee du
   temps ou le texte flottait a cote du grand mot, sans rien autour de lui :
   elle l'empechait de courir trop loin. Maintenant qu'il est dans un bloc,
   c'est le bloc qui borne la ligne, et le `max-width` ne fait plus que laisser
   un vide a droite.
   Mesure : 610 px utiles, 18 px de corps — environ 68 signes par ligne, dans
   la plage de lisibilite (45-75). On peut donc le laisser remplir. */
.dc-fin-rail .dc-fin-card p.dc-fin-lead{
  font-size:18px!important;line-height:1.5!important;
  color:var(--dc-text,#1A1D2B)!important;
  margin:0 0 8px!important;max-width:none!important;text-wrap:pretty;}
.dc-fin-rail .dc-fin-card p.dc-fin-suite{
  font-size:15.5px!important;line-height:1.6!important;
  color:var(--dc-text-light,#5F6980)!important;
  margin:0!important;max-width:none!important;}
.dc-fin-rail .dc-fin-card p.dc-fin-lead strong{
  font-weight:700!important;color:var(--dc-ac-txt,var(--dc-text))!important;}

/* le bloc a besoin d'air autour de lui : la carte rouvre sa reserve basse */
.dc-fin-rail > .dc-fin-card{padding:26px 0!important;}

@media(max-width:1024px){
  .dc-fin-rail .dc-fin-card .elementor-widget-text-editor > .elementor-widget-container{
    padding:18px 20px!important;}
  .dc-fin-rail .dc-fin-card p.dc-fin-lead{font-size:16.5px!important;}
  .dc-fin-rail .dc-fin-card p.dc-fin-suite{font-size:15px!important;}
}
}


/* ===========================================================================
   ESPACEMENT ENTRE LES PAVES — reduit le 22 septembre 2026
   Demande de Noemie : « Espace / Hauteur entre les paves : ils sont parfois
   trop grands > je pense qu'on peut reduire un peu. »

   MESURE AVANT : les sections de contenu partagent la classe `.dc-section` et
   portaient 112 px en haut ET en bas au bureau (224 px entre deux paves),
   96 px en tablette, 64 px sur telephone.
   APRES, reduction d'environ 20 % aux trois paliers :
     bureau 88 · tablette 76 · telephone 56
   Effet mesure sur profil travailleur au bureau : 6 842 -> 6 554 px.

   **LA VALEUR N'EST PAS DANS CE FICHIER, ET C'EST DELIBERE.** Elle est posee
   dans les REGLAGES ELEMENTOR des 25 sections concernees (4 pages), parce que
   c'est la qu'Elementor la lit. Trois tentatives CSS ont echoue avant :
   `padding-top` sur `.e-con-inner`, puis la meme a classe doublee, puis en
   `--padding-top` a classe quadruplee. Les trois etaient servies, dans une
   feuille chargee APRES celle de la page, avec `!important` et une specificite
   superieure (0,4,0 contre les 0,3,0 d'Elementor). `CSS.getMatchedStylesForNode`
   ne les listait meme pas parmi les regles retenues, et le navigateur ne laisse
   pas lire les feuilles externes pour aller plus loin.
   **Lecon : quand une valeur vient d'un reglage Elementor, la changer dans le
   reglage. Ne pas la combattre en CSS.**
   Sauvegarde des 25 valeurs d'origine (bureau, tablette et mobile) :
   `v5-captures/espacement-22-09/avant-22-09.json`.
   =========================================================================== */




/* ===========================================================================
   PAVE TEMOIGNAGE — VARIANTE « IMAGE A GAUCHE » — 22 septembre 2026
   Demande de Noemie : « Pave Temoignage : pourrions-nous avoir deux options de
   paves > avec image a gauche ? »
   Le pave d'origine place le texte a gauche et la video a droite (mesure :
   texte 603 px a x=65, video 707 px a x=668). Cette variante fait l'inverse,
   EN CONSERVANT LES PROPORTIONS : la video garde la part large.
   Elle s'active en ajoutant la classe `dc-testi-grid--img-gauche` a la
   section — rien d'autre a toucher, et le retour en arriere consiste a
   retirer la classe.
   NOTE DE SPECIFICITE : le gabarit de colonnes doit etre redeclare sur
   `.dc-testi-video.dc-testi-on` (deux classes) et non sur `.dc-testi-video`
   seul — sinon la regle d'origine gagne et la video se retrouve a gauche mais
   RETRECIE a 603 px. Verifie au rendu.
   Sous 900 px la grille repasse a une colonne : la variante n'y change rien,
   la video reste au-dessus du texte dans les deux cas.
   =========================================================================== */
.dc-testi-grid--img-gauche .dc-testi-video.dc-testi-on{
  grid-template-columns:minmax(0,1fr) minmax(0,46%)!important;}
.dc-testi-grid--img-gauche .dc-testi-thumb{
  grid-column:1!important;order:-1!important;}
.dc-testi-grid--img-gauche .dc-testi-body{
  grid-column:2!important;order:1!important;}


/* ===========================================================================
   DEBRIEF NOEMIE DU 22/09 — DEUX DEMANDES DE DIRECTION ARTISTIQUE
   Portee : les trois pages profil, via le socle. La couleur vient de
   `--dc-ac`, le jeton d'accent propre a chaque public — le bloc reste donc
   cyan chez le chercheur d'emploi, magenta chez le travailleur, etc.
   =========================================================================== */

/* [A] et [B] du debrief du 22/09 (les 4 etapes, les cartes de projet) ont ete
   DEPLACES dans le custom_css des copies V2 des trois pages profil
   (5633 travailleur, 5639 entreprises, 5645 chercheur) le 22/09 au soir :
   le socle est partage, et les pages en ligne doivent rester telles que
   Noemie les a vues. Sauvegarde du socle complet :
   v5-captures/versions-22-09/css-609.etat-22-09-avant-scission.css */

/* [C] LE BLOC « COMMENT VOUS INSCRIRE » MELANGEAIT DEUX NATURES D'INFORMATION.
   Noemie : « la composition est tres statique et met au meme niveau des
   informations de nature differente. "IT / Digital Media" releve de l'offre de
   formation ; "Vous habitez en Flandre ou en Wallonie ?" releve plutot d'une
   information pratique. Leur traitement graphique devrait refleter cette
   difference. »
   Mesure avant : les trois cartes portaient exactement la meme classe
   `dc-fin-card`, la meme largeur et le meme poids visuel.
   Les deux premieres restent des cartes d'OFFRE. La troisieme devient une
   NOTE : fond neutre, filet d'accent a gauche, typographie d'aparte, et un
   marqueur « i ». Elle se lit desormais comme un renvoi pratique et non comme
   une troisieme formation.
   S'active par la classe `dc-fin-card--note`, rien d'autre a toucher. */
/*  SELECTEUR CALQUE SUR L'ADVERSAIRE : deux regles neutralisent deja les
    cartes du rail — `.e-con > .dc-fin-card` et `.dc-fin-rail > .dc-fin-card`,
    en 0,2,0 avec `!important`. Ma premiere version en 0,1,0 ne peignait rien.
    Lu a `CSS.getMatchedStylesForNode`, pas devine. */
.dc-fin-rail > .dc-fin-card.dc-fin-card--note,
.e-con > .dc-fin-card.dc-fin-card--note{
  background:var(--dc-gray-50,#F7F8FA)!important;
  border:0!important;border-left:3px solid var(--dc-ac,var(--dc-bleu-logo,#008AB7))!important;
  border-radius:0 12px 12px 0!important;
  box-shadow:none!important;position:relative!important;}
/*  LE TITRE DE LA NOTE : c'est le coeur de la remarque de Noemie, « mettre au
    meme niveau des informations de nature differente ». Le titre de l'offre
    monte jusqu'a 46 px via
    `.dc-section .dc-fin-rail .dc-fin-card-title h3.elementor-heading-title`
    (0,5,1, avec `clamp` et `!important`) ; la note doit descendre nettement
    en dessous, sinon le fond et le filet ne suffisent pas a hierarchiser.
    Selecteur porte a 0,6,1 pour passer devant. Mesure de l'adversaire faite
    a `CSS.getMatchedStylesForNode` — trois tentatives perdues aujourd'hui
    faute de l'avoir comptee d'emblee. */
.dc-section .dc-fin-rail .dc-fin-card--note .dc-fin-card-title h3.elementor-heading-title.elementor-heading-title,
.dc-section .dc-fin-rail .dc-fin-card--note .dc-fin-card-title h4.elementor-heading-title.elementor-heading-title,
.dc-fin-rail .dc-fin-card--note .dc-fin-card-title .elementor-heading-title.elementor-heading-title{
  font-size:21px!important;font-weight:700!important;line-height:1.25!important;
  letter-spacing:-.01em!important;}
.dc-fin-card--note p{font-size:14.5px!important;}
/* le marqueur « i », en trait comme toutes les icones du site */
.dc-fin-card--note::before{
  content:"i";position:absolute;top:22px;right:22px;
  width:22px;height:22px;border-radius:50%;
  border:1px solid var(--dc-ac,var(--dc-bleu-logo,#008AB7));
  color:var(--dc-ac,var(--dc-bleu-logo,#008AB7));
  font:700 12px/20px var(--dc-body);text-align:center;
  -webkit-text-fill-color:var(--dc-ac,var(--dc-bleu-logo,#008AB7));}
@media(max-width:767px){
  .dc-fin-card--note::before{top:16px;right:16px;}
}

/* [29/09] Menu plein ecran en TABLETTE : une regle 768-1024 plus ancienne (panneau sous l'en-tete,
   max-height = ecran - en-tete) gagnait par specificite sur le plein ecran — le panneau
   s'arretait 80 px avant le bas, « Se connecter » tombait dans la bande. Meme rendu qu'au telephone. */
@media (min-width:768px) and (max-width:1024px){
  .dc-navbar .elementor-widget-n-menu .e-n-menu[data-layout="dropdown"] .e-n-menu-wrapper.e-n-menu-wrapper{
    top:0!important;height:100dvh!important;max-height:100dvh!important;padding-bottom:0!important;}
}

/* [29/09] La fleche « Haut de page » vit desormais dans le PIED DE PAGE (toutes les pages).
   L'accueil et A propos V3 ont encore la leur, posee dans la page : on masque alors celle du pied. */
body:has([data-elementor-type="wp-page"] .dc-to-top) [data-elementor-type="footer"] .dc-to-top{display:none!important;}

/* [29/09] « Se connecter » en tablette, en-tete devenu blanc au defilement : la regle <=1024 qui retire
   le degrade (pour le bouton blanc du menu plein ecran) laissait un texte blanc sur fond blanc.
   Menu ferme : meme bouton qu'au bureau. */
@media (max-width:1024px){
  body:not(:has(.e-n-menu-toggle[aria-expanded="true"])) .dc-navbar--solid .dc-nav-cta.dc-nav-cta .elementor-button.elementor-button{
    background-color:transparent!important;background-image:linear-gradient(135deg,#7E3FF2 0%,#00789F 100%)!important;color:#fff!important;border-color:transparent!important;}
}

/* === V3 14/10 : menu A propos en un bloc a trois colonnes (retour client) === */
.dc-mega-link-3col .elementor-icon-list-items{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));column-gap:40px;row-gap:2px;}
.dc-mega-link-3col .elementor-icon-list-item:nth-child(-n+3){grid-column:1;}
.dc-mega-link-3col .elementor-icon-list-item:nth-child(4),.dc-mega-link-3col .elementor-icon-list-item:nth-child(5){grid-column:2;}
.dc-mega-link-3col .elementor-icon-list-item:nth-child(n+6){grid-column:3;}
/* entree sans page cible : meme gabarit que les liens, sans effet de survol */
.dc-mega-link .elementor-icon-list-item>.elementor-icon-list-text{display:block;font-family:var(--dc-body);font-size:15px;line-height:1.5;padding:5px 0;}
@media (max-width:767px){.dc-mega-link-3col .elementor-icon-list-items{grid-template-columns:1fr;}.dc-mega-link-3col .elementor-icon-list-item{grid-column:auto!important;}}
/* titres de colonne cliquables */
.dc-mega-col-title a{color:inherit;text-decoration:none;}
.dc-mega-col-title a:hover{color:var(--dc-bleu-logo);}

.dc-mega-link-3col .elementor-icon-list-item:nth-child(1){grid-row:1;}
.dc-mega-link-3col .elementor-icon-list-item:nth-child(2){grid-row:2;}
.dc-mega-link-3col .elementor-icon-list-item:nth-child(3){grid-row:3;}
.dc-mega-link-3col .elementor-icon-list-item:nth-child(4){grid-row:1;}
.dc-mega-link-3col .elementor-icon-list-item:nth-child(5){grid-row:2;}
.dc-mega-link-3col .elementor-icon-list-item:nth-child(6){grid-row:1;}
.dc-mega-link-3col .elementor-icon-list-item:nth-child(7){grid-row:2;}
@media (max-width:767px){.dc-mega-link-3col .elementor-icon-list-item{grid-row:auto!important;}}/* End custom CSS */