.chargement{
  display: inline-block;
  padding:0 0 0 21px;
  height: 17px;
  background: url('images/spinner.gif') 0 0 no-repeat;
}
.loader-page_view{
    position: absolute;
    top:0;right:0;bottom:0;left:0;
    display: block;
    opacity: 0.85;
    background: #ccc url('images/spinner.gif') 50% 15% no-repeat;
    z-index: 100000;
}
.preload{
    width: 100px;
    height: 50px;
    background: #e5e5e5 url('images/spinner.gif') 50% 50% no-repeat;
}
.loader{
    display: inline-block;
    width: 17px;
    height: 17px;
    background: url('images/spinner.gif') 0 0 no-repeat;
    text-indent: 20px;
}
.loader::after{
  content:'Chargement...';
}
.loader2{
    display:block;
    position: absolute;
    top: 2px;left:2px;right:2px;bottom: 2px;
    z-index: 9000;
    background: #f5f5f5 url('images/spinner.gif') 45% 45% no-repeat;
}
#alert{
  z-index: 100000;
  top: 40%;
  left: 40%;
  display:none;
  border-radius: 7px;
  padding: 4px 12px;
  font-size: 10px;
  font-style: italic;
  transition-property:opacity;
  -webkit-transition-property:opacity;
  -moz-transition-property:opacity;
  -o-transition-property:opacity;

  transition-duration:.4s;
  -webkit-transition-duration:.4s;
  -moz-transition-duration:.4s;
  -o-transition-duration:.4s;
  -ms-transition-duration:.4s;

}
.alertsuccess{
  background: #c6e8e8;
  font-style: italic;
  box-shadow: 1px 1px #333;
}
.alertdanger{
  opacity:1;
  background: #ffcccc;
  font-style: italic;
  box-shadow: 2px 2px #333;
}
.hiddener{
  opacity: 0.3;
  background: #f5f5f5;
}
.cleaner{
	clear: both;
}
a,link{
	cursor: pointer;
}
/* Mouvement réduit : neutralise animations et transitions pour les utilisateurs qui le demandent (a11y). */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; }
}

