/* ==========================================================================
   Compléments propres à WordPress.
   style.css est repris tel quel de la maquette : on ne le modifie pas, pour
   pouvoir le recopier si le designer le met à jour. Les ajouts vont ici.
   ========================================================================== */

/* WP Job Manager : messages affichés par le plugin lui-même, au-dessus du formulaire.
   Les erreurs de saisie sont affichées par le thème (résumé + message sous chaque champ) :
   le plugin n'imprime alors qu'un bloc vide, masqué ici. Les autres erreurs (fichier
   refusé, session expirée…) gardent l'apparence d'une alerte de la maquette, comme les
   messages de l'espace entreprise après une action (.jm-notice : « … a été pourvu »). */
.job-manager-error:empty,
.job-manager-message:empty { display: none; }
.job-manager-error,
.job-manager-message,
.jm-notice {
  margin-bottom: 24px;
  padding: 16px;
  border: 1px solid var(--danger-line);
  border-left-width: 4px;
  border-radius: var(--radius);
  background: var(--danger-tint);
  color: var(--ink);
  font-weight: 600;
}
.job-manager-message,
.jm-notice:not(.color-error) {
  border-color: var(--success-line);
  background: var(--success-tint);
}
.jm-notice .jm-ui-icon { display: none; }

/* Confirmation du formulaire de contact : elle reçoit le focus pour les lecteurs d'écran,
   sans contour rouge qui la ferait prendre pour une erreur. */
.result-panel[tabindex="-1"]:focus { outline: none; }

/* Dépôt d'offre : vérification anti-robot */
.captcha-field .cf-turnstile { margin-top: 8px; min-height: 65px; }

/* Blocs AdSense réels (plugin emplois-core). Masqués tant que la publicité n'est pas
   acceptée : la classe « emplois-pub » est posée sur <html> dès la lecture du choix.
   Un encart comme les cartes du site, mention « Publicité » en haut, annonce centrée. */
/* place-items : le centrage de la maquette réduirait le bloc d'annonce à une largeur nulle. */
.ad-slot--adsense {
  display: none; place-items: normal; container-type: inline-size;
  /* Google fixe en pixels la largeur d'une annonce au chargement (In-Feed : largeur du bloc à ce moment).
     Si la fenêtre rétrécit ensuite (rotation, fenêtre redimensionnée), l'annonce reste plus large que son
     bloc : le bloc la contient au lieu de faire déborder toute la page (02/11/2026). */
  min-width: 0; max-width: 100%; overflow: hidden;
  min-height: 0; padding: 30px 0 14px;
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-lg);
}
.emplois-pub .ad-slot--adsense { display: block; }
.ad-slot--adsense::before { top: 9px; left: 0; right: 0; font-size: 0.6875rem; letter-spacing: 0.08em; text-transform: uppercase; }
/* Colonne de la fiche : sans cadre, juste sous le résumé, pour que l'ensemble tienne à l'écran */
.job-aside .ad-slot--adsense { padding: 22px 0 0; border: 0; background: none; }
.job-aside .ad-slot--adsense::before { top: 0; }
/* Taille exacte de l'annonce selon la place disponible (requête de conteneur) : la place est
   réservée dès le premier rendu, la page ne saute pas à l'arrivée de l'annonce. */
.ad-slot--adsense ins.adsbygoogle { display: inline-block; vertical-align: top; }
/* Rectangle (fiche offre) : 300 × 250, ou 336 × 280 quand la place le permet */
.ad-slot--rect ins.adsbygoogle { width: 300px; height: 250px; }
@container (min-width: 352px) { .ad-slot--rect ins.adsbygoogle { width: 336px; height: 280px; } }
/* Bannière (listes, accueil) : 320 × 100 sur mobile, puis 468 × 60, puis 728 × 90 */
.ad-slot--banner ins.adsbygoogle { width: 320px; height: 100px; }
@container (min-width: 480px) { .ad-slot--banner ins.adsbygoogle { width: 468px; height: 60px; } }
@container (min-width: 744px) { .ad-slot--banner ins.adsbygoogle { width: 728px; height: 90px; } }
/* Écrans de moins de 320 px (02/11/2026) : formats AdSense standard plus petits, pour ne jamais
   déborder : carré 250 × 250 au lieu du rectangle 300 × 250, demi-bannière 234 × 60 au lieu de 320 × 100. */
