/* ==========================================================
   BMDAV — CUSTOM OVERRIDES
   ========================================================== */

/* ---------- TYPOGRAPHY : font-inheritance fix.

   common.css only applies `font-family: 'Catamaran', sans-serif` to an
   explicit tag allowlist (a, p, h1-h5, input, select, button, textarea,
   li, label, th, td) -- <body> itself has no font-family at all. Any text
   inside a <span> or <div> that isn't one of those tags (eyebrow pills,
   badges, tags -- .hero-badge, .ctacard-num, .whoweare-eyebrow, etc.) was
   silently falling back through inheritance to the browser default
   (Times New Roman), invisible in a quick glance but very visible once
   you compare it against the approved reference side by side. Setting it
   once on body.homepage lets normal CSS inheritance cover every
   descendant, tag allowlist or not. Page-scoped: does not touch
   common.css or any other page. ---------- */
body.homepage {
  font-family: 'Catamaran', sans-serif;
}

/* ---------- LAYOUT FIX : de-float the legacy 2-column content+sidebar
   template on the homepage specifically.

   Root cause of two separate visual bugs reported after 2384c0c:
   - "Dernieres publications" intruding into the hero: .featured is a
     float:left, width:250px sidebar (common.css) that sits alongside
     .maincontent starting from the TOP of .body, for the sidebar's own
     full height -- not wherever it happens to appear in the HTML
     source. Since the hero is now the first thing inside .maincontent,
     the floated sidebar runs alongside it from the very top.
   - Dark/illegible text over light sections ("QUI SOMMES NOUS",
     "NOS MISSIONS"): that same floated sidebar's <h4 class="white">
     assumes it's always over a dark backdrop. It isn't -- it runs
     alongside whichever section happens to be at that scroll depth,
     including the plain white/light ones.
   - Membership cards wrapping 2+1 instead of 3-across, hero not
     reading as truly full-width: .maincontent itself is only
     calc(100% - 265px) wide (common.css), permanently narrowed to
     leave room for the sidebar. Every new full-width component built
     on top of it inherited that narrower effective width.
   - section{float:left} (common.css) is also a global legacy rule;
     combined with the above it's what made #hero, an intended flex/
     grid container, behave as a floated box instead of a normal
     full-width block.

   Scoped to body.homepage only (this repo's other pages -- DA/DV/
   Admin/content pages -- keep the original 2-column template
   untouched; custom-overrides.css itself is also only ever loaded by
   this one template, confirmed via grep before relying on it). ---------- */
.homepage .maincontent {
  float: none;
  width: 100%;
}
/* .body (common.css) is capped at `max-width: 1800px`, while header.css's
   `header` is `max-width: none` (full-width, fluid clamp() padding) -- two
   different container rules for what should be the same page width. Below
   1800px this cap is invisible (.body never reaches it), but past it the
   homepage content stops growing while the header keeps going, producing a
   visible width mismatch between them; the same cap also interacts badly
   with .body's `float: left` (auto margins never apply to a floated box),
   which is what caused the content to pin to one side instead of even
   staying centered. Root fix: drop the cap entirely so .body is full-width
   at every viewport/zoom, matching the header's own container, and de-float
   it so it behaves as a normal in-flow block. Padding stays the existing
   40px (already within a reasonable 24-40px range) via common.css, just no
   longer capped. Scoped to .homepage so other pages using the same
   .body/common.css template are unaffected. */
.homepage .body {
  float: none;
  max-width: none;
}
/* footer.css's .footer-container is also capped at max-width:1800px
   (shared by every page). On the homepage specifically it must match
   .body's now-uncapped width, so it's overridden here rather than in the
   sitewide footer.css -- other pages keep the original capped footer. */
.homepage .footer-container {
  max-width: none;
}
/* .body itself is float:left (common.css) with no clearfix anywhere in this
   codebase (confirmed via search). A floated element doesn't push down
   normal-flow siblings after it -- footer (a normal, non-floated sibling of
   .body, included right after it closes) was rendering at the same y:0
   as .body instead of below its ~5000px of real content, making it
   permanently invisible without ever scrolling past it. The fix belongs on
   the element AFTER the float (clear it), not inside .body itself.
   Scoped to .homepage so other pages using the same .body/common.css
   template are unaffected. */
.homepage footer {
  clear: both;
}
.homepage section {
  float: none;
}
.homepage .featured {
  float: none;
  width: 100%;
  max-width: none;
  margin-left: 0;
  margin-bottom: 0;
}

/* ---------- Hero background : approved image, sized to height (not cover)
   and pinned to the side opposite the hero text -- right in LTR, left in
   RTL, matching #hero's own text/illustration column order -- scaled up
   (148% of hero height) so it reads as large/dominant rather than just
   filling its natural size.
   A second background layer (a navy -> navy-at-0-alpha linear-gradient,
   same direction as the image) sits on top of the image and fades it into
   the navy fill ONLY in the seam between the text zone and the artwork.
   Sized as a % of the hero itself (not a fixed px box) so the stops read
   directly as "% of hero width", matching how the transition zone is
   specified: solid through ~35%, fully faded out (image at full opacity,
   untouched) by ~58%, leaving the artwork -- copyright mark, mic,
   headphones, palette, clapperboard -- completely sharp across the
   right/outer ~40% of the hero. The end stop is navy-at-0-alpha rather
   than the `transparent` keyword (which is black-at-0-alpha) so the color
   channel doesn't drift toward black mid-fade. background-color is the
   existing dark navy, filling whatever space neither layer reaches. ---------- */
