@charset "UTF-8";
/* =====================================================================
   MU RECRUTEMENT DE PROFESSEURS — HABILLAGE
   ---------------------------------------------------------------------
   Feuille unique, chargée sous le handle `mu-recrutement`.
   Le balisage stylé ici est produit par mu-plugins/mu-recrutement.php ;
   la liste exhaustive des classes se trouve dans le récapitulatif en fin
   de ce fichier PHP. Aucune classe n'est inventée : chacune a été relue
   dans le code qui l'émet.

   Le fichier est coupé en DEUX parties nettement séparées :

     PARTIE A — CÔTÉ PUBLIC        (pages d'appel, formulaire, merci)
     PARTIE B — CÔTÉ ADMINISTRATION (rubrique « Recrutement »)

   =====================================================================
   TROIS PIÈGES DE CE SITE, À NE JAMAIS RÉOUVRIR
   =====================================================================

   1. LE KIT ELEMENTOR REPEINT TOUS LES BOUTONS ET TOUS LES LIENS.
      uploads/elementor/css/post-1690.css contient, en (0,1,1) :

        .elementor-kit-1690 button { background-color: #F24080 (rose,
              HORS PALETTE); color; padding: 16px 28px; border-radius: 25px;
              border-style; border-width; font-family; font-size;
              font-weight; line-height }
        .elementor-kit-1690 a      { color }
        .elementor a               { box-shadow: none }

      La classe `elementor-kit-1690` vit sur le <body> : tout notre
      contenu public en hérite. Une règle en (0,1,0) — une seule classe —
      PERD. D'où la règle de conduite appliquée partout ci-dessous :

        · DEUX classes au minimum dans le sélecteur, soit (0,2,0), qui
          l'emporte sur (0,1,1) ;
        · `!important` UNIQUEMENT sur les propriétés que le kit dispute
          réellement, et sur aucune autre. Chaque `!important` de cette
          feuille répond à une déclaration précise citée ci-dessus. Aucun
          n'est posé par confort.

      Les champs de formulaire, eux, ne sont stylés par le thème qu'au
      niveau élément — `input[type=email]…` en (0,1,1), `input` en
      (0,0,1). Nos sélecteurs `.mu-rec-form .mu-rec-input` sont en (0,2,0)
      et gagnent SANS `!important` : on n'en met donc pas.

   2. `font-family: 'Tajawal', inherit` EST DU CSS INVALIDE.
      `inherit` ne peut pas figurer dans une liste de polices : le
      navigateur jette la déclaration ENTIÈRE, silencieusement. D'où la
      pile complète de --mu-police, avec Tajawal EN PREMIER : Poppins n'a
      aucun glyphe arabe, et les contenus de ce site sont souvent en
      arabe.

   3. LE THÈME CASSE `.screen-reader-text`.
      themes/histudy/assets/css/style.css déclare d'abord le masquage
      correct (clip), puis, plus bas, `.screen-reader-text{display:none}`
      en (0,1,0) — qui gagne par ordre de source et retire le texte AUX
      LECTEURS D'ÉCRAN AUSSI. Or le PHP s'en sert pour doubler
      l'astérisque « (obligatoire) ». On rétablit le masquage visuel
      correct en (0,2,0), plus bas dans la partie A.

   =====================================================================
   CONCEPTION FAIL-OPEN — RÈGLE ABSOLUE DE CETTE FEUILLE
   =====================================================================
   Aucune règle de ce fichier ne masque un contenu en attendant que du
   JavaScript le révèle. Il n'existe ici NI `opacity:0` de départ sur du
   texte, NI `display:none` conditionné à une classe posée par un script.

   Conséquences vérifiables, script absent ou en erreur :
     · toutes les pages restent lisibles et complètes ;
     · le champ CV reste un <input type="file"> pleinement utilisable —
       il est superposé à la zone de dépôt par la grille CSS, donc le
       clic ET le glisser-déposer natifs du navigateur fonctionnent sans
       une ligne de JavaScript ;
     · le formulaire reste soumettable, et `required` / `type="email"`
       assurent la validation par le navigateur ;
     · les conteneurs Lottie restent de hauteur nulle : pas de trou blanc
       là où l'animation n'a pas pu se charger.

   ===================================================================== */


/* =====================================================================
   ██  PARTIE A — CÔTÉ PUBLIC
   =====================================================================
   Pages d'appel à candidature, formulaire, confirmation, et bloc de
   remplacement de l'inscription formateur de Tutor.
   ===================================================================== */

/* ---------------------------------------------------------------------
   A0. Variables et remise à zéro locale
   ---------------------------------------------------------------------
   Les variables sont posées sur `.mu-rec` et non sur `:root` : la
   feuille ne doit rien imposer au reste du site. Si le module est
   désinstallé, il ne laisse aucune trace de cascade.

   `box-sizing` est redéclaré localement pour la même raison : certains
   gabarits Elementor le remettent à `content-box` sur des sous-arbres.
   --------------------------------------------------------------------- */
.mu-rec {
    --mu-violet-fonce: #41246D;
    --mu-violet: #6E35C3;
    --mu-violet-clair: #BC8FFF;
    --mu-violet-actif: #8943F3;
    --mu-orange: #FF9616;

    /* Nuances de service, dérivées de la palette et non inventées :
       elles ne servent qu'aux fonds, traits et ombres. */
    --mu-trait: #EDE7F8;
    --mu-trait-fort: #DCCFF6;
    --mu-fond-doux: #F8F5FF;
    --mu-fond-carte: #FFFFFF;
    --mu-texte: #4A4258;
    --mu-texte-discret: #7A7188;

    --mu-ombre-douce: 0 10px 30px rgba(110, 53, 195, .08);
    --mu-ombre-carte: 0 24px 70px rgba(65, 36, 109, .10);
    --mu-ombre-focus: 0 0 0 4px rgba(137, 67, 243, .16);

    --mu-rayon: 16px;
    --mu-rayon-carte: 26px;

    /* Courbe unique du module : une décélération franche, jamais
       élastique. Elle donne la même « signature » à toutes les
       transitions, ce qui est ce qui fait qu'un habillage paraît
       dessiné plutôt que bricolé. */
    --mu-courbe: cubic-bezier(.22, 1, .36, 1);

    /* Pile COMPLÈTE, Tajawal en premier (voir piège n° 2 en tête). */
    --mu-police: 'Tajawal', 'Poppins', system-ui, -apple-system, 'Segoe UI', sans-serif;

    box-sizing: border-box;
    font-family: var(--mu-police);
    color: var(--mu-texte);
}

.mu-rec *,
.mu-rec *::before,
.mu-rec *::after { box-sizing: border-box; }

/* Rétablit le masquage visuel accessible, cassé par le thème (piège
   n° 3). (0,2,0) l'emporte sur le `.screen-reader-text{display:none}`
   du thème, en (0,1,0). Sans cette règle, la mention « (obligatoire) »
   n'est plus annoncée par les lecteurs d'écran. */
.mu-rec .screen-reader-text {
    position: absolute !important;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(1px, 1px, 1px, 1px);
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
    display: inline !important;
}


/* ---------------------------------------------------------------------
   A1. Racine et conteneur
   ---------------------------------------------------------------------
   La lueur violette en fond est peinte par un dégradé radial sur le
   pseudo-élément, jamais par une image : rien à téléverser, rien à
   mettre en cache, et la couleur suit la palette si elle change.
   --------------------------------------------------------------------- */
/* ---------------------------------------------------------------------
   RATTRAPAGE DE LA MISE EN PAGE DU THÈME — 8 août 2026
   ---------------------------------------------------------------------
   Constaté à l'inspecteur sur /devenir-professeur/ : 120 px de vide en
   haut ET en bas, contenu collé aux bords, angles vifs.

   DEUX CAUSES DISTINCTES, et il fallait les séparer pour les corriger.

   1. LE VIDE VERTICAL vient du thème : `.rbt-page-area` réserve
      `padding: 120px 0` pour ses pages d'accueil illustrées. Sur une
      page de contenu, cela fait 240 px de blanc autour de trois
      paragraphes.

   2. LES BORDS COLLÉS viennent de `histudy-child/css/auth-pages.css` :

        main.main-page-wrapper,
        .rbt-page-area.rbt-section-gap {
            padding-left: 0 !important;  margin-left: 0 !important;
            width: 100% !important;
        }

      Écrite pour les pages de connexion, mais `mu_enqueue_auth_pages_css()`
      (functions.php:742) n'a AUCUNE condition de page : la feuille se
      charge sur tout le site.

   Ces deux règles portent sur des ANCÊTRES de notre conteneur — CSS ne
   remonte pas. D'où la classe `mu-rec-page`, posée sur <body> par
   mu_recrut_classe_body(), qui donne enfin un point d'accroche.

   Portée strictement limitée à nos trois pages : le reste du site n'est
   pas touché. Le vrai correctif — conditionner auth-pages.css — reste à
   faire, et il dépasse ce module.
   --------------------------------------------------------------------- */
body.mu-rec-page .rbt-page-area,
body.mu-rec-page .rbt-page-area.rbt-section-gap {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    margin-top: 0 !important;
}

/* ESPACE AVANT LE PIED DE PAGE — valeurs reprises du thème, pas choisies.
 *
 *   120px = `.rbt-section-gapBottom` / `.rbt-section-gap` du thème Histudy,
 *           c'est-à-dire l'espace que le thème met lui-même entre la
 *           dernière section et le pied de page sur archive.php, single.php,
 *           index.php et les gabarits d'archive.
 *    60px = `.rbt-section-gapTopHalf` et `.footer-style-1 .footer-top` sous
 *           768px. Aucun nombre inventé de part et d'autre.
 *
 * La pente 10vw reproduit la marche 80 → 120px du thème (elle vaut 77px à
 * 768px, franchit 99px à 992px où le thème saute de 80 à 120, et rejoint
 * exactement 120px à partir de 1200px) au lieu de la trancher.
 *
 * PAS DE DOUBLE ESPACE, vérifié deux fois : (a) l'ancêtre
 * `.rbt-page-area.rbt-section-gap`, seul porteur d'un rembourrage bas, est
 * déjà neutralisé plus haut dans ce fichier pour `body.mu-rec-page` ;
 * (b) le pied de page n'apporte aucun blanc au-dessus de son bord visible —
 * sa règle `.footer-style-1 .footer-top{padding-top:80px}` (0,2,0) est
 * battue par `footer.rbt-footer.footer-style-1:not(.has-elementor-full-width)
 * > .footer-top{padding-top:0}` (0,3,1), et ces 80px sont relogés DANS le
 * `.container`, sous le filet supérieur. L'espace vu est donc bien le nôtre,
 * sans abattement.
 *
 * NE PAS retirer le `padding-bottom:0 !important` posé plus haut sur
 * l'ancêtre pour « rétablir » l'espace : cumulé à celui-ci, cela donnerait
 * 240px sur grand écran. L'espace doit être porté par `.mu-rec` seul. */
.mu-rec {
    position: relative;
    padding: clamp(28px, 5vw, 64px) 0 clamp(60px, 10vw, 120px);
    line-height: 1.85;
    font-size: clamp(15px, 1.6vw, 17px);
}

/* Les angles vifs : le bloc touchait les bords de l'écran, donc ses
   coins arrondis n'avaient nulle part où se voir. Une fois le
   rembourrage latéral rétabli, ils réapparaissent — on les affirme ici
   pour ne pas dépendre d'un héritage. */
.mu-rec .mu-rec-etat,
.mu-rec .mu-rec-appel-texte,
.mu-rec .mu-rec-encart {
    border-radius: 16px;
}