/* Contrastes AA (WCAG 1.4.3) : teintes assombries, même famille de couleurs que le design d'origine. */
.c_link { color: #0062cc; }
.c_card-subtitle, .c_section-studycase .c_card-subtitle { color: #5f6272; }

/* ---- Contenus pilotés par le tableau de bord : projets, actualités, entreprises ---- */
.pj { padding: 150px 0 150px; color: #10222e; }
.pj-crumbs { font-size: 14px; margin-bottom: 28px; color: #4a5a6a; }
.pj-crumbs a { color: #006f9f; }
.pj-title { font-size: clamp(2rem, 4vw, 3.25rem); line-height: 1.1; color: #0a2540; margin: 0 0 12px; text-wrap: balance; }
.pj-subtitle { font-size: 1.15rem; color: #4a5a6a; margin: 0 0 36px; }
.pj-cover { display: block; width: 100%; max-height: 440px; object-fit: cover; border-radius: 6px; margin: 0 0 44px; background: #c4e3f2; }
.pj-grid { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 64px; align-items: start; }
.pj-text, .pj-article { max-width: 68ch; }
.pj-text p, .pj-article p { font-size: 1.05rem; line-height: 1.75; margin: 0 0 1.2em; }
.pj-lead { font-size: 1.3rem !important; line-height: 1.55 !important; color: #0a2540; }
.pj-facts { margin: 0; padding-left: 28px; border-left: 2px solid #c4e3f2; }
.pj-facts dt { font-size: .9rem; font-weight: 700; color: #4a5a6a; margin-top: 20px; }
.pj-facts dt:first-child { margin-top: 0; }
.pj-facts dd { margin: 4px 0 0; font-size: 1.05rem; }
.pj-facts a, .pj-cta a:not(.c_btn) { color: #006f9f; text-decoration: underline; }
.pj-cta { margin-top: 56px; }
.pj-empty { color: #4a5a6a; font-size: 1.1rem; padding: 24px 0; }
.clients-strip { padding: 48px 0; }
.clients-title { font-size: 1.3rem; color: #0a2540; margin: 0 0 24px; }
.clients-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; }
.clients-list li { display: flex; align-items: center; justify-content: center; height: 76px; padding: 10px 16px; border: 1px solid #e3e8ee; border-radius: 10px; background: #fff; }
.clients-list img { max-height: 40px; max-width: 120px; width: auto; height: auto; object-fit: contain; display: block; filter: grayscale(1); opacity: .75; transition: filter .2s, opacity .2s; }
.clients-list li:hover img { filter: none; opacity: 1; }
.clients-list a { display: flex; width: 100%; height: 100%; align-items: center; justify-content: center; }
.clients-list span { font-weight: 700; font-size: 13px; letter-spacing: .02em; line-height: 1.25; text-align: center; color: #3b4a5c; overflow-wrap: anywhere; }
@media (max-width: 860px) {
  .pj { padding-top: 110px; }
  .pj-grid { grid-template-columns: 1fr; gap: 32px; }
  .pj-facts { padding-left: 0; border-left: 0; border-top: 2px solid #c4e3f2; padding-top: 20px; }
}


.breadcrumb-nav .breadcrumb-item a { color: #006f9f !important; }
.c_section-studycase .c_card { position: relative; margin-bottom: 48px; }
.c_section-studycase .c_card-link { color: inherit; text-decoration: none; }
.c_section-studycase .c_card-link::after { content: ""; position: absolute; inset: 0; border-radius: 10px; }
.c_section-studycase .c_card:focus-within { outline: 3px solid #02b4ff; outline-offset: 2px; }
.c_section-studycase .c_card-link:focus-visible { outline: none; }
@media (max-width: 575px) { .c_section-studycase .c_card { margin-bottom: 28px; } }

/* Article : lecture confortable, titres, listes, citations, code façon éditeur */
.pj-post .pj-text { max-width: 72ch; }
.pj-post .pj-lead { border-bottom: 1px solid #c4e3f2; padding-bottom: 1.2em; margin-bottom: 1.6em; }
.pj-post .pj-text h2 { font-size: 1.7rem; color: #0a2540; margin: 2.2em 0 .6em; scroll-margin-top: 110px; line-height: 1.25; }
.pj-post .pj-text h3 { font-size: 1.3rem; color: #0a2540; margin: 1.8em 0 .5em; scroll-margin-top: 110px; }
.pj-post .pj-text ul, .pj-post .pj-text ol { margin: 0 0 1.4em; padding-left: 1.4em; line-height: 1.75; font-size: 1.05rem; }
.pj-post .pj-text li { margin-bottom: .4em; }
.pj-post .pj-text blockquote { margin: 1.8em 0; padding: 1em 1.4em; background: #eef8fd; border-radius: 8px; color: #0a2540; font-size: 1.12rem; line-height: 1.6; }
.pj-post .pj-text :not(pre) > code { background: #eef2f6; color: #0a2540; padding: .12em .4em; border-radius: 4px; font-size: .92em; }
.pj-post .pj-text a { color: #006f9f; text-decoration: underline; }
.pj-post .pj-text hr { border: 0; border-top: 1px solid #c4e3f2; margin: 2.4em 0; }
.pj-toc { margin: 4px 0 0; padding-left: 1.1em; }
.pj-toc li { margin-bottom: 6px; }
.pj-toc a { color: #006f9f; text-decoration: underline; }
.read-progress { position: fixed; top: 0; left: 0; right: 0; height: 4px; z-index: 20; background: transparent; }
.read-progress div { height: 100%; background: #ff5d3a; transform-origin: left; transform: scaleX(var(--p, 0)); }
.code-editor { margin: 1.8em 0; border-radius: 10px; overflow: hidden; background: #0d1b2a; box-shadow: 0 8px 24px rgba(10, 37, 64, .22); }
.code-bar { display: flex; align-items: center; gap: 12px; padding: 10px 14px; background: #16293d; color: #b9c9d9; font: 600 .82rem/1 ui-monospace, SFMono-Regular, Menlo, monospace; }
.code-dots { display: inline-flex; gap: 6px; }
.code-dots i { width: 11px; height: 11px; border-radius: 50%; background: #ff5f57; }
.code-dots i:nth-child(2) { background: #febc2e; }
.code-dots i:nth-child(3) { background: #28c840; }
.code-name { flex: 1; text-align: center; }
.code-copy { background: transparent; color: #d7e4f0; border: 1px solid #3a5470; border-radius: 6px; padding: 6px 12px; min-height: 32px; font: inherit; cursor: pointer; }
.code-copy:hover { background: #22405c; }
.code-editor pre { margin: 0; padding: 16px 0; overflow-x: auto; color: #e6edf5; font: .92rem/1.7 ui-monospace, SFMono-Regular, Menlo, monospace; background: transparent; }
.code-editor pre:focus-visible { outline: 3px solid #02b4ff; outline-offset: -3px; }
.code-editor code { display: block; min-width: max-content; }
.code-line { display: block; padding-right: 20px; }
.code-no { display: inline-block; width: 3.2em; padding-right: 1.1em; text-align: right; color: #6f87a0; user-select: none; }
@media (prefers-reduced-motion: reduce) { .read-progress div { transition: none; } }

.news-pagination { padding: 8px 0 48px; }
.news-pagination ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; }
.news-pagination a, .news-pagination span { display: inline-flex; min-width: 44px; min-height: 44px; padding: 0 14px; align-items: center; justify-content: center; border-radius: 8px; border: 1px solid #c4e3f2; color: #006f9f; text-decoration: none; font-weight: 700; background: #fff; }
.news-pagination a:hover { border-color: #02b4ff; background: #eef8fd; }
.news-pagination a:focus-visible { outline: 3px solid #02b4ff; outline-offset: 2px; }
.news-pagination span[aria-current] { background: #0a2540; border-color: #0a2540; color: #fff; }

/* Chargement de la pagination : cartes en squelette, barre de progression, spinner sur le lien cliqué */
.news-pagination a { gap: 8px; }
.news-spin { width: 16px; height: 16px; border: 2px solid #c4e3f2; border-top-color: #006f9f; border-radius: 50%; animation: news-spin .7s linear infinite; }
.news-status { min-height: 1.5em; margin: 14px 0 0; text-align: center; color: #4a5a6a; }
html[data-news-loading] .c_section-studycase .c_card { pointer-events: none; background: linear-gradient(100deg, #eef3f7 30%, #f9fcfe 50%, #eef3f7 70%) 0 0 / 200% 100%; animation: news-shimmer 1.1s linear infinite; }
html[data-news-loading] .c_section-studycase .c_card > * { visibility: hidden; }
html[data-news-loading] .news-pagination a { pointer-events: none; opacity: .6; }
html[data-news-loading]::before { content: ""; position: fixed; top: 0; left: 0; height: 3px; width: 35%; background: #ff5d3a; z-index: 30; animation: news-bar 1s ease-in-out infinite; }
@keyframes news-spin { to { transform: rotate(360deg); } }
@keyframes news-shimmer { to { background-position: -200% 0; } }
@keyframes news-bar { from { transform: translateX(-100%); } to { transform: translateX(300%); } }
@media (prefers-reduced-motion: reduce) {
  .news-spin, html[data-news-loading] .c_section-studycase .c_card, html[data-news-loading]::before { animation: none; }
  html[data-news-loading]::before { width: 100%; }
}

.b_header .c_main-title + .header-paragraph { margin-top: 20px; }

/* ---- Formulaires publics : écran de chargement, retours clairs, champs en erreur ---- */
.fx-lock { overflow: hidden; }
.fx-overlay { position: fixed; inset: 0; z-index: 2000; display: flex; align-items: center; justify-content: center; padding: 16px; background: rgba(14, 42, 71, 0.68); animation: fx-fade .18s ease-out; }
.fx-card { width: 100%; max-width: 380px; padding: 32px 28px 28px; text-align: center; background: #fff; border-radius: 18px; box-shadow: 0 24px 60px rgba(14, 42, 71, .35); font-family: inherit; }
.fx-title { margin: 18px 0 6px; font-size: 20px; font-weight: 700; color: #0e2a47; }
.fx-text { margin: 0 0 4px; font-size: 14px; line-height: 1.5; color: #4a5b6c; }
.fx-spinner { width: 56px; height: 56px; margin: 0 auto; border-radius: 50%; border: 4px solid #ffe3db; border-top-color: #fe6039; animation: fx-spin .8s linear infinite; }
.fx-steps { display: flex; gap: 6px; justify-content: center; margin-top: 20px; }
.fx-steps span { width: 34px; height: 4px; border-radius: 2px; background: #e6ebf0; transition: background .3s; }
.fx-steps .fx-done { background: #fe6039; }
.fx-icon { width: 64px; height: 64px; margin: 0 auto; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 32px; font-weight: 700; color: #fff; }
.fx-card--success .fx-icon { background: #1f9d6b; animation: fx-pop .3s ease-out; }
.fx-card--error .fx-icon { background: #d64545; }
.fx-close { margin-top: 20px; min-width: 190px; cursor: pointer; }
.fx-banner { margin: 0 0 16px; padding: 12px 14px; border-radius: 8px; background: #fdecec; color: #8f2424; border: 1px solid #f3bcbc; font-size: 14px; }
.fx-error { margin: 6px 0 14px; font-size: 13px; line-height: 1.4; color: #c13030; }
.mj-block input, .mj-block select, .mj-block textarea { scroll-margin-top: 110px; }
.c_form_input.is-invalid, input.is-invalid, textarea.is-invalid, select.is-invalid { border-color: #d64545 !important; box-shadow: 0 0 0 3px rgba(214, 69, 69, .15); }
@keyframes fx-spin { to { transform: rotate(360deg); } }
@keyframes fx-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes fx-pop { 0% { transform: scale(.6); } 100% { transform: scale(1); } }
@media (prefers-reduced-motion: reduce) { .fx-overlay, .fx-icon { animation: none; } .fx-spinner { animation-duration: 2.4s; } }