.body .mainbg {
  background-image:
    linear-gradient(
      to right,
      #17285f 0%,
      #17285f 35%,
      rgba(23,40,95,0.6) 45%,
      rgba(23,40,95,0.25) 52%,
      rgba(23,40,95,0) 58%
    ),
    url('../img/bg/backgrd.png');
  background-repeat: no-repeat, no-repeat;
  background-size: 100% 100%, cover;
  background-position: left center, center center;
  background-color: #17285f;
  height: 720px;
}
.rightToLeft .body .mainbg {
  background-image:
    linear-gradient(
      to left,
      #17285f 0%,
      #17285f 35%,
      rgba(23,40,95,0.6) 45%,
      rgba(23,40,95,0.25) 52%,
      rgba(23,40,95,0) 58%
    ),
    url('../img/bg/backgrd.png');
  background-position: right center, center center;
}

/* ---------- #hero : two-column (text + placeholder illustration) ---------- */
#hero {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 620px) minmax(0, 1fr);
  align-items: center;
  justify-content: space-between;
  gap: 40px;
  padding-top: 60px;
  padding-bottom: 60px;
  min-height: 460px;
  color: white;
}
.hero-text {
  max-width: 620px;
}
#hero .hero-badge {
  display: inline-block;
  border: 1px solid rgba(255,255,255,.3);
  padding: 10px 20px;
  border-radius: 40px;
  color: var(--yellow);
  font-size: 13px;
  font-weight: 800;
  letter-spacing: 1px;
  margin-bottom: 26px;
}
#hero h1 {
  color: white;
  font-size: 46px;
  line-height: 1.15;
  margin-bottom: 22px;
}
#hero p {
  color: rgba(255,255,255,.85);
  font-size: 17px;
  line-height: 1.7;
  max-width: 560px;
  margin-bottom: 36px;
}
.hero-actions {
  display: flex;
  align-items: center;
  gap: 18px;
  flex-wrap: wrap;
}
.hero-actions .bigbutton {
  position: static;
  float: none;
  width: auto;
  height: auto;
  display: inline-block;
  padding: 16px 32px;
  border-radius: 30px;
  box-shadow: 0 14px 28px -16px rgba(10,48,110,0.45);
  transition: .2s ease;
}
.hero-actions .bigbutton:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 34px -14px rgba(10,48,110,0.55);
}
.btn-ghost {
  display: inline-block;
  color: white;
  font-weight: 700;
  font-size: 15px;
  text-decoration: none;
  padding: 15px 30px;
  border: 1px solid rgba(255,255,255,.4);
  border-radius: 30px;
  transition: .2s ease;
}
.btn-ghost:hover {
  background: rgba(255,255,255,.1);
  border-color: white;
}

/* ---------- Hero placeholder illustration ---------- */
.hero-illustration {
  position: relative;
  width: min(320px, 100%);
  aspect-ratio: 1 / 1;
  min-width: 0;
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
}
.hero-illustration-mark {
  width: 68%;
  height: 68%;
}
.hero-illustration-glow {
  position: absolute;
  inset: 20px;
  background: radial-gradient(circle, rgba(255,122,28,.25) 0%, rgba(255,122,28,0) 70%);
  border-radius: 50%;
}
.hero-illustration-mark {
  position: relative;
  z-index: 1;
}
.hero-illustration-icon {
  position: absolute;
  z-index: 2;
  padding: 12px;
  background: rgba(255,255,255,.08);
  border: 1px solid rgba(255,255,255,.18);
  border-radius: 16px;
  backdrop-filter: blur(6px);
}
.hero-illustration-icon.icon-1 { top: 10px; left: 0; }
.hero-illustration-icon.icon-2 { bottom: 30px; left: -10px; }
.hero-illustration-icon.icon-3 { top: 20px; right: -10px; }
.hero-illustration-icon.icon-4 { bottom: 10px; right: 10px; }
.hero-illustration-star {
  position: absolute;
  width: 5px;
  height: 5px;
  background: white;
  border-radius: 50%;
  box-shadow: 0 0 6px 1px rgba(255,255,255,.8);
}
.hero-illustration-star.star-1 { top: 5%; right: 20%; }
.hero-illustration-star.star-2 { bottom: 15%; left: 10%; }
.hero-illustration-star.star-3 { top: 40%; left: -5%; }