/* FOND DÉCORATIF — `fixed`, et non `absolute`.
 *
 * En `absolute`, ce voile épouse `.mu-rec`, dont la largeur dépend d'une
 * chaîne d'ancêtres que `histudy-child/css/auth-pages.css` dérègle
 * (`width:100% !important` + `margin-left:0 !important`, chargés sur tout
 * le site). Résultat : le bloc n'est ni centré ni pleine largeur, et le
 * halo orangé s'arrêtait avant le bord droit.
 *
 * `position: fixed` + `inset: 0` = exactement le cadre visible, quelle que
 * soit la largeur des parents. Le voile touche donc les quatre bords, sans
 * `100vw` — ce qui évite la barre de défilement horizontale que `100vw`
 * provoque sous Windows (100vw inclut la largeur de l'ascenseur).
 *
 * RÉSERVE : un ancêtre portant `transform`, `filter` ou `will-change`
 * deviendrait le bloc conteneur et annulerait ce raisonnement. Aucun n'en
 * porte aujourd'hui sur ces trois pages ; à revérifier si le thème change.
 *
 * Un troisième halo est ajouté en bas à GAUCHE : le fond était asymétrique
 * (violet en haut au centre, orangé en bas à droite, rien à gauche). */
.mu-rec::before {
    content: "";
    position: fixed;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    background:
        radial-gradient(60% 55% at 50% 0%, rgba(188, 143, 255, .18), transparent 70%),
        radial-gradient(50% 45% at 100% 100%, rgba(255, 150, 22, .10), transparent 70%),
        radial-gradient(50% 45% at 0% 100%, rgba(188, 143, 255, .10), transparent 70%);
}

.mu-rec .mu-rec-conteneur {
    position: relative;
    z-index: 1;
    box-sizing: border-box;
    width: 100%;
    max-width: 940px;
    margin-inline: auto;
    padding-inline: clamp(16px, 4vw, 28px);
}

/* La page d'appel et la confirmation sont centrées ; le formulaire, non :
   un formulaire centré se lit mal, l'œil perd le début des étiquettes. */
.mu-rec.mu-rec-appel .mu-rec-conteneur,
.mu-rec.mu-rec-merci .mu-rec-conteneur,
.mu-rec.mu-rec-redirection .mu-rec-conteneur { text-align: center; }

.mu-rec.mu-rec-merci .mu-rec-conteneur,
.mu-rec.mu-rec-redirection .mu-rec-conteneur { max-width: 720px; }


/* ---------------------------------------------------------------------
   A2. Conteneurs Lottie
   ---------------------------------------------------------------------
   FAIL-OPEN, point le plus important de ce bloc : par défaut le
   conteneur a une hauteur NULLE. Sans lottie-web — bibliothèque absente,
   script bloqué, JSON introuvable — il n'occupe rien du tout et la page
   se referme proprement sur le texte. Aucun trou blanc, aucune réserve
   d'espace vide.

   C'est le script qui pose `.is-anim` juste avant de lancer l'animation,
   et qui la retire si le chargement échoue (événement `data_failed`).
   La hauteur n'est donc donnée QUE lorsqu'il y a réellement quelque
   chose à montrer.
   --------------------------------------------------------------------- */
.mu-rec .mu-rec-lottie {
    height: 0;
    overflow: hidden;
    margin: 0 auto;
    width: 100%;
    max-width: 480px;
    /* Empêche tout héritage de fond ou de bordure venu d'un gabarit
       Elementor sur les <div> génériques. */
    background: none;
    border: 0;
}

.mu-rec .mu-rec-lottie.is-anim {
    height: clamp(190px, 30vw, 330px);
    margin-bottom: clamp(8px, 2vw, 20px);
}

/* L'animation du formulaire sert de bandeau : plus discrète, elle ne
   doit pas repousser les champs sous la ligne de flottaison. */
/* Agrandie à la demande. Les trois valeurs montent ensemble pour que le
   cadrage reste identique du mobile au grand écran ; seule la borne basse
   reste modérée, sinon l'animation mangerait tout l'écran d'un téléphone. */
.mu-rec .mu-rec-lottie--formulaire.is-anim {
    height: clamp(180px, 27vw, 300px);
    max-width: 460px;
}

.mu-rec .mu-rec-lottie svg {
    display: block;
    width: 100%;
    height: 100%;
}


/* ---------------------------------------------------------------------
   A3. Typographie
   ---------------------------------------------------------------------
   Les tailles sont en clamp() : une seule déclaration couvre du
   téléphone au grand écran, sans point de rupture à maintenir.
   --------------------------------------------------------------------- */
.mu-rec .mu-rec-titre {
    margin: 0 0 clamp(12px, 2vw, 18px);
    font-family: var(--mu-police);
    font-size: clamp(26px, 4.2vw, 42px);
    font-weight: 800;
    line-height: 1.25;
    letter-spacing: -.015em;
    color: var(--mu-violet-fonce);
}

/* Filet dégradé sous le titre principal. Décoratif : il disparaît sans
   conséquence si le navigateur ignore ::after. */
.mu-rec .mu-rec-titre::after {
    content: "";
    display: block;
    width: 72px;
    height: 4px;
    margin-top: 16px;
    border-radius: 999px;
    background: linear-gradient(90deg, var(--mu-violet-actif), var(--mu-orange));
}

.mu-rec.mu-rec-appel .mu-rec-titre::after,
.mu-rec.mu-rec-merci .mu-rec-titre::after,
.mu-rec.mu-rec-redirection .mu-rec-titre::after { margin-inline: auto; }

/* Variante à l'intérieur d'un bloc d'état : plus sobre, sans filet — le
   bloc porte déjà sa propre identité visuelle. */
.mu-rec .mu-rec-titre--etat {
    font-size: clamp(20px, 2.8vw, 27px);
    margin-bottom: 10px;
}

.mu-rec .mu-rec-titre--etat::after { display: none; }

.mu-rec .mu-rec-chapo {
    margin: 0 0 18px;
    font-size: clamp(16px, 1.9vw, 19px);
    line-height: 1.85;
    color: var(--mu-texte);
    font-weight: 500;
}

.mu-rec .mu-rec-texte {
    margin: 0 0 16px;
    line-height: 1.9;
    color: var(--mu-texte);
}

.mu-rec .mu-rec-texte--discret {
    font-size: .94em;
    color: var(--mu-texte-discret);
}

/* Le bloc de texte de la page d'appel : une largeur de lecture
   confortable, jamais toute la largeur de l'écran. */
.mu-rec .mu-rec-appel-texte {
    max-width: 720px;
    margin-inline: auto;
}

/* ---- La liste des atouts ------------------------------------------
   Les puces natives sont remplacées par une pastille dessinée en CSS
   (un cercle dégradé + une coche tracée avec deux bordures). Aucune
   police d'icônes n'est requise : la liste reste lisible même si le
   thème ne chargeait pas Feather. */
.mu-rec .mu-rec-atouts {
    list-style: none;
    margin: 24px 0 26px;
    padding: 0;
    display: grid;
    gap: 14px;
    text-align: start;
}

.mu-rec .mu-rec-atout {
    position: relative;
    margin: 0;
    /* `padding-inline-start` et non `padding-left` : le site sert aussi
       des contenus en arabe, la pastille doit suivre le sens de lecture. */
    padding: 16px 20px;
    padding-inline-start: 60px;
    background: var(--mu-fond-carte);
    border: 1px solid var(--mu-trait);
    border-radius: var(--mu-rayon);
    box-shadow: var(--mu-ombre-douce);
    line-height: 1.75;
    color: var(--mu-texte);
    transition: transform .35s var(--mu-courbe),
                box-shadow .35s var(--mu-courbe),
                border-color .3s ease;
}

.mu-rec .mu-rec-atout:hover {
    transform: translateY(-3px);
    border-color: var(--mu-trait-fort);
    box-shadow: 0 18px 44px rgba(110, 53, 195, .14);
}

/* Pastille */
.mu-rec .mu-rec-atout::before {
    content: "";
    position: absolute;
    inset-inline-start: 18px;
    top: 50%;
    width: 28px;
    height: 28px;
    margin-top: -14px;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--mu-violet-actif), var(--mu-violet));
}

/* Coche : deux bordures d'un rectangle vide, pivotées de 45°. */
.mu-rec .mu-rec-atout::after {
    content: "";
    position: absolute;
    inset-inline-start: 29px;
    top: 50%;
    width: 6px;
    height: 11px;
    margin-top: -8px;
    border: solid #fff;
    border-width: 0 2.5px 2.5px 0;
    transform: rotate(45deg);
}

/* ---- Lien inline ---------------------------------------------------
   `.elementor-kit-1690 a` (0,1,1) impose sa couleur à tous les liens, et
   `.elementor a{box-shadow:none}` (0,1,1) supprime l'ombre. Notre
   sélecteur est en (0,2,0), donc gagnant ; le `!important` sur `color`
   est la ceinture qui nous protège d'une régénération du kit Elementor
   avec une spécificité plus forte — c'est la seule propriété disputée
   ici, aucune autre n'en porte. */
.mu-rec .mu-rec-lien {
    color: var(--mu-violet) !important;
    text-decoration: underline;
    text-underline-offset: 3px;
    text-decoration-thickness: 1px;
    font-weight: 600;
    transition: color .25s ease;
}

.mu-rec .mu-rec-lien:hover,
.mu-rec .mu-rec-lien:focus {
    color: var(--mu-orange) !important;
    text-decoration-thickness: 2px;
}

.mu-rec .mu-rec-lien:focus-visible {
    outline: 3px solid var(--mu-violet-actif);
    outline-offset: 3px;
    border-radius: 4px;
}

/* ---- Mention légale sous le bouton d'envoi ------------------------- */
.mu-rec .mu-rec-mention {
    margin: 18px 0 0;
    font-size: 13.5px;
    line-height: 1.75;
    color: var(--mu-texte-discret);
    text-align: center;
}

/* ---- Avis réservé aux administrateurs ------------------------------
   Volontairement voyant : il ne s'affiche que pour `manage_options`, et
   il signale une page mal configurée. Un avis discret serait ignoré. */
.mu-rec .mu-rec-avis-admin {
    margin: 18px auto 0;
    max-width: 640px;
    padding: 14px 18px;
    border: 2px dashed var(--mu-orange);
    border-radius: 14px;
    background: #FFF8EE;
    color: #7A4A00;
    font-size: 14px;
    line-height: 1.7;
    text-align: start;
}


/* ---------------------------------------------------------------------
   A4. Boutons
   ---------------------------------------------------------------------
   Le balisage porte TOUJOURS `rbt-btn btn-border icon-hover` en plus de
   `.mu-rec-bouton`, avec la structure interne <span class="btn-text"> +
   <span class="btn-icon"><i class="feather-arrow-right"></i></span>.
   Vérifications faites dans le code réel :

     · `.feather-arrow-right:before{content:"\e912"}` existe bien dans
       themes/histudy/assets/css/plugins/feather.css, et cette feuille est
       mise en file sans condition (inc/scripts.php:216) ;
     · le comportement `icon-hover` du thème est défini en (0,2,0)
       (`.rbt-btn.icon-hover .btn-text`, `.rbt-btn:hover.icon-hover …`).

   POURQUOI ON REDÉCLARE CE COMPORTEMENT ICI, à l'identique et en
   (0,3,0) : le module doit tenir seul. Si le thème change, si la feuille
   du thème est retirée d'une page, le bouton doit garder son animation.
   Les valeurs sont copiées telles quelles (7 px, cubic-bezier(0,.71,.4,1),
   .5s / .25s) : l'apparence est rigoureusement la même, seule
   l'autonomie change.

   Les classes de COMPORTEMENT du modèle d'origine — ajax-buy-now-product,
   product-simple, tutor-open-login-modal — ne sont volontairement pas
   reprises par le PHP : elles déclenchent l'ajout au panier et la fenêtre
   de connexion, abandonnée sur ce site. Rien ici ne les réintroduit.
   --------------------------------------------------------------------- */
