/* Police Montserrat auto-hébergée (licence : assets/fonts/LICENSE-Montserrat.txt). Fichier variable unique, déclaré
   pour les deux graisses qu'utilisait Google Fonts ; préchargé par template.html.twig (même nom de fichier). */
@font-face {
    font-family: 'Montserrat';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url(/assets/fonts/montserrat-latin.311d352d.woff2) format('woff2');
}
@font-face {
    font-family: 'Montserrat';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url(/assets/fonts/montserrat-latin.311d352d.woff2) format('woff2');
}

/* Styles des sections génériques ajoutées par l'administration (blocs non présents dans le design d'origine). */
.cms-image-text__inner {
    display: flex;
    flex-wrap: wrap;
    gap: 40px;
    align-items: center;
}
.cms-image-text__image {
    flex: 1 1 320px;
    margin: 0;
}
.cms-image-text__image img {
    width: 100%;
    height: auto;
    display: block;
}
.cms-image-text__text {
    flex: 1 1 320px;
}
.cms-image-text--right .cms-image-text__image {
    order: 2;
}

/* =============================================================================
   Check-list de mise en ligne (29/09/2026). Ce fichier est chargé APRÈS les feuilles compilées
   (public/build, dont la configuration webpack d'origine est absente) : c'est ici qu'on les corrige.
   Incrémenter le ?v= de template.html.twig à chaque modification.
   ============================================================================= */

/* --- Contrastes (WCAG 1.4.3 : 4,5:1 ; 1.4.11 : 3:1 pour les contours) --------------------------------
   #4797a1 → #3b7e87 : texte blanc dessus et texte sur blanc à 4,65:1. Les feuilles compilées utilisent la variable. */