@media all and (max-width: 992px){
  #hero {
    grid-template-columns: 1fr;
    justify-items: center;
    text-align: center;
    padding-top: 50px;
  }
  .hero-text {
    max-width: 100%;
  }
  #hero p {
    margin-left: auto;
    margin-right: auto;
  }
  .hero-actions {
    justify-content: center;
  }
  .hero-illustration {
    width: 220px;
    height: 220px;
  }
}
@media all and (max-width: 768px){
  #hero h1 {
    font-size: 32px;
  }
  #hero p {
    font-size: 16px;
  }
  .body .mainbg {
    height: auto;
    background-size: 100% 100%, cover;
  }
}
@media all and (max-width: 480px){
  .hero-actions {
    flex-direction: column;
    align-items: stretch;
  }
  .hero-actions .bigbutton,
  .btn-ghost {
    text-align: center;
  }
}

/* ---------- #cta : cartes d'adh&eacute;sion ---------- */
#cta {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px;
  margin-top: 40px;
}
.ctacard {
  position: relative;
  background: white;
  border-radius: 12px;
  border: 1px solid var(--xlightgray);
  border-top: 3px solid var(--yellow);
  padding: 18px 20px;
  box-shadow: 0 10px 24px -18px rgba(10,48,110,0.3);
  transition: .25s ease;
  display: flex;
  flex-direction: column;
}
.ctacard.accent-blue {
  border-top-color: var(--blue);
}
.ctacard:hover {
  transform: translateY(-4px);
  box-shadow: 0 16px 32px -16px rgba(10,48,110,0.35);
}
.ctacard-icon {
  display: flex;
  flex-shrink: 0;
  width: 64px;
  height: 64px;
  margin-bottom: 12px;
}
.ctacard-icon img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.ctacard h3 {
  font-size: 15.5px;
  margin: 0 0 6px;
}
.ctacard h3 a {
  color: var(--darkestblue);
  text-decoration: none;
}
.ctacard h3 a:hover,
.ctacard h3 a:focus-visible {
  color: var(--yellow);
}
.ctacard.accent-blue h3 a:hover,
.ctacard.accent-blue h3 a:focus-visible {
  color: var(--blue);
}
.ctacard p {
  color: var(--darkgray);
  font-size: 13px;
  line-height: 1.55;
  margin-bottom: 10px;
}
.ctacard-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--yellow);
  font-weight: 800;
  font-size: 13px;
  text-decoration: none;
  transition: .2s ease;
  margin-top: auto;
}
.ctacard.accent-blue .ctacard-link {
  color: var(--blue);
}
.ctacard-link:hover {
  gap: 10px;
}
@media all and (max-width: 900px){
  #cta {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
@media all and (max-width: 640px){
  #cta {
    grid-template-columns: 1fr;
  }
}

/* ---------- #whoweare (merged with video/media card) ---------- */
.whoweare-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 50px;
  align-items: center;
}
.whoweare-eyebrow {
  display: inline-block;
  color: var(--yellow);
  font-size: 12px;
  font-weight: 800;
  letter-spacing: .8px;
  text-transform: uppercase;
  margin-bottom: 12px;
}
#whoweare h2 {
  position: relative;
  padding-left: 18px;
  border-left: 5px solid var(--yellow);
  margin-bottom: 18px;
}
#whoweare p {
  font-size: 15.5px;
  line-height: 26px;
  color: var(--darkgray);
}

/* ---------- #mission : grandes cartes horizontales ---------- */
#mission h2 {
  position: relative;
  padding-left: 18px;
  border-left: 5px solid var(--yellow);
  margin-bottom: 30px;
}
.mission-cards {
  display: flex;
  flex-direction: column;
  gap: 20px;
}
.mission-card {
  display: flex;
  align-items: center;
  gap: 30px;
  background: white;
  border-radius: 18px;
  padding: 34px 40px;
  box-shadow: 0 15px 35px -22px rgba(10,48,110,0.3);
  transition: .25s ease;
}
.mission-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 20px 45px -18px rgba(10,48,110,0.35);
}
.mission-card-num {
  flex-shrink: 0;
  font-size: 48px;
  font-weight: 900;
  color: var(--xlightgray);
  -webkit-text-stroke: 1.5px var(--darkblue);
  line-height: 1;
}
.mission-card-body {
  flex: 1 1 auto;
  min-width: 0;
}
.mission-card-body h3 {
  color: var(--darkestblue);
  font-size: 19px;
  margin-bottom: 10px;
}
.mission-card-body p {
  color: var(--darkgray);
  font-size: 14.5px;
  line-height: 1.7;
  margin-bottom: 14px;
}
.mission-card-link {
  display: inline-flex;
  color: var(--yellow);
  font-weight: 800;
  font-size: 14px;
  text-decoration: none;
}
.mission-card-link:hover {
  text-decoration: underline;
}
.mission-card-arrow {
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: var(--yellow);
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  font-weight: 700;
}
.rightToLeft .mission-card-arrow {
  transform: scaleX(-1);
}
@media all and (max-width: 768px) {
  .mission-card {
    flex-direction: column;
    align-items: flex-start;
    text-align: left;
    padding: 28px 26px;
    gap: 16px;
  }
  .rightToLeft .mission-card {
    text-align: right;
  }
  .mission-card-arrow {
    align-self: flex-end;
  }
  .rightToLeft .mission-card-arrow {
    align-self: flex-start;
  }
}

