/*
 * 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-radius-sm: 8px;
  --gnm-radius-md: 10px;
  --gnm-radius-lg: 14px;
  --bs-card-border-radius: var(--gnm-radius-md);

  /* ---- 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: a per-site sheet
     retints --gnm-shadow-rgb to its own dark and the whole elevation family
     follows. Pure black is never used - it greys a coloured surface instead
     of darkening it. ------------------------------------------------------ */
  --gnm-shadow-rgb: 15, 23, 42;

  /* 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: var(--gnm-primary-2, #2563eb);
  --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. Per-site sheets do this on their own dark blocks. */

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 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(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 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: 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 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 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 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: 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;
  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.
   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);
}
/* 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, 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 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: 14px;
  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(--cl-space, #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;
  }
}