:root { --color-primary: #3b7e87; }

/* Bloc contact (fond #90c0c7) : textes en vert très foncé (6,0:1) au lieu du blanc, de l'orange et de #097482 */
.contact,
.contact__addresses address a,
.contact__addresses h2,
.contact__addresses address .title,
.contact__addresses address span,
.contact__form h3,
.contact__form .bloc-form label,
.contact__form .errorlabel,
.contact__form .submit button,
.contact__form .confirmation,
.contact__form .error { color: #053e38; }
.contact__addresses address a { text-decoration: underline; }
.contact__addresses address .title:after { background-color: #053e38; }
.contact__form .submit button:hover { color: #000; }
.contact__form form input:not([type=checkbox]),
.contact__form form textarea { border: 1px solid #064f59; }
.contact__form form input:not([type=checkbox])::placeholder,
.contact__form form textarea::placeholder { color: #3d4b4d; opacity: 1; }
.contact__form .bloc-form input + label:before { border-color: #053e38; }
.contact__form .bloc-form input:checked + label:before { background: #053e38; }
.contact__form .bloc-form a { color: inherit; text-decoration: underline; }

/* Fond du bloc contact : le SVG compilé (82 Ko) ne contient qu'un PNG en base64 ; même image en WebP sans perte (22 Ko).
   Le SVG, sans dimensions propres, était affiché comme en « contain » : on le reproduit. */
.contact .container {
    background-image: url(/assets/img/bande-bleu.794226de.webp);
    background-size: contain;
}

/* Accueil */
.home__video_presentation__title { color: #053e38; }
.home__presentation__text h3,
.home__presentation__subtitle { color: #c6500b; }              /* orange foncé 4,6:1 ; #f36f21 reste pour les filets */
.home__expertise__top__1 h3 { color: #fff; }
.home__team__collaborators .item h4 a,
.section-swiper-collaborators .swiper-collaborators .item h4 a,
.collaborators__list .item h4 a { color: var(--color-primary); }
.news-item__bottom a,
.news-item__bottom a:hover { color: #fff; }
.news-item__bottom a:hover,
.news-item__bottom a:focus-visible { text-decoration: underline; }
.news-item__text a { color: #fff; text-decoration: underline; }
.news__list .news-item:nth-child(even) { background-color: var(--color-primary-dark); }
@media (max-width: 991.98px) {
    .collaborator__header__2__title { background-color: var(--color-primary); }
}
body.menu-open #full-menu nav ul li a:hover .char { color: #fff; }

/* Liens saisis dans les textes riches : le bleu Bootstrap #007bff n'a que 3,98:1 sur blanc (1,5:1 sur le vert) */
.news__info__2 a:not(.item),
.cms-faq__answer a,
.expertise__header__2 a,
.expertise__details a,
.expertise__droit_social a,
.expertise__medical a,
.mentions__textes a,
.collaborator__info__presentation a { color: var(--color-primary-dark); text-decoration: underline; }      /* 5,48:1 */
.expertise__supported a,
.expertise__accompagnement a { color: #fff; text-decoration: underline; }

/* Flèches du carrousel « Associés & collaborateurs » (fond blanc) : orange #f36f21 à 2,95:1 → vert foncé 5,48:1 (WCAG 1.4.11) */
.section-swiper-collaborators .swiper-arrows svg path { stroke: var(--color-primary-dark); }

/* Grand « G » décoratif (blanc à 13 %) : il ne doit plus passer sur du texte blanc (contraste ramené sous 4,5:1) */
.home__news .g-graph { z-index: 0; }                                  /* sous les cartes d'actualités */
.news__header.item-page .container .news-item { z-index: 3; }        /* sous le chapô de l'article */
.home__expertise .g-graph svg { opacity: .35; }                      /* domaines d'intervention : 5,0:1 */
.news__header.item-page:before { opacity: .35; }                     /* en-tête d'article, sous le fil d'Ariane : 5,0:1 */
/* Bloc « Renvoi vers un autre domaine » des pages spécialité (fond #3b7e87) : aucune opacité visible du G n'y tient
   4,5:1, on l'écarte donc du paragraphe (masqué en mobile, texte limité à la partie gauche au-delà) */
@media (max-width: 767.98px) {
    .expertise__next__2:before { display: none; }
}
@media (min-width: 768px) {
    .expertise__next__2 p { max-width: 55%; }
}

/* Documenthèque des articles : titre passé de h3 à h2 (hiérarchie), apparence d'origine */
.news__info__2 .documentheque h2.title2 {
    color: #212529;
    font-size: 1.15rem;
    font-weight: 700;
    line-height: 1.1;
    margin: 0 0 2rem;
    padding: 0;
    text-align: left;
    text-transform: none;
}

/* Ancien h3 « Le cabinet », devenu h2 (hiérarchie des titres) : même apparence */
.home__presentation__subtitle {
    font-size: 1.2rem;
    font-weight: 400;
    line-height: 1.2;
    margin-bottom: .5rem;
    text-transform: uppercase;
}
.home__presentation__subtitle:after {
    background: var(--color-primary-dark);
    content: "";
    display: block;
    height: 3px;
    margin-bottom: .5rem;
    margin-top: .2rem;
    width: 25px;
}
@media (min-width: 1200px) {
    .home__presentation__subtitle { padding: 0 3rem; }
}

/* --- Navigation au clavier ----------------------------------------------------------------------- */
/* Focus visible : les feuilles compilées le suppriment (button:focus{outline:none!important}) */
a:focus-visible,
button:focus-visible,
input:focus-visible,
textarea:focus-visible,
select:focus-visible,
[tabindex]:focus-visible {
    outline: 3px solid #053e38 !important;
    outline-offset: 2px;
    box-shadow: 0 0 0 5px #fff;
}
.home__header a:focus-visible,
.home__expertise a:focus-visible,
.home__news a:focus-visible,
.home__news button:focus-visible,
.news__header a:focus-visible,
.news__info__1 a:focus-visible,
#full-menu a:focus-visible,
#btn-hamb button:focus-visible,
.expertise__header__1 a:focus-visible,
.expertise__supported a:focus-visible,
.expertise__next a:focus-visible,
.footer a:focus-visible {
    outline-color: #fff !important;
    box-shadow: 0 0 0 5px #053e38;
}
.contact__form .bloc-form input:focus-visible + label:before {
    outline: 3px solid #053e38;
    outline-offset: 2px;
}
main:focus { outline: none; }

/* Lien d'évitement « Aller au contenu » */
.skip-link {
    position: absolute;
    left: 1rem;
    top: -100px;
    z-index: 1000;
    background: #053e38;
    color: #fff;
    padding: .75rem 1rem;
    text-decoration: underline;
}
.skip-link:focus { top: 1rem; color: #fff; }

/* Texte réservé aux lecteurs d'écran */
.sr-only {
    position: absolute !important;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* Flèches des carrousels, devenues de vrais boutons */
.swiper-arrows button {
    background: none;
    border: 0;
    padding: 0;
    color: inherit;
    cursor: pointer;
}

/* Menu plein écran, désormais placé avant <main> dans le code : il doit rester au-dessus du contenu */
#full-menu { z-index: 9; }

/* Bouton du menu : le script compilé n'écoute que le <button> (les 3 traits, 22×14 px), alors que tout le carré
   (#btn-hamb, 52×54 px) réagit au survol : un clic à côté des traits ne faisait rien. Le pseudo-élément étend la
   zone cliquable du bouton à tout le carré (marges intérieures de #btn-hamb : 20px 15px) ; cible ≥ 24×24 (WCAG 2.5.8) */
#btn-hamb .navbar-toggler::before {
    content: "";
    position: absolute;
    inset: -20px -15px;
}

@media (prefers-reduced-motion: reduce) {
    *, *:before, *:after {
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .01ms !important;
        scroll-behavior: auto !important;
    }
}

/* --- Performance : la page n'attend plus le JavaScript pour s'afficher --------------------------------
   Le voile #loading ne couvre plus la page au premier affichage ; il reste pour la transition entre pages. */
#loading { transform: scaleX(0); }
body.loaded.loading #loading { transform: scaleX(1); }

/* --- Formulaire de contact (rendu par Twig : templates/front/components/contact-form.html.twig) ------ */
.contact-form .errorlabel { margin: -.3rem 0 .7rem; font-size: .85rem; font-weight: 600; text-align: left; }
.contact-form [aria-invalid="true"] { border-color: #8a1c00 !important; box-shadow: 0 0 0 1px #8a1c00; }
.contact-form .contact-form__required { font-size: .8rem; margin: -.5rem 0 1rem; }
.contact-form .bloc-form { margin-bottom: .5rem; }
.contact-form__status:empty { margin: 0; }   /* pas de display:none : la zone doit exister pour être annoncée */
.contact-form__status { margin-top: 1rem; font-weight: 600; }
.contact-form button[disabled] { opacity: .6; cursor: wait; }

/* --- Vidéo : façade (l'iframe YouTube n'est créée qu'au clic) ---------------------------------------- */
.yt-facade {
    position: relative;
    aspect-ratio: 16 / 9;
    width: 100%;
    margin: 0 auto;
    background: #000;
}
@media (min-width: 768px) {
    .yt-facade { width: 70%; }
}
.yt-facade__play {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    padding: 0;
    background: none;
    cursor: pointer;
}
.yt-facade__play img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.yt-facade__play svg {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 68px;
    height: 48px;
    transform: translate(-50%, -50%);
    transition: transform .2s ease;
}
.home__video_presentation iframe {
    aspect-ratio: 16 / 9;
    border: 0;
    display: block;
    height: auto;
    margin: 0 auto;
    width: 100%;
}
@media (min-width: 768px) {
    .home__video_presentation iframe { width: 70%; }
}
.yt-facade__play:hover svg,
.yt-facade__play:focus-visible svg { transform: translate(-50%, -50%) scale(1.1); }

/* --- Actualités : galerie en vraies images, fil d'Ariane, articles liés ------------------------------- */
.gallerie-photo .item a img.content {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.cms-breadcrumb ol {
    display: flex;
    flex-wrap: wrap;
    gap: .25rem .5rem;
    list-style: none;
    margin: 0 0 1rem;
    padding: 0;
    font-size: .85rem;
}
.cms-breadcrumb li + li:before {
    content: "›";
    margin-right: .5rem;
}
.cms-breadcrumb a { color: inherit; text-decoration: underline; }
/* Fil d'Ariane en bandeau (pages, équipe, fiches, liste des actualités) */
.cms-breadcrumb--band { background: #fff; border-bottom: 1px solid #e3eced; color: #3d4b4d; position: relative; z-index: 3; }
.cms-breadcrumb--band ol { margin: 0; padding: .6rem 3.5rem .6rem 0; }                /* place du bouton menu à droite */
.cms-breadcrumb--band a { color: var(--color-primary-dark); }
.news-item__updated { display: block; font-size: .8rem; text-align: right; }   /* date de mise à jour sous la date de publication */
.cms-breadcrumb [aria-current="page"] { font-weight: 600; }
/* En-tête d'article (fond #097482) : texte blanc ; le grand « G » décoratif est atténué plus bas (opacité .35) */
.news__header .cms-breadcrumb {
    color: #fff;
    padding: 0 1.5rem;
    position: relative;
    z-index: 3;
}
.news__header .cms-breadcrumb ol { margin: 0; }
@media (min-width: 768px) {
    .news__header .cms-breadcrumb { padding: 0 2rem; }
}
/* « À lire aussi » : le conteneur est en flex (cartes sur 3 colonnes), le titre prend toute la ligne */
.news-related { padding-top: 3rem; }
.news-related .container { padding-top: 0; }
.news-related h2 { flex: 0 0 100%; margin: 0 1.5rem; }

/* Encart « Notre expertise » en bas d'article (lien vers la page du domaine d'intervention) */
.news-expertise {
    border-left: 3px solid var(--color-secondary);
    margin: 2rem 0 0;
    padding: .75rem 1rem;
    background: #f1f6f7;
}
.news-expertise p { margin: 0; font-weight: 600; }

/* Bloc « Articles liés » des pages (grille, sans le carrousel de l'accueil) : les cartes reprennent le style des
   actualités, dont la largeur fixe prévue pour le carrousel est neutralisée */
.cms-related-news { padding: 3rem 0; }
.cms-related-news h2 { margin-bottom: 1.5rem; }
.cms-related-news__list {
    display: grid;
    gap: 1.5rem;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
}
.cms-related-news .news-item {
    display: flex;
    flex-direction: column;
    margin: 0;
    padding: 1.5rem;
    width: auto !important;
}
.cms-related-news .news-item:nth-child(even) { background-color: var(--color-primary-dark); }

/* --- Page introuvable ---------------------------------------------------------------------------------- */
.error-page { padding: 6rem 0 4rem; }
.error-page h1 { margin-bottom: 1.5rem; }
.error-page ul { margin: 1.5rem 0 0; padding-left: 1.2rem; }
.error-page a { color: var(--color-primary-dark); text-decoration: underline; }

/* --- Blocs ajoutés pour les pages spécialité et locales (FAQ, implantation, avocats rattachés) ------------ */
.cms-faq, .cms-office, .cms-lawyers { padding: 3rem 0; }
.cms-faq h2, .cms-office h2, .cms-lawyers h2 { margin-bottom: 1.5rem; }
.cms-faq__item { border-bottom: 1px solid #c9d8da; }
.cms-faq__item summary {
    cursor: pointer;
    list-style: none;
    padding: 1rem 2rem 1rem 0;
    position: relative;
}
.cms-faq__item summary::-webkit-details-marker { display: none; }
.cms-faq__item summary:after {
    content: "+";                   /* repli : navigateurs sans texte alternatif CSS (Safari < 17.4, Firefox < 128) */
    content: "+" / "";
    position: absolute;
    right: .25rem;
    top: 50%;
    transform: translateY(-50%);
    font-size: 1.5rem;
    color: var(--color-primary-dark);
}
.cms-faq__item[open] summary:after { content: "–"; content: "–" / ""; }
.cms-faq__question { display: inline; font-size: 1rem; font-weight: 600; margin: 0; }
.cms-faq__answer { padding: 0 0 1rem; }
.cms-office__inner { display: flex; flex-wrap: wrap; gap: 40px; }
.cms-office__info, .cms-office__text { flex: 1 1 320px; }
.cms-office h3 { font-size: 1rem; font-weight: 600; margin: 1rem 0 .3rem; text-transform: uppercase; }
.cms-office address { font-style: normal; }
.cms-office a { color: var(--color-primary-dark); text-decoration: underline; }
.cms-lawyers__list {
    display: grid;
    gap: 1.5rem;
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
    list-style: none;
    margin: 0;
    padding: 0;
}
.cms-lawyers__item a { color: inherit; display: block; text-decoration: none; }
.cms-lawyers__item img { display: block; width: 100%; height: auto; margin-bottom: .75rem; }
.cms-lawyers__name { display: block; font-weight: 600; text-transform: uppercase; }
.cms-lawyers__role { display: block; color: var(--color-primary); }
.cms-lawyers__item a:hover .cms-lawyers__name,
.cms-lawyers__item a:focus-visible .cms-lawyers__name { text-decoration: underline; }