/* ---------- #documentsearch ---------- */
#documentsearch {
  background: linear-gradient(90deg, var(--darkestblue), var(--darkblue));
  border-radius: 14px;
  padding: 50px 40px;
  text-align: center;
}
#documentsearch h2,
#documentsearch p {
  color: white;
}
#documentsearch form {
  max-width: 560px;
  margin: 20px auto 0;
  display: flex;
  border-radius: 30px;
  overflow: hidden;
}
#documentsearch input {
  flex: 1;
  padding: 0 20px;
  height: 52px;
  border: none;
  font-size: 14px;
}
#documentsearch button {
  padding: 0 30px;
  font-weight: 800;
}

/* ---------- #gallery : auto-advancing photo carousel ----------
   4 items/view desktop, 2 tablet, 1 mobile (media queries below). The
   track holds the real items plus one full clone prepended and one full
   clone appended (main.js), so stepping prev/next never runs out of
   photos -- once the visible index drifts into either cloned copy, JS
   silently (no transition) snaps back by one set-length into the real
   middle copy. object-fit:contain + a fixed item height keeps every
   photo fully visible (no crop, no distortion) inside a uniform box,
   regardless of that photo's own aspect ratio. */
#gallery h2 {
  position: relative;
  padding-left: 18px;
  border-left: 5px solid var(--yellow);
}
.photo-carousel {
  display: flex;
  align-items: center;
  gap: 14px;
}
.photo-carousel-viewport {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  border-radius: 12px;
}
.photo-carousel-track {
  display: flex;
  transition: transform .6s ease;
}
.photo-carousel-item {
  flex: 0 0 25%;
  max-width: 25%;
  box-sizing: border-box;
  padding: 0 8px;
}
.photo-carousel-item img {
  width: 100%;
  height: 220px;
  object-fit: contain;
  background: var(--xlightgray);
  border-radius: 10px;
  display: block;
}
.photo-carousel-nav {
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: white;
  color: var(--darkestblue);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 8px 20px -10px rgba(10,48,110,0.4);
  cursor: pointer;
  transition: .2s ease;
}
.photo-carousel-nav:hover {
  background: var(--yellow);
  color: white;
}
.photo-carousel-nav:focus-visible {
  outline: 2px solid var(--yellow);
  outline-offset: 2px;
}
@media all and (max-width: 992px) {
  .photo-carousel-item {
    flex-basis: 50%;
    max-width: 50%;
  }
}
@media all and (max-width: 640px) {
  .photo-carousel-item {
    flex-basis: 100%;
    max-width: 100%;
  }
  .photo-carousel-item img {
    height: 200px;
  }
  .photo-carousel {
    gap: 8px;
  }
  .photo-carousel-nav {
    width: 38px;
    height: 38px;
  }
}

/* ---------- Sidebar "Dernières publications" ---------- */
.featured h4 {
  background: linear-gradient(90deg, var(--darkblue), var(--darkestblue));
  padding: 14px 18px;
  border-radius: 8px;
  margin-bottom: 16px;
}
.featured .fentry {
  border-radius: 10px;
  overflow: hidden;
  box-shadow: 0 10px 22px -16px rgba(10,48,110,0.3);
  margin-bottom: 16px;
  transition: .2s ease;
}
.featured .fentry:hover {
  transform: translateY(-3px);
}
/* main.css sets `xheight` (an invalid, disabled property) instead of `height`
   on the thumb, so it never gets a fixed size for object-fit:cover to crop
   against — thumb height ends up driven by each photo's own aspect ratio,
   which is what reads as the image/text "overlap" between cards. */
.featured .fentry .fentrythumb {
  height: 160px;
}
.featured .fentry .fentrythumb img {
  height: 160px;
}

/* ---------- #whoweare : "Afficher tout" link ---------- */
/* .newlinebutton floats the <button> itself, but every usage wraps the
   button in an <a> (inline by default) -- the float's containing block has
   to bubble past the inline anchor to find a block box. Float the anchor
   directly so the position is never ambiguous. */
.newlinebutton a {
  float: right;
  margin-left: 20px;
}
.rightToLeft .newlinebutton a {
  float: left;
  margin-left: 0;
  margin-right: 20px;
}
.newlinebutton button {
  float: none;
  margin-left: 0;
}

/* ---------- .whoweare-media : premium video card ---------- */
.whoweare-media {
  position: relative;
  width: 100%;
  box-sizing: border-box;
}
.mediatheque {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  border-radius: 28px;
  overflow: hidden;
  box-shadow: 0 25px 50px -25px rgba(10,48,110,0.45);
  background: #000;
  box-sizing: border-box;
}
/* OwlCarousel (now correctly loaded, see the earlier rel="stylesheet" fix)
   only sets an inline WIDTH on .owl-stage/.owl-item via JS -- height is
   left to CSS. .mediatheque gets its height from aspect-ratio, so we anchor
   .owl-stage-outer to it with position:absolute;inset:0 and let height:100%
   cascade down from there, avoiding the auto-height/percentage-height
   circularity that would otherwise collapse the carousel to 0px tall. */