@container (max-width: 299.98px) { .ad-slot--rect ins.adsbygoogle { width: 250px; height: 250px; } }
@container (max-width: 319.98px) { .ad-slot--banner ins.adsbygoogle { width: 234px; height: 60px; } }
/* Écrans de 320 px : l'encart (288 px entre les gouttières) est plus étroit que la bannière 320 × 100
   et le rectangle 300 × 250 ; il occupe alors toute la largeur de l'écran, sans bord latéral. */
@media (max-width: 351.98px) {
  .ad-slot--adsense { margin-inline: calc(-1 * var(--gutter, 16px)); border-inline: 0; border-radius: 0; }
  .job-aside .ad-slot--adsense { margin-inline: 0; }
}
html:not(.emplois-pub) .job-list__ad:has(> .ad-slot--adsense) { display: none; }
/* Aucune annonce disponible pour ce bloc : AdSense le marque « unfilled », on le retire. */
.ad-slot--adsense:has(ins[data-ad-status="unfilled"]),
.job-list__ad:has(ins[data-ad-status="unfilled"]) { display: none !important; }
/* In-Feed pas encore rempli (chargement différé) : pas de cadre violet vide de 16 px. */
.ad-slot--adsense.ad-slot--infeed:not(:has(ins[data-ad-status="filled"])) { padding: 0; background: none; border-width: 0; }
/* Listes : annonce In-Feed native (style « V6 violet » choisi le 02/11/2026, fond lilas #fbf2fd, titre #6a0080,
   description #5d6472, annonceur #3d0047, bouton #be00dd, réglés dans AdSense). Le thème ne
   touche qu'au cadre, du même fond que l'annonce : bordure violette, coins arrondis, petite
   marge pour que l'arrondi ne rogne jamais l'annonce. Pas de mention « Publicité » : l'annonce
   porte déjà son badge « Annonce ». Hauteur variable, fixée par AdSense. */
.ad-slot--adsense.ad-slot--infeed {
  min-width: 0; min-height: 0; padding: 6px;
  background: #fbf2fd; border: 2px solid var(--pub-infeed, #be00dd); border-radius: 16px;
}
.ad-slot--infeed::before { content: none; }
/* Annonce sans habillage (listes, avant la pagination, 02/11/2026) : ni cadre ni mention
   « Publicité ». La classe ad-slot--adsense reste : mesure.js et le masquage des blocs vides en dépendent. */
