/*
 * En-tête du site — CSS autonome.
 *
 * Ce fichier est chargé tel quel par inc/header.php : il ne passe pas par le
 * build webpack (ce serveur n'a ni node ni node_modules). Il est donc écrit en
 * CSS simple, sans variables Sass. src/scss/parts/_topmenu.scss ne contient
 * plus que le pointeur vers ce fichier.
 *
 * ATTENTION à la cascade : parts/head.php lie dist/main.css en dur APRÈS
 * wp_head(), donc le bundle compilé est chargé APRÈS ce fichier. À spécificité
 * égale, c'est lui qui gagne. Les quelques règles qui doivent écraser les
 * anciennes déclarations #menutop sont donc préfixées par `html`, ce qui suffit
 * à les faire passer devant. Elles sont toutes signalées par un commentaire.
 * Le jour où dist/main.css sera régénéré sans _topmenu.scss, ces préfixes et la
 * section « Neutralisation » en fin de fichier pourront disparaître.
 */

/* ------------------------------------------------------------------ Socle */

:root {
    --brand: #00A4F6;
    --duration: .35s;
    --ease: cubic-bezier(.4, 0, .2, 1);
    /* Source unique : ces deux valeurs sont aussi reprises par le bloc de
       neutralisation en fin de fichier, qui doit les suivre à l'identique. */
    --header-shadow: 0 1px 0 rgba(16, 42, 67, .08),
                     0 6px 16px -6px rgba(16, 42, 67, .22);
    --header-shadow-scrolled: 0 1px 0 rgba(16, 42, 67, .1),
                              0 10px 26px -10px rgba(16, 42, 67, .35);
}

/* Préfixe `html` : doit écraser #menutop de dist/main.css, chargé après. */
html #menutop {
    --header-height: 76px;
    --header-height-scrolled: 64px;
    --symbol-size: 48px;
    --symbol-size-scrolled: 35px;
    /* Le lettrage est dimensionné à partir du symbole plutôt qu'en valeurs
       fixes : la proportion reste identique à tous les points de rupture.
       Le logo empilé d'origine donnait au lettrage 43 % de la hauteur du
       symbole ; à l'horizontale, cette proportion le fait paraître minuscule.
       Ces valeurs intègrent la marge de 10 unités présente dans chaque
       viewBox : sans elle, l'antialiasing rognait les bords du tracé. */
    --wordmark-ratio: .595;
    --wordmark-height: calc(var(--symbol-size) * var(--wordmark-ratio));
    /* Ratio du tracé lui-même : viewBox de 749.88 x 212.38. */
    --wordmark-width: calc(var(--wordmark-height) * 749.88 / 212.38);
    --wordmark-gap: 10px;

    position: sticky;
    top: 0;
    z-index: 100;
    padding: 0;
    background: #fff;
    /* Liseré net + diffusion douce : le bandeau se détache du contenu dès le
       haut de page, sans halo gris. */
    box-shadow: var(--header-shadow);
    transition: transform var(--duration) var(--ease),
                box-shadow var(--duration) var(--ease);
}

/* Une fois décollé du haut de page, l'ombre se creuse : le header passe
   visiblement au-dessus du contenu qui défile dessous. */
/* Préfixe `html` : doit écraser #menutop.is-pinned de dist/main.css. */
html #menutop.is-scrolled {
    box-shadow: var(--header-shadow-scrolled);
}

#menutop .header-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1.5rem;
    height: var(--header-height);
    transition: height var(--duration) var(--ease);
}

#menutop.is-scrolled .header-bar {
    height: var(--header-height-scrolled);
}

/* ------------------------------------------------------------------- Logo */

#menutop .header-logo {
    display: flex;
    align-items: center;
    flex: 0 0 auto;
    line-height: 0;
}

#menutop .header-logo__symbol {
    width: auto;
    height: var(--symbol-size);
    /* Réserve la place dès le premier rendu : pas de saut de mise en page. */
    aspect-ratio: 568 / 469;
    flex: 0 0 auto;
    transition: height var(--duration) var(--ease);
}