.mediatheque .slider.owl-carousel {
  position: relative;
  height: 100%;
}
/* owl.carousel.min.css loads AFTER custom-overrides.css in <head> and sets
   .owl-carousel .owl-stage-outer/.owl-stage{position:relative} at the same
   (0,0,2) specificity -- a same-specificity tie is won by source order, so
   without the extra .slider.owl-carousel qualifier here (bumping this to
   0,0,3) Owl's rule would win and collapse position:absolute back to
   relative, breaking the whole height chain below it back down to 1px. */
.mediatheque .slider.owl-carousel .owl-stage-outer {
  position: absolute;
  inset: 0;
}
.mediatheque .slider.owl-carousel .owl-stage,
.mediatheque .slider.owl-carousel .owl-item {
  height: 100%;
}
.mediatheque .slide {
  position: relative;
  height: 100%;
}
.mediatheque .slideimg,
.mediatheque .vidIframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: none;
  border-radius: inherit;
}
/* main.css's `.owl-carousel .owl-stage .vidIframe{min-height:465px}` (also
   0,0,3 specificity) was written for the old unconstrained-height
   medialibrary and clamps the used height to 465px no matter what `height`
   says here, overflowing the 16:9 card. Neutralize just the floor, scoped
   to this page/component only -- main.css itself is left untouched since
   #gallery's slider isn't owl-carousel-initialized and never matches this
   selector anyway. */
.mediatheque .slider.owl-carousel .owl-stage .vidIframe {
  min-height: 0;
}
.media-prev,
.media-next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 44px;
  height: 44px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: rgba(255,255,255,.92);
  color: var(--darkestblue);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 8px 20px -8px rgba(0,0,0,.5);
  cursor: pointer;
  transition: .2s ease;
  z-index: 3;
}
.media-prev {
  left: 16px;
}
.media-next {
  right: 16px;
}
.rightToLeft .media-prev {
  left: auto;
  right: 16px;
}
.rightToLeft .media-next {
  right: auto;
  left: 16px;
}
.media-prev:hover,
.media-next:hover {
  background: var(--yellow);
  color: white;
}
.media-prev:focus-visible,
.media-next:focus-visible {
  outline: 3px solid var(--yellow);
  outline-offset: 2px;
}
.whoweare-media-link {
  margin-top: 16px;
  text-align: right;
}
.rightToLeft .whoweare-media-link {
  text-align: left;
}
.whoweare-media-link a {
  color: var(--darkestblue);
  font-weight: 700;
  font-size: 14px;
  text-decoration: none;
}
.whoweare-media-link a:hover {
  color: var(--yellow);
}

@media all and (max-width: 900px) {
  .whoweare-grid {
    grid-template-columns: 1fr;
    gap: 30px;
  }
}

/* ---------- Footer : compact by default on the homepage only (footerCompact
   flag in footer.html.twig), full footer content revealed on click or on
   scroll-into-view. Other pages never set the flag, so footer.css's normal
   full footer is completely unaffected there. ---------- */
.footer-compact {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  padding: 22px 0;
}
.footer-compact-brand {
  display: flex;
  align-items: center;
  gap: 10px;
  color: #c3cee8;
  font-size: 13px;
}
.footer-compact-brand img {
  width: 26px;
  height: 26px;
  object-fit: contain;
}
.footer-compact-toggle {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: rgba(255,255,255,.08);
  border: 1px solid rgba(255,255,255,.2);
  color: white;
  border-radius: 30px;
  padding: 10px 18px;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  transition: .2s ease;
}
.footer-compact-toggle:hover {
  background: rgba(255,255,255,.16);
}
.footer-compact-toggle svg {
  transition: transform .2s ease;
}
.footer-compact-toggle[aria-expanded="true"] svg {
  transform: rotate(180deg);
}
.footer-collapsible .footer-full {
  border-top: 1px solid rgba(255,255,255,.12);
  padding-top: 8px;
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
  .ctacard:hover,
  .news-card:hover,
  .partner-chip:hover,
  .btn-navy-pill:hover,
  .hero-actions .bigbutton:hover {
    transform: none;
  }
}

/* ---------- Reusable button variants ---------- */
.btn-navy-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--darkestblue);
  color: white;
  font-weight: 800;
  font-size: 13.5px;
  padding: 12px 22px;
  border-radius: 30px;
  text-decoration: none;
  transition: .2s ease;
}
.btn-navy-pill:hover {
  background: var(--darkblue);
  transform: translateY(-2px);
}