.ad-slot--adsense.ad-slot--nu { padding: 0; background: none; border: 0; border-radius: 0; }
.ad-slot--nu::before { content: none; }
.ad-slot--adsense.ad-slot--infeed ins.adsbygoogle { display: block; width: 100%; }
@media (max-width: 351.98px) {
  .ad-slot--adsense.ad-slot--infeed { margin-inline: 0; border-inline: 2px solid var(--pub-infeed, #be00dd); border-radius: 16px; }
}

/* Contenu saisi dans l'éditeur de blocs (pages de contenu) */
.prose img { max-width: 100%; height: auto; border-radius: var(--radius); }
.prose figure { margin: 1.5em 0; }
.prose figcaption { margin-top: 8px; font-size: 0.875rem; color: var(--muted); }
/* Tableau de l'éditeur de blocs : défile dans son cadre, comme .table-wrap de la maquette */
.prose .wp-block-table { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius); }
.prose .wp-block-table table { margin: 0; }
.prose .alignleft { float: left; margin: 0 1.5em 1em 0; }
.prose .alignright { float: right; margin: 0 0 1em 1.5em; }
.prose .aligncenter { display: block; margin-left: auto; margin-right: auto; }

/* Fenêtre de connexion des recruteurs (template-parts/connexion.php, styles dans style.css,
   section 30) : place réservée à la vérification anti-robot. */
.connexion__captcha { min-height: 65px; margin-top: 8px; }

/* Profil de l'entreprise (page-profil.php) : aperçu du logo choisi */
.file-item__apercu { flex: none; width: 56px; height: 56px; object-fit: contain; padding: 4px; border: 1px solid var(--line); border-radius: var(--radius-sm); background: var(--surface); }

/* Page société : présentation et site web validés depuis le profil */
.company-about { max-width: 760px; margin: 16px 0 28px; }
.company-about__text p { margin: 0 0 12px; color: var(--ink-2); line-height: 1.65; }
.company-about__site { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; }

/* Contenu principal ciblé par « Aller au contenu » : il reçoit le focus sans contour. */
main[tabindex="-1"]:focus { outline: none; }

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

/* Barre d'administration WordPress : l'en-tête collant reste visible dessous */
.admin-bar .site-header { top: 32px; }
@media (max-width: 782px) { .admin-bar .site-header { top: 46px; } }
@media (max-width: 600px) { .admin-bar .site-header { top: 0; } }

/* Mes offres : le texte masqué des compteurs reste dans la barre d'onglets qui défile (sinon il élargit la page sur mobile) */
.statuts a, .espace-nav__liens a { position: relative; }

/* Espace entreprise, étape 2 : fiche d'une offre (deux chiffres) et étapes faites de « Pour bien démarrer » */
.kpis--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (min-width: 900px) { .kpis--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.todo__icone--fait { background: var(--success-tint); color: var(--success); }



/* Dépôt d'offre en blocs : la vérification anti-robot, hors des sections, a sa propre carte */
.form-blocs > .captcha-field { margin-top: 20px; padding: 24px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); }
@media (min-width: 768px) { .form-blocs > .captcha-field { padding: 32px 40px; } }

/* Pages de contenu (maquette : qui-sommes-nous.html, confidentialite.html) */
/* « Comment ça marche » : deux cartes dans le texte de la page */
.prose .how-cards { margin-top: 24px; }
.prose .how-card > * + * { margin-top: 0.8em; }
.prose .how-card .aside-card__title { margin: 0 0 4px; font-size: 1.0625rem; }
.prose .how-card ol { flex: 1; }
.how-card__action { margin-top: auto; padding-top: 16px; }
/* Icônes des cartes, dessinées en CSS : le texte de la page ne peut pas contenir de SVG */
.how-card__icone::before { content: ""; width: 20px; height: 20px; background: currentColor; -webkit-mask: var(--icone) center / contain no-repeat; mask: var(--icone) center / contain no-repeat; }
.how-card__icone--candidat { --icone: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E"); }
.how-card__icone--recruteur { --icone: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z'/%3E%3Cpath d='M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2'/%3E%3Cpath d='M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2'/%3E%3Cpath d='M10 6h4'/%3E%3Cpath d='M10 10h4'/%3E%3Cpath d='M10 14h4'/%3E%3Cpath d='M10 18h4'/%3E%3C/svg%3E"); }
.prose .table-wrap { margin-top: 1em; }
/* Sommaire replié (mobile) : bouton sur toute la largeur, flèche qui pivote à l'ouverture */
.toc__toggle { display: flex; align-items: center; min-height: 44px; padding: 0; border: 0; background: none; color: var(--ink); font-weight: 600; font-size: 0.9375rem; text-align: left; }
.toc__toggle > .icon:last-child { transition: transform var(--base) var(--ease); }
.toc__toggle[aria-expanded="true"] > .icon:last-child { transform: rotate(180deg); }
.toc--mobile { padding-block: 8px; }

/* Barre noire : de 640 à 799 px (téléphone en paysage, tablette, zoom à 200 %), le compteur
   « nouvelles cette semaine » passait sous « Espace entreprise ». style.css le masque déjà sous
   640 px ; on étend ce masquage jusqu'à 799 px (test du 24/10/2026, ANO-03). Au-delà, s'il
   manque encore de la place (barre de défilement, compteurs plus longs), le texte se coupe
   avec « … » au lieu de passer sous les liens. */
@media (min-width: 640px) and (max-width: 799.98px) { .topbar__sep, .topbar__new { display: none; } }
.topbar__new { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