.mu-rec .mu-rec-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 14px;
    margin: clamp(20px, 3vw, 32px) 0 0;
    padding: 0;
}

.mu-rec.mu-rec-appel .mu-rec-actions,
.mu-rec.mu-rec-merci .mu-rec-actions,
.mu-rec.mu-rec-redirection .mu-rec-actions { justify-content: center; }

.mu-rec.mu-rec-formulaire .mu-rec-actions { justify-content: flex-start; }

/*
 * Le bouton lui-même.
 *
 * CHAQUE `!important` ci-dessous répond à une déclaration précise de
 * `.elementor-kit-1690 button` (0,1,1), citée en tête de fichier :
 *   background-color / background-image → le rose #F24080 ;
 *   padding                             → 16px 28px ;
 *   border-radius                       → 25px ;
 *   border-style / border-width         → le cadre du kit ;
 *   color, font-family, font-size, font-weight, line-height ;
 *   box-shadow                          → `.elementor a{box-shadow:none}`.
 * `height` s'y ajoute parce que le padding du kit, s'il repassait,
 * ferait un bouton de 92 px de haut.
 * Aucune autre propriété n'en porte.
 */
.mu-rec .mu-rec-bouton {
    display: inline-block !important;
    height: 58px !important;
    padding: 0 30px !important;
    border: 2px solid var(--mu-violet-clair) !important;
    border-radius: 10px !important;
    background: transparent !important;
    background-color: transparent !important;
    background-image: none !important;
    color: var(--mu-violet-fonce) !important;
    font-family: var(--mu-police) !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 54px !important;
    letter-spacing: .3px;
    text-align: center;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
    outline: none;
    position: relative;
    z-index: 1;
    box-shadow: 0 6px 18px rgba(110, 53, 195, .10) !important;
    transition: background-color .35s var(--mu-courbe),
                border-color .35s var(--mu-courbe),
                color .35s var(--mu-courbe),
                box-shadow .35s var(--mu-courbe),
                transform .35s var(--mu-courbe);
}

.mu-rec .mu-rec-bouton:hover,
.mu-rec .mu-rec-bouton:focus {
    /* Le dégradé passe par `background-image` : `background-color` reste
       une couleur de repli si le dégradé n'est pas rendu. */
    background-color: var(--mu-violet) !important;
    background-image: linear-gradient(120deg, var(--mu-violet), var(--mu-violet-actif)) !important;
    border-color: var(--mu-violet-actif) !important;
    color: #fff !important;
    box-shadow: 0 16px 34px rgba(110, 53, 195, .30) !important;
    transform: translateY(-2px);
}

.mu-rec .mu-rec-bouton:active { transform: translateY(0); }

.mu-rec .mu-rec-bouton:focus-visible {
    outline: 3px solid var(--mu-violet-actif) !important;
    outline-offset: 3px;
}

/* Le bouton d'envoi du formulaire : même bouton, rempli d'emblée — c'est
   l'action principale de la page, elle doit se voir sans survol. */
.mu-rec .mu-rec-envoyer {
    background-color: var(--mu-violet) !important;
    background-image: linear-gradient(120deg, var(--mu-violet), var(--mu-violet-actif)) !important;
    border-color: transparent !important;
    color: #fff !important;
    padding: 0 40px !important;
    box-shadow: 0 14px 32px rgba(110, 53, 195, .26) !important;
}

.mu-rec .mu-rec-envoyer:hover,
.mu-rec .mu-rec-envoyer:focus {
    background-color: var(--mu-violet-fonce) !important;
    background-image: linear-gradient(120deg, var(--mu-violet-actif), var(--mu-violet)) !important;
    border-color: transparent !important;
    box-shadow: 0 20px 44px rgba(110, 53, 195, .34) !important;
}

/* État posé par le script pendant l'envoi : on empêche le double clic
   sans jamais retirer le bouton du flux. */
.mu-rec .mu-rec-bouton[aria-disabled="true"],
.mu-rec .mu-rec-bouton:disabled {
    opacity: .7;
    cursor: progress;
    transform: none;
    box-shadow: none !important;
}

/* ---- Animation `icon-hover`, redéclarée à l'identique ---------------
   Valeurs relevées dans themes/histudy/assets/css/style.css. Ne pas
   modifier : le bouton doit rester indiscernable de ceux du thème. */
.mu-rec .mu-rec-bouton .btn-text {
    display: inline-block;
    transform: translateX(7px);
    transition: transform .5s;
    transition-timing-function: cubic-bezier(0, .71, .4, 1);
    color: inherit;
}

.mu-rec .mu-rec-bouton .btn-icon {
    display: inline-block;
    margin-inline-start: -7px;
    color: inherit;
}

.mu-rec .mu-rec-bouton .btn-icon i {
    display: inline-block;
    opacity: 0;
    padding-left: 0;
    transform: translateX(-7px);
    transition: opacity .25s, transform .5s;
    transition-timing-function: cubic-bezier(0, .71, .4, 1);
}

.mu-rec .mu-rec-bouton:hover .btn-text,
.mu-rec .mu-rec-bouton:focus .btn-text { transform: translateX(-7px); }

.mu-rec .mu-rec-bouton:hover .btn-icon i,
.mu-rec .mu-rec-bouton:focus .btn-icon i {
    opacity: 1;
    transform: translateX(7px);
}


/* ---------------------------------------------------------------------
   A5. Bloc d'état — offre de recrutement fermée
   ---------------------------------------------------------------------
   Affiché à la place du formulaire. Ton courtois : ce n'est pas une
   erreur, c'est une information. D'où le violet, jamais le rouge.
   --------------------------------------------------------------------- */
.mu-rec .mu-rec-etat {
    max-width: 640px;
    margin: clamp(20px, 4vw, 36px) auto 0;
    padding: clamp(26px, 4vw, 40px) clamp(20px, 4vw, 36px);
    text-align: center;
    background: linear-gradient(160deg, var(--mu-fond-doux), var(--mu-fond-carte));
    border: 1px solid var(--mu-trait);
    border-radius: var(--mu-rayon-carte);
    box-shadow: var(--mu-ombre-carte);
}

.mu-rec .mu-rec-etat-texte {
    margin: 0;
    color: var(--mu-texte);
    line-height: 1.85;
}

/* Pastille au cadenas.
   Le <span> est vide et aria-hidden : il ne porte aucune information,
   uniquement de l'ornement.

   POURQUOI UNE SVG EN data: ET NON UNE POLICE D'ICÔNES — le module doit
   tenir seul. Feather (thème) et tutor-icon (extension) sont chargées
   aujourd'hui ; rien ne garantit qu'elles le seront demain, ni sur une
   page construite avec un gabarit Elementor allégé. Une SVG inscrite
   dans la feuille elle-même ne peut ni manquer, ni partir en 404, ni
   déclencher une requête réseau. */