/* ---------- Actualit&eacute;s / news-card grid (shared by events, highlights, press) ---------- */
.news-section {
  padding: 60px 0;
}
.news-section-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 16px;
  margin-bottom: 30px;
}
.news-section-head h2 {
  position: relative;
  padding-left: 18px;
  border-left: 5px solid var(--yellow);
  margin: 0;
}
.news-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 26px;
}
#publications .news-grid.news-grid-hcarousel {
  display: block;
  position: relative;
  padding: 0 4px;
}
#publications .news-grid-hcarousel .owl-stage-outer {
  overflow: hidden;
}
#publications .news-grid-hcarousel .owl-stage {
  display: flex;
}
#publications .news-grid-hcarousel .owl-item {
  flex: 0 0 auto;
  height: auto;
}
#publications .news-grid-hcarousel .owl-nav {
  display: block;
}
#publications .news-grid-hcarousel .owl-nav .disabled {
  cursor: default;
}
#publications .news-grid-hcarousel .news-card {
  height: 100%;
  display: flex;
  flex-direction: column;
}
/* uniform card anatomy: image zone identical for every card, title
   clamped to 2 lines with a fixed-height block so different title
   lengths never change card height or misalign the date/excerpt/link
   below, excerpt clamped the same way. Same font/color/weight as the
   rest of the site (.news-card-body h3 base rule), just bold + capped. */
#publications .news-grid-hcarousel .news-card-body {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
}
#publications .news-grid-hcarousel .news-card-date {
  /* discrete blue-gray, smaller than the title, same position/spacing
     on every card -- font-family restated explicitly (still correctly
     overridden by the sitewide .rightToLeft !important rule in AR, which
     switches Arabic text to Tajawal -- intentional, not fought here). */
  font-family: 'Catamaran', sans-serif;
  color: var(--darkmetal);
  /* !important needed: common.css's sitewide .rightToLeft p rule forces
     15px/19px/400 (!important) on every <p> in Arabic for readability --
     scoped here only to keep this component's date the same size in FR
     and AR, the sitewide rule itself is untouched. */
  font-size: 11px !important;
  line-height: 15px !important;
  letter-spacing: .3px;
  margin-bottom: 8px;
  opacity: .85;
}
#publications .news-grid-hcarousel .news-card-body h3 {
  font-family: 'Catamaran', sans-serif;
  color: var(--darkestblue);
  font-size: 17px;
  font-weight: 700;
  line-height: 1.4;
  letter-spacing: -.01em;
  min-height: 48px;
  margin-bottom: 8px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
#publications .news-grid-hcarousel .news-card-body p:not(.news-card-date) {
  font-family: 'Catamaran', sans-serif;
  color: var(--darkgray);
  font-size: 13px !important;
  line-height: 1.55 !important;
  margin-bottom: 12px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
#publications .news-grid-hcarousel .news-card-link {
  font-family: 'Catamaran', sans-serif;
  color: var(--yellow);
  font-weight: 800;
  letter-spacing: .2px;
  margin-top: auto;
}
/* RTL: mirror the discrete nav buttons to match reading direction --
   the sitewide .rightToLeft convention (see .rightToLeft .body .mainbg
   etc. above), owl's own rtl:true option (set in main.js) handles the
   actual slide/index direction. */
.rightToLeft #publications .news-grid-hcarousel .owl-nav button.owl-prev {
  left: auto;
  right: -17px;
}
.rightToLeft #publications .news-grid-hcarousel .owl-nav button.owl-next {
  right: auto;
  left: -17px;
}
/* discrete prev/next -- small, low-contrast until hovered */
#publications .news-grid-hcarousel .owl-nav button.owl-prev,
#publications .news-grid-hcarousel .owl-nav button.owl-next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: rgba(255,255,255,.9) !important;
  color: var(--darkestblue) !important;
  box-shadow: 0 6px 16px -8px rgba(10,48,110,0.35);
  font-size: 15px;
  display: flex !important;
  align-items: center;
  justify-content: center;
  opacity: .55;
  transition: opacity .2s ease, box-shadow .2s ease;
}
#publications .news-grid-hcarousel:hover .owl-nav button.owl-prev,
#publications .news-grid-hcarousel:hover .owl-nav button.owl-next {
  opacity: 1;
}
#publications .news-grid-hcarousel .owl-nav button.owl-prev:hover,
#publications .news-grid-hcarousel .owl-nav button.owl-next:hover {
  box-shadow: 0 10px 22px -10px rgba(10,48,110,0.5);
}
#publications .news-grid-hcarousel .owl-nav button.owl-prev {
  left: -17px;
}
#publications .news-grid-hcarousel .owl-nav button.owl-next {
  right: -17px;
}
#publications .news-grid-hcarousel .owl-nav button.disabled {
  opacity: .2;
}
.news-card {
  display: block;
  background: white;
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 15px 35px -22px rgba(10,48,110,0.35);
  text-decoration: none;
  transition: .25s ease;
}
.news-card:hover {
  transform: translateY(-6px);
  box-shadow: 0 18px 40px -18px rgba(10,48,110,0.4);
}
.news-card-img {
  position: relative;
  height: 170px;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background: var(--xlightgray);
}
.news-card-img img {
  /* object-fit: contain automatically adapts to each image's own natural
     ratio -- no crop, no distortion, no JS needed: a portrait image shows
     fully letterboxed left/right, a landscape image fills the available
     width and letterboxes top/bottom, a square image centers with equal
     letterboxing on both axes. The container above keeps a fixed height so
     every card stays the same size regardless of what its own image does. */
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  object-fit: contain;
  object-position: center;
  display: block;
}
.news-card-tag {
  position: absolute;
  left: 14px;
  bottom: -12px;
  background: var(--yellow);
  color: white;
  font-size: 11px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .4px;
  padding: 6px 12px;
  border-radius: 20px;
}
.news-card-body {
  padding: 26px 22px 22px;
}
.news-card-date {
  color: var(--darkmetal);
  font-size: 12.5px;
  margin-bottom: 10px;
}
.news-card-body h3 {
  color: var(--darkestblue);
  font-size: 17px;
  line-height: 1.4;
  margin-bottom: 10px;
}
.news-card-body p {
  color: var(--darkgray);
  font-size: 13.5px;
  line-height: 1.6;
  margin-bottom: 14px;
}
.news-card-link {
  color: var(--yellow);
  font-weight: 800;
  font-size: 13.5px;
}
@media all and (max-width: 992px){
  .news-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media all and (max-width: 640px){
  .news-grid {
    grid-template-columns: 1fr;
  }
}

/* ---------- #partners : real "Nos partenaires" CMS data, text/link chips
   (no logo images exist in the data model -- confirmed before building this) ---------- */
#partners {
  padding: 60px 0;
  background: var(--xlightgray);
}
#partners h2 {
  position: relative;
  padding-left: 18px;
  border-left: 5px solid var(--yellow);
  margin-bottom: 26px;
}
.partners-list {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
}
.partner-chip {
  display: inline-block;
  background: white;
  color: var(--darkestblue);
  font-weight: 700;
  font-size: 14px;
  padding: 14px 22px;
  border-radius: 12px;
  border: 1px solid var(--metal);
  text-decoration: none;
  box-shadow: 0 8px 20px -16px rgba(10,48,110,0.3);
  transition: .2s ease;
}
.partner-chip:hover {
  border-color: var(--yellow);
  color: var(--yellow);
  transform: translateY(-2px);
}