#menutop.is-scrolled .header-logo__symbol {
    height: var(--symbol-size-scrolled);
}

/* Le lettrage « Cadencio Web Solutions » se replie latéralement vers le
   symbole au défilement. overflow:hidden fait office de volet. */
#menutop .header-logo__wordmark {
    display: block;
    overflow: hidden;
    width: var(--wordmark-width);
    margin-left: var(--wordmark-gap);
    transition: width var(--duration) var(--ease),
                margin-left var(--duration) var(--ease),
                opacity calc(var(--duration) * .7) var(--ease);
}

#menutop .header-logo__wordmark svg {
    display: block;
    width: var(--wordmark-width);
    height: var(--wordmark-height);
}

#menutop.is-scrolled .header-logo__wordmark {
    width: 0;
    margin-left: 0;
    opacity: 0;
}

/* --------------------------------------------------------- Menu principal */

#menutop .header-nav {
    flex: 1 1 auto;
    display: flex;
    justify-content: flex-end;
}

#menutop .nav-list {
    display: flex;
    align-items: center;
    gap: 1.75rem;
    margin: 0;
    padding: 0;
    list-style: none;
    text-transform: uppercase;
    font-size: .9rem;
}

#menutop .nav-list > li {
    position: relative;
    display: flex;
    align-items: center;
}

#menutop .nav-list > li > a {
    position: relative;
    display: block;
    padding: .35rem 0;
    color: #000;
}

/* Le souligné file de la gauche vers la droite plutôt que de s'ouvrir
   depuis le centre. */
#menutop .nav-list > li > a::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 2px;
    border-radius: 5px;
    background: var(--brand);
    transform: scaleX(0);
    transform-origin: left center;
    transition: transform .25s var(--ease);
}

#menutop .nav-list > li:hover > a::after,
#menutop .nav-list > li:focus-within > a::after,
#menutop .nav-list > li.is-current > a::after,
#menutop .nav-list > li.is-ancestor > a::after {
    transform: scaleX(1);
}

#menutop .nav-list > li.is-current > a {
    color: var(--brand);
}

/* ------------------------------------------------------------- Sous-menus */

#menutop .nav-list > li.has-submenu::after {
    content: "\f0d7";
    font-family: "Font Awesome 5 Pro";
    font-weight: 600;
    margin-left: .4rem;
    font-size: .8em;
    line-height: 1;
    color: #000;
    transition: transform .25s var(--ease);
}

#menutop .nav-list > li.has-submenu:hover::after,
#menutop .nav-list > li.has-submenu:focus-within::after {
    transform: rotate(-180deg);
}

#menutop .submenu {
    position: absolute;
    top: 100%;
    left: -0.75rem;
    margin: 0;
    padding: .4rem;
    list-style: none;
    min-width: max-content;
    background: #fff;
    border-radius: 6px;
    box-shadow: 0 12px 28px -12px rgba(16, 42, 67, .3), 0 0 0 1px rgba(16, 42, 67, .06);
    font-size: .75rem;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-6px);
    transition: opacity .2s var(--ease), transform .2s var(--ease), visibility .2s;
}

/* :focus-within ouvre le sous-menu au clavier, ce que :hover seul ne permet
   pas. Le lien parent reste cliquable — il n'est plus neutralisé en JS. */
#menutop .has-submenu:hover > .submenu,
#menutop .has-submenu:focus-within > .submenu {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}

#menutop .submenu a {
    display: block;
    padding: .55rem .75rem;
    border-radius: 4px;
    color: #000;
    white-space: nowrap;
}

#menutop .submenu a:hover,
#menutop .submenu a:focus-visible {
    color: var(--brand);
    background: rgba(0, 164, 246, .07);
}

/* ------------------------------------------------------- Choix de langue */

#menutop .nav-list > li.langselect > .langselect-trigger {
    padding: .35rem 0;
    border: 0;
    background: none;
    font: inherit;
    color: var(--brand);
    font-weight: 600;
    text-transform: uppercase;
    cursor: pointer;
}

/* ---------------------------------------------------------- Bouton burger */