.mu-rec .mu-rec-etat-icone {
    position: relative;
    display: block;
    width: 64px;
    height: 64px;
    margin: 0 auto 20px;
    border-radius: 50%;
    background: linear-gradient(135deg, #F1E8FF, #E2D2FF);
    box-shadow: inset 0 0 0 1px rgba(110, 53, 195, .12);
}

.mu-rec .mu-rec-etat-icone::after {
    content: "";
    position: absolute;
    inset: 0;
    background-repeat: no-repeat;
    background-position: center;
    background-size: 28px 28px;
    /* Cadenas fermé. `#` encodé en %23 : non encodé, il serait lu comme
       le début d'un fragment d'URL et l'image ne se chargerait pas. */
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236E35C3' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='4' y='10' width='16' height='11' rx='2.5'/%3E%3Cpath d='M8 10V7a4 4 0 0 1 8 0v3'/%3E%3C/svg%3E");
}


/* ---------------------------------------------------------------------
   A6. Le formulaire
   --------------------------------------------------------------------- */
.mu-rec .mu-rec-form {
    margin-top: clamp(20px, 3vw, 32px);
    padding: clamp(22px, 4vw, 44px);
    background: var(--mu-fond-carte);
    border: 1px solid var(--mu-trait);
    border-radius: var(--mu-rayon-carte);
    box-shadow: var(--mu-ombre-carte);
    text-align: start;
}

/* ---- Grille des champs ---------------------------------------------
   Deux colonnes sur grand écran. `minmax(0, 1fr)` et non `1fr` : sans
   le minimum à zéro, un contenu long (une adresse e-mail sans espace)
   élargit sa colonne et fait déborder la grille. */
.mu-rec .mu-rec-grille {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: clamp(16px, 2.4vw, 24px);
}

/* Les champs qui méritent toute la largeur. `.mu-rec-champ--large` est
   posé par le PHP sur le textarea ; les autres sont désignés ici, car
   c'est une décision de mise en page, pas de structure. */
.mu-rec .mu-rec-champ--large,
.mu-rec .mu-rec-champ--linkedin,
.mu-rec .mu-rec-champ--adresse,
.mu-rec .mu-rec-champ--email { grid-column: 1 / -1; }

.mu-rec .mu-rec-champ {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

/* ---- Étiquettes ---------------------------------------------------- */
.mu-rec .mu-rec-label {
    display: block;
    margin: 0 0 8px;
    font-family: var(--mu-police);
    font-size: 14.5px;
    font-weight: 700;
    line-height: 1.5;
    color: var(--mu-violet-fonce);
    cursor: pointer;
}

.mu-rec .mu-rec-requis {
    color: var(--mu-orange);
    font-weight: 800;
}

.mu-rec .mu-rec-facultatif {
    font-weight: 500;
    font-size: 12.5px;
    color: var(--mu-texte-discret);
}

/* ---- Champs de saisie ----------------------------------------------
   Pas de `!important` ici, et c'est délibéré : le thème ne style les
   champs qu'en (0,1,1) au maximum (`input[type=email]`…), notre
   sélecteur est en (0,2,0) et l'emporte déjà. Ajouter `!important`
   rendrait toute correction locale future impossible pour rien. */
.mu-rec .mu-rec-form .mu-rec-input {
    display: block;
    width: 100%;
    height: 54px;
    padding: 0 16px;
    background: #FCFBFF;
    border: 2px solid var(--mu-trait);
    border-radius: 14px;
    color: var(--mu-violet-fonce);
    font-family: var(--mu-police);
    font-size: 16px;
    font-weight: 500;
    line-height: 50px;
    outline: none;
    box-shadow: none;
    -webkit-appearance: none;
    appearance: none;
    transition: border-color .25s ease,
                background-color .25s ease,
                box-shadow .25s var(--mu-courbe);
}

/* Le champ date sur iOS est rendu à sa hauteur intrinsèque : sans
   `min-height`, il s'écrase à 20 px. */
.mu-rec .mu-rec-form input.mu-rec-input[type="date"] {
    min-height: 54px;
    line-height: normal;
}

.mu-rec .mu-rec-form .mu-rec-textarea {
    height: auto;
    min-height: 140px;
    padding: 14px 16px;
    line-height: 1.8;
    resize: vertical;
}

.mu-rec .mu-rec-form .mu-rec-input::placeholder {
    color: #A79FB5;
    opacity: 1; /* Firefox applique 0.54 par défaut. */
}

.mu-rec .mu-rec-form .mu-rec-input:hover { border-color: var(--mu-trait-fort); }

.mu-rec .mu-rec-form .mu-rec-input:focus {
    background: #fff;
    border-color: var(--mu-violet-actif);
    box-shadow: var(--mu-ombre-focus);
}

/* Champ signalé en erreur par le navigateur ou par le script. On
   n'utilise PAS `:invalid` seul : il colore en rouge un champ vide que
   l'utilisateur n'a pas encore atteint, ce qui est décourageant. */
.mu-rec .mu-rec-form .mu-rec-input[aria-invalid="true"],
.mu-rec .mu-rec-champ.is-erreur .mu-rec-input {
    border-color: #E0563F;
    background: #FFF7F5;
}

.mu-rec .mu-rec-form .mu-rec-input[aria-invalid="true"]:focus,
.mu-rec .mu-rec-champ.is-erreur .mu-rec-input:focus {
    box-shadow: 0 0 0 4px rgba(224, 86, 63, .16);
}

/* ---- Texte d'aide --------------------------------------------------- */
.mu-rec .mu-rec-aide {
    margin: 8px 0 0;
    font-size: 13px;
    line-height: 1.65;
    color: var(--mu-texte-discret);
}

/* ---- Groupe de boutons radio (le genre) -----------------------------
   Le vrai <input type="radio"> reste dans le flux et reste focusable :
   il est simplement rendu invisible par `appearance:none` + dimensions
   nulles, et c'est le <label> qui porte la pastille. Sans JavaScript,
   le clavier et le clic fonctionnent nativement. */
.mu-rec .mu-rec-radios {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
}

/* Les deux options se partagent toute la largeur du groupe au lieu d'être
   dimensionnées par leur texte : « Homme » et « Femme » n'ont pas la même
   longueur, elles auraient deux largeurs différentes. `flex: 1 1 0` part
   d'une base nulle, donc le partage est strictement égal ; `min-width: 0`
   autorise la réduction sous la largeur du contenu sur petit écran. */
.mu-rec .mu-rec-radio {
    display: inline-flex;
    position: relative;
    flex: 1 1 0;
    min-width: 0;
}

.mu-rec .mu-rec-form .mu-rec-radio-input {
    position: absolute;
    inset-inline-start: 12px;
    top: 50%;
    width: 1px;
    height: 1px;
    margin: 0;
    padding: 0;
    opacity: 0;
    -webkit-appearance: none;
    appearance: none;
    border: 0;
    pointer-events: none;
}

.mu-rec .mu-rec-radio-label {
    /* Remplit la moitié que `flex: 1 1 0` alloue à son parent. */
    width: 100%;
    display: inline-flex;
    align-items: center;
    /* 14px plutôt que 10 : le retrait latéral du label est de 22px, un
       écart de 10 entre la pastille et le texte paraissait resserré. */
    gap: 14px;
    min-height: 54px;
    padding: 0 22px;
    background: #FCFBFF;
    border: 2px solid var(--mu-trait);
    border-radius: 14px;
    color: var(--mu-violet-fonce);
    font-family: var(--mu-police);
    font-size: 15.5px;
    font-weight: 600;
    line-height: 1.4;
    cursor: pointer;
    user-select: none;
    transition: border-color .25s ease,
                background-color .25s ease,
                color .25s ease,
                box-shadow .25s var(--mu-courbe);
}

/* La coche ronde du bouton radio, dessinée sur le label. */
/* `position: static` et `inset: auto` sont indispensables, pas décoratifs.
   Le thème pose `input[type=radio]~label:before { position:absolute;
   left:0; top:6px }` — nous ne déclarions pas `position`, la pastille
   héritait donc de l'absolu du thème et se collait au coin supérieur
   gauche, hors du flux. Remise en élément flex ordinaire, elle est centrée
   verticalement par le `align-items: center` du label et espacée du texte
   par son `gap`. */
.mu-rec .mu-rec-radio-label::before {
    content: "";
    position: static;
    inset: auto;
    flex: 0 0 auto;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    border: 2px solid var(--mu-trait-fort);
    background: #fff;
    box-shadow: inset 0 0 0 4px #fff;
    transition: border-color .25s ease, background-color .25s ease;
}

.mu-rec .mu-rec-radio-label:hover { border-color: var(--mu-trait-fort); }

.mu-rec .mu-rec-radio-input:checked + .mu-rec-radio-label {
    background: linear-gradient(120deg, rgba(110, 53, 195, .10), rgba(137, 67, 243, .06));
    border-color: var(--mu-violet-actif);
    color: var(--mu-violet);
}

.mu-rec .mu-rec-radio-input:checked + .mu-rec-radio-label::before {
    border-color: var(--mu-violet-actif);
    background: var(--mu-violet-actif);
}

/* Le focus clavier doit se voir sur le LABEL, puisque l'input est
   invisible. Sans cette règle, la navigation au clavier serait aveugle. */
.mu-rec .mu-rec-radio-input:focus-visible + .mu-rec-radio-label {
    outline: 3px solid var(--mu-violet-actif);
    outline-offset: 3px;
}


/* ---------------------------------------------------------------------
   A7. Le dépôt du CV
   ---------------------------------------------------------------------
   CŒUR DE LA CONCEPTION FAIL-OPEN DE CE MODULE.

   Ordre réel des enfants de `.mu-rec-depot`, tel que le PHP les émet :
     1. <label class="mu-rec-label">      « Curriculum vitæ * »
     2. <input class="mu-rec-depot-input" type="file">
     3. <label class="mu-rec-depot-zone"> la zone cliquable
     4. <p class="mu-rec-aide">           formats et taille
     5. <p class="mu-rec-depot-nom">      rempli par le script

   On place le bloc en GRILLE et on range l'input ET la zone dans la MÊME
   cellule (ligne 2). L'input, en `opacity:0` et étiré sur toute la
   cellule, se superpose donc exactement à la zone.

   Ce que cela achète, SANS UNE LIGNE DE JAVASCRIPT :
     · le clic sur la zone ouvre le sélecteur de fichiers (c'est l'input
       lui-même qui reçoit le clic) ;
     · le GLISSER-DÉPOSER fonctionne, parce que déposer un fichier sur un
       <input type="file"> est un comportement natif du navigateur ;
     · le champ garde le focus clavier et reste dans l'ordre de tabulation.

   Le script n'ajoute que le confort : la classe `.is-active` pendant le
   survol d'un glisser, l'affichage du nom, et le refus au-delà de 5 Mo
   avant l'envoi.

   `display:none` et `visibility:hidden` sont proscrits : ils retirent
   l'élément de l'ordre de tabulation, et le champ deviendrait
   inatteignable au clavier.
   --------------------------------------------------------------------- */
.mu-rec .mu-rec-depot {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    /* Quatre rangées : étiquette, zone (+ input superposé), aide, nom. */
    grid-template-rows: auto auto auto auto;
    margin-top: clamp(20px, 3vw, 28px);
}

.mu-rec .mu-rec-depot > .mu-rec-label { grid-row: 1; }
.mu-rec .mu-rec-depot > .mu-rec-aide  { grid-row: 3; }
.mu-rec .mu-rec-depot > .mu-rec-depot-nom { grid-row: 4; }

/* L'input et la zone partagent la rangée 2 et la colonne 1. */
.mu-rec .mu-rec-depot > .mu-rec-depot-input,
.mu-rec .mu-rec-depot > .mu-rec-depot-zone {
    grid-row: 2;
    grid-column: 1;
    align-self: stretch;
    justify-self: stretch;
}

.mu-rec .mu-rec-depot > .mu-rec-depot-input {
    /* Au-dessus de la zone : c'est lui qui reçoit clic et dépôt.
       Les dimensions viennent du `stretch` de la grille ci-dessus, pas
       d'un `height:100%` : sur un élément de grille, les deux se
       contrarient dès que la rangée est dimensionnée par son contenu. */
    z-index: 2;
    min-width: 0;
    margin: 0;
    padding: 0;
    opacity: 0;
    cursor: pointer;
    /* `font-size:0` évite qu'un navigateur ancien réserve la hauteur du
       texte du bouton « Parcourir ». */
    font-size: 0;
    border: 0;
    background: none;
}

.mu-rec .mu-rec-depot > .mu-rec-depot-zone {
    z-index: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    min-height: 190px;
    padding: 28px 22px;
    text-align: center;
    background:
        linear-gradient(160deg, #FBF8FF, #F4EEFF);
    border: 2px dashed var(--mu-trait-fort);
    border-radius: 20px;
    cursor: pointer;
    transition: border-color .3s ease,
                background-color .3s ease,
                box-shadow .35s var(--mu-courbe),
                transform .35s var(--mu-courbe);
}

/* Le survol est écouté sur le BLOC et non sur la zone : la zone est
   recouverte par l'input, elle ne reçoit jamais `:hover` elle-même. */
.mu-rec .mu-rec-depot:hover > .mu-rec-depot-zone,
.mu-rec .mu-rec-depot:focus-within > .mu-rec-depot-zone {
    border-color: var(--mu-violet-actif);
    background: linear-gradient(160deg, #F7F1FF, #EDE3FF);
    box-shadow: 0 16px 40px rgba(110, 53, 195, .14);
}

/* Focus clavier : l'input étant invisible, l'anneau se dessine sur la
   zone. Sans cela, la tabulation passerait sur un élément sans retour
   visuel — un défaut d'accessibilité, pas un détail esthétique. */
.mu-rec .mu-rec-depot > .mu-rec-depot-input:focus-visible ~ .mu-rec-depot-zone {
    outline: 3px solid var(--mu-violet-actif);
    outline-offset: 3px;
}

/* Glisser en cours : classe posée puis retirée par le script. */
.mu-rec .mu-rec-depot.is-active > .mu-rec-depot-zone {
    border-color: var(--mu-violet-actif);
    border-style: solid;
    background: linear-gradient(160deg, #F2E9FF, #E6D8FF);
    box-shadow: 0 20px 50px rgba(110, 53, 195, .22);
    transform: scale(1.01);
}

/* Fichier accepté : la zone se calme et vire au vert sobre. */
.mu-rec .mu-rec-depot.is-rempli > .mu-rec-depot-zone {
    border-style: solid;
    border-color: #4FA97C;
    background: linear-gradient(160deg, #F4FBF7, #E9F6EF);
}

/* Fichier refusé (trop lourd, mauvais format) : le rouge est ici
   justifié — c'est bien une erreur, et elle bloque l'envoi. */
.mu-rec .mu-rec-depot.is-refus > .mu-rec-depot-zone {
    border-style: solid;
    border-color: #E0563F;
    background: linear-gradient(160deg, #FFF7F5, #FDEDE9);
}

/* ---- La pastille animée --------------------------------------------
   Le pictogramme est une SVG inscrite dans la feuille (voir la note de
   `.mu-rec-etat-icone` plus haut : autonomie totale, aucune requête,
   aucune police d'icônes à charger). Il change avec l'état du dépôt :
   flèche au repos, coche quand le fichier est accepté, croix quand il
   est refusé — un renfort visuel du message écrit, jamais son
   remplacement.

   `stroke='%23ffffff'` : le croisillon doit être encodé, sinon il serait
   lu comme le début d'un fragment d'URL. */
.mu-rec .mu-rec-depot-icone {
    position: relative;
    display: block;
    width: 62px;
    height: 62px;
    margin-bottom: 10px;
    border-radius: 20px;
    background: linear-gradient(135deg, var(--mu-violet-actif), var(--mu-violet));
    box-shadow: 0 12px 26px rgba(110, 53, 195, .28);
    transition: transform .45s var(--mu-courbe),
                border-radius .45s var(--mu-courbe),
                background-color .3s ease,
                box-shadow .3s ease;
    /* Respiration discrète pour signaler que la zone attend un fichier.
       Neutralisée par la requête `prefers-reduced-motion` en fin de
       partie A. */
    animation: mu-rec-respire 3.2s ease-in-out infinite;
}

.mu-rec .mu-rec-depot-icone::after {
    content: "";
    position: absolute;
    inset: 0;
    background-repeat: no-repeat;
    background-position: center;
    background-size: 26px 26px;
    /* Flèche de téléversement : hampe, pointe, et socle. */
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 16V4'/%3E%3Cpath d='M6.5 9.5 12 4l5.5 5.5'/%3E%3Cpath d='M4 17v2a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-2'/%3E%3C/svg%3E");
}

@keyframes mu-rec-respire {
    0%, 100% { transform: translateY(0) scale(1); }
    50%      { transform: translateY(-5px) scale(1.03); }
}

/*
 * `animation: none` et NON `animation-play-state: paused` : mettre en
 * pause fige la pastille sur l'image courante de la respiration, dont
 * la transformation l'emporterait sur celle du survol — le grossissement
 * ne se verrait jamais. Retirer l'animation rend la main à la règle.
 */
.mu-rec .mu-rec-depot:hover .mu-rec-depot-icone,
.mu-rec .mu-rec-depot:focus-within .mu-rec-depot-icone,
.mu-rec .mu-rec-depot.is-active .mu-rec-depot-icone {
    animation: none;
    transform: translateY(-6px) scale(1.06);
    border-radius: 26px;
}

.mu-rec .mu-rec-depot.is-rempli .mu-rec-depot-icone {
    animation: none;
    background: linear-gradient(135deg, #56B588, #2F8C63);
    box-shadow: 0 12px 26px rgba(47, 140, 99, .28);
}

/* Coche : le fichier est accepté. */
.mu-rec .mu-rec-depot.is-rempli .mu-rec-depot-icone::after {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12.5 4.5 4.5L19 7.5'/%3E%3C/svg%3E");
}

.mu-rec .mu-rec-depot.is-refus .mu-rec-depot-icone {
    animation: none;
    background: linear-gradient(135deg, #EE7458, #C7412A);
    box-shadow: 0 12px 26px rgba(199, 65, 42, .26);
}

/* Croix : le fichier est refusé. */
.mu-rec .mu-rec-depot.is-refus .mu-rec-depot-icone::after {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 6l12 12M18 6 6 18'/%3E%3C/svg%3E");
}

/* ---- Textes de la zone ---------------------------------------------- */
.mu-rec .mu-rec-depot-titre {
    font-size: clamp(16px, 2vw, 19px);
    font-weight: 700;
    line-height: 1.5;
    color: var(--mu-violet-fonce);
}

.mu-rec .mu-rec-depot-lien {
    font-size: 14px;
    font-weight: 600;
    color: var(--mu-violet);
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* ---- Nom du fichier choisi -----------------------------------------
   Vide par défaut : sans script, rien ne s'affiche et rien ne manque.
   `:empty` évite qu'un paragraphe vide ne creuse une marge. */
.mu-rec .mu-rec-depot-nom {
    margin: 12px 0 0;
    font-size: 14.5px;
    line-height: 1.6;
    color: var(--mu-violet-fonce);
}

.mu-rec .mu-rec-depot-nom:empty { display: none; }

/* Le contenu de ce paragraphe est construit par le script :
   une pastille de fichier, le nom, la taille, et un bouton de retrait. */
.mu-rec .mu-rec-depot-fichier {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
    max-width: 100%;
    padding: 10px 14px;
    background: #F3FAF6;
    border: 1px solid #BFE3CE;
    border-radius: 12px;
}

.mu-rec .mu-rec-depot-nom.is-erreur .mu-rec-depot-fichier {
    background: #FFF3F0;
    border-color: #F3BDB0;
    color: #A5321C;
}

.mu-rec .mu-rec-depot-fichier-nom {
    font-weight: 700;
    overflow-wrap: anywhere;
}

.mu-rec .mu-rec-depot-fichier-taille {
    font-size: 13px;
    color: var(--mu-texte-discret);
}

/* Bouton « Retirer le fichier », inséré par le script. C'est un <button>
   : le kit Elementor le repeindrait en rose. Deux classes + !important
   sur les seules propriétés qu'il impose. */
.mu-rec .mu-rec-depot-retirer {
    display: inline-flex !important;
    align-items: center;
    height: auto !important;
    padding: 4px 12px !important;
    border: 1px solid currentColor !important;
    border-radius: 999px !important;
    background: transparent !important;
    background-color: transparent !important;
    background-image: none !important;
    color: #A5321C !important;
    font-family: var(--mu-police) !important;
    font-size: 12.5px !important;
    font-weight: 700 !important;
    line-height: 1.6 !important;
    cursor: pointer;
    box-shadow: none !important;
    transition: background-color .25s ease, color .25s ease;
}

.mu-rec .mu-rec-depot-retirer:hover,
.mu-rec .mu-rec-depot-retirer:focus {
    background-color: #A5321C !important;
    color: #fff !important;
}


/* ---------------------------------------------------------------------
   A8. Consentement et champ leurre
   --------------------------------------------------------------------- */
.mu-rec .mu-rec-consentement {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    margin-top: clamp(20px, 3vw, 28px);
    padding: 18px 20px;
    background: var(--mu-fond-doux);
    border: 1px solid var(--mu-trait);
    border-radius: var(--mu-rayon);
}

/* La case est redessinée sans jamais quitter le flux : elle garde son
   focus clavier et son comportement natif. */
/* ---------------------------------------------------------------------
   POURQUOI CES SÉLECTEURS SONT SI LOURDS
   ---------------------------------------------------------------------
   Symptôme : la case s'affichait en PASTILLE GRISE d'environ 44 × 24 px,
   au lieu d'un carré blanc de 24 × 24, alors que nous déclarions bien
   `width:24px; padding:0; background:#fff`.

   Coupable : le CSS généré par le KIT ELEMENTOR (Style du site → Champs
   de formulaire). Elementor construit ce sélecteur (voir le gabarit
   plugins/elementor/core/kits/documents/tabs/theme-style-form-fields.php,
   l. 41-45) et l'écrit dans wp-content/uploads/elementor/css/post-{ID}.css :

     .elementor-kit-{ID} input:not([type="button"]):not([type="submit"])

   Spécificité (0,3,1) — l'argument d'un `:not()` compte à sa propre
   spécificité. Nos règles étaient à (0,3,0) : elles perdaient d'un
   cheveu, exactement un sélecteur de type.

   Le filtre ne protège QUE `button` et `submit` : une case à cocher passe
   au travers et hérite du padding ET du fond des champs texte. Et la
   classe `.elementor-kit-{ID}` est posée sur <body> même sur les pages
   NON construites avec Elementor (elementor/core/kits/manager.php:390-396,
   commentaire explicite du plugin) — cette page est donc concernée.

   L'arithmétique confirme : le thème pose `*{box-sizing:border-box}`. En
   border-box, un padding plus spécifique ne s'ajoute pas à la largeur, il
   crée un PLANCHER infranchissable. Avec un padding de kit `10px 20px` et
   notre bordure de 2px : 20+20+2+2 = 44 px de large, 10+10+2+2 = 24 px de
   haut. C'est très exactement la pastille observée — et cela explique
   pourquoi la hauteur semblait juste alors que la largeur explosait.

   Indice convergent : l'auteur du thème a dû écrire, pour UNE seule case
   du site, `#tutor-terms-conditions[type=checkbox]{ appearance:checkbox
   !important; min-width:18px; padding:0; width:18px }` dans main.css.
   Même symptôme, même parade — son remède est le mode d'emploi du nôtre.

   RÉSERVE HONNÊTE : `wp-content/uploads/` est absent de la copie locale,
   la valeur exacte du padding du kit n'a donc pas pu être lue. Le
   diagnostic repose sur la concordance au pixel près et sur l'élimination
   de toutes les autres règles du site (799 feuilles balayées : aucune
   autre ne dépasse (0,1,1) sur cet input). Si le rendu restait faux après
   téléversement, la règle barrée dans l'onglet « Styles » de l'inspecteur
   nommerait le fichier fautif sans ambiguïté.

   PARADE : monter à (0,4,1) en ajoutant le type `input` et l'attribut
   `[type="checkbox"]`. Cela suffit à reprendre la main SANS `!important`.
   Les `min-*` / `max-*` verrouillent la boîte même si un padding revenait
   un jour par une autre porte, et `flex: 0 0 24px` neutralise au passage
   le `min-width:auto` implicite des éléments flex.

   ALIGNEMENT VERTICAL : la case doit se centrer sur la PREMIÈRE LIGNE du
   libellé, pas sur le haut du bloc. Cette ligne mesure 14.5px × 1.75 =
   25.375px ; la case, 24px. Le décalage est donc (25.375 − 24) / 2. Il est
   écrit en calc() à partir des deux valeurs réelles — si la typographie du
   libellé change, la formule reste juste.
   --------------------------------------------------------------------- */
.mu-rec .mu-rec-form input.mu-rec-case[type="checkbox"] {
    /* Taille de la case, en un seul endroit. Tout le reste en découle :
       la boîte, le verrou min/max, la base flex et l'alignement vertical.
       Le centrage de la coche, lui, est indépendant de cette valeur. */
    --mu-case-taille: 28px;
    /* Hauteur de la première ligne du libellé : 14.5px × 1.75. La case
       se centre dessus ; le décalage devient négatif dès qu'elle est plus
       haute que la ligne, ce qui est le cas à 28px. C'est voulu. */
    --mu-case-ligne: calc(14.5px * 1.75);

    box-sizing: border-box;
    flex: 0 0 var(--mu-case-taille);
    width: var(--mu-case-taille);
    min-width: var(--mu-case-taille);
    max-width: var(--mu-case-taille);
    height: var(--mu-case-taille);
    min-height: var(--mu-case-taille);
    max-height: var(--mu-case-taille);
    margin: calc((var(--mu-case-ligne) - var(--mu-case-taille)) / 2) 0 0;
    padding: 0;
    background-color: #fff;
    background-image: none;
    border: 2px solid var(--mu-trait-fort);
    border-radius: 8px;
    box-shadow: none;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
    position: relative;
    transition: background-color .25s ease, border-color .25s ease;

    /* Cotes de la coche, héritées par le pseudo-élément. Le CENTRAGE ne
       dépend pas de ces valeurs — seul le dessin en dépend. Elles ont été
       remontées avec la case (5/10 convenaient à 24px, la coche aurait
       paru maigre à 28px). Contrainte à respecter : l'épaisseur doit
       rester ≤ largeur/2, sinon le navigateur réduit les bordures et la
       coche change de forme sans prévenir. */
    --mu-coche-l: 6px;      /* largeur du gabarit, en border-box */
    --mu-coche-h: 12px;     /* hauteur du gabarit, en border-box */
    --mu-coche-e: 2.5px;    /* épaisseur du trait                */
    --mu-coche-dy: calc((var(--mu-coche-l) - var(--mu-coche-e)) / 2.8284271);
}

/* (0,5,1) — doivent surclasser la règle de base ci-dessus, qui est à
   (0,4,1) et déclare `background-color` et `border`. */
.mu-rec .mu-rec-form input.mu-rec-case[type="checkbox"]:hover {
    border-color: var(--mu-violet-clair);
}

.mu-rec .mu-rec-form input.mu-rec-case[type="checkbox"]:checked {
    background-color: var(--mu-violet-actif);
    border-color: var(--mu-violet-actif);
}

/* ---- Coche blanche, centrée par construction -------------------------
   1) Le bloc conteneur d'un enfant `absolute` est la boîte de PADDING de
      l'ancêtre positionné, pas sa boîte de bordure : ici 24 − 2×2 = 20×20.
      Le centre à viser est donc (10 ; 10), et non (12 ; 12). Les anciennes
      valeurs `left:7px; top:3px` visaient le mauvais repère.

   2) `left/top: 50%` se résolvent sur le CONTENEUR ; les pourcentages de
      `translate()` se résolvent sur la PROPRE boîte de l'élément. Les
      combiner pose le centre de la coche sur le centre de la case, pour
      n'importe quelle taille de case — c'est ce qui rend le réglage
      définitif au lieu d'être accordé à l'œil pour 24px.

   3) Correction optique : après rotation, l'angle supérieur gauche du
      gabarit est évidé, donc la boîte englobante de l'encre est amputée
      en haut de (l−e)/√2. Son centre visuel descend de (l−e)/(2√2) =
      0,884px. On remonte d'autant. Aucune correction horizontale : les
      extrema gauche et droit sont symétriques.

   4) L'ORDRE DES FONCTIONS EST CRITIQUE. `translate(…) rotate(45deg)` est
      correct : le recentrage a lieu dans les axes de l'ÉCRAN, puis la
      forme pivote sur elle-même. Écrit dans l'autre sens, la translation
      serait mesurée le long des axes déjà tournés et déporterait la coche
      de 1,77px à droite et 5,30px vers le haut. C'est l'erreur classique.

   5) La correction verticale vit dans `top` — donc hors du repère tourné.
      Placée après le `rotate`, elle produirait un déplacement en diagonale.

   6) `box-sizing` et `transform-origin` sont redéclarés ici bien qu'ils
      soient déjà hérités : toute la démonstration en dépend, et ce fichier
      a pour doctrine de ne dépendre d'aucune cascade extérieure.
   --------------------------------------------------------------------- */
.mu-rec .mu-rec-form input.mu-rec-case[type="checkbox"]:checked::after {
    content: "";
    position: absolute;
    box-sizing: border-box;
    left: 50%;
    top: calc(50% - var(--mu-coche-dy));
    width: var(--mu-coche-l);
    height: var(--mu-coche-h);
    border: solid #fff;
    border-width: 0 var(--mu-coche-e) var(--mu-coche-e) 0;
    transform-origin: 50% 50%;
    transform: translate(-50%, -50%) rotate(45deg);
    pointer-events: none;
}

.mu-rec .mu-rec-form .mu-rec-case:focus-visible {
    outline: 3px solid var(--mu-violet-actif);
    outline-offset: 3px;
}

.mu-rec .mu-rec-case-label {
    font-size: 14.5px;
    line-height: 1.75;
    color: var(--mu-texte);
    cursor: pointer;
    /* Le thème pose `padding-left:20px` (voir le bloc ci-dessous) pour
       loger SA case. On la supprime, donc on récupère la place. */
    padding-inline-start: 0;
}


/* ---------------------------------------------------------------------
   A6 bis. NEUTRALISATION DU CONTRÔLE FANTÔME DU THÈME
   ---------------------------------------------------------------------
   Symptôme observé : au clic, la case de consentement apparaissait EN
   DOUBLE, et le bouton radio « Femme » affichait un croissant blanc
   décentré au lieu d'une pastille nette.

   Cause, dans `themes/histudy/assets/css/style.css` :

     input[type=checkbox]~label:before,
     input[type=radio]~label:before      { content:" "; width:14px;
                                           height:14px; position:absolute;
                                           left:0; top:6px }
     input[type=checkbox]:checked~label:before { background:var(--color-primary) }
     input[type=radio]~label:after       { background:#fff; width:8px;
                                           height:8px; left:3px;
                                           border-radius:50% }
     input[type=checkbox]:checked~label:after,
     input[type=radio]:checked~label:after     { opacity:1 }

   Le thème redessine TOUT couple `<input> ~ <label>` du site. Notre
   balisage étant exactement celui-là, il héritait d'un second contrôle
   par-dessus le nôtre. Le défaut ne se voyait qu'au clic parce que le
   doublon reste en `opacity:0` tant que rien n'est coché — d'où le
   « en double lors du clic ».

   POURQUOI `content: none` ET PAS `display:none` : `content:none`
   empêche le pseudo-élément d'exister, ce qui est plus sûr qu'un
   `display:none` qu'une règle ultérieure du thème pourrait rétablir.
   Les deux sont posés, ceinture et bretelles.

   PORTÉE : on ne touche QUE `.mu-rec-case-label` (les deux pseudos, nous
   n'en utilisons aucun) et le SEUL `::after` de `.mu-rec-radio-label`.
   Son `::before` est le nôtre — c'est la pastille ronde du bouton radio —
   et il ne doit surtout pas être emporté ici.

   Spécificité : le thème plafonne à (0,1,2). Ces sélecteurs sont à (0,3,1)
   au minimum, donc `!important` serait superflu ; il est conservé
   uniquement pour survivre à une future règle `!important` du thème. */
.mu-rec .mu-rec-form .mu-rec-case-label::before,
.mu-rec .mu-rec-form .mu-rec-case-label::after,
.mu-rec .mu-rec-form .mu-rec-case:checked ~ .mu-rec-case-label::before,
.mu-rec .mu-rec-form .mu-rec-case:checked ~ .mu-rec-case-label::after,
.mu-rec .mu-rec-form .mu-rec-radio-label::after,
.mu-rec .mu-rec-form .mu-rec-radio-input:checked ~ .mu-rec-radio-label::after {
    content: none !important;
    display: none !important;
}

/*
 * CHAMP LEURRE — piège à robots.
 *
 * On le sort du cadre par la position. JAMAIS `display:none`, JAMAIS
 * `visibility:hidden` : les robots récents lisent la feuille de style et
 * ignorent les champs ainsi masqués, ce qui annulerait le piège. Un
 * champ hors cadre, lui, reste « présent » pour eux.
 *
 * `height:0` et `overflow:hidden` évitent qu'il ne crée une barre de
 * défilement horizontale sur les navigateurs qui étendent le document
 * aux éléments positionnés hors du cadre.
 */
.mu-rec .mu-rec-leurre {
    position: absolute;
    left: -9999px;
    top: auto;
    width: 1px;
    height: 0;
    overflow: hidden;
}


/* ---------------------------------------------------------------------
   A9. Bloc d'alerte — erreurs de l'envoi précédent
   --------------------------------------------------------------------- */
.mu-rec .mu-rec-alerte {
    margin: 0 0 clamp(18px, 3vw, 26px);
    padding: 20px 22px;
    border-radius: var(--mu-rayon);
    border: 1px solid var(--mu-trait);
    background: var(--mu-fond-doux);
    text-align: start;
}

/* Le bloc reçoit le focus au retour d'un envoi refusé (tabindex="-1" posé
   par le PHP) : l'anneau doit rester discret, on n'y navigue pas au
   clavier volontairement. */
.mu-rec .mu-rec-alerte:focus { outline: none; }

.mu-rec .mu-rec-alerte:focus-visible {
    outline: 3px solid var(--mu-violet-actif);
    outline-offset: 3px;
}

.mu-rec .mu-rec-alerte--erreur {
    border-color: #F3BDB0;
    background: #FFF7F5;
    border-inline-start: 5px solid #E0563F;
}

.mu-rec .mu-rec-alerte-titre {
    margin: 0 0 10px;
    font-size: 16px;
    font-weight: 700;
    line-height: 1.6;
    color: #A5321C;
}

.mu-rec .mu-rec-alerte-liste {
    margin: 0;
    /* Retrait logique : en arabe, les puces doivent passer à droite. */
    padding: 0;
    padding-inline-start: 22px;
    list-style: disc;
}

.mu-rec .mu-rec-alerte-item {
    margin: 0 0 6px;
    line-height: 1.7;
    color: #7A2A18;
}

.mu-rec .mu-rec-alerte-note {
    margin: 12px 0 0;
    font-size: 13.5px;
    line-height: 1.7;
    color: var(--mu-texte-discret);
}


/* ---------------------------------------------------------------------
   A10. Page de confirmation et bloc de remplacement
   ---------------------------------------------------------------------
   Deux pages très courtes : tout l'effort porte sur le calme. On ne
   remet pas de carte blanche sur fond blanc, le contenu respire seul.
   --------------------------------------------------------------------- */
.mu-rec.mu-rec-merci .mu-rec-chapo,
.mu-rec.mu-rec-merci .mu-rec-texte,
.mu-rec.mu-rec-redirection .mu-rec-chapo {
    margin-inline: auto;
    max-width: 620px;
}

.mu-rec.mu-rec-merci { padding-block: clamp(36px, 6vw, 84px); }

.mu-rec.mu-rec-redirection {
    padding: clamp(28px, 5vw, 56px) 0;
}


/* ---------------------------------------------------------------------
   A11. Responsive — le formulaire doit être confortable sur téléphone
   ---------------------------------------------------------------------
   Points de rupture calqués sur ceux de Bootstrap 5, que le thème
   histudy utilise déjà : aucun nouveau vocabulaire de largeurs.
   --------------------------------------------------------------------- */

/* Tablette : la grille reste à deux colonnes mais les écarts se serrent. */
@media (max-width: 991.98px) {
    .mu-rec .mu-rec-form { padding: clamp(20px, 4vw, 32px); }
    .mu-rec .mu-rec-atout { padding: 14px 18px 14px 56px; }
}

/* Téléphone : une seule colonne, cibles tactiles agrandies. */
@media (max-width: 767.98px) {
    /* Le bas est redonné explicitement : cette règle a la même
       spécificité que celle du haut du fichier mais vient APRÈS, elle
       annulerait donc le clamp() sur téléphone si on l'oubliait. */
    .mu-rec { padding: 24px 0 60px; }

    .mu-rec .mu-rec-grille { grid-template-columns: minmax(0, 1fr); }

    /* Les modificateurs de largeur n'ont plus d'objet sur une colonne. */
    .mu-rec .mu-rec-champ--large,
    .mu-rec .mu-rec-champ--linkedin,
    .mu-rec .mu-rec-champ--adresse,
    .mu-rec .mu-rec-champ--email { grid-column: 1; }

    .mu-rec .mu-rec-form {
        padding: 20px 16px;
        border-radius: 20px;
    }

    /* 56 px : au-dessus du minimum de 48 px recommandé pour une cible
       tactile, avec la marge d'erreur du pouce. */
    .mu-rec .mu-rec-form .mu-rec-input { height: 56px; line-height: 52px; }
    .mu-rec .mu-rec-form input.mu-rec-input[type="date"] { min-height: 56px; }
    .mu-rec .mu-rec-radio-label { min-height: 56px; }

    /* Les deux choix de genre occupent chacun la moitié de la largeur :
       plus faciles à viser que deux pastilles serrées à gauche. */
    .mu-rec .mu-rec-radios { gap: 10px; }
    .mu-rec .mu-rec-radio { flex: 1 1 45%; }
    .mu-rec .mu-rec-radio-label { width: 100%; justify-content: center; padding: 0 12px; }

    .mu-rec .mu-rec-depot > .mu-rec-depot-zone {
        min-height: 170px;
        padding: 22px 16px;
    }

    /* Le bouton d'envoi prend toute la largeur : c'est la cible la plus
       importante de la page. */
    .mu-rec .mu-rec-actions { gap: 12px; }
    .mu-rec.mu-rec-formulaire .mu-rec-actions { justify-content: stretch; }
    .mu-rec .mu-rec-envoyer {
        width: 100%;
        padding: 0 20px !important;
    }

    .mu-rec .mu-rec-consentement {
        padding: 16px;
        gap: 12px;
    }

    .mu-rec .mu-rec-etat { padding: 24px 18px; }
}

/* Très petits écrans : on évite qu'un long libellé de bouton ne déborde. */
@media (max-width: 379.98px) {
    .mu-rec .mu-rec-bouton {
        white-space: normal;
        height: auto !important;
        min-height: 56px;
        padding: 14px 20px !important;
        line-height: 1.5 !important;
    }
}


/* ---------------------------------------------------------------------
   A12. Préférence « moins d'animations »
   ---------------------------------------------------------------------
   On coupe le mouvement, pas le style : couleurs, ombres et états de
   focus restent intacts. Les animations Lottie sont mises à l'arrêt par
   le script, qui lit la même préférence.
   --------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
    .mu-rec *,
    .mu-rec *::before,
    .mu-rec *::after {
        animation-duration: .001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .001ms !important;
        scroll-behavior: auto !important;
    }

    .mu-rec .mu-rec-atout:hover,
    .mu-rec .mu-rec-bouton:hover,
    .mu-rec .mu-rec-depot.is-active > .mu-rec-depot-zone { transform: none; }
}


/* ---------------------------------------------------------------------
   A13. Impression
   ---------------------------------------------------------------------
   Un candidat imprime parfois la page de confirmation. On retire les
   ornements coûteux en encre et on garde le texte.
   --------------------------------------------------------------------- */
@media print {
    .mu-rec::before,
    .mu-rec .mu-rec-lottie,
    .mu-rec .mu-rec-actions { display: none !important; }

    .mu-rec .mu-rec-form,
    .mu-rec .mu-rec-etat,
    .mu-rec .mu-rec-atout {
        box-shadow: none !important;
        border-color: #CCC !important;
    }
}


/* =====================================================================
   ██  PARTIE B — CÔTÉ ADMINISTRATION
   =====================================================================
   Rubrique « Recrutement de professeurs », dans le menu Tutor LMS.

   PRINCIPE : NE PAS COMBATTRE TUTOR, LE COMPLÉTER.

   Tutor charge `tutor.min.css`, `tutor-admin.min.css` et
   `tutor-icon.min.css` sur TOUS les écrans d'administration, sans
   filtrage d'écran (TUTOR\classes\Assets.php:53-58). Le balisage de la
   rubrique est donc déjà entièrement stylé par Tutor : cette partie ne
   contient QUE des retouches, sur nos propres crochets `.mu-rec-*`.

   Aucune règle ci-dessous ne redéfinit une couleur, une police ou un
   rayon de Tutor. Là où une couleur est nécessaire, on emploie ses
   variables — `var(--tutor-color-primary, …)` — avec une valeur de repli
   prise dans la palette Math Universe, pour le cas où Tutor serait
   absent (le module fonctionne seul : il crée alors son propre menu de
   repli, et le balisage reste lisible).

   Tout est porté par `.mu-rec-admin`, posé par le PHP à côté de
   `.tutor-admin-wrap`. Rien ne fuit vers le reste de l'administration.
   ===================================================================== */

.mu-rec-admin {
    --mu-adm-violet: #6E35C3;
    --mu-adm-violet-fonce: #41246D;
    --mu-adm-trait: #E7E2F3;
    --mu-adm-fond: #FAF8FF;
}

/* ---------------------------------------------------------------------
   B1. Barre de recherche
   ---------------------------------------------------------------------
   Le formulaire est un `tutor-d-flex` : sans `flex-wrap`, le champ, le
   bouton et le lien « Tout effacer » sortent du cadre sur un écran
   étroit ou avec le menu d'administration déplié.
   --------------------------------------------------------------------- */
/* ---------------------------------------------------------------------
   ESPACEMENTS REPRIS LE 8 AOÛT 2026
   ---------------------------------------------------------------------
   Constaté à l'écran : le bouton « Rechercher » passait sous le champ,
   alors que la place ne manquait pas. `flex: 1 1 260px` avec
   `max-width: 460px` laisse le champ grandir, mais rien n'empêchait le
   retour à la ligne — il suffisait que la somme des bases dépasse la
   largeur disponible une fraction de seconde au calcul.

   On rend donc la disposition DÉTERMINISTE : une seule ligne sur écran
   confortable, empilement explicite en dessous de 600 px. Plus rien
   n'est laissé à l'arbitrage du moteur.
   --------------------------------------------------------------------- */
/* ---------------------------------------------------------------------
   DÉFAUT 2 — la recherche collée au menu d'administration
   ---------------------------------------------------------------------
   Mesuré : contenu à x=160 chez nous, x=180 sur la page Cours.

   Cause : `.tutor-admin-wrap { margin-left: -20px }` (tutor-admin.min.css)
   tire tout le bloc de 20 px vers la gauche. Sur les écrans natifs, ce
   décalage est compensé par `.tutor-admin-container`, qui porte
   `padding-inline: 20px`.

   POURQUOI 20 px SUR LA SEULE BARRE D'OUTILS, ET NON SUR `.mu-rec-admin` :
   nos quatre vues placent déjà leur contenu dans un
   `.tutor-admin-container` — donc déjà rembourré. Poser le padding sur la
   racine donnerait 40 px partout ailleurs et désalignerait le tableau du
   reste de la page. Seule la barre de recherche vit hors conteneur ; elle
   seule a besoin d'être rattrapée. */
.mu-rec-admin .tutor-wp-dashboard-course-filter {
    padding-inline: 20px;
}

.mu-rec-admin .mu-rec-recherche {
    display: flex !important;
    flex-wrap: nowrap;
    align-items: center;
    gap: 8px;
    max-width: 720px;

    /* 24 px : c'est ce qui décolle la recherche des onglets. Sans cette
       marge, le champ venait se coller sous la navigation — le défaut
       relevé à l'écran. Même valeur que la marge basse de l'en-tête,
       pour que le rythme reste constant sur toute la page. */
    margin-top: 24px;
    margin-bottom: 24px;
}

/* Hauteur commune de 40 px, celle de la barre d'outils de la page Cours.
   Champ et bouton alignés au pixel près : sans cela, deux éléments de
   hauteurs différentes sur une même ligne se voient immédiatement. */
.mu-rec-admin .mu-rec-recherche .tutor-form-control,
.mu-rec-admin .mu-rec-recherche .tutor-btn {
    height: 40px;
}

/* ---------------------------------------------------------------------
   DÉFAUT 3 — le texte indicatif tronqué
   ---------------------------------------------------------------------
   Mesuré : champ de 238 px, dont 40 px de rembourrage à gauche (la loupe)
   et 16 px à droite → 181 px pour le texte. Or « Rechercher un nom, une
   ville… » en occupe 215 à cette police. Il manquait 36 px.

   Ma supposition initiale — « c'est min-width:0 qui laisse rétrécir » —
   était à côté. `min-width: 0` AUTORISE le rétrécissement, il ne le
   provoque pas. La vraie cause est l'absence de largeur CIBLE : le
   conteneur `.mu-rec-recherche` n'est jamais étiré, donc le champ garde
   sa largeur intrinsèque par défaut (~240 px) alors qu'il avait la place
   d'aller jusqu'à 720 px.

   D'où une base flex explicite, et un plancher de 300 px — les 274 px
   nécessaires, plus une marge pour les traductions plus longues. */
.mu-rec-admin .mu-rec-recherche .tutor-form-wrap {
    flex: 1 1 320px;
    min-width: 300px;
    max-width: none;
}

/* Le plancher de 300 px est relâché sur petit écran — voir la règle de la
   media query à 600 px plus bas. Ne pas ajouter de point de rupture
   supplémentaire ici : deux seuils qui se recouvrent finissent toujours
   par se contredire. */

.mu-rec-admin .mu-rec-recherche .tutor-form-control { width: 100%; }

/* Le bouton garde sa largeur naturelle, jamais compressé. */
.mu-rec-admin .mu-rec-recherche .tutor-btn {
    flex: 0 0 auto;
    white-space: nowrap;
}

@media (max-width: 600px) {
    .mu-rec-admin .mu-rec-recherche {
        flex-wrap: wrap;
        row-gap: 10px;
    }

    /* `min-width: 0` est INDISPENSABLE ici : sans lui, le plancher de
       300 px posé plus haut survivrait à l'empilement et ferait déborder
       la page sur un téléphone étroit. Un texte indicatif tronqué est un
       moindre mal face à un défilement horizontal. */
    .mu-rec-admin .mu-rec-recherche .tutor-form-wrap {
        flex: 1 1 100%;
        min-width: 0;
    }

    .mu-rec-admin .mu-rec-recherche .tutor-btn { flex: 1 1 100%; }
}


/* ---------------------------------------------------------------------
   RYTHME VERTICAL DE LA RUBRIQUE
   ---------------------------------------------------------------------
   Une page d'administration se lit d'un coup d'œil : les respirations
   doivent être régulières, sinon l'œil ne sait plus où commencent les
   blocs. Trois valeurs seulement — 16, 28 et 40 px — plutôt qu'une
   dizaine de marges décidées au cas par cas.
   --------------------------------------------------------------------- */
/* ---------------------------------------------------------------------
   ALIGNEMENT SUR LA PAGE « COURS » DE TUTOR — 8 août 2026
   ---------------------------------------------------------------------
   Valeurs relevées sur wp-admin/admin.php?page=tutor, puis VERIFIEES
   dans les feuilles livrées :

     .tutor-wp-dashboard-header  → border-bottom:1px solid #e0e2ea
                                   margin-bottom:24px        (tutor.min.css)
     .tutor-py-16                → padding: 16px 0           (utilitaire)
     .tutor-wp-dashboard-header-inner
                                 → display:flex ; space-between ;
                                   align-items:center ; gap:16px
     .tutor-admin-container      → max-width:1160px ; padding-inline:20px
     .tutor-admin-wrap           → margin-left:-20px  (AUCUN padding haut)

   C'est ce dernier point qui expliquait le défaut : le conteneur ne
   réserve aucune respiration en haut. Sur les pages natives, l'air vient
   du gabarit qui les précède ; notre rubrique, rendue directement, n'en
   hérite pas et le titre se retrouvait au ras de la barre d'administration.

   On ne se repose donc plus sur ce que la page a « peut-être » hérité :
   les trois valeurs sont posées explicitement.
   --------------------------------------------------------------------- */
.mu-rec-admin {
    padding-top: 8px;
    padding-bottom: 40px;
}

/* ---------------------------------------------------------------------
   DÉFAUT 1 — l'icône collée au libellé dans les boutons
   ---------------------------------------------------------------------
   Diagnostic mesuré : écart réel de 0 px entre le bord droit de l'icône
   et le bord gauche du texte, `gap` calculé à `normal`.

   La cause n'est PAS un écrasement, contrairement à ce que je supposais :
   c'est une ABSENCE. Nos boutons portent `tutor-btn tutor-btn-primary
   tutor-btn-sm` — jamais `tutor-gap-1`. Or l'espacement correct des
   boutons natifs de Tutor ne vient QUE de cette classe utilitaire
   (`.tutor-gap-1 { gap: .5rem !important }`) : aucune règle générique de
   `.tutor-btn` n'écarte l'icône du texte.

   Chez nous, `tutor-gap-1` est bien présente, mais sur le CONTENEUR des
   boutons — elle espace donc les boutons entre eux, pas leur contenu.

   8 px : la valeur mesurée sur « Nouveau cours » de la page Cours. */
.mu-rec-admin .tutor-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}

/* L'en-tête : mêmes valeurs que la page Cours, écrites en toutes lettres
   pour ne dépendre ni de l'utilitaire tutor-py-16 ni de l'ordre des
   feuilles. */
.mu-rec-admin .tutor-wp-dashboard-header {
    padding: 16px 0;
    margin: 0 0 24px;
    border-bottom: 1px solid #e0e2ea;
}

/* Titre à gauche, actions à droite, sur une seule ligne. Tutor le fait
   déjà sur `-inner` ; on le réaffirme pour que la rubrique reste juste
   même si cette classe disparaissait d'une version à l'autre. */
.mu-rec-admin .tutor-wp-dashboard-header-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
}

/* Les onglets ne doivent pas coller au contenu qui les suit. */
.mu-rec-admin .tutor-admin-container + .tutor-admin-container {
    margin-top: 24px;
}

/* Le tableau des candidatures et la pagination ne se touchent pas. */
.mu-rec-admin .tutor-admin-page-pagination-wrapper {
    margin-top: 24px;
    padding-bottom: 8px;
}

/* ---------------------------------------------------------------------
   L'ÉCHELLE D'ESPACEMENT
   ---------------------------------------------------------------------
   Tutor n'improvise pas ses marges : 16, 24, puis 32/40 pour les grands
   blocs. On s'y tient, faute de quoi Recrutement « respirerait »
   autrement que Cours et l'écart se verrait au premier coup d'œil.

   La couleur d'accent n'est PAS écrite en dur (#3E64DE) mais lue dans
   `--tutor-color-primary` : si Tutor change sa teinte, la rubrique suit
   au lieu de jurer.
   --------------------------------------------------------------------- */


/* ---------------------------------------------------------------------
   B2. État vide d'une liste
   --------------------------------------------------------------------- */
.mu-rec-admin .mu-rec-vide {
    background: var(--mu-adm-fond);
}

/* `tutor-py-64` donne 64 px en haut ET en bas : sur une liste vide, le
   bloc occupait presque tout l'écran pour deux lignes de texte. On
   ramène à 48 px, et à 32 px sur petit écran où la hauteur est le bien
   le plus rare. */
.mu-rec-admin .mu-rec-vide {
    padding-top: 48px !important;
    padding-bottom: 48px !important;
}

@media (max-width: 782px) {
    .mu-rec-admin .mu-rec-vide {
        padding-top: 32px !important;
        padding-bottom: 32px !important;
        padding-inline: 20px !important;
    }
}

/* Le sous-titre explique quoi faire ; il ne doit pas s'étirer sur toute
   la largeur d'un grand écran, où il deviendrait illisible. */
.mu-rec-admin .mu-rec-vide .tutor-fs-7 {
    max-width: 560px;
    margin-inline: auto;
    line-height: 1.7;
}


/* ---------------------------------------------------------------------
   B3. Fiche de détail d'une candidature
   --------------------------------------------------------------------- */

/* La barre d'actions (retour à gauche, Conserver/Archiver à droite) doit
   se replier proprement quand la fenêtre est étroite. */
.mu-rec-admin .mu-rec-detail > .tutor-d-flex {
    flex-wrap: wrap;
    row-gap: 10px;
}

/* Chaque paire libellé / valeur. La ligne d'accent violette n'apparaît
   qu'au survol : elle guide la lecture sans quadriller la fiche. */
.mu-rec-admin .mu-rec-fiche-item .tutor-meta {
    position: relative;
    padding-inline-start: 14px;
    border-inline-start: 3px solid transparent;
    transition: border-color .25s ease;
}

.mu-rec-admin .mu-rec-fiche-item:hover .tutor-meta {
    border-inline-start-color: var(--tutor-color-primary, var(--mu-adm-violet));
}

/* Les valeurs longues — une adresse, un lien LinkedIn — ne doivent pas
   élargir la grille ni déborder de la carte. */
.mu-rec-admin .mu-rec-fiche-item .tutor-meta-value {
    overflow-wrap: anywhere;
    line-height: 1.7;
}

/* Le message du candidat est déjà converti par nl2br() côté PHP : on lui
   donne un fond pour le distinguer des champs courts, sans toucher au
   balisage. */
.mu-rec-admin .mu-rec-fiche-message {
    display: block;
    margin-top: 6px;
    padding: 14px 16px;
    background: var(--mu-adm-fond);
    border: 1px solid var(--mu-adm-trait);
    border-radius: 8px;
    line-height: 1.8;
    /* Les espaces multiples d'un message collé depuis un traitement de
       texte sont conservés ; les retours à la ligne, eux, sont déjà des
       <br>, d'où `pre-line` et non `pre-wrap`. */
    white-space: pre-line;
    overflow-wrap: anywhere;
}

/* Le message occupe toute la largeur de la fiche : sur une demi-colonne,
   il serait haché en bandes de six mots.

   `width` est INDISPENSABLE ici, et c'est le seul moyen : Tutor
   dimensionne ses colonnes avec `.tutor-col-lg-6{flex:none;width:50%}`
   (tutor.min.css) et non avec `max-width` comme le fait Bootstrap. Une
   règle qui ne poserait que `flex` et `max-width` laisserait la colonne
   à 50 % — vérifié dans la feuille livrée. Notre sélecteur est en
   (0,2,0) contre (0,1,0), donc gagnant sans `!important`. */
.mu-rec-admin .mu-rec-fiche-item--message {
    flex: 0 0 100%;
    width: 100%;
    max-width: 100%;
}

/* ---- Le bloc du CV --------------------------------------------------
   La forme et l'espacement viennent de `.mu-rec-encart` (voir le socle
   plus bas) : ce bloc portait lui aussi `tutor-round-box`, la pastille
   d'icône de 60 px. */
.mu-rec-admin .mu-rec-fiche-cv {
    margin-top: 16px;
    background: var(--mu-adm-fond);
    border: 1px solid var(--mu-adm-trait);
    transition: border-color .25s ease, box-shadow .25s ease;
}

.mu-rec-admin .mu-rec-fiche-cv:hover {
    border-color: var(--tutor-color-primary, var(--mu-adm-violet));
    box-shadow: 0 6px 18px rgba(110, 53, 195, .10);
}

/* Sur écran étroit, le nom du fichier et le bouton de téléchargement se
   superposent : on les empile. */
.mu-rec-admin .mu-rec-fiche-cv .tutor-d-flex {
    flex-wrap: wrap;
    row-gap: 10px;
}

/* ---- Traçabilité du consentement ------------------------------------
   Information juridique, à lire mais pas à mettre en avant : un filet
   de séparation suffit. */
.mu-rec-admin .mu-rec-fiche-consentement {
    padding-top: 14px;
    border-top: 1px solid var(--mu-adm-trait);
    line-height: 1.7;
}


/* ---------------------------------------------------------------------
   B4. Écran des réglages
   --------------------------------------------------------------------- */

/* L'interrupteur et son explication : sur écran étroit, l'interrupteur
   passe sous le texte plutôt que de l'écraser. */
.mu-rec-admin .mu-rec-reglages .tutor-card .tutor-d-flex {
    flex-wrap: wrap;
    row-gap: 16px;
}

/* Le sélecteur de page ne doit pas s'étirer sur toute la largeur d'un
   grand écran : un menu déroulant de 1 200 px est pénible à viser. */
.mu-rec-admin .mu-rec-reglage-page select {
    width: 100%;
    max-width: 460px;
}

.mu-rec-admin .mu-rec-reglage-page + .mu-rec-reglage-page {
    padding-top: 16px;
    border-top: 1px solid var(--mu-adm-trait);
}

/* ---------------------------------------------------------------------
   SOCLE DES ENCARTS — corrigé le 8 août 2026
   ---------------------------------------------------------------------
   Ces deux blocs portaient `tutor-round-box tutor-p-16 tutor-mt-32`.
   C'était une méprise sur le nom : chez Tutor, `.tutor-round-box` n'est
   PAS un conteneur aux coins arrondis, c'est une PASTILLE d'icône —

       .tutor-round-box { width:60px; height:60px; border-radius:80px;
                          display:flex; justify-content:center }

   Résultat à l'écran : le texte du rappel était comprimé dans un cercle
   de 60 px, tronqué sur trois lignes, flottant sous le bouton
   d'enregistrement. Le CV de la fiche de détail subissait le même sort.

   On ne dépend donc plus des classes utilitaires de Tutor pour la forme
   ni l'espacement : `.mu-rec-encart` s'en charge, et les règles de
   couleur ci-dessous restent inchangées.
   --------------------------------------------------------------------- */
.mu-rec-admin .mu-rec-encart {
    display: block;
    width: auto;
    height: auto;
    box-sizing: border-box;
    padding: 16px 18px;
    margin-top: 24px;
    border-radius: 8px;
}

/* Le rappel de conservation des données : discret, mais visiblement
   distinct du formulaire au-dessus. */
.mu-rec-admin .mu-rec-reglages-note {
    margin-top: 32px;
    background: var(--mu-adm-fond);
    border: 1px solid var(--mu-adm-trait);
    border-inline-start: 3px solid var(--tutor-color-primary, var(--mu-adm-violet));
    line-height: 1.75;
}

.mu-rec-admin .mu-rec-reglages-note p {
    margin: 0;
}

.mu-rec-admin .mu-rec-reglages-note p + p {
    margin-top: 10px;
}

/* Le champ de message d'annonce : une hauteur de lecture confortable. */
.mu-rec-admin #mu-rec-message {
    min-height: 110px;
    line-height: 1.7;
    resize: vertical;
}


/* ---------------------------------------------------------------------
   B5. Liens de la rubrique
   ---------------------------------------------------------------------
   `.mu-rec-lien` sert aussi côté administration (e-mail, téléphone,
   LinkedIn, aperçu des pages). Ici le kit Elementor n'existe pas — le
   `!important` de la partie A serait sans objet, on ne le reprend donc
   pas. On reste sur la couleur primaire de Tutor.
   --------------------------------------------------------------------- */
.mu-rec-admin .mu-rec-lien {
    color: var(--tutor-color-primary, var(--mu-adm-violet));
    text-decoration: none;
    font-weight: 500;
    overflow-wrap: anywhere;
}

.mu-rec-admin .mu-rec-lien:hover,
.mu-rec-admin .mu-rec-lien:focus {
    color: var(--tutor-color-primary-hover, var(--mu-adm-violet-fonce));
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* L'icône « lien externe » collée au texte manque d'air. */
.mu-rec-admin .mu-rec-lien .tutor-icon-external-link { margin-inline-start: 4px; }


/* ---------------------------------------------------------------------
   B6. Responsive de l'administration
   ---------------------------------------------------------------------
   La zone utile de wp-admin descend sous 700 px dès que le menu latéral
   est déplié sur un portable. Les tableaux de Tutor gèrent déjà leur
   défilement horizontal (`tutor-table-responsive`) : on ne touche qu'à
   ce qui est à nous.
   --------------------------------------------------------------------- */
@media (max-width: 782px) {
    .mu-rec-admin .mu-rec-recherche .tutor-form-wrap {
        flex-basis: 100%;
        max-width: none;
    }

    .mu-rec-admin .mu-rec-fiche-cv .tutor-btn { width: 100%; justify-content: center; }

    .mu-rec-admin .mu-rec-detail > .tutor-d-flex > .tutor-d-flex { width: 100%; }

    .mu-rec-admin .mu-rec-reglage-page select { max-width: none; }
}


/* =====================================================================
   FIN — mu-recrutement.css
   ---------------------------------------------------------------------
   Rappel pour toute reprise ultérieure :
     · deux classes minimum côté public, `!important` uniquement sur les
       propriétés que `.elementor-kit-1690 button|a` dispute réellement ;
     · rien ne se masque en attendant du JavaScript ;
     · `.mu-rec-leurre` jamais en `display:none` ;
     · `.mu-rec-depot-input` jamais en `display:none` — il porte le clic,
       le dépôt et le focus clavier ;
     · `.mu-rec-lottie` sans hauteur tant que l'animation n'est pas
       chargée.
   ===================================================================== */
