/*
 * GNM Base Stylesheet
 * Default stylesheet shared across all sites using a modern Bootstrap-friendly baseline
 */

:root {
  --gnm-bg: #faf7ef;
  --gnm-background: #faf7ef;
  --gnm-surface: #fffdf9;
  --gnm-surface-soft: #f3eee7;
  --gnm-text: #2d2541;
  --gnm-text-muted: #62586d;
  --gnm-muted: #62586d;
  --gnm-border: #ddd6ce;
  --gnm-primary: #302447;
  --gnm-primary-rgb: 48, 36, 71;
  --gnm-primary-strong: #1c142b;
  --gnm-primary-strong-rgb: 28, 20, 43;
  --gnm-primary-2: #1c142b;
  --gnm-secondary: #7a77b9;
  --gnm-secondary-rgb: 122, 119, 185;
  --gnm-accent: #dd775e;
  --gnm-action-bg: #a54231;
  --gnm-action-hover: #843426;
  --gnm-on-action: #fff;
  --gnm-hero-gradient: linear-gradient(120deg, var(--gnm-primary), color-mix(in srgb, var(--gnm-secondary) 65%, var(--gnm-primary)));
  --gnm-font: "Figtree", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --gnm-heading-font: "Fraunces", Georgia, "Times New Roman", serif;
  --gnm-control-height: 44px;
  --gnm-container-width: 1140px;
  --gnm-section-gap: 56px;
  --gnm-shadow-level: 2;
  --gnm-elevation-shadow: 0 12px 30px rgba(var(--gnm-primary-strong-rgb, 28, 20, 43), .08);
  --gnm-radius-sm: 8px;
  --gnm-radius-md: 14px;
  --gnm-radius-lg: 20px;
  --gnm-radius: var(--gnm-radius-md);
  --bs-card-border-radius: var(--gnm-radius-md);
  --bs-primary: var(--gnm-primary);
  --bs-primary-rgb: var(--gnm-primary-rgb);
  --bs-secondary: var(--gnm-secondary);
  --bs-secondary-rgb: var(--gnm-secondary-rgb);
  --bs-body-bg: var(--gnm-bg);
  --bs-body-color: var(--gnm-text);
  --bs-border-color: var(--gnm-border);
  --bs-border-radius: var(--gnm-radius-md);
  --bs-border-radius-sm: var(--gnm-radius-sm);
  --bs-border-radius-lg: var(--gnm-radius-lg);

  /* Cockpit compatibility aliases. Layout rules consume the shared tokens;
     GNM tokens; these names remain for the existing V3 component selectors. */
  --lfb-accent: var(--gnm-accent);
  --lfb-accent-h: color-mix(in oklch, var(--lfb-accent) 85%, black);
  --lfb-accent-cta: var(--gnm-action-bg);
  --lfb-accent-cta-h: var(--gnm-action-hover);
  --lfb-violet: var(--gnm-secondary);
  --lfb-violet-2: var(--lfb-violet);
  --lfb-mauve: var(--lfb-violet);
  --lfb-framboise: var(--lfb-accent);
  --lfb-or: var(--lfb-accent);
  --lfb-sable: var(--gnm-accent);
  --lfb-orange: var(--lfb-accent);
  --lfb-orange-h: var(--lfb-accent-h);
  --lfb-encre: var(--gnm-primary);
  --lfb-encre-2: color-mix(in oklch, var(--lfb-encre) 85%, black);
  --lfb-fond: var(--gnm-bg);
  --lfb-carte: var(--gnm-surface);
  --lfb-texte: var(--gnm-text);
  --lfb-muted: var(--gnm-text-muted);
  --lfb-filet: var(--gnm-border);
  --lfb-on-encre: color-mix(in oklch, var(--lfb-encre) 15%, white);
  --lfb-on-encre-2: color-mix(in oklch, var(--lfb-encre) 25%, white);
  --lfb-on-encre-muted: color-mix(in oklch, var(--lfb-encre) 50%, white);
  --lfb-font-sans: var(--gnm-font);
  --lfb-font-serif: var(--gnm-heading-font);
  --lfb-ease-quint: cubic-bezier(.22, 1, .36, 1);
  --lfb-ease-expo: cubic-bezier(.16, 1, .3, 1);

  /* ---- Micro-interaction scale (15/08/2026) -------------------------------
     One easing, three durations, one elevation family. Before this the sheets
     carried six competing curves and durations from 150 ms to 400 ms, so two
     cards side by side answered the cursor at different speeds. Nothing
     declares its own curve any more: everything reads from here.

     The ink of the shadows is a variable, not a constant: the active Site CSS
     can retint --gnm-shadow-rgb and the whole elevation family
     follows. Pure black is never used - it greys a coloured surface instead
     of darkening it. ------------------------------------------------------ */
  --gnm-shadow-rgb: var(--gnm-primary-strong-rgb, 28, 20, 43);

  /* ease-out-quint: leaves immediately, settles long. No bounce anywhere. */
  --gnm-ease: cubic-bezier(.16, 1, .3, 1);
  /* for what leaves the screen, where a long tail reads as lag */
  --gnm-ease-firm: cubic-bezier(.4, 0, .2, 1);

  --gnm-dur-fast: 120ms;  /* colour, opacity: must feel instantaneous */
  --gnm-dur: 180ms;       /* the default: surfaces, borders, elevation */
  --gnm-dur-slow: 280ms;  /* travel: overlays, panels, reveals */

  /* Flat at rest, raised under the cursor. Two layers each: a wide soft one
     carries the lift, a tight one keeps the edge defined - a single wide
     shadow makes a card look like a sticker. */
  --gnm-shadow-sm: 0 1px 2px rgba(var(--gnm-shadow-rgb), .05);
  --gnm-shadow-hover:
    0 6px 18px rgba(var(--gnm-shadow-rgb), .07),
    0 1px 3px rgba(var(--gnm-shadow-rgb), .05);
  --gnm-shadow-md:
    0 12px 30px rgba(var(--gnm-shadow-rgb), .09),
    0 2px 6px rgba(var(--gnm-shadow-rgb), .05);
  --gnm-shadow-float:
    0 22px 50px rgba(var(--gnm-shadow-rgb), .16),
    0 4px 12px rgba(var(--gnm-shadow-rgb), .06);

  /* Keyboard only. Never shown to a mouse, so it can afford to be loud. */
  --gnm-focus-color: #5e4b91;
  --gnm-focus-width: 2px;
  --gnm-focus-offset: 2px;
}

.btn-primary {
  --bs-btn-bg: var(--gnm-primary);
  --bs-btn-border-color: var(--gnm-primary);
  --bs-btn-hover-bg: var(--gnm-primary-2);
  --bs-btn-hover-border-color: var(--gnm-primary-2);
  --bs-btn-active-bg: var(--gnm-primary-2);
  --bs-btn-active-border-color: var(--gnm-primary-2);
}

/* ---- The default clock for hover states (15/08/2026) ---------------------

   Folding the declared transitions onto one scale only fixed the elements
   that already had one. Most of the sheets had none at all: a link, a chip, a
   footer entry or a menu item switched colour in a single frame while the
   card beside it eased over 180 ms. This is the floor.

   :where() carries no specificity, so nothing here ever fights a rule that
   states its own transition - the specific declaration always wins, and no
   existing behaviour has to be undone to make room for this.

   background-color, not the background shorthand: the shorthand drags in
   background-image, and a gradient does not interpolate. transform is absent
   on purpose - it positions things statically all over these sheets, and a
   default duration would make them drift into place instead of being there.
   -------------------------------------------------------------------------- */
:where(
  a,
  button,
  summary,
  [role="button"],
  .btn,
  .card,
  .nav-link,
  .dropdown-item,
  .page-link,
  .badge,
  input,
  select,
  textarea
) {
  transition:
    color var(--gnm-dur-fast) var(--gnm-ease),
    background-color var(--gnm-dur) var(--gnm-ease),
    border-color var(--gnm-dur) var(--gnm-ease),
    box-shadow var(--gnm-dur) var(--gnm-ease),
    opacity var(--gnm-dur-fast) var(--gnm-ease);
}

/* ---- Keyboard focus (15/08/2026) ----------------------------------------
   One ring for the whole network, drawn with outline so it follows the shape
   of what it surrounds instead of squaring off rounded corners. focus-visible
   only: a mouse never sees it, which is exactly why it can be this visible.
   Bootstrap's own focus halo is dropped on buttons so the two do not stack
   into concentric rings; form fields keep theirs, where showing focus to the
   mouse is the expected behaviour. ---------------------------------------- */
:is(a, button, [role="button"], summary, [tabindex]):focus-visible {
  outline: var(--gnm-focus-width) solid var(--gnm-focus-color);
  outline-offset: var(--gnm-focus-offset);
}

.btn:focus-visible {
  box-shadow: none;
}

/* On a dark surface the blue ring disappears into the navy, so the surface
   redefines the token for its own subtree rather than every link inside it
   redeclaring an outline. Structural presets may do this on their dark blocks. */

html {
  scroll-behavior: smooth;
}

body.gnm-base-site {
  background:
    radial-gradient(1200px 500px at 100% -10%, rgba(var(--gnm-primary-rgb), 0.08), transparent 60%),
    radial-gradient(900px 380px at -5% 10%, color-mix(in srgb, var(--gnm-accent), transparent 92%), transparent 60%),
    var(--gnm-bg);
  color: var(--gnm-text);
  font-family: var(--gnm-font);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

body.gnm-base-site :is(h1, h2, h3, h4, h5, h6) {
  font-family: var(--gnm-heading-font);
}

a {
  color: var(--gnm-primary);
}

a:hover {
  color: var(--gnm-primary-2);
}

/* Paliers Bootstrap du .container, re-declares a l'identique du bundle
   partage (qui les contient deja) : base.css charge APRES le bundle, donc
   toute regle .container posee ici gagne a specificite egale — l'ex-cap
   unique 1180px ecrasait ainsi les 5 paliers et collait le contenu aux bords
   entre 576 et 1180px. Le conteneur s'arrete au palier INFERIEUR et garde
   une marge laterale a toute largeur de fenetre (ref. respiration du live
   Pancreoscopie). Ne jamais reposer de max-width unique ici. */
.container {
  width: 100%;
}

@media (min-width: 576px) {
  .container { max-width: 540px; }
}

@media (min-width: 768px) {
  .container { max-width: 720px; }
}

@media (min-width: 992px) {
  .container { max-width: 960px; }
}

@media (min-width: 1200px) {
  .container { max-width: min(var(--gnm-container-width), 1140px); }
}

@media (min-width: 1400px) {
  .container { max-width: var(--gnm-container-width); }
}

/* Header / nav shell polish */
.gnm-header-shell,
.gnm-header-shell nav,
header[class*="gnm"] {
  backdrop-filter: saturate(140%) blur(8px);
}

#header,
.gnm-site-header-shell {
  position: relative;
  z-index: 1200;
  overflow: visible;
}

.gnm-base-site .modal-backdrop {
  z-index: 1590;
}

.gnm-base-site .modal {
  z-index: 1600;
}

.gnm-base-nav,
.gnm-base-nav .gnm-main-nav,
.gnm-base-nav .gnm-main-nav > .menu-item-has-children {
  position: relative;
  overflow: visible;
}

.gnm-base-nav .gnm-main-nav {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: .35rem;
  flex-wrap: wrap;
  margin: 0;
  padding: 0;
}

.gnm-base-nav .gnm-main-nav > .nav-item > .nav-link {
  color: var(--gnm-text);
  font-weight: 600;
  padding: .5rem .85rem;
  border-radius: 999px;
  transition: background-color var(--gnm-dur) var(--gnm-ease), color var(--gnm-dur) var(--gnm-ease);
}

.gnm-base-nav .gnm-main-nav > .nav-item > .nav-link:hover,
.gnm-base-nav .gnm-main-nav > .nav-item > .nav-link:focus,
.gnm-base-nav .gnm-main-nav > .nav-item > .nav-link.active {
  background: rgba(var(--gnm-primary-rgb), .1);
  color: var(--gnm-primary);
}

.gnm-base-nav .gnm-main-nav > .menu-item-has-children > .nav-link::after {
  margin-left: .45rem;
}

.gnm-base-nav .gnm-main-nav > .menu-item-has-children {
  position: relative;
}

.gnm-base-nav .gnm-main-nav .dropdown-menu {
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  box-shadow: var(--gnm-elevation-shadow, var(--gnm-shadow-md));
  padding: .45rem;
  min-width: 220px;
  margin-top: 0;
  z-index: 1300;
}

.gnm-base-nav .gnm-main-nav .dropdown-item {
  border-radius: var(--gnm-radius-sm);
  color: var(--gnm-text);
  font-weight: 500;
  padding: .5rem .7rem;
}

.gnm-base-nav .gnm-main-nav .dropdown-item:hover,
.gnm-base-nav .gnm-main-nav .dropdown-item:focus {
  background: rgba(var(--gnm-primary-rgb), .1);
  color: var(--gnm-primary);
}

@media (min-width: 992px) {
  .gnm-base-nav .gnm-main-nav > .menu-item-has-children > .dropdown-menu {
    display: none;
    position: absolute;
    top: calc(100% - 1px);
    left: 0;
  }

  .gnm-base-nav .gnm-main-nav .dropdown:hover > .dropdown-menu,
  .gnm-base-nav .gnm-main-nav .dropdown:focus-within > .dropdown-menu,
  .gnm-base-nav .gnm-main-nav .menu-item-has-children:hover > .dropdown-menu,
  .gnm-base-nav .gnm-main-nav .menu-item-has-children:focus-within > .dropdown-menu {
    display: block;
  }
}

.navbar,
.gnm-header-shell .navbar {
  border-radius: 0 0 14px 14px;
}

.navbar .nav-link {
  font-weight: 500;
  letter-spacing: .01em;
}

.navbar .nav-link:hover,
.navbar .nav-link:focus {
  color: var(--gnm-primary-2);
}

/* Shared layout classes */
.gnm-shell-surface {
  background: var(--gnm-surface);
  border-bottom: 1px solid var(--gnm-border);
}

.gnm-shell-surface--soft {
  background: linear-gradient(135deg, var(--gnm-surface), var(--gnm-surface-soft));
}

.gnm-shell-inner {
  padding: 1rem 0;
}

.gnm-shell-inner--lg {
  padding: 1.25rem 0.625rem;
}

.gnm-shell-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 0.875rem;
  flex-wrap: wrap;
}

.gnm-brand-link {
  text-decoration: none;
  color: inherit;
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

.gnm-brand-logo {
  width: auto;
  object-fit: contain;
}

.gnm-brand-logo--md {
  max-height: 48px;
}

.gnm-brand-logo--sm {
  max-height: 42px;
}

.gnm-brand-name {
  font-weight: 800;
  font-size: 1.2rem;
  line-height: 1;
  color: var(--gnm-text);
}

.gnm-fallback-links {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  flex-wrap: wrap;
}

.gnm-fallback-link {
  text-decoration: none;
  color: var(--gnm-text);
  font-weight: 600;
}

.gnm-login-ribbon {
  background: var(--gnm-primary-strong);
  color: #fff;
  padding: 8px 0;
  font-size: 14px;
  position: relative;
  z-index: 1400;
}

.gnm-login-ribbon__row,
.gnm-login-ribbon__links {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}

.gnm-login-ribbon__row {
  justify-content: space-between;
}

.gnm-login-ribbon a {
  color: #fff;
  text-decoration: none;
}

.gnm-login-ribbon__language-switcher .dropdown-toggle::after {
  margin-left: 6px;
}

.gnm-login-ribbon__language-toggle {
  color: #fff;
  border: 1px solid rgba(255, 255, 255, 0.35);
  background: transparent;
  font-size: 12px;
  font-weight: 700;
  line-height: 1;
  padding: 6px 10px;
  text-transform: uppercase;
}

.gnm-login-ribbon__language-toggle:hover,
.gnm-login-ribbon__language-toggle:focus,
.gnm-login-ribbon__language-toggle:active {
  color: #fff;
  background: rgba(255, 255, 255, 0.12);
  border-color: rgba(255, 255, 255, 0.55);
}

.gnm-login-ribbon__language-menu {
  min-width: 84px;
  z-index: 1410;
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  box-shadow: var(--gnm-elevation-shadow, var(--gnm-shadow-md));
  padding: .45rem;
  background: #ffffff;
}

.gnm-login-ribbon .gnm-login-ribbon__language-menu a,
.gnm-login-ribbon .gnm-login-ribbon__language-menu .dropdown-item {
  color: var(--gnm-text) !important;
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  border-radius: var(--gnm-radius-sm);
  padding: .5rem .7rem;
  text-decoration: none;
}

.gnm-login-ribbon__language-menu .dropdown-item:hover,
.gnm-login-ribbon__language-menu .dropdown-item:focus,
.gnm-login-ribbon__language-menu .dropdown-item.active,
.gnm-login-ribbon__language-menu .dropdown-item:active {
  color: var(--gnm-primary) !important;
  background: rgba(var(--gnm-primary-rgb), .1);
}

/* Shared content/article classes */
.gnm-surface-card {
  background: var(--gnm-surface);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
}

.gnm-surface-card--md {
  padding: 20px;
}

.gnm-surface-card--lg {
  padding: 24px;
}

.gnm-meta-row {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: center;
  margin-bottom: 8px;
  color: var(--gnm-text-muted);
  font-size: 12px;
}

.gnm-title-link {
  color: var(--gnm-text);
  text-decoration: none;
}

.gnm-read-link {
  display: inline-block;
  padding: 8px 12px;
  border-radius: var(--gnm-radius-sm);
  border: 1px solid var(--gnm-border);
  text-decoration: none;
  color: var(--gnm-text);
}

.gnm-text-muted {
  color: var(--gnm-text-muted);
}

.gnm-article-header {
  margin-bottom: 16px;
}

.gnm-article-title {
  margin: 0 0 12px;
  font-size: clamp(28px, 3vw, 40px);
  line-height: 1.05;
}

.gnm-article-body {
  color: var(--gnm-text);
  line-height: 1.65;
}

.gnm-article-published {
  color: var(--gnm-text-muted);
  font-size: 13px;
}

.gnm-article-divider {
  margin-top: 22px;
  padding-top: 16px;
  border-top: 1px solid var(--gnm-border);
}

.gnm-callout-warning {
  border: 1px solid #fde68a;
  background: #fffbeb;
  border-radius: 10px;
  padding: 14px 16px;
  margin-bottom: 16px;
}

.gnm-callout-warning__text {
  color: #78350f;
}

.gnm-callout-info {
  border: 1px solid #bfdbfe;
  background: #eff6ff;
  border-radius: 12px;
  padding: 16px;
  margin-bottom: 18px;
}

/* Auth panel */
.gnm-auth-page-row {
  row-gap: 24px;
}

.gnm-auth-page-card {
  background: var(--gnm-surface);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  box-shadow: 0 10px 30px rgba(15, 23, 42, .05);
  overflow: hidden;
}

.gnm-auth-page-head {
  padding: 20px 24px;
  border-bottom: 1px solid var(--gnm-border);
  background: linear-gradient(120deg, #eff6ff, #f0fdfa);
}

.gnm-auth-page-title {
  margin: 0;
  font-size: clamp(24px, 3vw, 34px);
  line-height: 1.1;
}

.gnm-auth-page-intro {
  margin: 10px 0 0;
  color: var(--gnm-text-muted);
}

.gnm-auth-page-body {
  padding: 24px;
}

.gnm-auth-page-content {
  margin-bottom: 20px;
}

/* Home modules */
.gnm-ui-eyebrow {
  margin: 0 0 8px;
  color: var(--gnm-accent);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
}

.gnm-ui-eyebrow--light {
  color: #93c5fd;
}

.gnm-ui-eyebrow--indigo {
  color: #4338ca;
}

.gnm-ui-display-title {
  margin: 0 0 12px;
  font-size: clamp(28px, 4vw, 42px);
  line-height: 1.1;
  color: var(--gnm-text);
}

.gnm-ui-section-title {
  margin: 0;
  color: var(--gnm-text);
  font-size: clamp(1.25rem, 2vw, 2rem);
  line-height: 1.15;
}

.gnm-ui-subtitle {
  margin: 0;
  max-width: 70ch;
  color: var(--gnm-text-muted);
  font-size: 16px;
}

.gnm-ui-subtitle--light {
  color: #cbd5e1;
}

.gnm-ui-meta-row {
  color: var(--gnm-text-muted);
  font-size: .75rem;
  letter-spacing: .02em;
}

.gnm-ui-card-title {
  margin: 0 0 .5rem;
  font-size: clamp(1.1rem, 1.3vw, 1.4rem);
  line-height: 1.25;
}

.gnm-ui-body-text {
  color: var(--gnm-text-muted);
  line-height: 1.6;
}

.gnm-ui-link {
  color: inherit;
}

.gnm-ui-source-link {
  color: var(--gnm-text);
}

.gnm-home-hero {
  border-bottom: 1px solid var(--gnm-border);
}

.gnm-home-hero--standard {
  background: linear-gradient(120deg, #f8fafc, #e0f2fe);
}

.gnm-home-hero--carousel {
  background: transparent;
}

.gnm-home-hero__container {
  padding: 40px 10px;
}

.gnm-home-hero__row {
  row-gap: 24px;
}

.gnm-home-hero__container--carousel {
  padding-top: 24px;
  padding-bottom: 24px;
}

.gnm-home-hero__container--carousel.gnm-home-hero__container--full-width-active {
  max-width: 100%;
  padding-left: 0;
  padding-right: 0;
}

.gnm-home-hero--carousel-full-width .gnm-home-hero__container--carousel {
  padding-top: 0;
  padding-bottom: 0;
}

.gnm-home-hero--carousel-full-width .gnm-home-hero-carousel {
  border: 0;
}

.gnm-home-hero--carousel-full-width .gnm-home-hero-carousel__caption {
  left: 0;
  right: 0;
}

.gnm-home-hero-carousel {
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  overflow: hidden;
  box-shadow: var(--gnm-shadow-md);
  background: var(--gnm-surface);
}

.gnm-home-hero-carousel.gnm-home-hero-carousel--full-width-active {
  border-left: 0;
  border-right: 0;
  border-radius: 0;
}

.gnm-home-hero-carousel__media {
  min-height: 360px;
}

.gnm-home-hero-carousel__image {
  width: 100%;
  min-height: 360px;
  max-height: 520px;
  object-fit: cover;
}

.gnm-home-hero-carousel__fallback {
  min-height: 360px;
  background: linear-gradient(120deg, #dbeafe, #e0f2fe);
}

.gnm-home-hero-carousel__caption {
  left: 24px;
  right: 24px;
  bottom: 24px;
}

.gnm-home-hero-carousel__card {
  background: rgba(255, 255, 255, .95);
  color: var(--gnm-text);
  border-radius: var(--gnm-radius-md);
  padding: 16px 18px;
  max-width: 760px;
}

.gnm-home-hero-carousel__content {
  color: var(--gnm-text-muted);
}

.gnm-home-hero--carousel-full-width .gnm-home-hero-carousel__media {
  min-height: 460px;
}

.gnm-home-hero--carousel-full-width .gnm-home-hero-carousel__image,
.gnm-home-hero--carousel-full-width .gnm-home-hero-carousel__fallback {
  min-height: 460px;
  max-height: 760px;
}

/* points du carrousel hero : meme motif que l'indicateur de carte-pile
   (bullet rond 8px, l'actif s'etire en pilule 22px/r6) */
.gnm-home-hero-carousel .carousel-indicators [data-bs-target] {
  width: 8px;
  height: 8px;
  border: 0;
  border-radius: 50%;
  opacity: 1;
  background-color: var(--gnm-hero-dot, rgba(255, 255, 255, .5));
  transition: width var(--gnm-dur-fast) var(--gnm-ease), border-radius var(--gnm-dur-fast) var(--gnm-ease), background-color var(--gnm-dur-fast) var(--gnm-ease);
}

.gnm-home-hero-carousel .carousel-indicators .active {
  width: 22px;
  border-radius: 6px;
  background-color: var(--gnm-hero-dot-active, #fff);
}

.gnm-home-hero__eyebrow {
  color: var(--gnm-accent);
}

.gnm-home-hero__title {
  color: var(--gnm-text);
}

.gnm-home-hero__subtitle {
  color: #334155;
}

.gnm-home-hero__card {
  background: var(--gnm-surface);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  padding: 18px;
  box-shadow: var(--gnm-shadow-sm);
}

.gnm-home-hero__card-title {
  font-weight: 600;
  color: var(--gnm-text);
  margin-bottom: 8px;
}

.gnm-home-hero__card-text {
  margin: 0 0 12px;
  color: var(--gnm-text-muted);
}

.gnm-btn-dark,
.gnm-btn-dark:hover,
.gnm-btn-dark:focus {
  display: inline-block;
  background: var(--gnm-text);
  color: #fff;
  text-decoration: none;
  padding: 10px 14px;
  border-radius: var(--gnm-radius-sm);
  font-weight: 600;
}

.gnm-btn-light {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 12px 14px;
  border-radius: 12px;
  border: 1px solid #bfdbfe;
  background: var(--gnm-surface);
  color: var(--gnm-text);
  text-decoration: none;
  font-weight: 600;
}

.gnm-section-title {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
  align-items: flex-end;
  margin: 0 0 18px;
}

.gnm-section-title__subtitle {
  margin-bottom: 6px;
}

.gnm-section-title__title {
  color: var(--gnm-text);
}

.gnm-section-title__link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--gnm-text);
  text-decoration: none;
  font-weight: 600;
  border-bottom: 1px solid #cbd5e1;
  padding-bottom: 2px;
}

.gnm-home-search-cta,
.gnm-home-article-ranking,
.gnm-home-newsletter-cta {
  padding: 20px 0 28px;
}

.gnm-home-latest-articles {
  padding: 28px 0;
}

.gnm-home-latest-articles__row {
  row-gap: 16px;
}

.gnm-home-article-card {
  height: 100%;
  background: var(--gnm-surface);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  padding: 18px;
  box-shadow: var(--gnm-shadow-sm);
}

.gnm-home-article-card__meta {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: center;
  margin-bottom: 10px;
  color: #64748b;
  font-size: 12px;
}

.gnm-home-article-card__title {
  margin: 0 0 10px;
  font-size: 1.15rem;
  line-height: 1.25;
}

.gnm-home-article-card__summary {
  color: var(--gnm-text-muted);
  font-size: 14px;
  line-height: 1.5;
  margin-bottom: 12px;
}

.gnm-home-article-card__link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--gnm-text);
  text-decoration: none;
  font-weight: 600;
}

.gnm-empty-dashed {
  background: var(--gnm-surface);
  border: 1px dashed #cbd5e1;
  border-radius: 12px;
  padding: 16px;
  color: var(--gnm-text-muted);
}

.gnm-row-gap-18 {
  row-gap: 18px;
}

/* Home legacy content section */
.gnm-home-content {
  padding: 32px 0;
}

.gnm-home-content__row {
  row-gap: 24px;
}

.gnm-home-content__card {
  background: var(--gnm-surface);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  padding: 24px;
}

.gnm-home-content__card--sm {
  padding: 20px;
}

.gnm-home-content__title {
  margin-top: 0;
  color: var(--gnm-text);
}

.gnm-home-content__list {
  padding-left: 18px;
  margin-bottom: 0;
}

/* Featured resources : padding vertical symetrique (l'ancien 4px/36px
   desequilibrait la carte dans les bandes centrees) */
.gnm-home-features {
  padding: 20px 0;
}

.gnm-home-features__row {
  row-gap: 14px;
}

.gnm-home-features__card {
  height: 100%;
  background: var(--gnm-surface);
  color: var(--gnm-text);
  border-radius: var(--gnm-radius-md);
  padding: 18px;
  border: 1px solid var(--gnm-border);
  box-shadow: var(--gnm-shadow-sm);
}

.gnm-home-features__title {
  margin: 0 0 8px;
  font-size: 1.05rem;
  line-height: 1.2;
}

.gnm-home-features__description {
  margin: 0 0 12px;
  color: var(--gnm-text-muted);
  font-size: 14px;
  line-height: 1.45;
}

.gnm-home-features__link {
  margin-top: auto;
  align-self: flex-start;
  display: inline-flex;
  width: auto;
  max-width: 100%;
}

.gnm-home-features__icon {
  width: 56px;
  height: 56px;
  border-radius: var(--gnm-radius-md);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--gnm-surface-soft);
  color: var(--gnm-primary);
  margin-bottom: 10px;
  margin-left: auto;
  margin-right: auto;
}

