/* theme.css — couche visuelle du site (refonte du 31/10/2026), chargée
   après custom.css sur toutes les pages. Identité conservée : logo, bleu
   #0062cc, vert du logo #19523a et #8cbf43. Typographie Inter (auto-
   hébergée, licence OFL : /fonts/inter/OFL.txt). Contrastes WCAG AA en
   modes clair et sombre (scripts/audit-accessibilite.mjs). */

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url("/fonts/inter/inter-latin-wght-normal.woff2") format("woff2-variations");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url("/fonts/inter/inter-latin-ext-wght-normal.woff2") format("woff2-variations");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

:root {
  --ge-nuit: #0d1b2e;
  --ge-nuit-2: #13294a;
  --ge-vert: #19523a;
  --ge-pousse: #8cbf43;
  --ge-encre: #0f1d33;
  --ge-texte: #2a3444;
  --ge-doux: #566273;
  --ge-surface: #f4f7fb;
  --ge-carte: #ffffff;
  --ge-bord: #e2e8f0;
  --ge-rayon: 14px;
  --ge-ombre: 0 1px 2px rgba(15, 29, 51, .06), 0 8px 24px rgba(15, 29, 51, .06);
  --ge-ombre-forte: 0 2px 4px rgba(15, 29, 51, .08), 0 18px 40px rgba(15, 29, 51, .12);
  --bs-body-font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --bs-body-color: var(--ge-texte);
  --bs-border-radius: .6rem;
}
[data-bs-theme="dark"] {
  --ge-encre: #eef2f8;
  --ge-texte: #d6dde8;
  --ge-doux: #a9b4c4;
  --ge-surface: #121c2b;
  --ge-carte: #172336;
  --ge-bord: #26354c;
  --bs-body-bg: #0e1726;
  --bs-body-color: var(--ge-texte);
  --ge-ombre: 0 1px 2px rgba(0, 0, 0, .3), 0 8px 24px rgba(0, 0, 0, .25);
  --ge-ombre-forte: 0 2px 4px rgba(0, 0, 0, .35), 0 18px 40px rgba(0, 0, 0, .35);
}