#menutop .header-burger {
    display: none;
    flex: 0 0 auto;
    width: 44px;
    height: 44px;
    margin: 0;
    padding: 0;
    border: 0;
    background: none;
    cursor: pointer;
    position: relative;
}

#menutop .header-burger span {
    position: absolute;
    left: 11px;
    width: 22px;
    height: 2px;
    border-radius: 2px;
    background: #000;
    transition: transform .3s var(--ease), opacity .2s var(--ease);
}

#menutop .header-burger span:nth-child(1) { top: 15px; }
#menutop .header-burger span:nth-child(2) { top: 21px; }
#menutop .header-burger span:nth-child(3) { top: 27px; }

#menutop .header-burger[aria-expanded="true"] span:nth-child(1) {
    transform: translateY(6px) rotate(45deg);
}

#menutop .header-burger[aria-expanded="true"] span:nth-child(2) {
    opacity: 0;
}

#menutop .header-burger[aria-expanded="true"] span:nth-child(3) {
    transform: translateY(-6px) rotate(-45deg);
}

/* --------------------------------------------------- Lien d'évitement a11y */

.header-skip-link {
    position: absolute;
    left: -9999px;
    top: 0;
    z-index: 200;
    padding: .75rem 1.25rem;
    background: var(--brand);
    color: #fff;
    border-radius: 0 0 6px 0;
}

.header-skip-link:focus {
    left: 0;
    color: #fff;
}

/* ------------------------------------------------------ Tiroir responsive */

#header-drawer {
    position: fixed;
    inset: 0;
    z-index: 1000;
    margin: 0;
    padding: 0;
    background: #00A4F6;
    text-align: center;
    overflow-y: auto;
    overscroll-behavior: contain;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-2%);
    transition: opacity .3s cubic-bezier(.4, 0, .2, 1),
                transform .3s cubic-bezier(.4, 0, .2, 1),
                visibility .3s;
}

#header-drawer.is-open {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}

#header-drawer .drawer-close {
    position: absolute;
    top: .75rem;
    right: 1rem;
    width: 44px;
    height: 44px;
    border: 0;
    background: none;
    color: #fff;
    font-size: 1.5rem;
    line-height: 1;
    cursor: pointer;
}

#header-drawer .drawer-logo {
    padding: 3.5rem 0 2rem;
}

/* Le tiroir réutilise la version blanche complète du logo : sur le fond de
   marque, le disque bleu du symbole standard ne se détacherait pas. */
#header-drawer .drawer-logo img {
    width: 104px;
    height: 101px;
    object-fit: contain;
}

#header-drawer .drawer-list {
    margin: 0 0 3rem;
    padding: 0;
    list-style: none;
}

#header-drawer .drawer-list a {
    display: inline-block;
    padding: .85rem 1rem;
    color: #fff;
    text-transform: uppercase;
}

#header-drawer .drawer-list a:hover,
#header-drawer .drawer-list a:focus-visible {
    color: #fff;
    text-decoration: underline;
    text-underline-offset: .35em;
}

#header-drawer .drawer-list > li.is-current > a {
    text-decoration: underline;
    text-underline-offset: .35em;
}

/* Les sous-menus sont déployés d'office : un accordéon au survol était
   inutilisable au toucher. */
#header-drawer .submenu {
    margin: 0 0 .5rem;
    padding: 0;
    list-style: none;
    font-size: .8rem;
    opacity: .85;
}

#header-drawer .submenu a {
    padding: .45rem 1rem;
}

#header-drawer .drawer-langs {
    position: absolute;
    top: 1.35rem;
    left: 1.25rem;
    display: flex;
    gap: .75rem;
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: .85rem;
}

#header-drawer .drawer-langs a,
#header-drawer .drawer-langs span {
    color: #fff;
    padding: 0;
}

#header-drawer .drawer-langs .is-current-lang {
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: .3em;
}

/* Chaque item entre en cascade une fois le tiroir ouvert. */
#header-drawer .drawer-list > li {
    opacity: 0;
    transform: translateY(10px);
}