.gnm-home-features__icon i {
  font-size: 1.6rem;
  line-height: 1;
}

.gnm-home-features__eyebrow {
  margin-bottom: 4px;
}

.gnm-home-features--full-width .gnm-home-features__card {
  padding: 20px 22px;
  border-radius: var(--gnm-radius-md);
}

.gnm-home-features--full-width .gnm-home-features__description {
  display: block;
}

/* Additional list variants */
.gnm-loop-card__title-lg {
  margin: 0 0 8px;
  font-size: 22px;
}

.gnm-loop-card__title-xl {
  margin: 8px 0 10px;
  font-size: 23px;
}

.gnm-loop-card__date-sm {
  font-size: 12px;
  color: var(--gnm-text-muted);
}

.gnm-loop-card--v1 {
  overflow: hidden;
  border-radius: var(--gnm-radius-md);
}

.gnm-loop-card--v1 .gnm-loop-card__meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
}

.gnm-loop-card--v1 .gnm-loop-card__meta-badge {
  background: var(--gnm-surface-soft) !important;
  color: var(--gnm-text-muted) !important;
  border-color: var(--gnm-border) !important;
  font-weight: 600;
}

.gnm-loop-card--v1 .gnm-loop-card__sourceline {
  color: var(--gnm-text-muted);
}

.gnm-loop-card--v1 .gnm-loop-card__thumb-wrap {
  width: 120px;
}

.gnm-loop-card--v1 .gnm-loop-card__thumb {
  width: 100%;
  max-width: 120px;
  height: auto;
  border: 1px solid var(--gnm-border);
}

.gnm-loop-card--v1 .gnm-loop-card__summary {
  color: var(--gnm-text-muted);
}

.gnm-loop-card--v1 .gnm-loop-card__read {
  color: var(--gnm-primary);
  text-decoration: none;
}

.gnm-loop-card--v1 .gnm-loop-card__read:hover {
  color: var(--gnm-primary-2);
}

.gnm-loop-card--v3 {
  padding: 0;
  overflow: hidden;
}

.gnm-loop-card--v3 .gnm-loop-card__head {
  background: var(--gnm-surface-soft);
  border-bottom: 1px solid var(--gnm-border);
}

.gnm-loop-card--v3 .gnm-loop-card__date-sm {
  color: var(--gnm-accent);
  font-weight: 700;
}

.gnm-loop-card--v2 {
  border-left: 5px solid var(--gnm-accent);
  padding: 18px 20px;
  box-shadow: var(--gnm-shadow-sm);
}

.gnm-loop-card--v2 .gnm-loop-card__type {
  font-size: 12px;
  color: var(--gnm-accent);
  letter-spacing: .04em;
  font-weight: 700;
  text-transform: uppercase;
}

/* Publication hero variants */
.gnm-home-hero--with-publications {
  background: var(--gnm-text);
  color: #e2e8f0;
  border-bottom: 1px solid #1e293b;
}