body {
  font-family: var(--bs-body-font-family);
  color: var(--ge-texte);
  font-feature-settings: "cv11", "ss01";
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5 {
  color: var(--ge-encre);
  font-weight: 700;
  letter-spacing: -.015em;
  line-height: 1.2;
}
.lead { color: var(--ge-doux); font-weight: 400; }
:focus-visible { outline: 3px solid #4d94ff; outline-offset: 2px; }

/* ----------------------------------------------------------------------
   En-tête : barre collante, fond translucide flouté.
   ---------------------------------------------------------------------- */
.ge-entete {
  position: sticky; top: 0; z-index: 1030;
  background: rgba(255, 255, 255, .86) !important;
  backdrop-filter: saturate(180%) blur(12px);
  -webkit-backdrop-filter: saturate(180%) blur(12px);
  border-bottom: 1px solid var(--ge-bord);
  box-shadow: none !important;
  padding-top: .55rem; padding-bottom: .55rem;
}
[data-bs-theme="dark"] .ge-entete { background: rgba(14, 23, 38, .86) !important; }
.ge-entete .navbar-brand img { height: 38px; width: auto; }
.ge-entete .nav-link {
  color: var(--ge-texte) !important; font-weight: 500; font-size: .95rem;
  padding: .45rem .8rem !important; border-radius: 8px;
}
.ge-entete .nav-link:hover, .ge-entete .nav-link:focus-visible { background: rgba(0, 98, 204, .08); color: var(--ge-primary) !important; }
.ge-entete .nav-link.active { color: var(--ge-primary) !important; }
[data-bs-theme="dark"] .ge-entete .nav-link:hover, [data-bs-theme="dark"] .ge-entete .nav-link.active { color: #8ab4ff !important; }
.ge-entete .dropdown-menu {
  border: 1px solid var(--ge-bord); border-radius: 12px; box-shadow: var(--ge-ombre-forte);
  padding: .4rem; margin-top: .4rem !important;
}
.ge-entete .dropdown-item { border-radius: 8px; padding: .5rem .8rem; font-size: .95rem; }
.ge-entete .ge-cta {
  background: var(--ge-primary-bg) !important; color: #fff !important; border-radius: 999px;
  padding: .45rem 1.1rem !important; margin-left: .4rem; font-weight: 600;
}
.ge-entete .ge-cta:hover, .ge-entete .ge-cta:focus-visible { background: #004a99 !important; color: #fff !important; }
.ge-entete .btn-outline-secondary { border-radius: 999px; border-color: var(--ge-bord); color: var(--ge-texte); }
.ge-entete .btn-outline-secondary:hover { background: var(--ge-surface); color: var(--ge-encre); }
.ge-entete .navbar-toggler { border: 0; }

/* ----------------------------------------------------------------------
   Boutons
   ---------------------------------------------------------------------- */
.btn { font-weight: 600; border-radius: 999px; padding: .55rem 1.25rem; }
.btn-sm { padding: .3rem .85rem; }
.btn-lg { padding: .75rem 1.6rem; font-size: 1.05rem; }
.btn-primary { box-shadow: 0 6px 16px rgba(0, 98, 204, .25); }
.btn-primary:hover { transform: translateY(-1px); }
.ge-btn-clair { background: #fff; color: var(--ge-nuit); border: 0; }
.ge-btn-clair:hover, .ge-btn-clair:focus-visible { background: #e8f0ff; color: var(--ge-nuit); }
.ge-btn-contour { border: 2px solid rgba(255, 255, 255, .7); color: #fff; background: transparent; }
.ge-btn-contour:hover, .ge-btn-contour:focus-visible { background: #fff; color: var(--ge-nuit); }

/* ----------------------------------------------------------------------
   En-tête de page (sections, listes, pages simples)
   ---------------------------------------------------------------------- */
.page-header, .ge-page-tete {
  position: relative; overflow: hidden;
  background:
    radial-gradient(circle at 85% 20%, rgba(140, 191, 67, .22), transparent 45%),
    radial-gradient(circle at 10% 100%, rgba(0, 98, 204, .35), transparent 50%),
    linear-gradient(135deg, var(--ge-nuit) 0%, var(--ge-nuit-2) 100%);
  color: #fff; padding: 3.2rem 0 2.8rem; margin-bottom: 0;
}
.page-header h1, .ge-page-tete h1 { color: #fff; font-weight: 800; font-size: clamp(1.9rem, 4vw, 2.8rem); margin-bottom: .5rem; }
.page-header .lead, .ge-page-tete .lead { color: #d3dceb; max-width: 48rem; }
.ge-surtitre {
  display: inline-block; margin-bottom: .8rem; padding: .25rem .75rem; border-radius: 999px;
  border: 1px solid rgba(140, 191, 67, .55); color: #cfe8b0; font-size: .78rem; font-weight: 600;
  letter-spacing: .08em; text-transform: uppercase;
}
.ge-page-tete .ge-meta { color: #c8d3e3; font-size: .95rem; }
.ge-page-tete .ge-meta .badge { background: rgba(255, 255, 255, .14) !important; color: #fff !important; font-weight: 500; }
.ge-ariane { font-size: .88rem; margin-bottom: .9rem; }
.ge-ariane a { color: #c8d3e3; text-decoration: none; }
.ge-ariane a:hover { color: #fff; text-decoration: underline; }
.ge-ariane span[aria-current] { color: #fff; }
.ge-ariane .sep { color: #8796ad; margin: 0 .45rem; }

/* Corps de page : lecture confortable. */
.ge-corps { padding-top: 3rem; padding-bottom: 4rem; } /* marge latérale du conteneur conservée */
.ge-prose { max-width: 50rem; font-size: 1.05rem; line-height: 1.75; }
/* Adresses longues affichées en texte (sources des hack-tualités) : coupées
   plutôt que de déborder sur mobile. */
main a { overflow-wrap: anywhere; }
/* Mots d'un seul tenant (clés, empreintes) coupés ; tableaux larges
   défilants dans leur propre cadre plutôt que la page entière. */
.ge-prose { overflow-wrap: break-word; }
.ge-prose table { display: block; max-width: 100%; overflow-x: auto; }
.ge-prose h2 { margin-top: 2.4rem; margin-bottom: .9rem; font-size: 1.6rem; }
.ge-prose h3 { margin-top: 1.8rem; margin-bottom: .7rem; font-size: 1.25rem; }
.ge-prose p, .ge-prose ul, .ge-prose ol { margin-bottom: 1.1rem; }
.ge-prose li { margin-bottom: .35rem; }
.ge-prose img { max-width: 100%; height: auto; border-radius: var(--ge-rayon); }
.ge-prose table { width: 100%; margin-bottom: 1.5rem; border-collapse: separate; border-spacing: 0; border: 1px solid var(--ge-bord); border-radius: 12px; overflow: hidden; }
.ge-prose th, .ge-prose td { padding: .7rem .9rem; border-bottom: 1px solid var(--ge-bord); vertical-align: top; }
.ge-prose tr:last-child td { border-bottom: 0; }
.ge-prose th { background: var(--ge-surface); color: var(--ge-encre); }
.ge-prose blockquote { border-left: 4px solid var(--ge-pousse); padding: .4rem 1.2rem; color: var(--ge-doux); background: var(--ge-surface); border-radius: 0 12px 12px 0; }
.ge-prose pre { background: #0d1b2e; color: #e6edf7; padding: 1rem 1.2rem; border-radius: 12px; }
.ge-prose code { font-size: .9em; }
.ge-prose :not(pre) > code { background: var(--ge-surface); padding: .1rem .35rem; border-radius: 6px; color: var(--ge-encre); }
.ge-prose > h1:first-child { display: none; } /* titre déjà dans l'en-tête de page */

/* Anciennes classes des contenus, harmonisées. */
.section-title { font-weight: 800; color: var(--ge-encre); letter-spacing: -.02em; }

/* ----------------------------------------------------------------------
   Cartes
   ---------------------------------------------------------------------- */
.card {
  border: 1px solid var(--ge-bord); border-radius: var(--ge-rayon); background: var(--ge-carte);
  box-shadow: var(--ge-ombre); overflow: hidden;
}
.card.shadow-sm { box-shadow: var(--ge-ombre) !important; }
.card-title a, .ge-carte-lien { color: var(--ge-encre); text-decoration: none; }
.card-title a:hover, .ge-carte-lien:hover { color: var(--ge-primary); }
[data-bs-theme="dark"] .card-title a:hover { color: #8ab4ff; }
.card-blog, .ge-carte { transition: transform .2s ease, box-shadow .2s ease; }
.card-blog:hover, .ge-carte:hover { transform: translateY(-4px); box-shadow: var(--ge-ombre-forte); }
/* Carte entièrement cliquable : le lien du titre couvre la carte. */
.ge-carte { position: relative; height: 100%; }
.ge-carte .ge-lien-etendu::after { content: ""; position: absolute; inset: 0; }
.ge-carte .card-body { padding: 1.4rem 1.4rem 1.2rem; }
.ge-carte h3, .ge-carte h2 { font-size: 1.12rem; margin-bottom: .45rem; }
.ge-carte p { color: var(--ge-doux); margin-bottom: .8rem; }
.ge-pastille {
  display: inline-flex; align-items: center; gap: .35rem; padding: .2rem .65rem; border-radius: 999px;
  background: rgba(0, 98, 204, .09); color: #004a99; font-size: .8rem; font-weight: 600;
}
[data-bs-theme="dark"] .ge-pastille { background: rgba(138, 180, 255, .14); color: #b9d2ff; }
.ge-pastille-verte { background: rgba(25, 82, 58, .1); color: var(--ge-vert); }
[data-bs-theme="dark"] .ge-pastille-verte { background: rgba(140, 191, 67, .16); color: #c5e39b; }
.ge-icone {
  display: inline-grid; place-items: center; width: 2.9rem; height: 2.9rem; border-radius: 12px;
  background: linear-gradient(135deg, #e7f0ff, #eef7e3); color: var(--ge-primary); font-size: 1.25rem; margin-bottom: 1rem;
}
[data-bs-theme="dark"] .ge-icone { background: linear-gradient(135deg, #1b2c47, #1d3324); color: #8ab4ff; }
.ge-suite { font-weight: 600; font-size: .92rem; color: var(--ge-primary); }
[data-bs-theme="dark"] .ge-suite { color: #8ab4ff; }
.ge-suite i { transition: transform .2s; }
.ge-carte:hover .ge-suite i { transform: translateX(3px); }

/* Filtres (catalogue). */
.ge-filtres { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: 1.6rem; }
.ge-filtre {
  border: 1px solid var(--ge-bord); background: var(--ge-carte); color: var(--ge-texte); border-radius: 999px;
  padding: .35rem .9rem; font-size: .9rem; font-weight: 500;
}
.ge-filtre[aria-pressed="true"] { background: var(--ge-primary-bg); border-color: var(--ge-primary-bg); color: #fff; }

/* Pagination */
.pagination { gap: .35rem; }
.pagination .page-link { border-radius: 999px !important; border-color: var(--ge-bord); padding: .45rem 1rem; }

/* ----------------------------------------------------------------------
   Sections de l'accueil et blocs réutilisables
   ---------------------------------------------------------------------- */
.ge-section { padding: 4.5rem 0; }
.ge-section-surface { background: var(--ge-surface); }
.ge-section-titre { font-size: clamp(1.7rem, 3vw, 2.3rem); font-weight: 800; margin-bottom: .6rem; }
.ge-section-intro { color: var(--ge-doux); font-size: 1.1rem; max-width: 44rem; margin-bottom: 2.4rem; }

.ge-heros {
  position: relative; overflow: hidden; color: #fff;
  background:
    linear-gradient(rgba(255, 255, 255, .035) 1px, transparent 1px) 0 0 / 34px 34px,
    linear-gradient(90deg, rgba(255, 255, 255, .035) 1px, transparent 1px) 0 0 / 34px 34px,
    radial-gradient(circle at 80% 15%, rgba(140, 191, 67, .25), transparent 42%),
    radial-gradient(circle at 15% 95%, rgba(0, 98, 204, .45), transparent 50%),
    linear-gradient(135deg, var(--ge-nuit) 0%, var(--ge-nuit-2) 100%);
  padding: 5.5rem 0 5rem;
}
.ge-heros h1 { color: #fff; font-size: clamp(2.4rem, 5.4vw, 4rem); font-weight: 800; letter-spacing: -.03em; line-height: 1.05; margin-bottom: 1.2rem; }
.ge-heros h1 em { font-style: normal; background: linear-gradient(90deg, #8ab4ff, #b6e07a); -webkit-background-clip: text; background-clip: text; color: transparent; }
.ge-heros .lead { color: #d3dceb; font-size: 1.2rem; max-width: 40rem; }
.ge-heros-actions { display: flex; flex-wrap: wrap; gap: .8rem; margin-top: 2rem; }
.ge-preuves { list-style: none; padding: 0; margin: 2.4rem 0 0; display: flex; flex-wrap: wrap; gap: .6rem 1.4rem; color: #c8d3e3; font-size: .95rem; }
.ge-preuves i { color: var(--ge-pousse); margin-right: .4rem; }

/* Carte « prochaine session » du héros. */
.ge-carte-session {
  background: rgba(255, 255, 255, .07); border: 1px solid rgba(255, 255, 255, .14); border-radius: 18px;
  padding: 1.6rem; backdrop-filter: blur(6px); color: #e6edf7;
}
.ge-carte-session .ge-surtitre { margin-bottom: .6rem; }
.ge-carte-session h2 { color: #fff; font-size: 1.5rem; margin-bottom: .4rem; }
.ge-carte-session p { color: #c8d3e3; }
.ge-carte-session .ge-date { color: #fff; font-weight: 700; font-size: 1.1rem; }
.ge-carte-session .ge-date span::first-letter { text-transform: uppercase; }
.ge-ateliers-mini { display: flex; gap: .35rem; margin: 1rem 0 1.2rem; }
.ge-ateliers-mini span {
  flex: 1; height: 6px; border-radius: 999px;
}

/* Bandeau sombre réutilisable (EBIOS, Swiiptel, appel final). */
.ge-bandeau { background: linear-gradient(135deg, var(--ge-nuit) 0%, var(--ge-nuit-2) 100%); color: #e6edf7; border-radius: 22px; padding: 3rem; position: relative; overflow: hidden; }
.ge-bandeau::after { content: ""; position: absolute; right: -80px; top: -80px; width: 280px; height: 280px; border-radius: 50%; background: radial-gradient(circle, rgba(140, 191, 67, .28), transparent 65%); }
.ge-bandeau h2 { color: #fff; }
.ge-bandeau p { color: #c8d3e3; }
.ge-bandeau-vert { background: linear-gradient(135deg, #10301f 0%, var(--ge-vert) 100%); }

/* Chiffres clés. */
.ge-chiffres { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; }
.ge-chiffre { background: var(--ge-carte); border: 1px solid var(--ge-bord); border-radius: var(--ge-rayon); padding: 1.3rem; text-align: center; box-shadow: var(--ge-ombre); }
.ge-chiffre strong { display: block; font-size: 2rem; font-weight: 800; color: var(--ge-encre); letter-spacing: -.02em; }
.ge-chiffre span { color: var(--ge-doux); font-size: .92rem; }

/* Logos partenaires. */
.ge-logos { display: grid; grid-template-columns: repeat(6, 1fr); gap: 1rem; align-items: center; }
.ge-logos a { display: grid; place-items: center; height: 84px; padding: .8rem; border-radius: 12px; background: #fff; border: 1px solid var(--ge-bord); transition: box-shadow .2s, transform .2s; }
.ge-logos a:hover { box-shadow: var(--ge-ombre-forte); transform: translateY(-2px); }
.ge-logos img { max-height: 52px; max-width: 100%; width: auto; filter: grayscale(100%); opacity: .8; transition: filter .2s, opacity .2s; }
.ge-logos a:hover img, .ge-logos a:focus-visible img { filter: none; opacity: 1; }

/* Cartes d'actualité. */
.news-card .card-body { padding: 1.1rem 1.2rem 1.2rem; }
.news-card .card-title { font-size: 1rem; line-height: 1.4; }
.news-card .card-title a { color: var(--ge-encre); }
.news-thumb-cover { aspect-ratio: 16 / 9; object-fit: cover; }

/* ----------------------------------------------------------------------
   Pied de page
   ---------------------------------------------------------------------- */
.footer.ge-pied { background: var(--ge-nuit) !important; color: #c8d3e3; }
.ge-pied .ge-pied-corps { padding: 3.5rem .75rem 2.5rem; } /* marge latérale du conteneur : sinon la rangée déborde */
.ge-pied h2 { color: #fff; font-size: .95rem; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; margin-bottom: 1rem; }
.ge-pied-corps a, .ge-pied .footer-copyright a { color: #c8d3e3 !important; text-decoration: none; }
.ge-pied-corps a:hover, .ge-pied-corps a:focus-visible, .ge-pied .footer-copyright a:hover, .ge-pied .footer-copyright a:focus-visible { color: #fff !important; text-decoration: underline; }
.ge-pied ul { list-style: none; padding: 0; margin: 0; }
.ge-pied li { margin-bottom: .5rem; }
.ge-pied .ge-pied-marque img { height: 40px; width: auto; background: #fff; border-radius: 10px; padding: .35rem .6rem; }
.ge-pied .ge-pied-marque p { margin-top: 1rem; max-width: 22rem; font-size: .95rem; }
.ge-pied .ge-reseaux { display: flex; gap: .6rem; margin-top: 1rem; }
.ge-pied .ge-reseaux a { display: inline-grid; place-items: center; width: 2.3rem; height: 2.3rem; border-radius: 50%; background: rgba(255, 255, 255, .08); }
.ge-pied .ge-reseaux a:hover { background: rgba(255, 255, 255, .18); text-decoration: none; }
.ge-pied .footer-copyright { background: rgba(0, 0, 0, .2) !important; border-top: 1px solid rgba(255, 255, 255, .08) !important; color: #aab6c8; font-size: .88rem; padding: 1rem 0; margin-top: 0 !important; }
.ge-pied .fa-rss { color: #ffc107 !important; }

@media (max-width: 991.98px) {
  /* Gouttières des rangées ramenées à la marge du conteneur (les rangées
     g-5 débordaient de 12 px sur mobile). */
  .row { --bs-gutter-x: 1.5rem; }
  .ge-chiffres { grid-template-columns: repeat(2, 1fr); }
  .ge-logos { grid-template-columns: repeat(3, 1fr); }
  .ge-entete .ge-cta { display: inline-block; margin: .4rem 0 0; }
  .ge-bandeau { padding: 2rem; }
}
@media (max-width: 575.98px) {
  .ge-heros { padding: 3.5rem 0; }
  .ge-section { padding: 3rem 0; }
  .ge-logos { grid-template-columns: repeat(2, 1fr); }
}
@media (prefers-reduced-motion: reduce) {
  .card-blog, .ge-carte, .ge-logos a, .btn-primary { transition: none; }
  .card-blog:hover, .ge-carte:hover, .ge-logos a:hover, .btn-primary:hover { transform: none; }
}

/* Pages de contenu libre (à propos, contact, fiches) : pleine largeur du
   conteneur, même typographie. */
.ge-prose-large { max-width: none; }
.ge-prose-large > p, .ge-prose-large > ul, .ge-prose-large > ol, .ge-prose-large > h2, .ge-prose-large > h3, .ge-prose-large > blockquote, .ge-prose-large > table { max-width: 52rem; }

/* Bouton Contact de l'en-tête : reste lisible quand c'est la page courante. */
.ge-entete .nav-link.ge-cta.active, [data-bs-theme="dark"] .ge-entete .nav-link.ge-cta,
[data-bs-theme="dark"] .ge-entete .nav-link.ge-cta.active { color: #fff !important; }

/* Logo (texte vert foncé) lisible en mode sombre. */
[data-bs-theme="dark"] .ge-entete .navbar-brand img { background: #fff; border-radius: 8px; padding: 2px 6px; }

/* Origine du nom, sous le titre de l'accueil. */
.ge-gecko { color: #cfe8b0; font-size: 1.05rem; font-style: italic; margin: -.4rem 0 1.2rem; }
.ge-gecko span[lang="ja"] { font-style: normal; }

/* Formations en partenariat (HS2). */
.ge-pastille-partenaire { background: rgba(122, 76, 0, .1); color: #6b4300; }
[data-bs-theme="dark"] .ge-pastille-partenaire { background: rgba(255, 193, 7, .16); color: #ffd98a; }