/* ---------- Newsletter : floating widget (not a full-width band).
   Same form/route/data as before -- only the container changed from an
   always-visible full-width band to a corner FAB + toggled panel, mirroring
   the existing header search-icon/panel pattern (header.css/main.js) for a
   consistent interaction model across the site. ---------- */
.newsletter-fab-wrap {
  position: fixed;
  right: 24px;
  bottom: 24px;
  z-index: 40;
}
.rightToLeft .newsletter-fab-wrap {
  right: auto;
  left: 24px;
}
.newsletter-fab {
  width: 58px;
  height: 58px;
  border-radius: 50%;
  border: none;
  background: var(--darkestblue);
  color: var(--yellow);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 14px 30px -10px rgba(10,48,110,0.55);
  transition: .2s ease;
}
.newsletter-fab:hover,
.newsletter-fab[aria-expanded="true"] {
  background: var(--darkblue);
  transform: translateY(-2px);
}
.newsletter-fab:focus-visible {
  outline: 2px solid var(--yellow);
  outline-offset: 3px;
}
.newsletter-fab-panel {
  position: absolute;
  right: 0;
  bottom: calc(100% + 16px);
  width: min(360px, calc(100vw - 48px));
  background: var(--darkestblue);
  color: white;
  padding: 30px 28px;
  border-radius: 18px;
  box-shadow: 0 25px 55px -20px rgba(10,48,110,0.55);
}
.rightToLeft .newsletter-fab-panel {
  right: auto;
  left: 0;
}
.newsletter-fab-panel .newsletterband-icon {
  width: 50px;
  height: 50px;
  border: 1px solid rgba(255,255,255,.3);
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--yellow);
  margin-bottom: 16px;
}
.newsletterband-text h3 {
  color: white;
  font-size: 19px;
  margin-bottom: 6px;
}
.newsletterband-text p {
  color: rgba(255,255,255,.75);
  font-size: 13.5px;
  line-height: 1.6;
  margin-bottom: 18px;
}
.newsletterband-formel {
  display: flex;
  gap: 8px;
}
.newsletterband-formel input {
  flex: 1;
  min-width: 0;
  background: rgba(255,255,255,.1);
  border: 1px solid rgba(255,255,255,.25);
  border-radius: 30px;
  color: white;
  padding: 12px 18px;
  font-size: 13.5px;
}
.newsletterband-formel input::placeholder {
  color: rgba(255,255,255,.55);
}
.newsletterband-formel button {
  background: var(--yellow);
  color: white;
  border: none;
  border-radius: 30px;
  padding: 12px 20px;
  font-weight: 800;
  font-size: 13.5px;
  cursor: pointer;
  transition: .2s ease;
  flex-shrink: 0;
}
.newsletterband-formel button:hover {
  filter: brightness(1.08);
}
.newsletterband-tiny {
  color: rgba(255,255,255,.55);
  font-size: 12px;
  margin-top: 10px;
}
.newsletter-fab-panel ul {
  color: #ffb199;
  font-size: 12.5px;
  list-style: none;
  margin-top: 8px;
}
@media all and (max-width: 480px) {
  .newsletter-fab-wrap {
    right: 16px;
    bottom: 16px;
  }
  .rightToLeft .newsletter-fab-wrap {
    left: 16px;
  }
  .newsletter-fab-panel {
    padding: 24px 20px;
  }
  .newsletterband-formel {
    flex-direction: column;
  }
  .newsletterband-formel button {
    width: 100%;
  }
}