.gnm-home-hero--with-featured-article {
  background: linear-gradient(135deg, #ecfeff, #eff6ff);
  border-bottom: 1px solid var(--gnm-border);
}

.gnm-home-hero__container--publications {
  padding: 32px 0;
}

.gnm-home-hero__container--featured {
  padding: 38px 0;
}

.gnm-home-hero__row--publications {
  row-gap: 18px;
}

.gnm-home-hero__row--featured {
  row-gap: 20px;
}

.gnm-home-hero__eyebrow--light {
  color: #93c5fd;
}

.gnm-home-hero__eyebrow--indigo {
  color: #4338ca;
}

.gnm-home-hero__title--publications {
  margin: 0 0 10px;
  font-size: clamp(28px, 4vw, 40px);
}

.gnm-home-hero__title--featured {
  margin: 0 0 10px;
  font-size: clamp(28px, 4vw, 42px);
  line-height: 1.08;
}

.gnm-home-hero__subtitle--light {
  color: #cbd5e1;
}

.gnm-home-hero__card-link {
  display: block;
  height: 100%;
  background: #111827;
  border: 1px solid #334155;
  border-radius: var(--gnm-radius-md);
  padding: 14px;
  color: #e2e8f0;
  text-decoration: none;
}

.gnm-home-hero__card-date {
  font-size: 11px;
  color: #93c5fd;
  margin-bottom: 6px;
}

.gnm-home-hero__card-title {
  font-weight: 700;
  line-height: 1.2;
}

.gnm-home-hero__empty {
  background: #111827;
  border: 1px solid #334155;
  border-radius: var(--gnm-radius-md);
  padding: 14px;
}

.gnm-home-hero__feature-summary {
  margin: 0 0 14px;
  color: #334155;
}

.gnm-home-hero__feature-link {
  text-decoration: none;
}

.gnm-home-hero__workflow-card {
  background: var(--gnm-surface);
  border: 1px solid #cbd5e1;
  border-radius: var(--gnm-radius-md);
  padding: 18px;
  box-shadow: 0 8px 24px rgba(15, 23, 42, .06);
}

.gnm-home-hero__workflow-title {
  font-weight: 700;
  margin-bottom: 8px;
}

.gnm-home-hero__workflow-list {
  margin: 0;
  padding-left: 18px;
  color: var(--gnm-text-muted);
}

/* Basepilot specialty spotlight */
.gnm-site-specialty-spotlight {
  padding: 32px 0;
  background: var(--gnm-surface);
}

.gnm-site-specialty-spotlight__head {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 18px;
}

.gnm-site-specialty-spotlight__eyebrow {
  color: #0ea5e9;
}

.gnm-site-specialty-spotlight__title {
  font-size: clamp(22px, 3vw, 32px);
  color: var(--gnm-text);
}

.gnm-site-specialty-spotlight__meta {
  color: #64748b;
  font-size: 13px;
}

.gnm-site-specialty-spotlight__empty {
  background: var(--gnm-surface-soft);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  padding: 16px;
}

.gnm-site-specialty-spotlight__row {
  row-gap: 18px;
}

.gnm-site-specialty-spotlight__card {
  height: 100%;
  background: var(--gnm-surface);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  overflow: hidden;
  box-shadow: var(--gnm-shadow-sm);
}

.gnm-site-specialty-spotlight__banner {
  height: 120px;
  background: linear-gradient(135deg, #e0f2fe, #dbeafe);
}

.gnm-site-specialty-spotlight__body {
  padding: 16px;
}

.gnm-site-specialty-spotlight__top {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  align-items: center;
}

.gnm-site-specialty-spotlight__term {
  margin: 0;
  font-size: 20px;
}

.gnm-site-specialty-spotlight__link {
  font-size: 13px;
  text-decoration: none;
}

.gnm-site-specialty-spotlight__desc {
  margin-top: 10px;
  color: #334155;
}

.gnm-site-specialty-spotlight__keywords {
  margin: 10px 0 0;
  color: #64748b;
  font-size: 12px;
}

.gnm-site-specialty-spotlight__recent {
  margin-top: 12px;
}

.gnm-site-specialty-spotlight__recent-title {
  font-weight: 700;
  font-size: 13px;
  margin-bottom: 6px;
  color: var(--gnm-text);
}

.gnm-site-specialty-spotlight__recent-list {
  margin: 0;
  padding-left: 18px;
}

.gnm-home-search-cta__card {
  background: linear-gradient(135deg, var(--gnm-surface), #eff6ff);
  border: 1px solid #dbeafe;
  border-radius: var(--gnm-radius-md);
  padding: 24px;
  box-shadow: 0 10px 25px rgba(59, 130, 246, .08);
}

.gnm-home-search-cta__subtitle {
  margin: 0 0 16px;
  color: #334155;
  max-width: 60ch;
}

.gnm-home-search-cta__input {
  min-width: 0;
  border: 1px solid #bfdbfe;
  border-radius: 12px;
  padding: 12px 14px;
  background: var(--gnm-surface);
}

.gnm-home-search-cta__submit {
  padding: 12px 18px;
  border-radius: 12px;
  min-height: 46px;
}

.gnm-home-search-cta--standard-with-banner .gnm-home-search-cta__submit,
.gnm-home-search-cta--minimal-with-banner .gnm-home-search-cta__submit {
  padding: .375rem .75rem;
}

.gnm-home-search-cta__advanced {
  border-radius: 12px;
  min-height: 46px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.gnm-home-search-cta__journal-az {
  border-top: 1px solid var(--gnm-border);
  padding-top: 12px;
}

.gnm-home-search-cta__specialty-nav {
  border-top: 1px solid var(--gnm-border);
  padding-top: 12px;
}

.gnm-home-search-cta--minimal .gnm-home-search-cta__journal-az,
.gnm-home-search-cta--minimal-with-banner .gnm-home-search-cta__journal-az,
.gnm-home-search-cta--minimal .gnm-home-search-cta__specialty-nav,
.gnm-home-search-cta--minimal-with-banner .gnm-home-search-cta__specialty-nav {
  border-top: 0;
  padding-top: 0;
}

.gnm-home-search-cta__specialty-menu {
  margin: 0;
}

.gnm-home-search-cta__specialty-menu li {
  margin-bottom: 8px;
}

.gnm-home-search-cta__specialty-menu a {
  text-decoration: none;
  color: var(--gnm-text);
}

.gnm-journal-az-links {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.gnm-journal-az-links a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 40px;
  height: 40px;
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-sm);
  text-decoration: none;
  color: var(--gnm-text);
  background: var(--gnm-surface);
  font-size: 14px;
  font-weight: 400;
}

.gnm-home-search-cta__specialty-chip {
  font-size: 14px;
  padding: 0.45rem 0.8rem;
}

.gnm-home-search-cta--minimal-with-banner .gnm-home-search-cta__ad-card {
  background: var(--gnm-surface);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  padding: 18px;
}

.gnm-home-search-cta--minimal-with-banner .gnm-home-search-cta__ad-wrap {
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.gnm-home-search-cta--standard-with-banner .gnm-home-search-cta__ad-card {
  background: var(--gnm-surface);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  padding: 18px;
}

.gnm-home-search-cta--standard-with-banner .gnm-home-search-cta__ad-wrap {
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
}

.gnm-home-search-cta__custom-banner-link {
  display: inline-block;
  max-width: 100%;
}

.gnm-home-search-cta__custom-banner-image {
  display: block;
  max-width: 100%;
  height: auto;
}

.gnm-home-search-cta__ad-label {
  color: #9ca3af;
}

.gnm-home-search-cta__ad-empty {
  color: var(--gnm-text-muted);
  font-size: 0.95rem;
}

.gnm-home-subject-navigation {
  padding: 8px 0 28px;
}

.gnm-home-subject-navigation__card {
  background: var(--gnm-surface);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  padding: 18px;
}

.gnm-home-subject-navigation__menu {
  margin: 0;
}

.gnm-home-subject-navigation__menu li {
  margin-bottom: 8px;
}

.gnm-home-subject-navigation__menu a {
  text-decoration: none;
  color: var(--gnm-text);
}

.gnm-home-editorial-highlight {
  padding: 8px 0 28px;
}

.gnm-home-editorial-highlight__card {
  background: var(--gnm-surface);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  padding: 18px;
}

.gnm-home-editorial-highlight__body {
  color: var(--gnm-text-muted);
}

.gnm-home-editorial-highlight__cta {
  margin-top: 10px;
}

.gnm-home-media-promo {
  padding: 8px 0 28px;
}

.gnm-home-media-promo__card {
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  overflow: hidden;
}

.gnm-home-media-promo__img {
  object-fit: cover;
  max-height: 210px;
}

.gnm-home-newsletter-cta__card {
  background: linear-gradient(135deg, #fef3c7, var(--gnm-surface));
  border: 1px solid #fde68a;
  border-radius: var(--gnm-radius-md);
  padding: 22px 24px;
  display: flex;
  gap: 20px;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
}

.gnm-home-newsletter-cta__content {
  display: flex;
  gap: 14px;
  align-items: flex-start;
  min-width: 260px;
  flex: 1 1 auto;
}

.gnm-home-newsletter-cta__icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: var(--gnm-text);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  flex: 0 0 auto;
}

.gnm-home-newsletter-cta__title {
  margin: 0 0 6px;
  color: var(--gnm-text);
  font-size: 1.2rem;
  line-height: 1.2;
}

.gnm-home-newsletter-cta__desc {
  margin: 0;
  color: var(--gnm-text-muted);
}

.gnm-home-newsletter-cta__button,
.gnm-home-newsletter-cta__button:hover,
.gnm-home-newsletter-cta__button:focus {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 12px 16px;
  border-radius: 12px;
  text-decoration: none;
  font-weight: 600;
}

.gnm-home-article-ranking__card {
  background: var(--gnm-surface);
  border: 1px solid var(--gnm-border);
  box-shadow: var(--gnm-shadow-sm);
  border-radius: var(--gnm-radius-md);
  padding: 20px;
  color: var(--gnm-text);
}

.gnm-home-article-ranking__row {
  row-gap: 12px;
}

.gnm-home-article-ranking__item {
  height: 100%;
  background: var(--gnm-surface-soft);
  border: 1px solid var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  padding: 16px;
}

.gnm-home-article-ranking__rank,
.gnm-home-article-ranking__date,
.gnm-home-article-ranking__empty {
  font-size: 13px;
  color: var(--gnm-text-muted);
}

.gnm-home-article-ranking__rank {
  font-size: 12px;
  margin-bottom: 8px;
}

.gnm-home-article-ranking__title {
  margin: 0 0 8px;
  font-size: 1rem;
  line-height: 1.25;
}

.gnm-home-article-ranking__title-link {
  color: var(--gnm-text);
  text-decoration: none;
}

.gnm-home-article-ranking__summary {
  margin: 0;
  color: var(--gnm-text-muted);
  font-size: 13px;
  line-height: 1.45;
}

/* Shared module spacing / cards */
.gnm-home-module {
  position: relative;
}

.gnm-home-module .card,
.gnm-home-module article,
.gnm-home-module .gnm-card {
  border-radius: var(--gnm-radius-md);
}

.gnm-home-module h1,
.gnm-home-module h2,
.gnm-home-module h3 {
  color: var(--gnm-text);
  letter-spacing: -0.015em;
}

.card.gnm-surface-card {
  background: var(--gnm-surface);
  border-color: var(--gnm-border);
}

/* Shared article and list cards */
.gnm-loop-card,
.gnm-article-single {
  border: 1px solid var(--gnm-border) !important;
  box-shadow: var(--gnm-shadow-sm);
}

.gnm-loop-card a,
.gnm-article-single a {
  text-underline-offset: 0.15em;
}

.gnm-loop-card:hover {
  box-shadow: var(--gnm-shadow-md);
  transform: translateY(-1px);
  transition: box-shadow var(--gnm-dur) var(--gnm-ease), transform var(--gnm-dur) var(--gnm-ease);
}

/* Article sidebars */
.gnm-article-left-rail {
  position: -webkit-sticky;
  position: sticky;
  top: 110px;
  align-self: flex-start;
  height: fit-content;
}

.gnm-article-sidebar-left {
  position: relative;
}

.gnm-article-sidebar-left__stack {
  align-items: center;
}

.gnm-article-sidebar-left__icon-btn,
.gnm-article-sidebar-left .bm-bookmark-icon-button {
  width: 40px;
  height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 999px;
  padding: 0;
}

.gnm-article-sidebar-left .bm-bookmark-icon-button {
  border: 1px solid #6c757d;
  color: #6c757d;
  background: transparent;
  text-decoration: none;
}

.gnm-article-sidebar-left .bm-bookmark-icon-button.is-bookmarked {
  color: #6c757d;
  border-color: #6c757d;
  background: transparent;
}

.gnm-article-sidebar-left__icon-btn:hover,
.gnm-article-sidebar-left__icon-btn:focus {
  background-color: #6c757d;
  border-color: #6c757d;
  color: #fff;
}

.gnm-article-sidebar-left .bm-bookmark-icon-button:hover,
.gnm-article-sidebar-left .bm-bookmark-icon-button:focus {
  color: #fff;
  border-color: #6c757d;
  background-color: #6c757d;
}

.gnm-article-sidebar-left .bm-bookmark-icon-button .bi {
  color: inherit;
}

.gnm-article-sidebar-left .bm-bookmark-icon-button:hover .bi,
.gnm-article-sidebar-left .bm-bookmark-icon-button:focus .bi {
  color: inherit;
}

.gnm-article-sidebar-left .bm-bookmark-icon-button .bi,
.gnm-article-sidebar-left__icon-btn .bi {
  font-size: 1.05rem;
}

.gnm-article-sidebar-actions .bm-bookmark-button {
  display: flex;
  align-items: center;
}

.gnm-article-sidebar-actions .bm-bookmark-button .bm-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-right: .5rem;
  width: 1rem;
  line-height: 1;
}

.gnm-article-sidebar-actions .bm-bookmark-button .bm-icon::before {
  font-family: "bootstrap-icons";
  font-style: normal;
  font-weight: 400;
  content: "\f1a2";
}

.gnm-article-sidebar-actions .bm-bookmark-button.is-bookmarked .bm-icon::before {
  content: "\f199";
}

.gnm-article-main-card {
  border-radius: var(--bs-card-border-radius);
}

.gnm-article-sidebar-resource {
  width: 100%;
}

.gnm-article-sidebar-resource__icon {
  display: block;
  font-size: 1.8rem;
  line-height: 1;
}

/* Forms (Bootstrap 5 horizontal forms and auth pages) */
.gnm-auth-panel,
.gnm-auth-panel .card,
.gnm-auth-panel form {
  border-radius: var(--gnm-radius-md);
}

.form-control,
.form-select {
  border-color: var(--gnm-border);
  border-radius: 10px;
  min-height: 42px;
}

/* Bootstrap sizes the file button from its own padding, but the rule above
   raises every field to 42px: the button ends up 36px tall inside a 40px well,
   with square corners the field radius clips. It reads as a broken widget.
   Tie the button to the field it lives in - full height, matching corners. */
.form-control[type="file"] {
  padding: 0 12px 0 0;
  line-height: 40px;
  overflow: hidden;
}

.form-control[type="file"]::file-selector-button {
  height: 40px;
  margin: 0 12px 0 0;
  padding: 0 16px;
  border: 0;
  border-right: 1px solid var(--gnm-border);
  border-radius: 9px 0 0 9px;
  background: #eef1f6;
  color: #2b3242;
  font-weight: 600;
  line-height: 40px;
  cursor: pointer;
  transition: background-color var(--gnm-dur) var(--gnm-ease);
}

.form-control[type="file"]::file-selector-button:hover {
  background: #e3e8f0;
}

.form-control:focus,
.form-select:focus {
  border-color: rgba(37, 99, 235, 0.45);
  box-shadow: 0 0 0 .2rem rgba(37, 99, 235, 0.12);
}

.btn-outline-primary {
  color: var(--gnm-primary);
  border-color: rgba(15, 76, 129, 0.35);
}

/* Footer */
footer,
.gnm-footer-shell {
  margin-top: auto;
}

footer a,
.gnm-footer-shell a {
  text-decoration-thickness: 1px;
  text-underline-offset: 0.12em;
}

/* Tables/admin-ish front blocks */
table {
  --bs-table-striped-bg: rgba(148, 163, 184, 0.05);
}

/* Mobile refinement */
@media (max-width: 767.98px) {
  .container {
    padding-left: 16px;
    padding-right: 16px;
  }

  .gnm-home-module {
    padding-top: 18px !important;
    padding-bottom: 18px !important;
  }

  .navbar,
  .gnm-header-shell .navbar {
    border-radius: 0;
  }
}

/* Header shell -- navbar variant (BS5 collapse, brand logo, search CTA) */
.gnm-site-header-shell--navbar .gnm-navbar {
  padding-block: 0.375rem;
}

.gnm-site-header-shell--navbar .gnm-brand-logo--navbar {
  height: 42px;
  width: auto;
  display: block;
}

.gnm-site-header-shell--navbar .gnm-navbar-menu .nav-link {
  font-weight: 600;
  color: var(--gnm-text);
  padding: 0.5rem 0.875rem;
  border-radius: var(--gnm-radius-sm);
  transition: color var(--gnm-dur-fast) var(--gnm-ease), background-color var(--gnm-dur-fast) var(--gnm-ease);
}

.gnm-site-header-shell--navbar .gnm-navbar-menu .nav-link:hover,
.gnm-site-header-shell--navbar .gnm-navbar-menu .nav-link:focus-visible {
  color: var(--gnm-primary-2);
  background-color: color-mix(in oklab, var(--gnm-primary-2) 8%, transparent);
}

.gnm-site-header-shell--navbar .gnm-navbar-menu .nav-link.active,
.gnm-site-header-shell--navbar .gnm-navbar-menu .current-menu-item > .nav-link {
  color: var(--gnm-primary);
  background-color: color-mix(in oklab, var(--gnm-primary) 10%, transparent);
}

.gnm-site-header-shell--navbar .gnm-navbar-search {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  color: var(--gnm-primary);
  background-color: color-mix(in oklab, var(--gnm-primary) 8%, transparent);
  transition: color var(--gnm-dur-fast) var(--gnm-ease), background-color var(--gnm-dur-fast) var(--gnm-ease);
}

.gnm-site-header-shell--navbar .gnm-navbar-search:hover,
.gnm-site-header-shell--navbar .gnm-navbar-search:focus-visible {
  color: var(--gnm-surface);
  background-color: var(--gnm-primary-2);
}

.gnm-site-header-shell--navbar .gnm-navbar-toggler {
  border-color: var(--gnm-border);
}

@media (max-width: 991.98px) {
  .gnm-site-header-shell--navbar .navbar-collapse {
    padding-block: 0.75rem 0.5rem;
  }

  .gnm-site-header-shell--navbar .gnm-navbar-search {
    margin-top: 0.5rem;
  }
}

.gnm-site-header-shell--navbar .gnm-navbar-toggler .navbar-toggler-icon {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%230f4c81' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}

/* ==================================================================
   Recettes reseau (promues depuis CardioConnect le 12/07/2026)
   ================================================================== */

/* Modales : toutes centrees verticalement (generalisation du
   comportement .modal-dialog-centered de Bootstrap, sans markup). */
.gnm-base-site .modal .modal-dialog {
  display: flex;
  align-items: center;
  min-height: calc(100% - var(--bs-modal-margin, 1.75rem) * 2);
}

/* Responsive des bandes home (sections V3) : chaque colonne de bande
   est un container ; sous 640px de largeur REELLE de colonne, les
   grilles internes des modules s'empilent, quel que soit le viewport. */
.gnm-home-section__col {
  container-type: inline-size;
}

@container (max-width: 640px) {
  .gnm-home-section__col .gnm-home-module [class*="col-md-"],
  .gnm-home-section__col .gnm-home-module [class*="col-lg-"],
  .gnm-home-section__col .gnm-home-module [class*="col-xl-"] {
    flex: 0 0 auto;
    width: 100%;
  }
}

/* ------------------------------------------------------------------
   Primary Bootstrap = token du theme (12/07/2026).
   Bootstrap embarque = 5.1.3 : les vars --bs-btn-* (5.2+) declarees
   plus haut sur .btn-primary sont ignorees -> on repeint les
   proprietes reelles. Tokens redefinissables par le Site CSS actif :
   --gnm-primary / --gnm-primary-rgb / --gnm-primary-strong (hover).
   ------------------------------------------------------------------ */
.gnm-base-site .btn-primary {
  background-color: var(--gnm-primary, #0f4c81);
  border-color: var(--gnm-primary, #0f4c81);
}
.gnm-base-site .btn-primary:hover,
.gnm-base-site .btn-primary:focus,
.gnm-base-site .btn-primary:active,
.gnm-base-site .btn-primary.active {
  background-color: var(--gnm-primary-strong, #2563eb);
  border-color: var(--gnm-primary-strong, #2563eb);
}
.gnm-base-site .btn-primary:focus {
  box-shadow: 0 0 0 .25rem rgba(var(--gnm-primary-rgb, 15, 76, 129), .3);
}
.gnm-base-site .btn-primary:disabled,
.gnm-base-site .btn-primary.disabled {
  background-color: var(--gnm-primary, #0f4c81);
  border-color: var(--gnm-primary, #0f4c81);
}

.gnm-base-site .btn-outline-primary {
  color: var(--gnm-primary, #0f4c81);
  border-color: var(--gnm-primary, #0f4c81);
}
.gnm-base-site .btn-outline-primary:hover,
.gnm-base-site .btn-outline-primary:active,
.gnm-base-site .btn-outline-primary.active {
  background-color: var(--gnm-primary, #0f4c81);
  border-color: var(--gnm-primary, #0f4c81);
  color: #fff;
}
.gnm-base-site .btn-outline-primary:focus {
  box-shadow: 0 0 0 .25rem rgba(var(--gnm-primary-rgb, 15, 76, 129), .3);
}

/* halo de focus des champs (5.1.3 : #86b7fe en dur) */
.gnm-base-site .form-control:focus,
.gnm-base-site .form-select:focus {
  border-color: rgba(var(--gnm-primary-rgb, 15, 76, 129), .45);
  box-shadow: 0 0 0 .25rem rgba(var(--gnm-primary-rgb, 15, 76, 129), .15);
}

/* nav-pills actives (5.1.3 : #0d6efd en dur) */
.gnm-base-site .nav-pills .nav-link.active,
.gnm-base-site .nav-pills .show > .nav-link {
  background-color: var(--gnm-primary, #0f4c81);
}

/* ==================================================================
   Grids balanced against the number of results (network-wide rule).
   A grid whose item count does not fill its columns leaves a gap in the
   last row (3 + 1 orphan, 2 columns out of 3...): spread the items
   instead of keeping the nominal density.
     1 item  -> full width
     2 items -> 50 / 50 from lg
     4 items -> 2 x 2 from lg (instead of 3 + 1)
   3, 5 and beyond: base grid, untouched.
   The 50% is equally right for a 2-column grid (where it is already the
   case, so a no-op) and for a 3-column one: a single rule serves both
   densities, with no count() in PHP.
   Scope: .gnm-grid-balance goes on any listing .row (2- or 3-column
   grids; do NOT put it on a 4-column grid), plus the already
   standardised listings below.
   Specificity raised to 4 classes so it wins over layout density variants. */
.gnm-base-site .gnm-grid-balance > *:only-child,
.gnm-base-site .gnm-article-archive-grid > .gnm-article-archive-grid__item:only-child,
.gnm-base-site .gnm-home-journals-az__list .row > *:only-child {
  width: 100%;
}
@media (min-width: 992px) {
  .gnm-base-site .gnm-grid-balance > *:first-child:nth-last-child(2),
  .gnm-base-site .gnm-grid-balance > *:first-child:nth-last-child(2) ~ *,
  .gnm-base-site .gnm-grid-balance > *:first-child:nth-last-child(4),
  .gnm-base-site .gnm-grid-balance > *:first-child:nth-last-child(4) ~ *,
  .gnm-base-site .gnm-article-archive-grid > .gnm-article-archive-grid__item:first-child:nth-last-child(2),
  .gnm-base-site .gnm-article-archive-grid > .gnm-article-archive-grid__item:first-child:nth-last-child(2) ~ *,
  .gnm-base-site .gnm-article-archive-grid > .gnm-article-archive-grid__item:first-child:nth-last-child(4),
  .gnm-base-site .gnm-article-archive-grid > .gnm-article-archive-grid__item:first-child:nth-last-child(4) ~ *,
  .gnm-base-site .gnm-home-journals-az__list .row > *:first-child:nth-last-child(2),
  .gnm-base-site .gnm-home-journals-az__list .row > *:first-child:nth-last-child(2) ~ * {
    width: 50%;
  }
}

/* Colonne adaptative nue .col-lg (croissance egale) des formulaires
   search-cta (col-12 col-lg + col-lg-auto), re-declaree a l'identique du
   bundle partage par securite de cascade (base.css charge apres lui). */
@media (min-width: 992px) {
  .col-lg {
    flex: 1 0 0%;
  }
}
/* Featured resources - variante editorial-stack : une seule carte, les items
   empiles en boucle "heartbeat" (la face se dissout sur place, la suivante
   entre en pulsant comme le coeur). 3 items = boucle ; sinon grille statique.
   Images posees par la CSS du site ; sans elles, fond neutre plat. */
.gnm-home-features--editorial-stack .gnm-home-features__stack {
  position: relative;
  width: min(420px, 100%);
  margin-inline: auto;
  aspect-ratio: 3 / 4;
  /* profondeur reelle : l'ordre d'empilement vient du translateZ des faces
     (le z-index en keyframes est discret et saute selon l'ordre DOM) */
  perspective: 1400px;
  transform-style: preserve-3d;
}

.gnm-home-features--editorial-stack .gnm-home-features__stackcard {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 24px;
  border-radius: var(--gnm-radius-md);
  overflow: hidden;
  text-decoration: none;
  color: #fff;
  background: #16233f linear-gradient(180deg, #24365c, #101d38);
  background-size: cover;
  background-position: center;
  will-change: transform, opacity;
}

.gnm-home-features--editorial-stack .gnm-home-features__stackcard::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(6, 13, 30, .82) 0%, rgba(6, 13, 30, .25) 34%, rgba(6, 13, 30, 0) 55%, rgba(6, 13, 30, .55) 100%);
}

.gnm-home-features--editorial-stack .gnm-home-features__stackcard-head,
.gnm-home-features--editorial-stack .gnm-home-features__stackcard-foot {
  position: relative;
  z-index: 1;
}

.gnm-home-features--editorial-stack .gnm-home-features__stackcard-kicker {
  font-size: .7rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, .75);
  margin: 0 0 8px;
}

.gnm-home-features--editorial-stack .gnm-home-features__stackcard-title {
  color: inherit;
  font-size: 1.55rem;
  font-weight: 700;
  line-height: 1.15;
  margin: 0;
}

/* description en pleine ligne, CTA seul en dessous et centre (14/07/2026) */
.gnm-home-features--editorial-stack .gnm-home-features__stackcard-foot {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 14px;
}

.gnm-home-features--editorial-stack .gnm-home-features__stackcard-description {
  color: rgba(255, 255, 255, .82);
  font-size: .88rem;
  line-height: 1.45;
  margin: 0;
  max-width: 26ch;
}

.gnm-home-features--editorial-stack .gnm-home-features__stackcard-cta {
  flex: none;
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  color: #fff;
  background: #33698f;
  font-size: .85rem;
  font-weight: 700;
  padding: 9px 16px;
  border-radius: 999px;
}

.gnm-home-features--editorial-stack .gnm-home-features__stackcard-cta .bi {
  display: inline-block;
  transition: transform var(--gnm-dur) var(--gnm-ease);
}

.gnm-home-features--editorial-stack .gnm-home-features__stackcard:hover .gnm-home-features__stackcard-cta .bi,
.gnm-home-features--editorial-stack .gnm-home-features__stackcard:focus-visible .gnm-home-features__stackcard-cta .bi {
  transform: translateX(4px);
}

/* A slot whose destination is not built yet keeps its face in the stack, so the
   module still turns on three, but nothing about it reads as clickable: no
   pill, no arrow, only the state written plainly under the promise. */
.gnm-home-features--editorial-stack .gnm-home-features__stackcard--nolink {
  cursor: default;
}

.gnm-home-features--editorial-stack .gnm-home-features__stackcard-status {
  flex: none;
  font-size: .7rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, .6);
}

.gnm-home-features--editorial-stack .gnm-home-features__stackglow {
  position: absolute;
  z-index: -1;
  transform: translateZ(-320px) scale(1.23);
  inset: 16px 10px -12px 10px;
  border-radius: var(--gnm-radius-md);
  background-size: cover;
  background-position: center;
  filter: blur(22px) saturate(1.5);
  opacity: 0;
  pointer-events: none;
}

/* boucle heartbeat (3 items) */
.gnm-home-features__stack--loop .gnm-home-features__stackcard {
  animation: gnm-feat-beat 9s linear infinite both;
  visibility: hidden;
  pointer-events: none;
}

.gnm-home-features__stack--loop .gnm-home-features__stackglow {
  animation: gnm-feat-stackglow 9s linear infinite both;
}

.gnm-home-features__stack--loop .gnm-home-features__stackcard--i1,
.gnm-home-features__stack--loop .gnm-home-features__stackglow--i1 {
  animation-delay: -6s;
}

.gnm-home-features__stack--loop .gnm-home-features__stackcard--i2,
.gnm-home-features__stack--loop .gnm-home-features__stackglow--i2 {
  animation-delay: -3s;
}

/* indicateur de progression : 3 points sous la carte, memes duree/delais que
   la boucle ; places DANS .stack pour partager la pause hover/focus */
.gnm-home-features--editorial-stack .gnm-home-features__stack--loop {
  margin-bottom: 64px;
}

.gnm-home-features--editorial-stack .gnm-home-features__stacknav {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  margin-top: 16px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
}

/* fleches rondes, decalque des .cfh-arrow du slider Latest research du live
   Pancreoscopie (38px, chevron centre) — couleurs par tokens per-site */
.gnm-home-features--editorial-stack .gnm-home-features__stackarrow {
  width: 38px;
  height: 38px;
  flex-shrink: 0;
  border: 0;
  border-radius: 50%;
  background: var(--gnm-feat-arrow-bg, #e8eaf0);
  color: var(--gnm-feat-arrow-fg, #454c63);
  font-size: 1.05rem;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background var(--gnm-dur-fast) var(--gnm-ease), color var(--gnm-dur-fast) var(--gnm-ease);
}

.gnm-home-features--editorial-stack .gnm-home-features__stackarrow .bi {
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
}

.gnm-home-features--editorial-stack .gnm-home-features__stackarrow:hover,
.gnm-home-features--editorial-stack .gnm-home-features__stackarrow:focus-visible {
  background: var(--gnm-feat-arrow-bg-hover, #d8dbe4);
  color: var(--gnm-feat-arrow-fg-hover, #23283a);
}

.gnm-home-features--editorial-stack .gnm-home-features__stackdots {
  display: flex;
  align-items: center;
  gap: 7px;
  pointer-events: none;
}

/* meme geometrie que la pagination du slider Latest research du live
   Pancreoscopie : bullet rond 8px, l'actif s'etire en pilule 22px/r6 */
.gnm-home-features--editorial-stack .gnm-home-features__stackdot {
  flex-shrink: 0;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--gnm-feat-dot, rgba(90, 96, 112, .3));
}

.gnm-home-features__stack--loop .gnm-home-features__stackdot {
  animation: gnm-feat-stackdot 9s linear infinite both;
}

.gnm-home-features__stack--loop .gnm-home-features__stackdot--i1 {
  animation-delay: -6s;
}

.gnm-home-features__stack--loop .gnm-home-features__stackdot--i2 {
  animation-delay: -3s;
}

/* pause de lecture : seulement quand la CARTE est survolee ou focus —
   pas les fleches/points, sinon cliquer un controle gele la transition
   en plein vol (survol du bouton = pause pendant le saut de timeline) */
.gnm-home-features__stack--loop:has(.gnm-home-features__stackcard:hover) .gnm-home-features__stackcard,
.gnm-home-features__stack--loop:has(.gnm-home-features__stackcard:hover) .gnm-home-features__stackglow,
.gnm-home-features__stack--loop:has(.gnm-home-features__stackcard:hover) .gnm-home-features__stackdot,
.gnm-home-features__stack--loop:has(.gnm-home-features__stackcard:focus-visible) .gnm-home-features__stackcard,
.gnm-home-features__stack--loop:has(.gnm-home-features__stackcard:focus-visible) .gnm-home-features__stackglow,
.gnm-home-features__stack--loop:has(.gnm-home-features__stackcard:focus-visible) .gnm-home-features__stackdot {
  animation-play-state: paused;
}

/* battement cardiaque, echo du pictogramme coeur du header (montee seche,
   detente longue) : la face entrante pulse une fois puis se pose ; la face
   sortante se dissout sur place, sans grossir (aucun cadre fantome possible) */
@keyframes gnm-feat-beat {
  0%     { transform: translateZ(-40px) scale(.97); opacity: 0; visibility: hidden; pointer-events: none; animation-timing-function: cubic-bezier(.165, .84, .44, 1); }
  1%     { opacity: 1; visibility: visible; pointer-events: auto; }
  2.5%   { transform: translateZ(0) scale(1.06); animation-timing-function: cubic-bezier(.22, .61, .36, 1); }
  6%     { transform: translateZ(0) scale(1); opacity: 1; }
  33.33% { transform: translateZ(0) scale(1); opacity: 1; visibility: visible; pointer-events: auto; animation-timing-function: cubic-bezier(.55, .055, .675, .19); }
  39.33% { transform: translateZ(-40px) scale(.97); opacity: 0; visibility: hidden; pointer-events: none; }
  100%   { transform: translateZ(-40px) scale(.97); opacity: 0; visibility: hidden; pointer-events: none; }
}

@keyframes gnm-feat-stackglow {
  0%     { opacity: .55; }
  33.33% { opacity: .55; }
  37%    { opacity: 0; }
  96%    { opacity: 0; }
  100%   { opacity: .55; }
}

/* le bullet s'etire en pilule active pendant la fenetre "face avant" de sa
   carte (0-33.33%, entree 0-6%, sortie 33.33-39.33% — bornes de gnm-feat-beat) */
@keyframes gnm-feat-stackdot {
  0%     { width: 8px; border-radius: 50%; background: var(--gnm-feat-dot, rgba(90, 96, 112, .3)); }
  6%     { width: 22px; border-radius: 6px; background: var(--gnm-feat-dot-active, #5a6070); }
  33.33% { width: 22px; border-radius: 6px; background: var(--gnm-feat-dot-active, #5a6070); }
  39.33% { width: 8px; border-radius: 50%; background: var(--gnm-feat-dot, rgba(90, 96, 112, .3)); }
  100%   { width: 8px; border-radius: 50%; background: var(--gnm-feat-dot, rgba(90, 96, 112, .3)); }
}

/* moins de 3 items : grille statique, pas de boucle */
.gnm-home-features--editorial-stack .gnm-home-features__stack:not(.gnm-home-features__stack--loop) {
  width: 100%;
  aspect-ratio: auto;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 28px;
}

.gnm-home-features--editorial-stack .gnm-home-features__stack:not(.gnm-home-features__stack--loop) .gnm-home-features__stackcard {
  position: relative;
  aspect-ratio: 3 / 4;
}

@media (prefers-reduced-motion: reduce) {
  .gnm-home-features__stack--loop .gnm-home-features__stackcard,
  .gnm-home-features__stack--loop .gnm-home-features__stackglow,
  .gnm-home-features__stack--loop .gnm-home-features__stackdot {
    animation: none;
  }
  .gnm-home-features__stack--loop .gnm-home-features__stackdot--i0 {
    background: var(--gnm-feat-dot-active, #5a6070);
    width: 22px;
    border-radius: 6px;
  }
  .gnm-home-features--editorial-stack .gnm-home-features__stackarrow {
    display: none;
  }
  .gnm-home-features__stack--loop .gnm-home-features__stackcard--i0 {
    transform: none;
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
  }
  .gnm-home-features__stack--loop .gnm-home-features__stackglow--i0 {
    opacity: .55;
  }
  .gnm-home-features__stack--loop .gnm-home-features__stackcard--i1,
  .gnm-home-features__stack--loop .gnm-home-features__stackcard--i2,
  .gnm-home-features__stack--loop .gnm-home-features__stackglow--i1,
  .gnm-home-features__stack--loop .gnm-home-features__stackglow--i2 {
    visibility: hidden;
  }
}

/* Gap utilities polyfill: Bootstrap 5.1.3 predates column-gap-*/row-gap-* (added in 5.2) */
.column-gap-3 { column-gap: 1rem !important; }
.row-gap-1 { row-gap: .25rem !important; }
.row-gap-2 { row-gap: .5rem !important; }


/* ============================================================
   Auth pages - variante "vestibule" (structure reseau neutre)
   Rail de marque (--gnm-primary) + panneau formulaire ; bande
   horizontale pour registration ; carte simple pour account.
   La couleur vient des tokens de base, surchargeables par le Site CSS.
   ============================================================ */
.gnm-auth-v__shell {
  max-width: 980px;
  margin-inline: auto;
  background: #fff;
  border-radius: var(--gnm-radius-lg, 14px);
  overflow: hidden;
  box-shadow: 0 24px 60px rgba(var(--gnm-primary-rgb, 15, 76, 129), .16);
}
/* The account sidebar has longer labels than the other auth surfaces. */
.gnm-auth-v--account .gnm-auth-v__shell {
  max-width: 1100px;
}
#user-account .gnm-account-sidebar .nav-link {
  white-space: nowrap !important;
}
#user-account #additional-information-tab {
  min-width: max-content;
}
#user-account .gnm-account-sidebar .nav-link.active,
.gnm-base-site #user-account .nav-pills .nav-link.active,
.gnm-base-site #user-account .nav-pills .show > .nav-link {
  color: var(--gnm-primary, #0f4c81) !important;
  background-color: rgba(var(--gnm-primary-rgb, 15, 76, 129), .12) !important;
  border-radius: var(--gnm-radius-sm, 6px);
  font-weight: 600;
}
.gnm-auth-v--split .gnm-auth-v__shell {
  max-width: 920px;
  display: grid;
  grid-template-columns: 5fr 7fr;
}
.gnm-auth-v__rail {
  background: var(--gnm-primary, #0f4c81);
  color: #fff;
  padding: 42px 38px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 40px;
}
.gnm-auth-v--band .gnm-auth-v__rail {
  flex-direction: row;
  align-items: center;
  flex-wrap: wrap;
  gap: 28px;
  padding: 30px 44px;
}
.gnm-auth-v__rail--has-image {
  position: relative;
}
.gnm-auth-v__rail--has-image::before {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--gnm-rail-image) center / cover no-repeat;
  opacity: var(--gnm-rail-image-opacity, .12);
  pointer-events: none;
}
.gnm-auth-v__rail--has-image > * {
  position: relative;
  z-index: 1;
}
.gnm-auth-v__eyebrow {
  margin: 0 0 14px;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .22em;
  text-transform: uppercase;
  opacity: .85;
}
.gnm-auth-v__rail-title {
  margin: 0 0 10px;
  font-size: 1.45rem;
  line-height: 1.25;
  color: inherit;
}
.gnm-auth-v--band .gnm-auth-v__rail-title {
  margin-bottom: 0;
  font-size: 1.4rem;
}
.gnm-auth-v__rail-text {
  margin: 0;
  font-size: .88rem;
  line-height: 1.6;
  opacity: .8;
  max-width: 34ch;
}
.gnm-auth-v__rail-back {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-top: 18px;
  font-size: .85rem;
  font-weight: 600;
  color: inherit;
  opacity: .85;
  text-decoration: none;
  transition: opacity var(--gnm-dur-fast) var(--gnm-ease);
}
.gnm-auth-v__rail-back svg {
  width: 13px;
  height: 13px;
  transition: transform var(--gnm-dur) var(--gnm-ease);
}
.gnm-auth-v__rail-back:hover,
.gnm-auth-v__rail-back:focus-visible {
  color: inherit;
  opacity: 1;
  text-decoration: underline;
  text-underline-offset: 3px;
}
.gnm-auth-v__rail-back:hover svg {
  transform: translateX(-2px);
}
@media (prefers-reduced-motion: reduce) {
  .gnm-auth-v__rail-back svg {
    transition: none;
  }
  .gnm-auth-v__rail-back:hover svg {
    transform: none;
  }
}
.gnm-auth-v__benefits {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 14px;
}
.gnm-auth-v--band .gnm-auth-v__benefits {
  display: flex;
  gap: 22px;
  flex-wrap: wrap;
}
.gnm-auth-v__benefits li {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: .86rem;
}
.gnm-auth-v__benefits svg {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
}
.gnm-auth-v__pane {
  background: #fff;
  padding: 42px 44px;
}
.gnm-auth-v__liseret {
  height: 3px;
  border-radius: 2px;
  background: var(--gnm-primary, #0f4c81);
  margin-bottom: 26px;
}
.gnm-auth-v__title {
  margin: 0 0 8px;
  font-size: 1.55rem;
}
.gnm-auth-v__intro {
  margin: 0 0 26px;
  font-size: .9rem;
  line-height: 1.55;
}
@media (max-width: 767.98px) {
  .gnm-auth-v--split .gnm-auth-v__shell {
    grid-template-columns: 1fr;
  }
  .gnm-auth-v__rail {
    padding: 30px;
    gap: 22px;
  }
  .gnm-auth-v--login .gnm-auth-v__benefits {
    display: none;
  }
  .gnm-auth-v__pane {
    padding: 28px 24px;
  }
  .gnm-auth-v--band .gnm-auth-v__rail {
    padding: 26px 24px;
  }
}


/* ==================================================================
   Article index state switch (Latest publications / Archives).
   A single button on screen: the one that leads somewhere other than the
   current page. Moved out of the header, placed BELOW the list and
   centred, as a pill in the Pancreoscopie manner: thick border, solid dot
   on the left, uppercase label, directional micro-animation on hover.
   Colour comes from --gnm-statebtn*: default is the site primary, and a
   Site CSS file may remap it to a brighter brand action colour.
   Declared on :root and NOT on .gnm-base-site: a declaration set on
   <body> would beat the value inherited from <html>, and the per-site
   remap would be silently ignored.
   ================================================================== */
:root {
  --gnm-statebtn: var(--gnm-primary, #0f4c81);
  --gnm-statebtn-ink: var(--gnm-primary, #0f4c81);
  --gnm-statebtn-rgb: var(--gnm-primary-rgb, 15, 76, 129);
}

.gnm-base-site .gnm-article-state-switch {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 12px;
  margin-top: 48px;
}

.gnm-base-site .gnm-article-state-btn {
  display: inline-flex;
  align-items: center;
  gap: .55rem;
  padding: .6rem 1.7rem;
  border: 2px solid var(--gnm-statebtn);
  border-radius: 30px;
  background: #fff;
  color: var(--gnm-statebtn-ink);
  font-weight: 700;
  font-size: .82rem;
  line-height: 1.5;
  letter-spacing: .05em;
  text-transform: uppercase;
  text-decoration: none;
  transition: background var(--gnm-dur) var(--gnm-ease), color var(--gnm-dur) var(--gnm-ease), box-shadow var(--gnm-dur) var(--gnm-ease);
}

.gnm-base-site .gnm-article-state-btn i {
  display: inline-block;
  font-size: 1.3rem;
  line-height: 1;
  color: var(--gnm-statebtn);
  transition: transform var(--gnm-dur) var(--gnm-ease);
}

.gnm-base-site .gnm-article-state-btn:hover,
.gnm-base-site .gnm-article-state-btn:focus-visible {
  background: var(--gnm-statebtn);
  border-color: var(--gnm-statebtn);
  color: #fff;
  box-shadow: 0 4px 14px rgba(var(--gnm-statebtn-rgb), .28);
}

.gnm-base-site .gnm-article-state-btn:hover i,
.gnm-base-site .gnm-article-state-btn:focus-visible i {
  color: #fff;
}

/* the icon moves the way the action does: back goes left, plus grows */
.gnm-base-site .gnm-article-state-btn:hover [class*="arrow-left"] {
  transform: translateX(-4px);
}
.gnm-base-site .gnm-article-state-btn:hover [class*="plus"] {
  transform: scale(1.14);
}

@media (prefers-reduced-motion: reduce) {
  .gnm-base-site .gnm-article-state-btn,
  .gnm-base-site .gnm-article-state-btn i {
    transition: none;
  }
  .gnm-base-site .gnm-article-state-btn:hover [class*="arrow-left"],
  .gnm-base-site .gnm-article-state-btn:hover [class*="plus"] {
    transform: none;
  }
}


/* ==================================================================
   "Congresses & events" page: editorial header + agenda.
   Network components driven by the --gnm-* tokens: every site inherits
   them in its own brand colours without redeclaring anything.
   ================================================================== */

/* --- page header --------------------------------------------------- */
.gnm-base-site .gnm-agenda-head {
  margin-bottom: 34px;
}

.gnm-base-site .gnm-agenda-head__eyebrow {
  margin: 0 0 10px;
}

.gnm-base-site .gnm-agenda-head__title {
  margin: 0;
  font-size: clamp(28px, 3vw, 40px);
  line-height: 1.12;
  letter-spacing: -0.02em;
}

.gnm-base-site .gnm-agenda-head__lede {
  max-width: 68ch;
  margin: 12px 0 0;
  font-size: 17px;
  line-height: 1.6;
  color: var(--gnm-text-muted);
}

/* --- "demonstration page" flag -------------------------------------
   Borrows the theme's vocabulary for the not-real: the dashed border of
   .gnm-empty-dashed, the warning semantics of .gnm-callout-warning.
   Reusable on any placeholder page. */
.gnm-base-site .gnm-page-flag {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  width: fit-content;
  max-width: 68ch;
  margin: 20px 0 0;
  padding: 11px 16px;
  border: 1px dashed #e0c169;
  border: 1px dashed oklch(0.83 0.09 85);
  border-radius: 12px;
  background: #fdf8ec;
  background: oklch(0.975 0.022 88);
  color: #7a5a17;
  color: oklch(0.48 0.08 78);
  font-size: 13.5px;
  line-height: 1.45;
}

.gnm-base-site .gnm-page-flag i {
  flex: 0 0 auto;
  font-size: 1.05rem;
  line-height: 1.35;
}

/* ==================================================================
   Congress agenda as a chronological timeline.

   Width: not a grid fraction (col-8 + offset) but a reading measure.
   760px = 148 date gutter + 46 gap + ~62ch of content; centred with
   margin-inline, the way .cl-doc and the bibliography already do.
   It relaxes on its own below 760px, with no breakpoint class.

   The rail is drawn as a pseudo-element on each item: items follow one
   another, so the line is continuous and stops by itself at the last
   one. Never a decorative border-left on the items.
   ================================================================== */
:root {
  --gnm-timeline-next: var(--gnm-primary-strong, #2563eb);
  --gnm-timeline-next-rgb: var(--gnm-primary-rgb, 15, 76, 129);
}

.gnm-base-site .gnm-agenda-wrap {
  max-width: 760px;
  margin-inline: auto;
}

.gnm-base-site .gnm-agenda-wrap--live {
  max-width: 1180px;
}

.gnm-base-site .gnm-congresses--table .table {
  margin-bottom: 0;
  table-layout: auto;
}

.gnm-base-site .gnm-congresses--table th:first-child,
.gnm-base-site .gnm-congresses--table td:first-child {
  min-width: 280px;
  width: 34%;
}

.gnm-base-site .gnm-congresses--table th,
.gnm-base-site .gnm-congresses--table td {
  padding: 16px 14px;
  vertical-align: middle;
}

.gnm-base-site .gnm-congresses__focus,
.gnm-base-site .gnm-congresses__reach {
  color: var(--gnm-text-muted);
  font-size: 0.9em;
}

.gnm-base-site .gnm-congresses__deadlines span {
  display: block;
  min-width: 150px;
}

.gnm-base-site .gnm-congresses__deadlines span + span {
  margin-top: 5px;
}

.gnm-base-site .gnm-timeline__body > .gnm-congresses__focus {
  margin: 6px 0 0;
}

.gnm-base-site .gnm-timeline__deadlines {
  display: flex;
  flex-direction: column;
  gap: 3px;
  margin-top: 13px;
  color: var(--gnm-text-muted);
  font-size: 13px;
  line-height: 1.45;
}

.gnm-base-site .gnm-timeline__deadlines-title {
  color: var(--gnm-text, #1f2937);
  font-size: 13px;
}

.gnm-base-site .gnm-timeline__deadlines + p {
  margin-top: 16px;
}

.gnm-base-site .gnm-congresses-empty {
  padding: 32px;
  border: 1px dashed var(--gnm-border, #d8dee6);
  border-radius: var(--gnm-radius-md);
  background: var(--gnm-surface-subtle, #f8fafc);
  text-align: center;
}

.gnm-base-site .gnm-congresses-empty h2 {
  margin: 0 0 8px;
  font-size: 22px;
}

.gnm-base-site .gnm-congresses-empty p {
  margin: 0;
  color: var(--gnm-text-muted);
}

@media (max-width: 991.98px) {
  .gnm-base-site .gnm-congresses--table {
    overflow-x: auto;
  }

  .gnm-base-site .gnm-congresses--table .table {
    min-width: 980px;
  }
}

.gnm-base-site .gnm-timeline-year {
  margin-top: 42px;
}

.gnm-base-site .gnm-timeline-year:first-of-type {
  margin-top: 8px;
}

.gnm-base-site .gnm-timeline-year__label {
  margin: 0 0 6px;
  color: var(--gnm-primary, #0f4c81);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.18em;
}

.gnm-base-site .gnm-timeline {
  margin: 0;
  padding: 0;
  list-style: none;
}

.gnm-base-site .gnm-timeline__item {
  position: relative;
  display: grid;
  grid-template-columns: 148px 1fr;
  column-gap: 46px;
  padding: 22px 0 26px;
}

/* the rail, carried from one item to the next */
.gnm-base-site .gnm-timeline__item::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 170px;
  width: 2px;
  background: var(--gnm-border, #dbe3ef);
}

.gnm-base-site .gnm-timeline__item:first-child::before {
  top: 30px;
}

.gnm-base-site .gnm-timeline__item:last-child::before {
  bottom: auto;
  height: 30px;
}

/* the event dot */
.gnm-base-site .gnm-timeline__item::after {
  content: "";
  position: absolute;
  top: 26px;
  left: 164px;
  width: 14px;
  height: 14px;
  border: 3px solid var(--gnm-surface, #fff);
  border-radius: 50%;
  background: var(--gnm-primary, #0f4c81);
}

.gnm-base-site .gnm-timeline__when {
  margin: 0;
  text-align: right;
}

.gnm-base-site .gnm-timeline__days {
  display: block;
  color: var(--gnm-text, #0f172a);
  font-size: 27px;
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
}

.gnm-base-site .gnm-timeline__days--split {
  font-size: 17px;
  letter-spacing: -0.01em;
}

.gnm-base-site .gnm-timeline__month {
  display: block;
  margin-top: 4px;
  color: var(--gnm-text-muted, #475569);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

/* the arrow on straddling dates: continuous drift, reads as duration */
.gnm-base-site .gnm-timeline__arrow {
  display: inline-block;
  animation: gnm-timeline-arrow 1.9s ease-in-out infinite;
}

@keyframes gnm-timeline-arrow {
  0%, 100% { transform: translateX(0); }
  50% { transform: translateX(4px); }
}

.gnm-base-site .gnm-timeline__body {
  padding-top: 2px;
}

/* --- the next congress --------------------------------------------- */
.gnm-base-site .gnm-timeline__next {
  margin: 0 0 5px;
  color: var(--gnm-timeline-next);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
}

.gnm-base-site .gnm-timeline__item.is-next::after {
  width: 18px;
  height: 18px;
  top: 24px;
  left: 162px;
  background: var(--gnm-timeline-next);
  box-shadow: 0 0 0 5px rgba(var(--gnm-timeline-next-rgb), 0.16);
}

.gnm-base-site .gnm-timeline__item.is-next .gnm-timeline__days,
.gnm-base-site .gnm-timeline__item.is-next .gnm-timeline__month {
  color: var(--gnm-timeline-next);
}

.gnm-base-site .gnm-timeline__item.is-next .gnm-timeline__name {
  font-size: 22px;
  font-weight: 700;
}

.gnm-base-site .gnm-timeline__name {
  margin: 0;
  color: var(--gnm-text, #0f172a);
  font-size: 19px;
  font-weight: 600;
  line-height: 1.32;
  letter-spacing: -0.01em;
}

.gnm-base-site .gnm-timeline__acronym {
  display: inline-block;
  margin-left: 8px;
  padding: 2px 9px;
  border-radius: 999px;
  background: rgba(var(--gnm-primary-rgb, 15, 76, 129), 0.09);
  color: var(--gnm-primary-strong, #0f4c81);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.03em;
  vertical-align: 2px;
  white-space: nowrap;
}

.gnm-base-site .gnm-timeline__place {
  display: flex;
  align-items: baseline;
  gap: 7px;
  margin: 7px 0 0;
  color: var(--gnm-text-muted, #475569);
  font-size: 15px;
}

.gnm-base-site .gnm-timeline__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px 20px;
  margin: 12px 0 0;
  font-size: 13px;
}

.gnm-base-site .gnm-timeline__link,
.gnm-base-site .gnm-timeline__deadline {
  display: inline-flex;
  align-items: baseline;
  gap: 7px;
}

.gnm-base-site .gnm-timeline__link {
  color: var(--gnm-primary-strong, #2563eb);
  font-weight: 600;
  text-decoration: underline dashed;
  text-underline-offset: 3px;
  cursor: help;
}

.gnm-base-site .gnm-timeline__deadline {
  color: #7b8094;
}

.gnm-base-site .gnm-timeline__place i,
.gnm-base-site .gnm-timeline__meta i {
  flex: 0 0 auto;
  color: var(--gnm-primary-strong, #2563eb);
  font-size: 0.95rem;
}

.gnm-base-site .gnm-timeline__deadline i {
  color: #9aa7b5;
}

/* past event: still there, but dimmed */
.gnm-base-site .gnm-timeline__item.is-past {
  opacity: 0.55;
}

.gnm-base-site .gnm-timeline__item.is-past::after {
  background: var(--gnm-border, #dbe3ef);
}

/* --- below md: the rail moves left, the date becomes a kicker ------- */
@media (max-width: 767.98px) {
  .gnm-base-site .gnm-timeline-year__label {
    margin-bottom: 2px;
  }

  .gnm-base-site .gnm-timeline__item {
    grid-template-columns: 1fr;
    column-gap: 0;
    padding: 16px 0 20px 26px;
  }

  .gnm-base-site .gnm-timeline__item::before {
    left: 4px;
  }

  .gnm-base-site .gnm-timeline__item:first-child::before {
    top: 22px;
  }

  .gnm-base-site .gnm-timeline__item:last-child::before {
    height: 22px;
  }

  .gnm-base-site .gnm-timeline__item::after {
    top: 18px;
    left: -1px; /* pastille 12px centree sur le rail (4px + 1px) */
    width: 12px;
    height: 12px;
  }

  .gnm-base-site .gnm-timeline__item.is-next::after {
    top: 16px;
    left: -3px;
    width: 16px;
    height: 16px;
  }

  .gnm-base-site .gnm-timeline__when {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 8px;
    margin-bottom: 6px;
    text-align: left;
  }

  .gnm-base-site .gnm-timeline__days,
  .gnm-base-site .gnm-timeline__days--split {
    display: inline;
    font-size: 15px;
    letter-spacing: 0;
  }

  .gnm-base-site .gnm-timeline__month {
    display: inline;
    margin-top: 0;
  }

  .gnm-base-site .gnm-timeline__name,
  .gnm-base-site .gnm-timeline__item.is-next .gnm-timeline__name {
    font-size: 17px;
  }

  .gnm-base-site .gnm-timeline__item.is-next .gnm-timeline__name {
    font-size: 19px;
  }

  .gnm-base-site .gnm-timeline__acronym {
    margin-left: 6px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .gnm-base-site .gnm-timeline__arrow {
    animation: none;
  }
}

/*
 * Screen-reader-only text.
 *
 * The WordPress recipe, declared here so it stops depending on core inlining
 * the block library stylesheet. Theme and plugin templates (clinical cases,
 * journals, authentication) all use .screen-reader-text; dequeuing
 * wp-block-library for performance would otherwise paint every one of those
 * strings on the page. Bootstrap's .visually-hidden covers the same need and
 * stays available for new markup.
 */
.screen-reader-text {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  word-wrap: normal !important;
  border: 0;
}

.screen-reader-text:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip-path: none;
  white-space: normal;
}


/* ---- Policy documents (14/08/2026): community guidelines, legal information,
   terms of use, privacy policy.

   One reading column for the four, one tab bar above it, and the table of
   contents lifted out of the prose so it reads as an index. The measure sits on
   the column and not on what lands inside it, so the documents open at the same
   width whichever one you arrive from. ---- */

.gnm-route-legal {
  --legal-measure: 760px;
  padding-block: 30px 76px;
}

.gnm-legal-layout {
  max-width: var(--legal-measure);
  margin-inline: auto;
}

.gnm-legal-tabs {
  display: flex;
  gap: 32px;
  margin-bottom: 40px;
  border-bottom: 1px solid var(--cc-panel-border, #dfe5ee);
  overflow-x: auto;
  scrollbar-width: none;
}

.gnm-legal-tabs::-webkit-scrollbar {
  display: none;
}

.gnm-legal-tabs__link {
  flex: none;
  padding-bottom: 12px;
  margin-bottom: -1px;
  border-bottom: 2px solid transparent;
  color: var(--cc-ink-mute, #666f7d);
  font-size: .95rem;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
  transition: color var(--gnm-dur) var(--gnm-ease), border-color var(--gnm-dur) var(--gnm-ease);
}

.gnm-legal-tabs__link:hover,
.gnm-legal-tabs__link:focus-visible {
  color: var(--gnm-primary-strong, #0a1830);
}

.gnm-legal-tabs__link.is-current {
  color: var(--cl-space, #0a1830);
  font-weight: 700;
  border-bottom-color: var(--cl-space, #0a1830);
}

.gnm-legal__eyebrow {
  margin: 0 0 10px;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--cc-ink-mute, #666f7d);
}

.gnm-legal__title {
  margin: 0;
  font-size: clamp(1.7rem, 1.35rem + 1.3vw, 2.15rem);
  font-weight: 700;
  line-height: 1.15;
  color: var(--cl-space, #0a1830);
}

/* The index. Two columns while it fits, so a sixteen-section document does not
   push its first sentence below the fold. */
.gnm-legal-toc {
  margin: 30px 0 40px;
  padding: 20px 0 16px;
  border-top: 1px solid var(--cc-rule, #e9edf2);
  border-bottom: 1px solid var(--cc-rule, #e9edf2);
}

.gnm-legal-toc__label {
  margin: 0 0 14px;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--cc-ink-mute, #666f7d);
}

.gnm-legal-toc ul {
  columns: 2;
  column-gap: 36px;
  list-style: none;
  margin: 0;
  padding: 0;
}

.gnm-legal-toc li {
  break-inside: avoid;
  margin-bottom: 7px;
}

.gnm-legal-toc a {
  font-size: .87rem;
  line-height: 1.45;
  color: var(--cc-ink, #2b3440);
  text-decoration: none;
}

.gnm-legal-toc a:hover,
.gnm-legal-toc a:focus-visible {
  color: var(--cl-space, #0a1830);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.gnm-legal__dateline {
  margin: 24px 0 0;
  font-size: .84rem;
  color: var(--cc-ink-mute, #666f7d);
}

.gnm-legal__dateline em {
  font-style: normal;
}

.gnm-legal__body {
  font-size: 1rem;
  line-height: 1.72;
  color: var(--cc-ink, #2b3440);
}

.gnm-legal__body > *:first-child {
  margin-top: 0;
}

.gnm-legal__body p {
  margin: 0 0 1.05em;
}

.gnm-legal__body h2 {
  margin: 2.9rem 0 1rem;
  padding-top: 1.5rem;
  border-top: 1px solid var(--cc-rule, #e9edf2);
  font-size: 1.18rem;
  font-weight: 700;
  line-height: 1.3;
  color: var(--cl-space, #0a1830);
  scroll-margin-top: calc(var(--cc-sticky-top, 92px) + 12px);
}

.gnm-legal__body h2:first-child {
  margin-top: 0;
  padding-top: 0;
  border-top: none;
}

.gnm-legal__body h3 {
  margin: 2rem 0 .7rem;
  font-size: 1rem;
  font-weight: 700;
  line-height: 1.35;
  color: var(--cl-space, #0a1830);
  scroll-margin-top: calc(var(--cc-sticky-top, 92px) + 12px);
}

.gnm-legal__body h4 {
  margin: 2.1rem 0 .5rem;
  font-size: .95rem;
  font-weight: 700;
  color: var(--cl-space, #0a1830);
}

.gnm-legal__body ul,
.gnm-legal__body ol {
  margin: 0 0 1.15em;
  padding-left: 1.3rem;
}

.gnm-legal__body li {
  margin-bottom: .45em;
}

.gnm-legal__body a {
  color: var(--cl-space, #0a1830);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  text-decoration-color: rgba(10, 24, 48, .35);
  transition: text-decoration-color var(--gnm-dur) var(--gnm-ease);
}

.gnm-legal__body a:hover,
.gnm-legal__body a:focus-visible {
  text-decoration-color: currentColor;
}

.gnm-legal__body blockquote {
  margin: 1.9rem 0;
  padding: 18px 20px;
  border-radius: 12px;
  background: rgba(10, 24, 48, .045);
}

.gnm-legal__body blockquote p:last-child {
  margin-bottom: 0;
}

.gnm-legal__body table {
  width: 100%;
  margin: 1.5rem 0 1.9rem;
  border-collapse: collapse;
  font-size: .92rem;
}

.gnm-legal__body th {
  padding: 0 14px 10px 0;
  text-align: left;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--cl-space, #0a1830);
  border-bottom: 1px solid var(--cc-panel-border, #dfe5ee);
}

.gnm-legal__body td {
  padding: 11px 14px 11px 0;
  vertical-align: top;
  line-height: 1.5;
  border-bottom: 1px solid var(--cc-rule, #e9edf2);
}

.gnm-legal__body th:last-child,
.gnm-legal__body td:last-child {
  padding-right: 0;
}

.gnm-legal__body hr {
  margin: 2.2rem 0;
  border: 0;
  border-top: 1px solid var(--cc-rule, #e9edf2);
}

@media (max-width: 620px) {
  .gnm-legal-toc ul {
    columns: 1;
  }

  /* A three-column table of legal bases has nowhere to go on a phone: let it
     scroll on its own rather than squeeze the whole document. */
  .gnm-legal__body table {
    display: block;
    overflow-x: auto;
  }
}

@media (prefers-reduced-motion: reduce) {
  .gnm-legal-tabs__link,
  .gnm-legal__body a {
    transition: none;
  }
}

/* The policy documents sit at the foot of every page, where a reader looks for
   them, rather than among the editorial columns. */
.gnm-site-footer-shell__policies {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 22px;
}

.gnm-site-footer-shell__policies a {
  font-size: .82rem;
  color: var(--bs-secondary-color, #6c757d);
  text-decoration: none;
}

.gnm-site-footer-shell__policies a:hover,
.gnm-site-footer-shell__policies a:focus-visible {
  color: var(--bs-body-color, #212529);
  text-decoration: underline;
  text-underline-offset: 3px;
}


/* ==========================================================================
   Journal index (/journal-posts/<id>/)
   The journal states its identity once, then hands over to the same article
   list as every other index on the site.
   ========================================================================== */

.gnm-route-journal {
  padding: 32px 0 56px;
}

.gnm-journal-head {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: 18px 28px;
  margin: 8px 0 22px;
  padding-bottom: 18px;
  border-bottom: 1px solid var(--cc-rule, var(--gnm-border, #dbe3ef));
}

.gnm-journal-head__identity {
  display: flex;
  align-items: flex-start;
  gap: 18px;
  min-width: 0;
}

.gnm-journal-head__cover {
  flex: 0 0 auto;
  width: 84px;
}

.gnm-journal-head__cover img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 4px;
  border: 1px solid var(--cc-rule, var(--gnm-border, #dbe3ef));
  background: var(--gnm-surface, #fff);
}

.gnm-journal-head__text {
  min-width: 0;
}

.gnm-journal-head__eyebrow {
  margin: 0 0 6px;
  font-size: .72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .09em;
  color: var(--cc-ink, var(--gnm-text, #0f172a));
}

.gnm-journal-head__eyebrow::before {
  content: "";
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--cl-red, var(--gnm-primary, #0f4c81));
  margin-right: .5rem;
  vertical-align: 1px;
}

.gnm-journal-head__title {
  margin: 0;
  font-size: clamp(1.5rem, 1.15rem + 1.1vw, 1.9rem);
  font-weight: 700;
  line-height: 1.15;
  color: var(--cc-ink, var(--gnm-text, #0f172a));
}

.gnm-journal-head__meta,
.gnm-journal-head__issue {
  margin: 8px 0 0;
  font-size: .88rem;
  line-height: 1.5;
  color: var(--cc-ink-soft, var(--gnm-text-muted, #475569));
}

.gnm-journal-head__issue {
  margin-top: 2px;
}

.gnm-journal-head__link {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-top: 10px;
  font-size: .85rem;
  font-weight: 600;
  color: var(--cl-red, var(--gnm-primary, #0f4c81));
  text-decoration: none;
}

.gnm-journal-head__link:hover,
.gnm-journal-head__link:focus-visible {
  color: var(--cl-red-deep, var(--gnm-primary, #0f4c81));
  text-decoration: underline;
  text-underline-offset: 3px;
}

.gnm-journal-head__link i {
  font-size: .78rem;
}

.gnm-journal-head__aside {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
  text-align: right;
}

.gnm-journal-head__count {
  margin: 0;
  font-size: .82rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .07em;
  color: var(--cc-ink-mute, var(--gnm-text-muted, #475569));
}

.gnm-journal-head__back {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: .85rem;
  font-weight: 600;
  color: var(--cc-ink-soft, var(--gnm-text-muted, #475569));
  text-decoration: none;
}

.gnm-journal-head__back:hover,
.gnm-journal-head__back:focus-visible {
  color: var(--cl-red, var(--gnm-primary, #0f4c81));
}

.gnm-journal-head__back i {
  font-size: .8rem;
  transition: transform var(--gnm-dur) var(--gnm-ease);
}

.gnm-journal-head__back:hover i {
  transform: translateX(-3px);
}

.gnm-journal-head--empty {
  align-items: flex-start;
}

/* The cover identifies the journal, not the article: repeating it on every
   card here would print the same thumbnail down the whole column. */
.gnm-route-journal .gnm-article-card__cover-wrap {
  display: none;
}

@media (max-width: 575.98px) {
  .gnm-journal-head {
    align-items: flex-start;
  }

  .gnm-journal-head__cover {
    width: 62px;
  }

  .gnm-journal-head__aside {
    align-items: flex-start;
    text-align: left;
  }
}

@media (prefers-reduced-motion: reduce) {
  .gnm-journal-head__back i {
    transition: none;
  }

  .gnm-journal-head__back:hover i {
    transform: none;
  }
}


/* ==========================================================================
   My bibliography (page-bibliography.php)
   The head of the XSL bibliography module v2 (.biblio-head) above the
   gnm-bookmark-manager list, both in one 880px reading column. Colours come
   from the --bm-* tokens the plugin reads too, else from the network tokens.
   ========================================================================== */

.gnm-route-bibliography .gnm-bibliography-head,
.gnm-route-bibliography #bookmark-manager-root {
  max-width: 880px;
  margin-inline: auto;
}

.gnm-bibliography-head {
  gap: 14px;
  margin-bottom: 1rem;
}

.gnm-bibliography-head__eyebrow {
  margin: 0;
  color: var(--bm-ink, var(--gnm-primary, #0f4c81));
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .12em;
  line-height: 1.5;
  text-transform: uppercase;
}

.gnm-bibliography-head__eyebrow::before {
  content: "";
  display: inline-block;
  width: 9px;
  height: 9px;
  margin-right: 7px;
  border-radius: 50%;
  background: var(--bm-dot, var(--gnm-accent, #0ea5a4));
  vertical-align: 0;
}

.gnm-bibliography-head__title {
  margin: .3rem 0 0;
  color: var(--bm-ink, var(--gnm-primary, #0f4c81));
  font-size: 1.7rem;
  font-weight: 700;
  letter-spacing: -.015em;
  line-height: 1.1;
}

.gnm-bibliography-head__count {
  margin: 0;
  color: var(--bm-muted, var(--gnm-text-muted, #475569));
  font-size: .86rem;
}

.gnm-bibliography-head__count strong {
  color: var(--bm-hover, var(--gnm-primary-strong, var(--gnm-primary, #0f4c81)));
  font-weight: 700;
}


/* ==========================================================================
   Breadcrumb (template-parts/layout/breadcrumb.php)
   Off by default (gnm_breadcrumb_enabled), on for the LFB preset. The band of
   the XSL portals (.bc-nav): a hairline under the header, muted links, the
   current page in the text colour and cut short when long. A site retints it
   with the --gnm-breadcrumb-* tokens.
   ========================================================================== */

.gnm-breadcrumb {
  padding: .5rem 0;
  border-bottom: 1px solid var(--gnm-breadcrumb-rule, var(--gnm-border, #dbe3ef));
  background: var(--gnm-breadcrumb-bg, var(--gnm-surface, #fbfcfe));
  font-size: .8rem;
  line-height: 1.5;
}

.gnm-breadcrumb .breadcrumb {
  margin: 0;
}

.gnm-breadcrumb .breadcrumb-item a {
  color: var(--gnm-breadcrumb-link, var(--gnm-text-muted, #475569));
  text-decoration: none;
}

.gnm-breadcrumb .breadcrumb-item a:hover {
  color: var(--gnm-breadcrumb-hover, var(--gnm-primary-strong, var(--gnm-primary, #0f4c81)));
}

.gnm-breadcrumb .breadcrumb-item.active {
  color: var(--gnm-breadcrumb-current, var(--gnm-text, #0f172a));
}

.gnm-breadcrumb .breadcrumb-item + .breadcrumb-item::before {
  color: var(--gnm-breadcrumb-divider, color-mix(in srgb, var(--gnm-text-muted, #475569) 40%, var(--gnm-surface, #fbfcfe)));
}

.gnm-breadcrumb__current {
  max-width: 46ch;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (max-width: 575.98px) {
  .gnm-breadcrumb__current {
    max-width: 20ch;
  }
}

/* ========================================================================
   Shared design-token bridge
   Bootstrap 5.1 compiles most component colours, so these rules deliberately
   reconnect its common utilities and controls to the runtime GNM tokens.
   ======================================================================== */

.gnm-base-site .btn {
  min-height: var(--gnm-control-height);
  border-radius: var(--gnm-radius-md);
}

.gnm-base-site .btn-sm {
  min-height: calc(var(--gnm-control-height) - 10px);
}

.gnm-base-site .btn-primary {
  color: #fff;
  background-color: var(--gnm-primary);
  border-color: var(--gnm-primary);
}

.gnm-base-site .btn-primary:hover,
.gnm-base-site .btn-primary:focus,
.gnm-base-site .btn-primary:active {
  color: #fff;
  background-color: var(--gnm-primary-strong);
  border-color: var(--gnm-primary-strong);
}

.gnm-base-site .btn-secondary {
  color: #fff;
  background-color: var(--gnm-secondary);
  border-color: var(--gnm-secondary);
}

.gnm-base-site .btn-outline-primary {
  color: var(--gnm-primary);
  border-color: var(--gnm-primary);
}

.gnm-base-site .btn-outline-primary:hover,
.gnm-base-site .btn-outline-primary:focus,
.gnm-base-site .btn-check:checked + .btn-outline-primary {
  color: #fff;
  background-color: var(--gnm-primary);
  border-color: var(--gnm-primary);
}

.gnm-base-site :is(.form-control, .form-select, .input-group-text) {
  min-height: var(--gnm-control-height);
  border-color: var(--gnm-border);
  border-radius: var(--gnm-radius-sm);
}

.gnm-base-site :is(.form-control, .form-select):focus {
  border-color: var(--gnm-primary);
  box-shadow: 0 0 0 .2rem rgba(var(--gnm-primary-rgb), .16);
}

.gnm-base-site :is(.card, .modal-content, .dropdown-menu, .gnm-surface-card) {
  border-color: var(--gnm-border);
  border-radius: var(--gnm-radius-md);
  background-color: var(--gnm-surface);
}

.gnm-base-site :is(.card, .gnm-surface-card) {
  box-shadow: var(--gnm-elevation-shadow, var(--gnm-shadow-sm));
}

.gnm-base-site .text-primary { color: var(--gnm-primary) !important; }
.gnm-base-site .text-secondary { color: var(--gnm-secondary) !important; }
.gnm-base-site .text-muted { color: var(--gnm-text-muted) !important; }
.gnm-base-site .bg-primary { background-color: var(--gnm-primary) !important; }
.gnm-base-site .bg-secondary { background-color: var(--gnm-secondary) !important; }
.gnm-base-site .bg-body { background-color: var(--gnm-bg) !important; }
.gnm-base-site .border-primary { border-color: var(--gnm-primary) !important; }
.gnm-base-site .border-secondary { border-color: var(--gnm-secondary) !important; }

.gnm-base-site .gnm-site-header-shell {
  background-color: var(--gnm-surface);
  border-color: var(--gnm-border) !important;
}

.gnm-base-site .gnm-site-footer-shell {
  color: #fff;
  background-color: var(--gnm-primary-strong) !important;
  border-color: color-mix(in srgb, var(--gnm-primary), #fff 65%) !important;
}

.gnm-base-site .gnm-site-footer-shell :is(a, p, span, h2, h3, h4, h5, h6, .nav-link, .text-body-secondary, .text-body-emphasis) {
  color: rgba(255, 255, 255, .78) !important;
}

.gnm-base-site .gnm-site-footer-shell a:hover,
.gnm-base-site .gnm-site-footer-shell a:focus-visible {
  color: #fff !important;
}

.gnm-base-site .page-link {
  color: var(--gnm-primary);
  border-color: var(--gnm-border);
}

.gnm-base-site .page-item.active .page-link {
  color: #fff;
  background-color: var(--gnm-primary);
  border-color: var(--gnm-primary);
}


/* ==========================================================================
   Shared Highlights module: reusable rail for latest articles. Shared by
   gnm_render_highlights_module() across Browse, Clinical Cases, and later
   the homepage, with one source of markup and CSS.
   ========================================================================== */

.gnm-highlights-module {
  /* --cc-rail-step: air above and below a row. --cc-rail-bleed: the container
     padding the row is pulled back out by, so the hover tint reaches the inner
     edge of the card. The bottom padding is the step paid back to the last row. */
  --cc-rail-step: 14px;
  --cc-rail-bleed: 18px;
  /* --cc-rail-foot: the card pays its bottom padding to the last row instead
     of keeping it. A band that stops short of the rounded edge reads as a
     floating rectangle; carried to the bottom, overflow clips it to the
     radius and the row closes the card the way the first one opens it. */
  --cc-rail-foot: 18px;
  padding: 18px 18px 0;
  background: #fff;
  border: 1px solid var(--gnm-border, #e6e8ee);
  border-radius: 12px;
  overflow: hidden;
}

.gnm-highlights-module__title {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0;
  font-size: .78rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--cl-space, #0a1830);
  padding-bottom: 12px;
  border-bottom: 2px solid var(--gnm-primary, #4083b0);
}

.gnm-highlights-module__icon {
  color: var(--gnm-primary, #4083b0);
  font-size: .82rem;
}

.gnm-highlights-module__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  /* The former gap moved into the rows: a gap is dead space no background can
     reach, and the hovered row has to own the air around its own text. */
  gap: 0;
}

.gnm-highlights-module__item {
  display: flow-root;
  padding-block: var(--cc-rail-step, 14px);
  border-bottom: 1px solid var(--cc-rule, #e9edf2);
}

/* The journal cover, at the size where a reader recognises it and no larger:
   these are 110 to 200px source images, blown up they turn to mush.
   Floated rather than set in its own column: a rail is narrow, and a title
   long enough to pass the cover reads better wrapping under it than squeezed
   into what is left of the line. flow-root on the item contains the float. */
.gnm-highlights-module__cover {
  float: left;
  width: 40px;
  height: 52px;
  margin: 2px 12px 2px 0;
  overflow: hidden;
  border-radius: 5px;
  background: var(--gnm-surface-soft, #eff3f8);
}

.gnm-highlights-module__cover img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.gnm-highlights-module__body {
  min-width: 0;
}

.gnm-highlights-module__link {
  overflow-wrap: anywhere;
}

.gnm-highlights-module__item:last-child {
  padding-bottom: var(--cc-rail-foot, 18px);
  border-bottom: none;
}

.gnm-highlights-module__link {
  display: block;
  margin-bottom: 4px;
  font-weight: 700;
  font-size: .88rem;
  line-height: 1.35;
  color: var(--gnm-secondary, #33698f);
  text-decoration: none;
}

.gnm-highlights-module__excerpt {
  margin: 0;
  font-size: .8rem;
  line-height: 1.5;
  color: var(--gnm-text-muted, #666f7d);
}

/* ---- Highlights beside the news feed (home): the rail keeps its own gutters.

   Inside its column the module is pushed further in than the article cards are
   inside theirs - more air on the left, a tinted ground, no border - so the two
   halves of the row do not share a rhythm. The uneven gap is the point: it
   marks the rail as a different kind of zone rather than a fifth card in the
   grid. Same device as the news column on the Addictoscope home. ---- */

.gnm-home-latest-articles__aside .gnm-highlights-module {
  --cc-rail-step: 18px;
  --cc-rail-bleed: 22px;
  --cc-rail-foot: 22px;
  padding: 24px 22px 0;
  background: var(--gnm-surface-soft, #eff3f8);
  border-color: transparent;
  border-radius: 18px;
}

.gnm-home-latest-articles__aside .gnm-highlights-module__title {
  padding-bottom: 14px;
}

.gnm-home-latest-articles__aside .gnm-highlights-module__item {
  border-bottom-color: rgba(10, 24, 48, .1);
}

.gnm-home-latest-articles__aside .gnm-highlights-module__excerpt {
  color: var(--gnm-text-muted, #545e6f);
}

@media (min-width: 992px) {
  .gnm-home-latest-articles__aside {
    padding-left: 34px;
  }

  .gnm-home-latest-articles__aside .gnm-highlights-module {
    --cc-rail-bleed: 30px;
    --cc-rail-foot: 28px;
    padding: 32px 30px 0;
  }
}


/* ==========================================================================
   Browse directory (page-browse.php)
   Shared structure; palette, type, radii and elevation come from the active
   base/Site CSS tokens.
   ========================================================================== */

.gnm-avatar {
  --gnm-avatar-size: 40px;
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--gnm-avatar-size);
  height: var(--gnm-avatar-size);
  overflow: hidden;
  border-radius: 50%;
}

.gnm-avatar--initial {
  color: var(--gnm-avatar-ink, var(--gnm-on-action));
  font-size: calc(var(--gnm-avatar-size) * .42);
  font-weight: 700;
  line-height: 1;
  -webkit-user-select: none;
  user-select: none;
}

.gnm-avatar--photo {
  object-fit: cover;
}

.gnm-route-browse {
  padding: 32px 0 56px;
}

.gnm-route-browse .gnm-cases-head {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: 18px 24px;
  margin: 8px 0 22px;
}

.gnm-route-browse .gnm-cases-head__identity {
  display: flex;
  align-items: center;
  gap: 14px;
  min-width: 0;
}

.gnm-route-browse .gnm-cases-head__text {
  display: flex;
  flex-direction: column;
}

.gnm-route-browse .gnm-cases-head__title {
  order: 1;
  margin: 0;
  color: var(--gnm-primary);
  font-size: 1.7rem;
  font-weight: 700;
  line-height: 1.15;
}

.gnm-route-browse .gnm-cases-head__eyebrow {
  order: 2;
  margin: 10px 0 0;
  color: var(--gnm-primary-strong);
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .09em;
  text-transform: uppercase;
}

.gnm-route-browse .gnm-cases-head__eyebrow::before {
  content: "";
  display: inline-block;
  width: 8px;
  height: 8px;
  margin-right: .5rem;
  border-radius: 50%;
  background: var(--gnm-action-bg);
  vertical-align: 1px;
}

.gnm-route-browse .gnm-cases-head__intro {
  order: 3;
  max-width: 62ch;
  margin: 6px 0 0;
  color: var(--gnm-text-muted);
  font-size: .92rem;
  line-height: 1.55;
}

.gnm-browse__section-label {
  margin: 36px 0 14px;
  color: var(--gnm-text-muted);
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
}

.gnm-browse-hub {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  align-items: stretch;
  gap: 16px;
  margin-bottom: 8px;
}

.gnm-browse-panel {
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-width: 0;
  border-radius: var(--gnm-radius-lg);
  text-decoration: none;
  transition:
    box-shadow var(--gnm-dur) var(--gnm-ease),
    border-color var(--gnm-dur) var(--gnm-ease);
}

.gnm-browse-panel--cases {
  grid-column: span 7;
  padding: 26px 28px;
  background: var(--gnm-primary);
  color: var(--gnm-on-action);
  --gnm-focus-color: var(--gnm-on-action);
}

.gnm-browse-panel--people {
  grid-column: span 5;
  padding: 26px 28px;
  border: 1px solid var(--gnm-border);
  background: var(--gnm-surface);
  color: var(--gnm-text);
}

.gnm-browse-panel--reading {
  --cc-rail-bleed: 24px;
  grid-column: span 5;
  padding: 22px 24px;
  border: 1px solid var(--gnm-border);
  background: var(--gnm-surface);
  color: var(--gnm-text);
}

.gnm-browse-panel--webinar {
  grid-column: span 7;
  padding: 32px 34px;
  border: 1px solid transparent;
  background: var(--gnm-surface-soft);
  color: var(--gnm-text);
}

a.gnm-browse-panel:hover,
a.gnm-browse-panel:focus-visible {
  box-shadow: var(--gnm-shadow-md);
}

a.gnm-browse-panel--people:hover,
a.gnm-browse-panel--people:focus-visible,
a.gnm-browse-panel--webinar:hover,
a.gnm-browse-panel--webinar:focus-visible {
  border-color: var(--gnm-action-bg);
}

.gnm-browse-panel__eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  color: var(--gnm-primary-strong);
  font-size: .72rem;
  font-weight: 800;
  letter-spacing: .1em;
  text-transform: uppercase;
}

.gnm-browse-panel--cases .gnm-browse-panel__eyebrow {
  color: var(--gnm-accent);
}

.gnm-browse-panel__title {
  color: var(--gnm-primary);
  font-size: 1.08rem;
  font-weight: 700;
  line-height: 1.28;
}

.gnm-browse-panel--cases .gnm-browse-panel__title {
  color: var(--gnm-on-action);
  font-size: 1.28rem;
}

.gnm-browse-panel--webinar .gnm-browse-panel__title {
  font-size: 1.18rem;
}

.gnm-browse-panel__desc {
  max-width: 46ch;
  color: var(--gnm-text-muted);
  font-size: .92rem;
  line-height: 1.55;
}

.gnm-browse-panel--cases .gnm-browse-panel__desc {
  color: color-mix(in srgb, var(--gnm-on-action) 80%, transparent);
}

.gnm-browse-panel__faces {
  display: flex;
  align-items: center;
  margin-top: 2px;
}

.gnm-browse-panel__faces > * {
  margin-left: -10px;
  border-radius: 50%;
  box-shadow: 0 0 0 2px var(--gnm-surface);
}

.gnm-browse-panel__faces > :first-child {
  margin-left: 0;
}

.gnm-browse-panel__faces--small > * {
  margin-left: -7px;
  box-shadow: 0 0 0 2px var(--gnm-surface-soft);
}

.gnm-browse-panel__foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  margin-top: auto;
  padding-top: 16px;
}

.gnm-browse-panel__metric {
  color: var(--gnm-text-muted);
  font-size: .74rem;
  font-weight: 700;
  letter-spacing: .07em;
  text-transform: uppercase;
}

.gnm-browse-panel--cases .gnm-browse-panel__metric {
  color: color-mix(in srgb, var(--gnm-on-action) 72%, transparent);
}

.gnm-browse-panel__go {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  color: var(--gnm-primary-strong);
  font-size: .88rem;
  font-weight: 700;
  text-decoration: none;
}

.gnm-browse-panel--cases .gnm-browse-panel__go {
  color: var(--gnm-on-action);
}

.gnm-browse-panel__go i {
  transition: transform var(--gnm-dur) var(--gnm-ease);
}

.gnm-browse-panel:hover .gnm-browse-panel__go i,
.gnm-browse-panel:focus-within .gnm-browse-panel__go i {
  transform: translateX(4px);
}

.gnm-browse-reading {
  margin: -3px 0 0;
  padding: 0;
  list-style: none;
}

.gnm-browse-read {
  display: flex;
  gap: 12px;
  padding-block: 11px;
  border-top: 1px solid var(--gnm-border);
}

.gnm-browse-read:first-child {
  border-top: 0;
}

.gnm-browse-read__cover {
  flex: 0 0 42px;
  width: 42px;
  height: 54px;
  overflow: hidden;
  border-radius: var(--gnm-radius-sm);
  background: var(--gnm-surface-soft);
}

.gnm-browse-read__cover img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.gnm-browse-read__body {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}

.gnm-browse-read__title {
  color: var(--gnm-text);
  font-size: .84rem;
  font-weight: 700;
  line-height: 1.35;
}

.gnm-browse-read__meta {
  color: var(--gnm-text-muted);
  font-size: .72rem;
}

.gnm-browse-session {
  display: flex;
  align-items: flex-start;
  gap: 16px;
  margin-top: 6px;
}

.gnm-browse-date {
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 62px;
  padding: 9px 0 8px;
  border-radius: var(--gnm-radius-md);
  background: var(--gnm-primary);
  color: var(--gnm-on-action);
}

.gnm-browse-date--live {
  background: #a4000e;
  background: oklch(0.452 0.185 27);
}

.gnm-browse-date__day {
  font-size: 1.45rem;
  font-weight: 800;
  line-height: 1;
}

.gnm-browse-date__month {
  margin-top: 2px;
  color: var(--gnm-accent);
  font-size: .64rem;
  font-weight: 700;
  letter-spacing: .09em;
  text-transform: uppercase;
}

.gnm-browse-date__live {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: .74rem;
  font-weight: 800;
  letter-spacing: .08em;
  text-transform: uppercase;
}

.gnm-browse-live-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: currentColor;
  animation: gnm-browse-pulse 2.4s ease-in-out infinite;
}

@keyframes gnm-browse-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: .35; }
}

.gnm-browse-session__body {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}

.gnm-browse-session__title {
  color: var(--gnm-primary);
  font-size: .95rem;
  font-weight: 700;
  line-height: 1.35;
}

.gnm-browse-session__meta,
.gnm-browse-session__signups {
  color: var(--gnm-text-muted);
  font-size: .78rem;
}

.gnm-browse-session__signups {
  display: flex;
  align-items: center;
  gap: 9px;
  margin-top: 6px;
  font-size: .76rem;
}

.gnm-browse-planned {
  padding-bottom: 58px;
}

.gnm-browse-planned__list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0 52px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.gnm-browse-planned__item {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 11px 0;
  border-top: 1px solid var(--gnm-border);
}

.gnm-browse-planned__name {
  flex: 0 0 auto;
  color: var(--gnm-text);
  font-size: .86rem;
  font-weight: 700;
}

.gnm-browse-planned__desc {
  color: var(--gnm-text-muted);
  font-size: .79rem;
  line-height: 1.45;
}

a.gnm-browse-panel:hover .gnm-browse-panel__title,
a.gnm-browse-panel:focus-visible .gnm-browse-panel__title {
  color: var(--gnm-primary-strong);
}

a.gnm-browse-panel--cases:hover .gnm-browse-panel__title,
a.gnm-browse-panel--cases:focus-visible .gnm-browse-panel__title {
  color: var(--gnm-accent);
}

@media (max-width: 991.98px) {
  .gnm-browse-panel--cases,
  .gnm-browse-panel--people,
  .gnm-browse-panel--reading,
  .gnm-browse-panel--webinar {
    grid-column: span 12;
  }

  .gnm-browse-panel--webinar {
    padding: 26px 24px;
  }
}

@media (max-width: 575.98px) {
  .gnm-browse-panel {
    padding: 22px;
  }

  .gnm-browse-planned__list {
    grid-template-columns: 1fr;
  }

  .gnm-browse-planned__item {
    flex-direction: column;
    gap: 2px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .gnm-browse-panel,
  .gnm-browse-panel__go i {
    transition: none;
  }

  .gnm-browse-live-dot {
    animation: none;
  }
}


/* ---- Hover: the surface answers, not the four words (15/08/2026) ---------

   No title underlines itself any more, at rest or on hover. A title shifts
   colour and nothing else; what answers the cursor is the surface carrying it
   - tint, border, elevation - so the pointer no longer has to land on the
   words themselves.

   On the short rails (Highlights, related cases, the Browse reading list) the
   title's ::after covers its whole row, so the row is genuinely clickable and
   not merely lit up. The index cards are deliberately left out of that: their
   text is a bibliographic reference and it has to stay selectable.

   Every duration and curve below comes from base.css. --------------------- */

.gnm-highlights-module__link,
.gnm-browse-read__title,
.gnm-browse-panel__title,
.gnm-home-article-card__title .gnm-title-link,
.gnm-article-card__title-link,
.gnm-home-article-ranking__title-link,
.gnm-case-related__link,
.gnm-cases-row__link {
  text-decoration: none;
  transition: color var(--gnm-dur-fast) var(--gnm-ease);
}

/* The colour lands whether the cursor is on the words or anywhere on their
   surface - which is the entire point of making the row the target. */
.gnm-highlights-module__link:hover,
.gnm-highlights-module__link:focus-visible,
.gnm-highlights-module__item:hover .gnm-highlights-module__link,
.gnm-browse-read__title:hover,
.gnm-browse-read__title:focus-visible,
.gnm-browse-read:hover .gnm-browse-read__title,
.gnm-case-related__link:hover,
.gnm-case-related__link:focus-visible,
.gnm-case-related__item:hover .gnm-case-related__link,
.gnm-home-article-ranking__title-link:hover,
.gnm-home-article-ranking__title-link:focus-visible,
.gnm-article-card__title-link:hover,
.gnm-article-card__title-link:focus-visible,
.gnm-article-card.card:hover .gnm-article-card__title-link,
.gnm-home-article-card__title .gnm-title-link:hover,
.gnm-home-article-card__title .gnm-title-link:focus-visible,
.gnm-home-article-card:hover .gnm-home-article-card__title .gnm-title-link,
.gnm-cases-row__link:hover,
.gnm-cases-row__link:focus-visible,
.gnm-cases-row:hover .gnm-cases-row__link {
  color: var(--gnm-secondary, #33698f);
}

/* ---- The short rails become rows ----

   Exactly what a Clinical Cases row does, and for the same reason: the site
   already had one grammar for a hovered line, --cc-row-hover, and a rail is a
   line like any other. The row takes the tint edge to edge of the block that
   carries it, and the rules between rows are left alone.

   The first version of this pass used a rounded pill overflowing the item by
   7px, which crossed those rules and pulled the list apart on hover. Pulling
   the row out by the container padding and paying it straight back gives the
   full-width band without moving a single glyph. */

.gnm-highlights-module__item,
.gnm-case-related__item,
.gnm-browse-read {
  position: relative;
  margin-inline: calc(var(--cc-rail-bleed, 10px) * -1);
  padding-inline: var(--cc-rail-bleed, 10px);
  transition: background-color var(--gnm-dur) var(--gnm-ease);
}

.gnm-highlights-module__item:hover,
.gnm-highlights-module__item:focus-within,
.gnm-case-related__item:hover,
.gnm-case-related__item:focus-within,
.gnm-browse-read:hover,
.gnm-browse-read:focus-within {
  background: color-mix(in srgb, var(--gnm-primary, #4083b0), transparent 94%);
}

/* One target per row. The cover of a Highlights item is already a link to the
   same article, so covering it costs nothing. A case still under review has
   no link at all, and therefore no target - which is correct.

   The one-column index card joins them here rather than in its template: the
   two-column card and the home cover card have carried .stretched-link since
   they were written, and a reader should not meet two different rules for the
   same object depending on which page shows it. */
.gnm-highlights-module__link::after,
.gnm-case-related__link::after,
.gnm-browse-read__title::after,
.gnm-cases-row__link::after,
.gnm-article-card--standard-one-col .gnm-article-card__title-link::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
}


/* ==========================================================================
   Cockpit GNM V1 shared presentation
   Promoted from the former LFB/gnm-default layout styles. Values come from
   the base tokens and optional Site CSS; layout presets retain composition only.
   ========================================================================== */


/* ---------- Page ---------- */
body.gnm-base-site {
  background: var(--lfb-fond);
  color: var(--lfb-texte);
  font-family: var(--lfb-font-sans);
  font-optical-sizing: auto;
}

a,
a:hover {
  color: inherit;
}

h1,
h2,
h3 {
  font-weight: 700;
  letter-spacing: -0.015em;
}

h2,
.gnm-ui-section-title {
  font-size: clamp(1.6rem, 3vw, 2.1rem);
  line-height: 1.2;
}

.gnm-home-module h1,
.gnm-home-module h2,
.gnm-home-module h3 {
  color: var(--lfb-texte);
}

/* Eyebrow: small capitals behind a short rule */
.gnm-ui-eyebrow {
  display: flex;
  align-items: center;
  gap: .5rem;
  margin: 0;
  color: var(--lfb-muted);
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
}

.gnm-ui-eyebrow::before {
  content: '';
  flex: none;
  width: 18px;
  height: 3px;
  border-radius: 2px;
  background: var(--lfb-violet);
}

.gnm-section-title {
  margin: 0;
}

.gnm-section-title__subtitle {
  margin-bottom: .5rem;
}

/* ---------- Login ribbon (reference: .topbar) ---------- */
#login-ribbon.gnm-login-ribbon {
  padding: .5rem 0;
  background: var(--lfb-encre-2);
  color: var(--lfb-on-encre);
  font-size: .8rem;
}

.gnm-login-ribbon__links {
  gap: 1rem;
}

.gnm-login-ribbon a:hover,
.gnm-login-ribbon a:focus-visible {
  color: #fff;
}

/* ---------- Header (reference: .navbar-lfb) ---------- */
#header.gnm-site-header-shell--navbar {
  padding-block: 1rem;
  background: var(--lfb-fond);
  border-bottom: 1px solid var(--lfb-filet);
  backdrop-filter: none;
}

.gnm-site-header-shell--navbar .gnm-shell-inner--lg {
  padding: 0 1rem;
}

.gnm-site-header-shell--navbar .gnm-navbar {
  padding-block: 0;
}

.gnm-site-header-shell--navbar .navbar-brand {
  margin-right: 1rem;
  padding: 0;
}

.gnm-site-header-shell--navbar .gnm-brand-heart {
  display: none;
}

.gnm-site-header-shell--navbar .gnm-navbar-menu .nav-link {
  padding: .5rem .5rem .35rem;
  border-bottom: 2px solid transparent;
  border-radius: 0;
  color: var(--lfb-texte);
  font-size: .8rem;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  white-space: nowrap;
}

.gnm-site-header-shell--navbar .gnm-navbar-menu .nav-link:hover,
.gnm-site-header-shell--navbar .gnm-navbar-menu .nav-link:focus-visible {
  background: none;
  color: var(--lfb-accent);
}

.gnm-site-header-shell--navbar .gnm-navbar-menu .nav-link.active,
.gnm-site-header-shell--navbar .gnm-navbar-menu .current-menu-item > .nav-link {
  background: none;
  border-bottom-color: var(--lfb-accent);
  color: var(--lfb-texte);
}

@media (min-width: 992px) {
  .gnm-site-header-shell--navbar .gnm-navbar-menu {
    gap: 1.5rem;
  }
}

@media (min-width: 1200px) {
  .gnm-site-header-shell--navbar .gnm-shell-inner--lg {
    padding: 0;
  }
}

/* Search trigger: the punctuation colour the four portals share */
.gnm-site-header-shell--navbar .gnm-navbar-search {
  width: 40px;
  height: 40px;
  border: 1px solid var(--lfb-orange);
  background: var(--lfb-carte);
  box-shadow: 0 5px 22px color-mix(in srgb, var(--lfb-encre) 10%, transparent);
  color: var(--lfb-orange);
  font-size: 15px;
  transition: color .2s ease, border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}

.gnm-site-header-shell--navbar .gnm-navbar-search:hover,
.gnm-site-header-shell--navbar .gnm-navbar-search:focus-visible,
.gnm-site-header-shell--navbar .gnm-navbar-search.show {
  border-color: var(--lfb-encre);
  background: var(--lfb-carte);
  box-shadow: 0 8px 22px color-mix(in srgb, var(--lfb-encre) 20%, transparent);
  color: var(--lfb-encre);
  transform: translateY(-1px);
}

.gnm-search-dropdown {
  min-width: min(520px, 92vw);
  margin-top: .55rem;
  border: 1px solid var(--lfb-filet);
  border-top: 3px solid var(--lfb-orange);
  border-radius: var(--gnm-radius-md);
  background: var(--lfb-carte);
  box-shadow: 0 18px 50px color-mix(in srgb, var(--lfb-encre) 16%, transparent);
}

.gnm-search-dd-title {
  color: var(--lfb-encre);
  font-size: .95rem;
  font-weight: 700;
}

.gnm-search-count {
  padding: .15rem .55rem;
  border-radius: var(--gnm-radius-lg);
  background: color-mix(in srgb, var(--lfb-orange) 12%, transparent);
  color: var(--lfb-encre);
  font-size: .7rem;
  font-weight: 700;
  white-space: nowrap;
}

.gnm-search-bar .form-control {
  box-shadow: none;
  font-size: .95rem;
}

.gnm-search-bar .input-group-text {
  color: var(--lfb-orange);
}

.gnm-search-bar:focus-within .form-control,
.gnm-search-bar:focus-within .input-group-text {
  border-color: var(--lfb-orange);
}

.gnm-btn-search-go {
  border: 0;
  background: var(--lfb-orange);
  color: #fff;
}

.gnm-btn-search-go:hover,
.gnm-btn-search-go:focus {
  background: var(--lfb-encre);
  color: #fff;
}

.gnm-btn-search-go .bi,
.gnm-adv-search-link .bi {
  display: inline-block;
  transition: transform .2s ease;
}

.gnm-btn-search-go:hover .bi,
.gnm-adv-search-link:hover .bi {
  transform: translateX(2px);
}

.gnm-search-chip {
  display: inline-block;
  padding: .3rem .85rem;
  border: 1px solid var(--lfb-filet);
  border-radius: 30px;
  background: var(--lfb-fond);
  color: var(--lfb-encre);
  font-size: .8rem;
  font-weight: 600;
  text-decoration: none;
  transition: border-color .2s ease, color .2s ease, background .2s ease;
}

.gnm-search-chip:hover {
  border-color: var(--lfb-orange);
  background: var(--lfb-carte);
  color: var(--lfb-orange);
}

.gnm-adv-search-link {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  color: var(--lfb-encre);
  font-size: .8rem;
  font-weight: 600;
  text-decoration: none;
}

.gnm-adv-search-link:hover {
  color: var(--lfb-orange);
}

/* ---------- Hero (reference: #carouselXPERT), desktop only ---------- */
.gnm-home-hero--carousel-overlay {
  margin-bottom: 1.5rem;
  border-bottom: 0;
}

.gnm-home-hero--carousel-overlay .gnm-home-hero__container--overlay {
  padding: 0;
}

.gnm-home-hero-carousel--overlay {
  --gnm-hero-dot: rgba(255, 255, 255, .45);
  --gnm-hero-dot-active: var(--lfb-accent);
  border: 0;
  border-radius: 0 0 .375rem .375rem;
  background: var(--lfb-encre);
  box-shadow: none;
}

.gnm-home-hero-carousel--overlay .carousel-item {
  height: 440px;
}

.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__media,
.gnm-home-hero-carousel--overlay picture {
  display: block;
  height: 100%;
  min-height: 0;
}

.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__image {
  height: 100%;
  min-height: 0;
  max-height: none;
  object-fit: cover;
  object-position: 0 50%;
}

.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__caption--overlay {
  inset: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start;
  padding: 0 6%;
  background: linear-gradient(90deg,
    color-mix(in srgb, var(--lfb-encre) 92%, transparent) 0%,
    color-mix(in srgb, var(--lfb-encre) 55%, transparent) 45%,
    color-mix(in srgb, var(--lfb-encre) 5%, transparent) 80%);
  color: #fff;
  text-align: left;
}

.gnm-home-hero-carousel__eyebrow {
  display: flex;
  align-items: center;
  gap: .5rem;
  color: var(--lfb-sable);
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
}

.gnm-home-hero-carousel__eyebrow::before {
  content: '';
  width: 18px;
  height: 3px;
  border-radius: 2px;
  background: var(--lfb-violet);
}

.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__title {
  max-width: 18ch;
  margin: .6rem 0 0;
  color: #fff;
  font-size: clamp(1.6rem, 3.2vw, 2.6rem);
  line-height: 1.12;
}

.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__content {
  max-width: 52ch;
  margin: .8rem 0 0;
  color: rgba(255, 255, 255, .85);
}

.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__content p {
  margin: 0;
}

.gnm-home-hero-carousel__actions {
  display: flex;
  flex-wrap: wrap;
  gap: .7rem;
  margin-top: 1.25rem;
}

.gnm-home-hero-carousel__cta.btn {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  padding: .62rem 1.2rem;
  border: 0;
  border-radius: var(--gnm-radius-sm);
  background: var(--lfb-accent-cta);
  color: #fff;
  font-size: .82rem;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
  transition: background .25s var(--lfb-ease-quint);
}

.gnm-home-hero-carousel__cta.btn:hover,
.gnm-home-hero-carousel__cta.btn:focus-visible {
  background: var(--lfb-accent-cta-h);
  color: #fff;
}

.gnm-home-hero-carousel__cta .bi {
  display: inline-block;
  transition: transform .2s ease;
}

.gnm-home-hero-carousel__cta:hover .bi {
  transform: translateX(4px);
}

.gnm-home-hero-carousel__cta--secondary.btn {
  border: 1.5px solid rgba(255, 255, 255, .65);
  background: transparent;
}

.gnm-home-hero-carousel__cta--secondary.btn:hover,
.gnm-home-hero-carousel__cta--secondary.btn:focus-visible {
  border-color: #fff;
  background: rgba(255, 255, 255, .14);
}

/* Search slide */
.gnm-home-hero-carousel__search.input-group {
  flex-wrap: nowrap;
  max-width: 520px;
  margin-top: 1.25rem;
}

.gnm-home-hero-carousel__search .form-control {
  border-color: var(--lfb-filet);
  border-radius: 100px 0 0 100px;
  background: var(--lfb-fond);
  font-size: .85rem;
}

.gnm-home-hero-carousel__search .gnm-home-hero-carousel__search-submit {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  border: 0;
  border-radius: 0 100px 100px 0;
  background: var(--lfb-accent-cta);
  color: #fff;
  font-size: .85rem;
  font-weight: 600;
}

.gnm-home-hero-carousel__search .gnm-home-hero-carousel__search-submit:hover {
  background: var(--lfb-accent-cta-h);
}

.gnm-home-hero-carousel__search-chips {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .5rem;
  margin-top: .9rem;
}

.gnm-home-hero-carousel__search-chips-label {
  color: rgba(255, 255, 255, .75);
  font-size: .78rem;
}

.gnm-home-hero-carousel__search-chip {
  padding: .32rem .8rem;
  border: 1px solid rgba(255, 255, 255, .45);
  border-radius: 100px;
  color: #fff;
  font-size: .78rem;
  font-weight: 600;
  text-decoration: none;
  transition: background .18s, border-color .18s;
}

.gnm-home-hero-carousel__search-chip:hover {
  border-color: #fff;
  background: rgba(255, 255, 255, .16);
  color: #fff;
}

@media (max-width: 991.98px) {
  .gnm-home-hero--carousel-overlay {
    display: none;
  }
}

/* ---------- Latest publications, pubs-grid (reference: #actus) ---------- */
.gnm-home-latest-articles--pubs-grid {
  margin-top: 1.5rem;
  padding: 0;
}

@media (min-width: 768px) {
  .gnm-home-latest-articles--pubs-grid {
    margin-top: 3rem;
  }
}

.gnm-home-latest-articles__head {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: 1rem;
}

.gnm-home-latest-articles__last-update {
  display: inline-block;
  margin: 0;
  line-height: 1.25;
  padding: .3rem .85rem;
  border: 1px solid var(--lfb-filet);
  border-radius: 100px;
  background: var(--lfb-carte);
  color: var(--lfb-texte);
  font-size: .78rem;
  font-weight: 600;
}

.gnm-home-latest-articles__last-update time {
  font-weight: 700;
}

.gnm-home-latest-articles__dot {
  color: var(--lfb-accent);
}

.gnm-home-latest-articles__title {
  margin: .5rem 0 0;
}

.gnm-home-latest-articles__all {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  padding: .6rem 1.4rem;
  border: 2px solid var(--lfb-accent);
  border-radius: 50rem;
  background: transparent;
  color: var(--lfb-accent);
  font-size: .9rem;
  font-weight: 600;
  letter-spacing: .05em;
  line-height: 1.5;
  text-decoration: none;
  text-transform: uppercase;
  transition: background-color .25s var(--lfb-ease-quint), color .25s var(--lfb-ease-quint), border-color .25s var(--lfb-ease-quint);
}

.gnm-home-latest-articles__all:hover,
.gnm-home-latest-articles__all:focus-visible {
  border-color: var(--lfb-encre);
  background: var(--lfb-encre);
  color: #fff;
}

.gnm-home-latest-articles__all .bi {
  font-size: 1.05rem;
  line-height: 1;
}

/* Columns on hairlines, nothing boxed */
.gnm-home-latest-articles__grid {
  margin-top: 1.5rem;
  border-top: 1px solid var(--lfb-filet);
}

.gnm-home-latest-articles__col {
  padding: 1.75rem;
  border-bottom: 1px solid var(--lfb-filet);
  transition: background-color .35s var(--lfb-ease-quint);
}

.gnm-home-latest-articles__col:hover {
  background: var(--lfb-carte);
}

@media (min-width: 992px) {
  .gnm-home-latest-articles__col:not(:nth-child(3n)) {
    border-right: 1px solid var(--lfb-filet);
  }
}

.gnm-home-pub {
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
}

.gnm-home-pub__body {
  min-width: 0;
}

.gnm-home-pub__cover {
  position: relative;
  z-index: 1;
  float: left;
  width: 110px;
  margin: .15rem 1.15rem .4rem 0;
}

.gnm-home-pub__cover img {
  display: block;
  width: 100%;
  height: 150px;
  object-fit: fill;
  border: 1px solid var(--lfb-filet);
  border-radius: var(--gnm-radius-sm);
  box-shadow: 0 6px 18px color-mix(in srgb, var(--lfb-encre) 12%, transparent);
}

.gnm-home-pub__journal {
  margin: 0 0 .25rem;
  color: var(--lfb-muted);
  font-size: .875rem;
}

.gnm-home-pub__journal em {
  font-family: var(--lfb-font-serif);
}

.gnm-home-pub__title {
  margin: 0 0 .5rem;
  font-size: calc(1.275rem + .3vw);
  line-height: 1.3;
  transition: color .3s var(--lfb-ease-quint);
}

.gnm-home-latest-articles__col:hover .gnm-home-pub__title {
  color: var(--lfb-accent);
}

.gnm-home-pub__summary {
  margin: 0 0 1rem;
  color: var(--lfb-muted);
  font-size: 1rem;
  line-height: 1.55;
}

.gnm-home-pub__link {
  display: inline-flex;
  align-self: flex-start;
  align-items: center;
  gap: .5rem;
  margin-top: auto;
  color: var(--lfb-encre);
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
}

.gnm-home-pub__link:hover {
  color: var(--lfb-encre);
}

.gnm-home-pub__link .bi {
  display: inline-block;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--lfb-encre);
  color: #fff;
  font-size: .72rem;
  line-height: 24px;
  text-align: center;
  transition: transform .3s var(--lfb-ease-quint), background-color .3s var(--lfb-ease-quint);
}

.gnm-home-pub__link:hover .bi {
  background: var(--lfb-accent);
  transform: translateX(4px);
}

@media (min-width: 1200px) {
  .gnm-home-pub__title {
    font-size: 1.5rem;
  }
}

@media (max-width: 575.98px) {
  .gnm-home-pub__cover {
    width: 88px;
    margin-right: .9rem;
  }
}

/* ---------- Search band, panel (reference: #recherche) ---------- */
.gnm-home-search-cta--panel {
  position: relative;
  margin: 3rem 0;
  padding: 3rem 0;
}

.gnm-home-search-cta--panel::before {
  content: '';
  position: absolute;
  inset: 22% 0;
  background: var(--lfb-encre);
}

.gnm-home-search-cta--panel > .container {
  position: relative;
}

.gnm-home-search-cta__newsletter {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: center;
  height: calc(100% - 7rem);
  margin: 3.5rem 0;
  padding: 1.5rem;
  color: var(--lfb-on-encre);
}

.gnm-home-search-cta__newsletter .gnm-ui-eyebrow {
  color: var(--lfb-sable);
}

.gnm-home-search-cta__newsletter .gnm-ui-eyebrow::before {
  background: var(--lfb-sable);
}

.gnm-home-module .gnm-home-search-cta__newsletter-title {
  margin: .5rem 0;
  color: #fff;
  font-size: 1.6rem;
}

.gnm-home-search-cta__newsletter-text {
  margin: 0 0 1.5rem;
  color: var(--lfb-on-encre-2);
  font-size: .92rem;
}

.gnm-home-search-cta__newsletter-cta.btn {
  padding: .5rem 1.25rem;
  border: 0;
  border-radius: 100px;
  background: var(--lfb-orange);
  color: #fff;
  font-weight: 600;
  transition: background .25s var(--lfb-ease-quint);
}

.gnm-home-search-cta__newsletter-cta.btn:hover,
.gnm-home-search-cta__newsletter-cta.btn:focus-visible {
  background: var(--lfb-orange-h);
  color: #fff;
}

.gnm-home-search-cta__panel {
  position: relative;
  height: 100%;
  overflow: hidden;
  border-radius: var(--gnm-radius-lg);
  background: var(--lfb-carte);
  box-shadow: 0 24px 60px color-mix(in srgb, var(--lfb-encre-2) 28%, transparent);
}

.gnm-home-search-cta__count {
  display: flex;
  flex-direction: column;
  height: 100%;
  padding: 1.5rem;
  background: linear-gradient(150deg, var(--lfb-violet) 0%, var(--lfb-violet-2) 45%, var(--lfb-mauve) 100%);
  color: #fff;
}

.gnm-home-search-cta__count-number {
  font-family: var(--lfb-font-serif);
  font-size: clamp(4rem, 7vw, 5.5rem);
  font-style: italic;
  font-weight: 400;
  line-height: .95;
}

.gnm-home-search-cta__count-unit {
  margin-top: .5rem;
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: .3em;
  text-transform: uppercase;
}

.gnm-home-search-cta__count-list {
  margin: auto 0 0;
  padding-top: 1.5rem;
  font-size: .82rem;
  opacity: .92;
}

.gnm-home-search-cta__main {
  display: flex;
  flex-direction: column;
  height: 100%;
  padding: 1.5rem;
}

.gnm-home-search-cta__panel-form {
  display: flex;
  flex-direction: column;
  flex-grow: 1;
}

.gnm-home-search-cta__panel-input.form-control {
  margin: 1.5rem 0;
  padding: .75rem 0;
  border: 0;
  border-bottom: 1px solid var(--lfb-filet);
  border-radius: 0;
  background: transparent;
  color: var(--lfb-texte);
  font-family: var(--lfb-font-sans);
  font-size: clamp(1.1rem, 2vw, 1.4rem);
}

.gnm-home-search-cta__panel-input.form-control::placeholder {
  color: color-mix(in oklch, var(--lfb-muted) 55%, white);
}

.gnm-home-search-cta__panel-input.form-control:focus {
  border-bottom-color: var(--lfb-violet);
  background: transparent;
  box-shadow: none;
}

.gnm-home-search-cta__panel-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1.5rem;
  margin-top: auto;
}

.gnm-home-search-cta__aid {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  color: var(--lfb-muted);
  font-size: .82rem;
  text-decoration: none;
}

.gnm-home-search-cta__aid:hover {
  color: var(--lfb-texte);
}

.gnm-home-search-cta__aid-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  border: 1px solid var(--lfb-filet);
  border-radius: 50%;
  font-size: .68rem;
}

.gnm-home-search-cta__panel-submit {
  margin-left: auto;
  padding: .7rem 1.6rem;
  border: 0;
  border-radius: 100px;
  background: var(--lfb-accent-cta);
  color: #fff;
  font-size: .78rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  transition: background .25s var(--lfb-ease-quint);
}

.gnm-home-search-cta__panel-submit:hover,
.gnm-home-search-cta__panel-submit:focus-visible {
  background: var(--lfb-accent-cta-h);
}

.gnm-home-search-cta__panel-submit .bi {
  display: inline-block;
  transition: transform .3s var(--lfb-ease-quint);
}

.gnm-home-search-cta__panel-submit:hover .bi {
  transform: translateX(4px);
}

@media (min-width: 992px) {
  .gnm-home-search-cta__newsletter,
  .gnm-home-search-cta__count,
  .gnm-home-search-cta__main {
    padding: 3rem;
  }
}

@media (max-width: 991.98px) {
  .gnm-home-search-cta--panel::before {
    inset: 0;
  }

  .gnm-home-search-cta__newsletter {
    height: auto;
    margin: 0;
  }
}

/* Envelope that wiggles now and then, opens on hover */
.gnm-nl-ico {
  position: relative;
  display: inline-block;
  width: 1.35em;
  height: 1.35em;
  font-size: 1.05rem;
  line-height: 1;
  vertical-align: -.34em;
}

.gnm-nl-ico .bi {
  position: absolute;
  inset: 0;
  display: inline-block;
  line-height: 1.35em;
  text-align: center;
  transition: opacity .2s var(--lfb-ease-quint), transform .25s var(--lfb-ease-quint);
}

.gnm-nl-ico .bi-envelope {
  animation: gnm-nl-wiggle 5s ease-in-out infinite;
  transform-origin: 50% 20%;
}

.gnm-nl-ico .bi-envelope-open {
  opacity: 0;
  transform: translateY(3px);
}

a:hover .gnm-nl-ico .bi-envelope {
  opacity: 0;
  animation-play-state: paused;
}

a:hover .gnm-nl-ico .bi-envelope-open {
  opacity: 1;
  transform: translateY(0);
}

@keyframes gnm-nl-wiggle {
  0%, 10%, 20%, 30%, 100% { transform: rotate(0); }
  5% { transform: rotate(-12deg); }
  15% { transform: rotate(9deg); }
  25% { transform: rotate(-5deg); }
}

/* ---------- Journals A-Z and most read band ---------- */
.gnm-home-section {
  margin-top: var(--gnm-section-gap, 56px);
  padding-top: calc(var(--gnm-section-gap, 56px) * .2857);
}

.gnm-home-section__row.align-items-center {
  align-items: stretch !important;
}

.gnm-home-journals-az--embedded {
  margin: .5rem;
  padding: 1.5rem;
}

.gnm-home-journals-az__count {
  display: inline-block;
  margin: .75rem 0 0;
  padding: .3rem .75rem;
  border: 1px solid var(--lfb-filet);
  border-radius: 100px;
  background: var(--lfb-fond);
  color: var(--lfb-muted);
  font-size: .78rem;
  white-space: nowrap;
}

.gnm-home-journals-az__bar {
  display: flex;
  flex-wrap: wrap;
  gap: .5rem;
  margin-top: 1.5rem;
}

.gnm-home-journals-az__letter {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 2.1rem;
  height: 2.1rem;
  padding: 0 .45rem;
  border: 1px solid var(--lfb-filet);
  border-radius: 9px;
  background: var(--lfb-fond);
  color: var(--lfb-encre);
  font-size: .9rem;
  font-weight: 700;
  text-decoration: none;
  transition: background .12s, color .12s, border-color .12s;
}

a.gnm-home-journals-az__letter:hover,
a.gnm-home-journals-az__letter:focus-visible {
  border-color: var(--lfb-violet);
  background: var(--lfb-violet);
  color: #fff;
}

a.gnm-home-journals-az__letter.is-active {
  border-color: var(--lfb-encre);
  background: var(--lfb-encre);
  color: #fff;
}

.gnm-home-journals-az__letter--off {
  border-color: transparent;
  background: transparent;
  color: color-mix(in oklch, var(--lfb-muted) 40%, white);
  cursor: default;
}

.gnm-home-journals-az__lists {
  margin-top: 1.5rem;
}

.gnm-home-journals-az__journal {
  display: inline-flex;
  align-items: flex-start;
  gap: .5rem;
  padding: .3rem 0;
  color: var(--lfb-texte);
  font-size: .92rem;
  line-height: 1.35;
  text-decoration: none;
}

.gnm-home-journals-az__journal:hover,
.gnm-home-journals-az__journal:focus-visible {
  color: var(--lfb-violet);
}

.gnm-home-journals-az__journal .bi {
  flex: none;
  margin-top: .15rem;
  color: var(--lfb-violet);
}

.gnm-home-journals-az__badge {
  color: var(--lfb-muted);
  font-size: .76rem;
}

.gnm-home-journals-az__hint {
  margin: 1rem 0 0;
  color: var(--lfb-muted);
  font-size: .9rem;
}

/* Most read (reference: .rank-list) */
.gnm-home-article-ranking--embedded {
  padding: 0;
}

.gnm-home-article-ranking--list .gnm-ui-eyebrow::before {
  background: var(--lfb-accent);
}

.gnm-home-article-ranking__list {
  margin: 1rem 0 0;
  padding: 0;
  list-style: none;
}

.gnm-home-article-ranking__list li {
  border-bottom: 1px solid var(--lfb-filet);
}

.gnm-home-article-ranking__list li:last-child {
  border-bottom: 0;
}

.gnm-home-article-ranking__list a {
  display: flex;
  align-items: baseline;
  gap: 1.1rem;
  padding: .85rem 0;
  color: var(--lfb-encre);
  text-decoration: none;
  transition: color .15s ease-out;
}

.gnm-home-article-ranking__list a:hover,
.gnm-home-article-ranking__list a:focus-visible {
  color: var(--lfb-accent);
}

.gnm-home-article-ranking__num {
  flex: 0 0 auto;
  min-width: 2.1rem;
  color: var(--lfb-accent);
  font-size: 1.5rem;
  font-weight: 700;
  line-height: 1;
}

.gnm-home-article-ranking__ttl {
  font-size: 1.05rem;
  font-weight: 700;
  line-height: 1.4;
}

/* ---------- Ecosystem (reference: .ecov3) ---------- */
.gnm-home-ecosystem {
  margin: 3rem 0;
  padding: 1rem 0;
}

.gnm-home-ecosystem__head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1.15rem;
  margin-bottom: 1.5rem;
}

.gnm-home-ecosystem__logo {
  display: block;
  width: auto;
  height: 26px;
  opacity: .85;
}

.gnm-home-module .gnm-home-ecosystem__title {
  margin: 0;
  color: var(--lfb-encre);
  font-size: clamp(1.9rem, 3.5vw, 2.55rem);
  font-weight: 400;
  letter-spacing: -0.02em;
  line-height: 1.12;
}

.gnm-home-ecosystem__accent {
  font-family: var(--lfb-font-serif);
  font-style: italic;
  font-weight: 560;
}

.gnm-home-ecosystem__grid {
  border-top: 1px solid var(--lfb-filet);
  border-bottom: 1px solid var(--lfb-filet);
}

.gnm-home-ecosystem__col {
  --gnm-eco-accent: var(--lfb-sable);
  padding-block: 1.75rem;
}

.gnm-home-ecosystem__spec {
  display: flex;
  align-items: center;
  gap: .5rem;
  color: var(--lfb-muted);
  font-size: .64rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
}

.gnm-home-ecosystem__spec::before {
  content: '';
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--gnm-eco-accent);
}

.gnm-home-module .gnm-home-ecosystem__name {
  margin: .65rem 0 .5rem;
  font-size: 1.15rem;
}

.gnm-home-ecosystem__text {
  margin: 0 0 1rem;
  color: var(--lfb-muted);
  font-size: .82rem;
}

.gnm-home-ecosystem__link,
.gnm-home-ecosystem__here {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  font-size: .82rem;
  font-weight: 600;
}

.gnm-home-ecosystem__link {
  color: var(--lfb-encre);
  text-decoration: none;
}

.gnm-home-ecosystem__link:hover {
  color: var(--lfb-encre);
}

.gnm-home-ecosystem__link .bi {
  display: inline-block;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--lfb-encre);
  color: #fff;
  font-size: .72rem;
  line-height: 24px;
  text-align: center;
  transition: transform .3s var(--lfb-ease-quint), background-color .3s var(--lfb-ease-quint), color .3s var(--lfb-ease-quint);
}

.gnm-home-ecosystem__link:hover .bi {
  background: var(--gnm-eco-accent);
  color: var(--lfb-encre);
  transform: translateX(4px);
}

.gnm-home-ecosystem__here {
  color: var(--lfb-accent);
}

/* "You are here": two rings that keep spreading from the dot */
.gnm-home-ecosystem__ping {
  position: relative;
  display: inline-block;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--lfb-accent);
}

.gnm-home-ecosystem__ping::before,
.gnm-home-ecosystem__ping::after {
  content: '';
  position: absolute;
  inset: 0;
  border: 1.5px solid var(--lfb-accent);
  border-radius: 50%;
  opacity: 0;
  pointer-events: none;
  animation: gnm-eco-ping 2.4s var(--lfb-ease-expo) infinite;
}

.gnm-home-ecosystem__ping::after {
  animation-delay: 1.2s;
}

@keyframes gnm-eco-ping {
  0% { transform: scale(1); opacity: .55; }
  100% { transform: scale(2.1); opacity: 0; }
}

@media (min-width: 992px) {
  .gnm-home-ecosystem__col {
    padding-inline: 1.5rem;
  }

  .gnm-home-ecosystem__col:first-child {
    padding-left: 0;
  }

  .gnm-home-ecosystem__col:last-child {
    padding-right: 0;
  }

  .gnm-home-ecosystem__col + .gnm-home-ecosystem__col {
    border-left: 1px solid var(--lfb-filet);
  }
}

@media (max-width: 991.98px) {
  .gnm-home-ecosystem__col + .gnm-home-ecosystem__col {
    border-top: 1px solid var(--lfb-filet);
  }
}

/* ---------- Breadcrumb (reference: .bc-nav) ----------
   Structure in base.css, turned on for this preset (gnm_breadcrumb_enabled). */
:root {
  --gnm-breadcrumb-bg: var(--lfb-carte);
  --gnm-breadcrumb-rule: var(--lfb-filet);
  --gnm-breadcrumb-link: var(--lfb-muted);
  --gnm-breadcrumb-hover: var(--lfb-accent);
  --gnm-breadcrumb-current: var(--lfb-texte);
  --gnm-breadcrumb-divider: color-mix(in srgb, var(--lfb-muted) 40%, var(--lfb-carte));
}

/* ---------- My bibliography (reference: the XSL bibliography module v2,
   .biblio-* of custom.css v69, read on 15/10/2026) ----------
   Its look lives in the gnm-bookmark-manager plugin (list) and in base.css
   (page head); the preset only feeds them the charte. The module greys are
   tuned to stay AA on the cream background. */
:root {
  --bm-ink: var(--lfb-encre);
  --bm-on-ink: var(--lfb-carte);
  --bm-text: var(--lfb-texte);
  --bm-muted: color-mix(in srgb, var(--lfb-muted) 88%, var(--lfb-carte));
  --bm-summary: var(--lfb-muted);
  --bm-line: color-mix(in srgb, var(--lfb-encre) 10%, var(--lfb-carte));
  --bm-line-hover: color-mix(in srgb, var(--lfb-encre) 20%, var(--lfb-carte));
  --bm-surface: var(--lfb-carte);
  --bm-accent: var(--lfb-accent);
  --bm-hover: var(--lfb-accent-h);
  --bm-dot: var(--lfb-sable);
}

/* ---------- Footer, colophon (reference: .footer-lfb) ---------- */
#footer.gnm-site-footer-shell--colophon {
  border-top: 3px solid var(--lfb-orange) !important;
  background: var(--lfb-encre-2) !important;
  color: var(--lfb-on-encre-2);
  font-size: .84rem;
}

#footer.gnm-site-footer-shell--colophon a {
  color: inherit;
  text-decoration: none;
  transition: color .18s;
}

#footer.gnm-site-footer-shell--colophon a:hover {
  color: #fff;
}

#footer.gnm-site-footer-shell--colophon a:focus-visible {
  border-radius: 2px;
  outline: 2px solid var(--lfb-sable);
  outline-offset: 2px;
}

#footer .gnm-site-footer-shell__title {
  color: var(--lfb-on-encre-muted);
  font-size: .68rem !important;
  font-weight: 700 !important;
  letter-spacing: .14em;
  text-transform: uppercase;
}

#footer.gnm-site-footer-shell--colophon .list-unstyled {
  display: flex;
  flex-direction: column;
  gap: .5rem;
}

#footer .gnm-site-footer-shell__gnm-logo {
  width: 140px;
  height: auto;
  opacity: .85;
  transition: opacity .25s var(--lfb-ease-quint);
}

#footer a:hover .gnm-site-footer-shell__gnm-logo {
  opacity: 1;
}

#footer .gnm-site-footer-shell__copyright {
  color: var(--lfb-on-encre-muted);
  font-size: .74rem;
}

#footer .gnm-site-footer-shell__strip.border-top {
  border-top: 1px solid color-mix(in srgb, var(--lfb-on-encre) 25%, transparent) !important;
}

#footer .gnm-site-footer-shell__policies a {
  color: inherit;
}

/* Reference order: the GNM column first and wider, the menus after it */
#footer.gnm-site-footer-shell--colophon .row > .text-lg-end {
  order: -1;
}

@media (min-width: 992px) {
  #footer.gnm-site-footer-shell--colophon .row.g-4 {
    justify-content: space-between;
  }

  #footer.gnm-site-footer-shell--colophon .row.g-4 > .col-lg-3 {
    width: 16.6667%;
  }

  #footer.gnm-site-footer-shell--colophon .row.g-4 > .col-lg-3.text-lg-end {
    width: 33.3333%;
    text-align: left !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  .gnm-nl-ico .bi-envelope,
  .gnm-home-ecosystem__ping::before,
  .gnm-home-ecosystem__ping::after {
    animation: none;
  }

  .gnm-home-pub__link .bi,
  .gnm-home-hero-carousel__cta .bi,
  .gnm-home-search-cta__panel-submit .bi,
  .gnm-home-latest-articles__col,
  .gnm-site-header-shell--navbar .gnm-navbar-search {
    transition: none;
  }
}



/* Existing surface theme_mods are mapped to these tokens when configured;
 * Site CSS remains the final source of visual overrides. */
#header.gnm-site-header-shell--navbar {
  background: var(--gnm-header-bg, var(--lfb-fond));
  color: var(--gnm-header-text, var(--lfb-texte));
}
.gnm-site-header-shell--navbar .gnm-navbar-menu .nav-link {
  color: var(--gnm-header-text, var(--lfb-texte));
  font-size: var(--gnm-header-font-size, .8rem);
  font-weight: var(--gnm-header-font-weight, 600);
}
#login-ribbon.gnm-login-ribbon {
  background: var(--gnm-login-ribbon-bg, var(--lfb-encre-2));
  color: var(--gnm-login-ribbon-text, var(--lfb-on-encre));
  font-size: var(--gnm-login-ribbon-font-size, .8rem);
  font-weight: var(--gnm-login-ribbon-font-weight, 400);
}
#footer.gnm-site-footer-shell--colophon {
  background: var(--gnm-footer-bg, var(--lfb-encre-2)) !important;
  color: var(--gnm-footer-text, var(--lfb-on-encre-2));
  font-size: var(--gnm-footer-font-size, .84rem);
  font-weight: var(--gnm-footer-font-weight, 400);
}
#footer .gnm-site-footer-shell__title,
#footer .gnm-site-footer-shell__copyright {
  color: var(--gnm-footer-text, var(--lfb-on-encre-2));
}

/* Network controls must work with Bootstrap versions whose button colour
 * custom properties are not consumed by their compiled CSS. */
.btn-primary,
.gnm-btn-search-go,
.gnm-home-search-cta__newsletter-cta.btn,
.gnm-home-search-cta__submit {
  border-color: var(--gnm-action-bg);
  background: var(--gnm-action-bg);
  color: var(--gnm-on-action);
}
.btn-primary:hover,
.btn-primary:focus-visible,
.gnm-btn-search-go:hover,
.gnm-btn-search-go:focus-visible,
.gnm-home-search-cta__newsletter-cta.btn:hover,
.gnm-home-search-cta__newsletter-cta.btn:focus-visible,
.gnm-home-search-cta__submit:hover {
  border-color: var(--gnm-action-hover);
  background: var(--gnm-action-hover);
  color: var(--gnm-on-action);
}
.gnm-home-latest-articles__all {
  color: var(--gnm-action-bg);
  border-color: var(--gnm-action-bg);
}
.gnm-home-search-cta__panel-input.form-control::placeholder {
  color: var(--gnm-text-muted);
  opacity: 1;
}
::selection { background: var(--gnm-primary); color: #fff; }
input, textarea { caret-color: var(--gnm-action-bg); }
:where(a, button, input, select, textarea):focus-visible {
  outline: 2px solid var(--gnm-focus-color);
  outline-offset: 3px;
}
.gnm-home-hero-carousel--overlay :focus-visible,
#footer.gnm-site-footer-shell--colophon :focus-visible {
  outline-color: var(--lfb-sable);
}
.gnm-site-header-shell--navbar .gnm-navbar-search,
.gnm-home-journals-az__letter {
  min-width: var(--gnm-control-height);
  min-height: var(--gnm-control-height);
}
.gnm-site-header-shell--navbar .navbar-brand {
  min-width: 0;
  max-width: min(65vw, 24rem);
  white-space: normal;
  overflow-wrap: anywhere;
}
.gnm-site-header-shell--navbar .navbar-brand img {
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 5rem;
  object-fit: contain;
}
.gnm-site-header-shell--navbar .navbar-brand .gnm-brand-logo--navbar {
  width: min(14rem, 55vw);
  height: auto;
  max-height: 5rem;
  object-fit: contain;
}
/* WordPress owns the admin toolbar offset on html (32px / 46px).
 * Do not add it again on #page: that doubles the gap on mobile. */
.gnm-search-dropdown { max-width: calc(100vw - 2rem); }

/* The caption defines the slide's height. The optional image is decoration
 * behind it, so missing media or a longer translation cannot hide the copy. */
.gnm-home-hero--standard {
  background: var(--gnm-hero-gradient);
  color: #fff;
}
.gnm-home-hero--standard .gnm-home-hero__container {
  padding-block: clamp(2rem, 5vw, 4rem);
}
.gnm-home-hero--standard .gnm-home-hero__title,
.gnm-home-hero--standard .gnm-home-hero__subtitle {
  color: #fff;
  overflow-wrap: anywhere;
}
.gnm-home-hero--standard .gnm-home-hero__title { max-width: 24ch; }
.gnm-home-hero--standard .gnm-home-hero__subtitle { max-width: 60ch; }
.gnm-home-hero--standard .gnm-home-hero__card {
  background: var(--gnm-surface);
  color: var(--gnm-text);
  border: 0;
  box-shadow: none;
}
.gnm-home-hero--standard .gnm-home-hero__card-text { color: var(--gnm-text-muted); }
.gnm-home-hero--carousel-overlay { display: block; }
.gnm-home-hero-carousel--overlay .carousel-item {
  height: auto;
  min-height: 27.5rem;
  background: var(--gnm-hero-gradient);
}
.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__media {
  position: absolute;
  inset: 0;
  height: 100%;
  min-height: 0;
}
.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__fallback {
  height: 100%;
  min-height: 0;
  background: var(--gnm-hero-gradient);
}
.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__caption--overlay {
  position: relative;
  inset: auto;
  min-height: 27.5rem;
  padding: clamp(2rem, 5vw, 4rem) 7% 4.5rem;
  background: linear-gradient(90deg, rgba(var(--gnm-primary-strong-rgb, 28, 20, 43), .94), rgba(var(--gnm-primary-strong-rgb, 28, 20, 43), .78) 60%, rgba(var(--gnm-primary-strong-rgb, 28, 20, 43), .5));
}
.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__title {
  max-width: 24ch;
  overflow-wrap: anywhere;
}
.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__content {
  color: #fff;
  max-width: 60ch;
  overflow-wrap: anywhere;
}
.gnm-home-hero-carousel__search.input-group { width: 100%; }
.gnm-home-hero-carousel__search .form-control { min-width: 0; }
.gnm-home-hero-carousel__search-chip { min-height: 44px; display: inline-flex; align-items: center; }
.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__cta--secondary.btn {
  background: transparent;
  border: 1px solid #fff;
  color: #fff;
}
.gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__cta--secondary.btn:hover {
  background: rgba(255, 255, 255, .15);
}

/* Preserve the cover, whatever its original aspect ratio. */
.gnm-home-pub__cover img,
.gnm-home-article-card__cover-img {
  width: 100%;
  height: auto;
  max-height: 11rem;
  object-fit: contain;
  object-position: top left;
}
.gnm-home-article-card--cover {
  padding: 1.5rem 0;
  border: 0;
  border-top: 1px solid var(--gnm-border);
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
.gnm-home-article-card__head { display: flex; align-items: flex-start; gap: 1rem; }
.gnm-home-article-card__cover { flex: 0 0 5.5rem; max-width: 30%; }
.gnm-home-article-card__title { font-size: 1.35rem; line-height: 1.3; overflow-wrap: anywhere; }
.gnm-home-article-card__journal { margin-block: .75rem; font-family: var(--lfb-font-serif); color: var(--gnm-text-muted); }
.gnm-home-article-card__summary { color: var(--gnm-text-muted); line-height: 1.6; }
.gnm-home-article-card__link { margin-top: auto; padding-top: 1rem; color: var(--gnm-action-bg); }
.gnm-home-latest-articles__split { align-items: stretch !important; }

/* The existing standard-search variant remains available beside resources. */
.gnm-home-search-cta__card {
  border-color: var(--gnm-border);
  background: var(--gnm-surface);
  color: var(--gnm-text);
  box-shadow: none;
}
.gnm-home-search-cta__specialty-menu a { color: var(--gnm-text); }

/* Resource cards are a readable stack in the neutral preset: all configured
 * resources remain visible, including with reduced motion and long titles.
 * The legacy animated presentation remains available on its existing sites. */
.gnm-home-features--editorial-stack .gnm-home-features__stack,
.gnm-home-features--editorial-stack .gnm-home-features__stack:not(.gnm-home-features__stack--loop) {
  display: grid;
  width: 100%;
  height: auto;
  aspect-ratio: auto;
  gap: 1rem;
  perspective: none;
  padding-bottom: 0;
}
.gnm-home-features--editorial-stack .gnm-home-features__stack .gnm-home-features__stackcard {
  position: relative;
  inset: auto;
  min-height: 0;
  padding: 1.5rem;
  animation: none;
  transform: none;
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  will-change: auto;
  background: var(--gnm-primary);
  color: #fff;
  overflow-wrap: anywhere;
}
.gnm-home-features--editorial-stack .gnm-home-features__stackcard::after,
.gnm-home-features--editorial-stack .gnm-home-features__stackglow,
.gnm-home-features--editorial-stack .gnm-home-features__stacknav { display: none; }
.gnm-home-features--editorial-stack .gnm-home-features__stackcard-title { color: #fff; }
.gnm-home-features--editorial-stack .gnm-home-features__stackcard-foot { margin-top: 1rem; align-items: flex-start; text-align: left; }
.gnm-home-features--editorial-stack .gnm-home-features__stackcard-description { max-width: 65ch; color: #fff; }

@media (max-width: 991.98px) {
  .gnm-home-hero--carousel-overlay { display: block; }
  .gnm-home-hero-carousel--overlay .carousel-item,
  .gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__caption--overlay { min-height: 23rem; }
  .gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__caption--overlay { padding: 2rem 1.5rem 4rem; }
  .gnm-home-hero-carousel--overlay .gnm-home-hero-carousel__title { font-size: clamp(1.65rem, 5vw, 2.4rem); }
  .gnm-site-header-shell--navbar .gnm-navbar-menu .nav-link { white-space: normal; padding-block: .75rem; }
}
@media (max-width: 575.98px) {
  .gnm-home-hero-carousel__search.input-group { flex-wrap: wrap; gap: .5rem; }
  .gnm-home-hero-carousel__search .form-control { width: 100%; flex-basis: 100%; border-radius: var(--gnm-radius-sm); }
  .gnm-home-hero-carousel__search .gnm-home-hero-carousel__search-submit { min-height: 44px; border-radius: var(--gnm-radius-sm); }
  .gnm-home-latest-articles__col { padding: 1.5rem 1rem; }
  .gnm-home-journals-az--embedded { margin: 0; padding: 1.5rem 0; }
}

/* Quiet placeholder until the service identity is configured. */
.gnm-site-header-shell--navbar .gnm-brand-logo--placeholder {
  filter: grayscale(1);
  opacity: .15;
}

/* End-of-page breathing room, independent of the last configured module. */
#primary.gnm-home-base {
  padding-bottom: clamp(3rem, 6vw, 5rem);
}

/* V3 columns already stack their children below 640px (base.css). Match
 * that container breakpoint, even when the surrounding viewport is wide. */
@container (max-width: 640px) {
  .gnm-home-section__col .gnm-home-search-cta--panel::before { inset: 0; }
  .gnm-home-section__col .gnm-home-search-cta__newsletter {
    height: auto;
    margin: 0;
    padding: 1.5rem;
  }
  .gnm-home-section__col .gnm-home-search-cta__count,
  .gnm-home-section__col .gnm-home-search-cta__main { padding: 1.5rem; }
  .gnm-home-section__col .gnm-home-latest-articles__col:not(:nth-child(3n)) { border-right: 0; }
}

/* Native Bootstrap modals: retain their forms, dismissal and focus handling.
 * Scope to the three existing IDs so plugin dialogs keep their own layout. */
:is(#signInModal, #searchHelpModal, #shareArticleModal) .modal-dialog {
  width: auto;
  max-width: 54rem;
  margin: 1.5rem auto;
  padding-inline: 1rem;
}
:is(#signInModal, #searchHelpModal, #shareArticleModal) .modal-content {
  min-width: 0;
  border: 0;
  border-radius: var(--gnm-radius-md);
  background: var(--gnm-surface);
  color: var(--gnm-text);
  box-shadow: var(--gnm-shadow-float);
  overflow-wrap: anywhere;
}
:is(#signInModal, #searchHelpModal, #shareArticleModal) .modal-header {
  gap: 1rem;
  padding: 1.5rem;
  border-color: var(--gnm-border);
}
:is(#signInModal, #searchHelpModal, #shareArticleModal) .modal-header h2 {
  margin: 0;
  font-size: clamp(1.4rem, 3vw, 1.8rem);
  line-height: 1.25;
}
:is(#signInModal, #searchHelpModal, #shareArticleModal) .modal-body { padding: 1.5rem; }
:is(#signInModal, #searchHelpModal, #shareArticleModal) .modal-footer {
  padding: 1rem 1.5rem;
  border-color: var(--gnm-border);
  flex-wrap: wrap;
}
:is(#signInModal, #searchHelpModal, #shareArticleModal) .btn-close {
  flex: 0 0 44px;
  width: 44px;
  height: 44px;
  padding: 0;
  margin: 0;
  opacity: .75;
}
:is(#signInModal, #searchHelpModal, #shareArticleModal) .form-control {
  min-height: 46px;
  color: var(--gnm-text);
  background-color: var(--gnm-surface);
  border-color: var(--gnm-border);
  border-radius: var(--gnm-radius-sm);
  font-size: 1rem;
}
:is(#signInModal, #searchHelpModal, #shareArticleModal) .form-control::placeholder {
  color: var(--gnm-text-muted);
  opacity: 1;
}
:is(#signInModal, #searchHelpModal, #shareArticleModal) .form-control:focus {
  border-color: var(--gnm-focus-color);
  box-shadow: none;
}
:is(#signInModal, #searchHelpModal, #shareArticleModal) .btn { min-height: 44px; white-space: normal; }
:is(#signInModal, #searchHelpModal, #shareArticleModal) button:disabled { opacity: .65; cursor: wait; }
#signInModal .modal-content > .row { --bs-gutter-x: 0; margin: 0; }
#signInModal .left-side { position: relative; padding: 2rem; }
#signInModal .modal-header { display: block; padding: 0; border: 0; }
#signInModal .btn-close { position: absolute; top: .5rem; right: .5rem; }
#signInModal .modal-intro { padding-top: 1rem; }
#signInModal .modal-intro img { width: min(14rem, 100%); height: auto; max-height: 5rem; object-fit: contain; object-position: left; margin-bottom: 1.25rem; }
#signInModal .modal-intro p { color: var(--gnm-text-muted); }
#signInModal .form-group { position: relative; margin-bottom: 1rem; }
#signInModal #user_pass1 { padding-right: 3rem; }
#signInModal .toggle-password1 {
  position: absolute;
  right: 1px;
  bottom: 1px;
  width: 44px;
  height: 44px;
  border: 0;
  background: transparent;
  color: var(--gnm-text-muted);
}
#signInModal input[type="checkbox"] { accent-color: var(--gnm-action-bg); }
#signInModal .forgot-link { display: inline-block; margin-top: 1rem; color: var(--gnm-action-bg); }
#signInModal .modal-sidebar {
  order: -1;
  padding: 2rem;
  border-radius: var(--gnm-radius-md) 0 0 14px;
  background: var(--gnm-hero-gradient);
  color: #fff;
}
#signInModal .modal-sidebar-image img { max-width: 100%; height: auto; margin-bottom: 1.5rem; }
#signInModal .first-connection { font-family: var(--lfb-font-serif); font-size: 1.65rem; line-height: 1.25; }
#signInModal .modal-sidebar .btn-outline-primary { border-color: #fff; color: #fff; background: transparent; }
#signInModal .modal-sidebar .btn-outline-primary:hover { background: #fff; color: var(--gnm-primary); }
#signInModal .modal-sidebar :focus-visible { outline-color: var(--lfb-sable); }
#signInModal .disclaimer { margin-top: 1.5rem; font-size: .85rem; }
#signInModal .gnm-modal-alert {
  margin-bottom: 1rem;
  padding: .85rem 1rem;
  border: 1px solid var(--gnm-action-bg);
  border-radius: var(--gnm-radius-sm);
  color: var(--gnm-action-bg);
  background: var(--gnm-surface);
}
#searchHelpModal .table {
  table-layout: fixed;
  color: var(--gnm-text);
  --bs-table-striped-bg: var(--gnm-surface-soft);
  --bs-table-striped-color: var(--gnm-text);
}
#searchHelpModal .table td { padding: 1rem .75rem; border-color: var(--gnm-border); overflow-wrap: anywhere; vertical-align: top; }
#searchHelpModal .table td:first-child { width: 5rem; }
@media (max-width: 767.98px) {
  :is(#signInModal, #searchHelpModal, #shareArticleModal) .modal-dialog { margin-block: .75rem; padding-inline: .5rem; }
  #signInModal .left-side { padding: 1.5rem; }
  #signInModal .modal-sidebar { order: 0; padding: 1.5rem; border-radius: 0 0 14px 14px; }
  #searchHelpModal .table td { padding: .75rem .5rem; }
  #searchHelpModal .table td:first-child { width: 4rem; }
}
