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

:root {
  --gnm-bg: #f5f7fb;
  --gnm-surface: #ffffff;
  --gnm-surface-soft: #f8fafc;
  --gnm-text: #0f172a;
  --gnm-text-muted: #475569;
  --gnm-border: #dbe3ef;
  --gnm-primary: #0f4c81;
  --gnm-primary-2: #2563eb;
  --gnm-accent: #0ea5a4;
  --gnm-shadow-sm: 0 6px 18px rgba(15, 23, 42, 0.05);
  --gnm-shadow-md: 0 14px 36px rgba(15, 23, 42, 0.08);
  --gnm-radius-sm: 8px;
  --gnm-radius-md: 10px;
  --gnm-radius-lg: 14px;
  --bs-card-border-radius: var(--gnm-radius-md);
}

.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);
}

html {
  scroll-behavior: smooth;
}

body.gnm-base-site {
  background:
    radial-gradient(1200px 500px at 100% -10%, rgba(37, 99, 235, 0.08), transparent 60%),
    radial-gradient(900px 380px at -5% 10%, rgba(14, 165, 164, 0.08), transparent 60%),
    var(--gnm-bg);
  color: var(--gnm-text);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

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: 1140px; }
}

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

/* 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: #1e293b;
  font-weight: 600;
  padding: .5rem .85rem;
  border-radius: 999px;
  transition: background-color .2s ease, color .2s 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(15, 76, 129, .1);
  color: #0f4c81;
}

.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 #dbe3ef;
  border-radius: 12px;
  box-shadow: 0 16px 34px rgba(15, 23, 42, .12);
  padding: .45rem;
  min-width: 220px;
  margin-top: 0;
  z-index: 1300;
}

.gnm-base-nav .gnm-main-nav .dropdown-item {
  border-radius: 8px;
  color: #1e293b;
  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(15, 76, 129, .1);
  color: #0f4c81;
}

@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), #eff6ff);
}

.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: #0b2a3a;
  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 #dbe3ef;
  border-radius: 12px;
  box-shadow: 0 16px 34px rgba(15, 23, 42, .12);
  padding: .45rem;
  background: #ffffff;
}

.gnm-login-ribbon .gnm-login-ribbon__language-menu a,
.gnm-login-ribbon .gnm-login-ribbon__language-menu .dropdown-item {
  color: #1e293b !important;
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  border-radius: 8px;
  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: #0f4c81 !important;
  background: rgba(15, 76, 129, .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: 8px;
  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: 14px;
  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 .15s, border-radius .15s, background-color .15s;
}

.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: 8px;
  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: 14px;
  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: 8px;
  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 .2s ease, transform .2s 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 .18s cubic-bezier(.16, 1, .3, 1);
}

.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 0.15s ease-out, background-color 0.15s ease-out;
}

.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 0.15s ease-out, background-color 0.15s ease-out;
}

.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 CardioLab 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 la couche per-site :
   --gnm-primary / --gnm-primary-rgb / --gnm-primary-strong (hover).
   ------------------------------------------------------------------ */
:root {
  --gnm-primary-rgb: 15, 76, 129;
  --gnm-primary-strong: var(--gnm-primary-2, #2563eb);
}

.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 the per-site density
   overrides (cardiolab.css: archives at 3 columns from lg). */
.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: 14px;
  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 .2s cubic-bezier(.22, .61, .36, 1);
}

.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);
}

.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: 14px;
  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;
}

.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 .15s, color .15s;
}

.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; animation-timing-function: cubic-bezier(.165, .84, .44, 1); }
  1%     { opacity: 1; }
  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; animation-timing-function: cubic-bezier(.55, .055, .675, .19); }
  39.33% { transform: translateZ(-40px) scale(.97); opacity: 0; }
  100%   { transform: translateZ(-40px) scale(.97); opacity: 0; }
}

@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;
  }
  .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.
   Le glacage per-site vit dans <site>.css (ref. cardiolab.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);
}
.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 .15s ease-out;
}
.gnm-auth-v__rail-back svg {
  width: 13px;
  height: 13px;
  transition: transform .18s cubic-bezier(.22, .61, .36, 1);
}
.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, each
   site remaps it in its own custom-css (CardioLab -> cardio red).
   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 .18s, color .18s, box-shadow .18s;
}

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

.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-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;
  }
}