#header-drawer.is-open .drawer-list > li {
    opacity: 1;
    transform: translateY(0);
    transition: opacity .3s var(--ease), transform .3s var(--ease);
    transition-delay: calc(80ms + var(--index, 0) * 45ms);
}

/* ------------------------------------------------------------- Responsive */

@media all and (max-width: 850px) {
    #menutop {
        --header-height: 64px;
        --header-height-scrolled: 56px;
        --symbol-size: 40px;
        --symbol-size-scrolled: 33px;
    }

    #menutop .header-nav {
        display: none;
    }

    #menutop .header-burger {
        display: block;
    }

    /* Le header se rétracte à la descente et revient à la remontée : sur un
       petit écran, un bandeau permanent coûte trop de hauteur utile.
       Le nom `is-retracted` évite la collision avec `.is-hidden` de
       Foundation, qui applique display:none !important. */
    #menutop.is-retracted {
        transform: translateY(-100%);
    }
}

/* Quand le tiroir est ouvert, la page derrière ne défile plus. */
body.header-drawer-open {
    overflow: hidden;
}

/* ----------------------------------------------------- Mouvement réduit */

@media (prefers-reduced-motion: reduce) {
    #menutop,
    #menutop *,
    #header-drawer,
    #header-drawer * {
        transition-duration: .01ms !important;
        transition-delay: 0ms !important;
    }

    #menutop.is-retracted {
        transform: none;
    }
}

/* --------------------------------------------------------- Neutralisation */

/*
 * dist/main.css contient encore les anciennes règles du header, et
 * dist/main.js son ancien IntersectionObserver, qui continue de poser la
 * classe `is-pinned`. Impossible de les retirer sans relancer le build.
 * Les déclarations ci-dessous annulent leur effet ; elles deviendront des
 * no-op dès que le bundle sera régénéré et pourront alors disparaître.
 */
html #menutop.is-pinned {
    padding: 0;
    background: #fff;
    box-shadow: var(--header-shadow);
}

html #menutop.is-pinned.is-scrolled {
    box-shadow: var(--header-shadow-scrolled);
}

/* ------------------------------------------------- Respiration sous le bandeau */

/*
 * Le bandeau est `sticky` : il occupe sa place dans le flux et le contenu
 * démarre immédiatement dessous, sans aucun blanc. Les gabarits concernés
 * n'ouvrent pas la page sur un visuel plein cadre, donc le titre se retrouvait
 * collé au menu.
 *
 * Concernés : l'accueil (.home-intro), les pages de service génériques
 * (#service-container, single-services.php), « Qui sommes-nous »
 * (#about-container) et « Contact » (#landing-contact-form). Seule la page
 * « Création de sites web » (#service-web) est laissée telle quelle : son hero
 * plein cadre ouvre déjà la page sur un visuel.
 *
 * Préfixe `html` : dist/main.css est lié après ce fichier (voir l'en-tête),
 * il faut donc passer devant ses règles `.home-intro .filter`.
 */
:root {
    --page-top-gap: 3rem;
    --page-top-gap-small: 1.75rem;
}

/* L'accueil compense déjà le bandeau d'origine par `margin-top: -180px` sur
   .filter : on ajoute l'écart au padding qui neutralise cette remontée, pour
   ne pas toucher à cette arithmétique. */
html .home-intro .filter {
    padding-top: calc(200px + var(--page-top-gap));
}

html #service-container,
html #about-container {
    padding-top: var(--page-top-gap);
}

/* Même compensation que l'accueil : .page-main-content remonte de 100px et
   les rattrape en padding. L'id passe devant sans préfixe `html`. */
#landing-contact-form {
    padding-top: calc(100px + var(--page-top-gap));
}

@media screen and (max-width: 39.9375em) {
    html .home-intro .filter {
        padding-top: calc(100px + var(--page-top-gap-small));
    }

    html #service-container,
    html #about-container {
        padding-top: var(--page-top-gap-small);
    }

    #landing-contact-form {
        padding-top: calc(100px + var(--page-top-gap-small));
    }
}