/* ---------- .featured : "Dernieres publications" -- now a normal
   full-width section (de-floated above), restyled as a proper section
   instead of a narrow sidebar. Real content (top5/featured), unchanged. ---------- */
.featured {
  box-sizing: border-box;
  width: 100%;
  background: var(--xlightgray);
  padding: 60px 40px;
  border-radius: 20px;
  margin: 60px 0;
}
.featured h4 {
  color: var(--darkestblue);
  font-size: 22px;
  font-weight: 800;
  text-transform: none;
  margin-bottom: 26px;
}
.featured-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 22px;
}
.featured-grid .fentry {
  float: none;
  margin-top: 0;
}
.featured .fentrycontent h5 {
  color: var(--darkestblue);
  font-size: 15px;
  line-height: 1.4;
  margin-top: 6px;
}
.featured .fentrycontent .tiny {
  color: var(--darkmetal);
  font-size: 12px;
}
.featured .newlinebutton {
  float: none;
  margin-top: 30px;
}

/* The old placeholder SVG illustration (headphones/mic/briefcase/palette/©)
   is now redundant with the approved background.png hero artwork and
   visually duplicates it -- hidden so background.png is the only artwork
   shown. Placed at end of file so it wins over the earlier same-specificity
   `.hero-illustration { display: flex; ... }` rule in cascade order. */
.hero-illustration {
  display: none;
}

/* ==========================================================
   /info/bmdav-missions -- typography refinement only.
   Scoped to .contentcontainer.page-bmdav-missions, a class added
   ONLY on this one section.html.twig render (section.encodedurl ==
   'bmdav-missions', see the template's missionPageClass), so every
   other /info/* page keeps its current, untouched typography.
   The raw content is legacy Word-pasted HTML: every <li> and nested
   <span> carries its own inline font-size/font-family/line-height,
   which is why !important is required here to win over inline
   styles -- normal-priority rules would silently lose to them.
   ========================================================== */
.contentcontainer.page-bmdav-missions {
  float: none;
  max-width: 1200px;
  width: 100%;
  margin: 0 auto;
  padding-left: 28px;
  padding-right: 28px;
  border-left: 3px solid var(--blue);
}
.contentcontainer.page-bmdav-missions,
.contentcontainer.page-bmdav-missions * {
  font-family: 'Catamaran', sans-serif !important;
  font-size: 16px !important;
  font-weight: 500 !important;
  line-height: 1.7 !important;
  color: var(--darkgray) !important;
}
.contentcontainer.page-bmdav-missions ul,
.contentcontainer.page-bmdav-missions ol {
  list-style-position: outside !important;
  padding-left: 22px !important;
  margin: 24px 0 !important;
}
/* Native ::marker (recolored), not a custom absolutely-positioned
   ::before dot: this content is legacy Word-pasted markup with
   inconsistent <ul>/<li> nesting depth per bullet (confirmed by
   inspection -- the first item is wrapped one div deeper than the
   rest), which made an absolutely-positioned ::before dot escape its
   containing block on that one item. ::marker has no such risk since
   it doesn't need position:relative/absolute at all. */
.contentcontainer.page-bmdav-missions li {
  margin-bottom: 18px !important;
}
.contentcontainer.page-bmdav-missions li::marker {
  color: var(--yellow);
}
.rightToLeft .contentcontainer.page-bmdav-missions {
  direction: rtl;
  text-align: right;
  border-left: none;
  border-right: 3px solid var(--blue);
  padding-left: 28px;
  padding-right: 28px;
}
/* common.css's sitewide rule '.rightToLeft .contentcontainer ul li'
   (0,2,2 specificity, !important) would otherwise beat the general
   '.contentcontainer.page-bmdav-missions *' rule above (0,2,0) for the
   <li> itself and its nested <span> -- restated here with a selector
   specific enough (0,3,1+) to win, still scoped to this page only,
   still not touching the sitewide rule or any other /info/* page. */
.rightToLeft .contentcontainer.page-bmdav-missions,
.rightToLeft .contentcontainer.page-bmdav-missions *,
.rightToLeft .contentcontainer.page-bmdav-missions li,
.rightToLeft .contentcontainer.page-bmdav-missions li * {
  font-family: 'Tajawal', sans-serif !important;
  font-size: 16px !important;
  font-weight: 500 !important;
  line-height: 1.9 !important;
  color: var(--darkgray) !important;
}
.rightToLeft .contentcontainer.page-bmdav-missions ul,
.rightToLeft .contentcontainer.page-bmdav-missions ol {
  padding-left: 0 !important;
  padding-right: 22px !important;
}
