/* ==========================================================================
   HÔPITAL LAQUINTINIE DE DOUALA — Template sur mesure
   Feuille de style principale
   Palette : bleu ciel / noir clair / blanc  —  Mode clair & sombre
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. VARIABLES DE THÈME
   -------------------------------------------------------------------------- */
:root {
  /* Couleurs de marque */
  --hl-sky: #0ea5e9;
  --hl-sky-dark: #0284c7;
  --hl-sky-light: #38bdf8;
  --hl-sky-soft: #e0f2fe;
  --hl-ink: #1e293b;          /* noir clair */
  --hl-ink-soft: #334155;
  --hl-green: #10b981;
  --hl-amber: #f59e0b;
  --hl-red: #ef4444;
  --hl-violet: #8b5cf6;

  /* Surfaces (mode clair) */
  --bg-body: #f5f8fb;
  --bg-surface: #ffffff;
  --bg-surface-2: #f1f5f9;
  --bg-topbar: #0f172a;
  --text-main: #1e293b;
  --text-muted: #64748b;
  --border-color: #e2e8f0;
  --shadow-sm: 0 1px 2px rgba(15, 23, 42, .06);
  --shadow-md: 0 6px 18px rgba(15, 23, 42, .08);
  --shadow-lg: 0 18px 45px rgba(15, 23, 42, .12);

  --radius-sm: 10px;
  --radius: 16px;
  --radius-lg: 24px;

  --font-title: "Poppins", "Segoe UI", system-ui, sans-serif;
  --font-body: "Inter", "Segoe UI", system-ui, sans-serif;
}

[data-theme="dark"] {
  --bg-body: #0b1220;
  --bg-surface: #131c2e;
  --bg-surface-2: #1b2740;
  --bg-topbar: #060b16;
  --text-main: #e2e8f0;
  --text-muted: #94a3b8;
  --border-color: #24334d;
  --hl-sky-soft: #12283c;
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, .4);
  --shadow-md: 0 6px 18px rgba(0, 0, 0, .45);
  --shadow-lg: 0 18px 45px rgba(0, 0, 0, .55);
}

/* --------------------------------------------------------------------------
   2. BASE
   -------------------------------------------------------------------------- */
* { scroll-behavior: smooth; }

body {
  font-family: var(--font-body);
  background-color: var(--bg-body);
  color: var(--text-main);
  font-size: 15px;
  line-height: 1.65;
  transition: background-color .3s ease, color .3s ease;
}

h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5 {
  font-family: var(--font-title);
  font-weight: 700;
  color: var(--text-main);
  letter-spacing: -.02em;
}

a { text-decoration: none; color: var(--hl-sky-dark); }
a:hover { color: var(--hl-sky); }
p { color: var(--text-muted); }

.text-sky { color: var(--hl-sky) !important; }
.text-ink { color: var(--text-main) !important; }
.text-soft { color: var(--text-muted) !important; }
.bg-sky { background-color: var(--hl-sky) !important; }
.bg-sky-soft { background-color: var(--hl-sky-soft) !important; }
.bg-surface { background-color: var(--bg-surface) !important; }
.bg-surface-2 { background-color: var(--bg-surface-2) !important; }
.fw-800 { font-weight: 800 !important; }
.fs-13 { font-size: 13px !important; }
.fs-14 { font-size: 14px !important; }
.rounded-hl { border-radius: var(--radius) !important; }

/* --------------------------------------------------------------------------
   3. PRELOADER
   -------------------------------------------------------------------------- */
#hl-preloader {
  position: fixed;
  inset: 0;
  z-index: 20000;
  background: var(--bg-body);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 18px;
  transition: opacity .5s ease, visibility .5s ease;
}
#hl-preloader.is-hidden { opacity: 0; visibility: hidden; }
.hl-spinner {
  width: 62px; height: 62px;
  border-radius: 50%;
  border: 5px solid var(--hl-sky-soft);
  border-top-color: var(--hl-sky);
  animation: hl-spin .8s linear infinite;
}
.hl-preloader-brand {
  font-family: var(--font-title);
  font-weight: 800;
  letter-spacing: .18em;
  text-transform: uppercase;
  font-size: 12px;
  color: var(--text-muted);
}
@keyframes hl-spin { to { transform: rotate(360deg); } }

/* --------------------------------------------------------------------------
   4. TOPBAR + NAVBAR
   -------------------------------------------------------------------------- */
.hl-topbar {
  background: var(--bg-topbar);
  color: #cbd5e1;
  font-size: 13px;
  padding: 8px 0;
}
.hl-topbar a { color: #cbd5e1; }
.hl-topbar a:hover { color: var(--hl-sky-light); }
.hl-topbar .hl-sep { color: #334155; }
.hl-flag {
  width: 22px; height: 15px; border-radius: 3px; object-fit: cover;
  display: inline-block; vertical-align: -2px;
}
.hl-flag-btn {
  background: none; border: 0; padding: 2px 5px; border-radius: 4px;
  line-height: 1; opacity: .6; transition: opacity .2s;
}
.hl-flag-btn.active, .hl-flag-btn:hover { opacity: 1; }

.hl-navbar {
  background: var(--bg-surface);
  box-shadow: var(--shadow-sm);
  padding: 10px 0;
  position: sticky; top: 0; z-index: 1030;
  border-bottom: 1px solid var(--border-color);
}
.hl-logo { display: flex; align-items: center; gap: 12px; }
.hl-logo-mark {
  width: 46px; height: 46px; border-radius: 14px;
  background: linear-gradient(135deg, var(--hl-sky), var(--hl-sky-dark));
  color: #fff; display: grid; place-items: center;
  font-size: 22px; box-shadow: 0 6px 14px rgba(14, 165, 233, .35);
}
.hl-logo-text { line-height: 1.15; }
.hl-logo-text strong {
  display: block; font-family: var(--font-title); font-weight: 800;
  font-size: 17px; color: var(--text-main);
}
.hl-logo-text span { font-size: 11.5px; color: var(--text-muted); letter-spacing: .04em; }

.hl-navbar .nav-link {
  color: var(--text-main); font-weight: 600; font-size: 14.5px;
  padding: 8px 14px !important; border-radius: 9px; transition: all .2s;
}
.hl-navbar .nav-link:hover, .hl-navbar .nav-link.active {
  color: var(--hl-sky-dark); background: var(--hl-sky-soft);
}
.hl-navbar .dropdown-menu {
  border: 1px solid var(--border-color); border-radius: var(--radius-sm);
  box-shadow: var(--shadow-md); background: var(--bg-surface); padding: 8px;
}
.hl-navbar .dropdown-item {
  color: var(--text-main); border-radius: 8px; font-size: 14px; padding: 8px 12px;
}
.hl-navbar .dropdown-item:hover { background: var(--hl-sky-soft); color: var(--hl-sky-dark); }

.hl-theme-toggle {
  width: 40px; height: 40px; border-radius: 50%;
  border: 1px solid var(--border-color); background: var(--bg-surface-2);
  color: var(--text-main); display: grid; place-items: center; transition: all .25s;
}
.hl-theme-toggle:hover { background: var(--hl-sky); color: #fff; border-color: var(--hl-sky); }
[data-theme="dark"] .hl-icon-sun { display: inline-block; }
[data-theme="dark"] .hl-icon-moon { display: none; }
.hl-icon-sun { display: none; }

/* --------------------------------------------------------------------------
   5. BOUTONS
   -------------------------------------------------------------------------- */
.btn { font-weight: 600; border-radius: 10px; padding: 10px 20px; font-size: 14.5px; }
.btn-sky {
  background: linear-gradient(135deg, var(--hl-sky), var(--hl-sky-dark));
  color: #fff; border: 0; box-shadow: 0 6px 16px rgba(14, 165, 233, .3);
}
.btn-sky:hover { color: #fff; transform: translateY(-2px); box-shadow: 0 10px 22px rgba(14, 165, 233, .4); }
.btn-outline-sky { border: 1.5px solid var(--hl-sky); color: var(--hl-sky-dark); background: transparent; }
.btn-outline-sky:hover { background: var(--hl-sky); color: #fff; }
.btn-ink { background: var(--hl-ink); color: #fff; border: 0; }
.btn-ink:hover { background: #0f172a; color: #fff; }
.btn-soft { background: var(--bg-surface-2); color: var(--text-main); border: 1px solid var(--border-color); }
.btn-soft:hover { background: var(--hl-sky-soft); color: var(--hl-sky-dark); }
.btn-sm { padding: 6px 13px; font-size: 13px; border-radius: 8px; }
.btn-lg { padding: 13px 28px; font-size: 16px; border-radius: 12px; }

/* --------------------------------------------------------------------------
   6. CARTES & SECTIONS
   -------------------------------------------------------------------------- */
.hl-section { padding: 74px 0; }
.hl-section-sm { padding: 46px 0; }
.hl-eyebrow {
  display: inline-flex; align-items: center; gap: 8px;
  background: var(--hl-sky-soft); color: var(--hl-sky-dark);
  font-size: 12.5px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  padding: 6px 14px; border-radius: 100px; margin-bottom: 14px;
}
.hl-title { font-size: clamp(26px, 3.4vw, 38px); margin-bottom: 12px; }
.hl-subtitle { color: var(--text-muted); max-width: 640px; }

.hl-card {
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  transition: transform .25s ease, box-shadow .25s ease;
}
.hl-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); }
.hl-card-body { padding: 24px; }
.hl-card-static:hover { transform: none; box-shadow: var(--shadow-sm); }

.hl-icon-box {
  width: 54px; height: 54px; border-radius: 15px;
  display: grid; place-items: center; font-size: 24px;
  background: var(--hl-sky-soft); color: var(--hl-sky-dark); margin-bottom: 16px;
}
.hl-icon-box.green { background: rgba(16,185,129,.12); color: var(--hl-green); }
.hl-icon-box.amber { background: rgba(245,158,11,.12); color: var(--hl-amber); }
.hl-icon-box.violet { background: rgba(139,92,246,.12); color: var(--hl-violet); }
.hl-icon-box.red { background: rgba(239,68,68,.12); color: var(--hl-red); }

/* --------------------------------------------------------------------------
   7. HERO / BANNIÈRE
   -------------------------------------------------------------------------- */
.hl-hero {
  position: relative; overflow: hidden;
  background: linear-gradient(120deg, #0c4a6e 0%, #0284c7 45%, #38bdf8 100%);
  color: #fff; padding: 84px 0 96px;
}
.hl-hero::before, .hl-hero::after {
  content: ""; position: absolute; border-radius: 50%;
  background: rgba(255, 255, 255, .09);
}
.hl-hero::before { width: 420px; height: 420px; top: -140px; right: -90px; }
.hl-hero::after { width: 260px; height: 260px; bottom: -110px; left: -70px; }
.hl-hero .container { position: relative; z-index: 2; }
.hl-hero h1 { color: #fff; font-size: clamp(30px, 4.6vw, 50px); line-height: 1.14; }
.hl-hero p { color: rgba(255, 255, 255, .88); font-size: 17px; }
.hl-hero-badge {
  display: inline-flex; align-items: center; gap: 8px;
  background: rgba(255,255,255,.16); border: 1px solid rgba(255,255,255,.28);
  color: #fff; padding: 7px 16px; border-radius: 100px; font-size: 13px; font-weight: 600;
}
.hl-hero-stat { border-left: 3px solid rgba(255,255,255,.4); padding-left: 16px; }
.hl-hero-stat strong { display: block; font-size: 27px; font-family: var(--font-title); }
.hl-hero-stat span { font-size: 13px; color: rgba(255,255,255,.82); }

.hl-pagehead {
  background: linear-gradient(120deg, #0c4a6e, #0284c7);
  color: #fff; padding: 46px 0; position: relative; overflow: hidden;
}
.hl-pagehead::after {
  content: ""; position: absolute; width: 300px; height: 300px; border-radius: 50%;
  background: rgba(255,255,255,.08); top: -120px; right: -60px;
}
.hl-pagehead h1 { color: #fff; font-size: clamp(24px, 3.2vw, 34px); margin-bottom: 6px; }
.hl-pagehead .breadcrumb { margin: 0; }
.hl-pagehead .breadcrumb-item, .hl-pagehead .breadcrumb-item a { color: rgba(255,255,255,.8); font-size: 13.5px; }
.hl-pagehead .breadcrumb-item + .breadcrumb-item::before { color: rgba(255,255,255,.5); }

/* --------------------------------------------------------------------------
   8. FORMULAIRES
   -------------------------------------------------------------------------- */
.form-label { font-weight: 600; font-size: 13.5px; color: var(--text-main); margin-bottom: 6px; }
.form-control, .form-select {
  background: var(--bg-surface); border: 1.5px solid var(--border-color);
  color: var(--text-main); border-radius: 10px; padding: 11px 14px; font-size: 14.5px;
}
.form-control:focus, .form-select:focus {
  background: var(--bg-surface); color: var(--text-main);
  border-color: var(--hl-sky); box-shadow: 0 0 0 .2rem rgba(14, 165, 233, .16);
}
.form-control::placeholder { color: var(--text-muted); opacity: .75; }
.input-group-text {
  background: var(--bg-surface-2); border: 1.5px solid var(--border-color);
  color: var(--text-muted); border-radius: 10px;
}
.form-check-input { border-color: var(--border-color); background-color: var(--bg-surface); }
.form-check-input:checked { background-color: var(--hl-sky); border-color: var(--hl-sky); }
.form-check-label { font-size: 14.5px; color: var(--text-main); }

/* Choix en tuiles (créneaux, spécialités, notes d'enquête) */
.hl-choice { position: relative; }
.hl-choice input { position: absolute; opacity: 0; width: 0; height: 0; }
.hl-choice-tile {
  display: block; text-align: center; cursor: pointer;
  border: 1.5px solid var(--border-color); background: var(--bg-surface);
  border-radius: 12px; padding: 12px 8px; font-size: 14px; font-weight: 600;
  color: var(--text-main); transition: all .2s;
}
.hl-choice-tile:hover { border-color: var(--hl-sky-light); background: var(--hl-sky-soft); }
.hl-choice input:checked + .hl-choice-tile {
  border-color: var(--hl-sky); background: var(--hl-sky); color: #fff;
  box-shadow: 0 6px 14px rgba(14,165,233,.3);
}
.hl-choice input:disabled + .hl-choice-tile {
  opacity: .45; cursor: not-allowed; text-decoration: line-through;
}

/* Étapes (stepper) */
.hl-stepper { display: flex; gap: 8px; flex-wrap: wrap; }
.hl-step {
  flex: 1 1 160px; display: flex; align-items: center; gap: 11px;
  background: var(--bg-surface); border: 1.5px solid var(--border-color);
  border-radius: 12px; padding: 12px 14px;
}
.hl-step.is-active { border-color: var(--hl-sky); background: var(--hl-sky-soft); }
.hl-step.is-done { border-color: var(--hl-green); }
.hl-step-num {
  width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center;
  background: var(--bg-surface-2); color: var(--text-muted); font-weight: 700; font-size: 13px; flex-shrink: 0;
}
.hl-step.is-active .hl-step-num { background: var(--hl-sky); color: #fff; }
.hl-step.is-done .hl-step-num { background: var(--hl-green); color: #fff; }
.hl-step small { display: block; color: var(--text-muted); font-size: 11.5px; }
.hl-step strong { font-size: 13.5px; color: var(--text-main); }

/* --------------------------------------------------------------------------
   9. BADGES & STATUTS
   -------------------------------------------------------------------------- */
.hl-badge {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 11px; border-radius: 100px; font-size: 12px; font-weight: 700;
}
.hl-badge i { font-size: 9px; }
.hl-badge-green { background: rgba(16,185,129,.12); color: #059669; }
.hl-badge-amber { background: rgba(245,158,11,.14); color: #b45309; }
.hl-badge-red { background: rgba(239,68,68,.12); color: #dc2626; }
.hl-badge-sky { background: var(--hl-sky-soft); color: var(--hl-sky-dark); }
.hl-badge-grey { background: var(--bg-surface-2); color: var(--text-muted); }
.hl-badge-violet { background: rgba(139,92,246,.12); color: #7c3aed; }
[data-theme="dark"] .hl-badge-amber { color: #fbbf24; }
[data-theme="dark"] .hl-badge-green { color: #34d399; }
[data-theme="dark"] .hl-badge-red { color: #f87171; }

/* --------------------------------------------------------------------------
   10. TABLEAUX
   -------------------------------------------------------------------------- */
.hl-table { width: 100%; margin: 0; border-collapse: separate; border-spacing: 0; }
.hl-table thead th {
  background: var(--bg-surface-2); color: var(--text-muted);
  font-size: 11.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em;
  padding: 13px 16px; border-bottom: 1px solid var(--border-color); white-space: nowrap;
}
.hl-table tbody td {
  padding: 15px 16px; border-bottom: 1px solid var(--border-color);
  font-size: 14px; color: var(--text-main); vertical-align: middle;
}
.hl-table tbody tr:last-child td { border-bottom: 0; }
.hl-table tbody tr:hover { background: var(--bg-surface-2); }
.hl-table-wrap { overflow-x: auto; border-radius: var(--radius); }

.hl-avatar {
  width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center;
  background: var(--hl-sky-soft); color: var(--hl-sky-dark);
  font-weight: 700; font-size: 14px; flex-shrink: 0;
}
.hl-avatar-lg { width: 68px; height: 68px; font-size: 22px; }
.hl-avatar-sm { width: 32px; height: 32px; font-size: 12px; }

/* --------------------------------------------------------------------------
   11. ESPACES CONNECTÉS (dashboard)
   -------------------------------------------------------------------------- */
.hl-app { display: flex; min-height: calc(100vh - 68px); }
.hl-sidebar {
  width: 264px; flex-shrink: 0; background: var(--bg-surface);
  border-right: 1px solid var(--border-color); padding: 22px 16px;
  position: sticky; top: 68px; height: calc(100vh - 68px); overflow-y: auto;
}
.hl-sidebar-user {
  display: flex; align-items: center; gap: 12px; padding: 14px;
  background: var(--bg-surface-2); border-radius: var(--radius-sm); margin-bottom: 20px;
}
.hl-sidebar-user strong { display: block; font-size: 14px; }
.hl-sidebar-user span { font-size: 12px; color: var(--text-muted); }
.hl-sidebar-label {
  font-size: 10.5px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  color: var(--text-muted); padding: 0 12px; margin: 18px 0 8px;
}
.hl-sidebar-link {
  display: flex; align-items: center; gap: 12px; padding: 10px 12px;
  border-radius: 10px; color: var(--text-main); font-weight: 600; font-size: 14px;
  margin-bottom: 3px; transition: all .2s;
}
.hl-sidebar-link i { font-size: 17px; color: var(--text-muted); }
.hl-sidebar-link:hover { background: var(--bg-surface-2); color: var(--text-main); }
.hl-sidebar-link.active { background: var(--hl-sky); color: #fff; box-shadow: 0 6px 14px rgba(14,165,233,.3); }
.hl-sidebar-link.active i { color: #fff; }
.hl-sidebar-link .badge { margin-left: auto; }

.hl-main { flex: 1; padding: 28px; min-width: 0; }
.hl-main-head { margin-bottom: 24px; }
.hl-main-head h1 { font-size: 24px; margin-bottom: 4px; }
.hl-main-head p { margin: 0; font-size: 14px; }

.hl-stat {
  background: var(--bg-surface); border: 1px solid var(--border-color);
  border-radius: var(--radius); padding: 20px; height: 100%;
}
.hl-stat-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
.hl-stat-icon { width: 42px; height: 42px; border-radius: 12px; display: grid; place-items: center; font-size: 19px; }
.hl-stat strong { display: block; font-family: var(--font-title); font-size: 28px; line-height: 1.1; }
.hl-stat span { font-size: 13px; color: var(--text-muted); }

@media (max-width: 991.98px) {
  .hl-app { flex-direction: column; }
  .hl-sidebar {
    width: 100%; position: static; height: auto; border-right: 0;
    border-bottom: 1px solid var(--border-color);
  }
  .hl-main { padding: 20px 16px; }
}

/* --------------------------------------------------------------------------
   12. PLANNING HEBDOMADAIRE (espace médecin)
   -------------------------------------------------------------------------- */
.hl-planning { min-width: 900px; border: 1px solid var(--border-color); border-radius: var(--radius); overflow: hidden; }
.hl-planning-row { display: grid; grid-template-columns: 92px repeat(6, 1fr); }
.hl-planning-row + .hl-planning-row { border-top: 1px solid var(--border-color); }
.hl-planning-head > div {
  background: var(--bg-surface-2); padding: 12px 8px; text-align: center;
  font-weight: 700; font-size: 13px;
}
.hl-planning-head > div small { display: block; font-weight: 500; font-size: 11px; color: var(--text-muted); }
.hl-planning-hour {
  background: var(--bg-surface-2); display: grid; place-items: center;
  font-size: 12px; font-weight: 700; color: var(--text-muted);
  border-right: 1px solid var(--border-color);
}
.hl-slot {
  border-right: 1px solid var(--border-color); padding: 7px; min-height: 78px;
  background: var(--bg-surface);
}
.hl-slot:last-child { border-right: 0; }
.hl-slot-item {
  border-radius: 9px; padding: 7px 9px; font-size: 11.5px; font-weight: 600; height: 100%;
  border-left: 3px solid;
}
.hl-slot-item small { display: block; font-weight: 500; opacity: .85; font-size: 10.5px; }
.hl-slot-consult { background: rgba(14,165,233,.12); border-color: var(--hl-sky); color: var(--hl-sky-dark); }
.hl-slot-bloc { background: rgba(139,92,246,.12); border-color: var(--hl-violet); color: #7c3aed; }
.hl-slot-visite { background: rgba(16,185,129,.12); border-color: var(--hl-green); color: #047857; }
.hl-slot-garde { background: rgba(245,158,11,.14); border-color: var(--hl-amber); color: #b45309; }
.hl-slot-off { background: var(--bg-surface-2); border-color: var(--border-color); color: var(--text-muted); }
[data-theme="dark"] .hl-slot-consult { color: var(--hl-sky-light); }
[data-theme="dark"] .hl-slot-bloc { color: #a78bfa; }
[data-theme="dark"] .hl-slot-visite { color: #34d399; }
[data-theme="dark"] .hl-slot-garde { color: #fbbf24; }
.hl-legend { display: flex; flex-wrap: wrap; gap: 16px; font-size: 12.5px; color: var(--text-muted); }
.hl-legend i { font-size: 10px; margin-right: 5px; }

/* --------------------------------------------------------------------------
   13. ENQUÊTE DE SATISFACTION
   -------------------------------------------------------------------------- */
.hl-quiz-card { border-left: 4px solid var(--hl-sky); }
.hl-quiz-card.done { border-left-color: var(--hl-green); }
.hl-quiz-card.closed { border-left-color: var(--text-muted); }
.hl-question {
  background: var(--bg-surface); border: 1px solid var(--border-color);
  border-radius: var(--radius); padding: 22px; margin-bottom: 16px;
}
.hl-question-num {
  display: inline-grid; place-items: center; width: 26px; height: 26px; border-radius: 8px;
  background: var(--hl-sky-soft); color: var(--hl-sky-dark); font-size: 12.5px; font-weight: 800;
  margin-right: 10px;
}
.hl-scale { display: flex; gap: 8px; flex-wrap: wrap; }
.hl-scale .hl-choice { flex: 1 1 90px; }
.hl-rating { display: inline-flex; flex-direction: row-reverse; gap: 4px; }
.hl-rating input { position: absolute; opacity: 0; }
.hl-rating label { font-size: 26px; color: var(--border-color); cursor: pointer; transition: color .15s; }
.hl-rating input:checked ~ label,
.hl-rating label:hover, .hl-rating label:hover ~ label { color: var(--hl-amber); }
.hl-progress-thin { height: 7px; border-radius: 100px; background: var(--bg-surface-2); }
.hl-progress-thin .progress-bar { background: linear-gradient(90deg, var(--hl-sky), var(--hl-sky-dark)); border-radius: 100px; }

/* --------------------------------------------------------------------------
   14. TIMELINE
   -------------------------------------------------------------------------- */
.hl-timeline { position: relative; padding-left: 30px; }
.hl-timeline::before {
  content: ""; position: absolute; left: 9px; top: 6px; bottom: 6px;
  width: 2px; background: var(--border-color);
}
.hl-timeline-item { position: relative; padding-bottom: 22px; }
.hl-timeline-item::before {
  content: ""; position: absolute; left: -26px; top: 4px;
  width: 12px; height: 12px; border-radius: 50%;
  background: var(--hl-sky); border: 3px solid var(--bg-surface);
  box-shadow: 0 0 0 2px var(--hl-sky);
}
.hl-timeline-item.done::before { background: var(--hl-green); box-shadow: 0 0 0 2px var(--hl-green); }
.hl-timeline-item.pending::before { background: var(--bg-surface-2); box-shadow: 0 0 0 2px var(--border-color); }
.hl-timeline-item h6 { margin-bottom: 2px; font-size: 14.5px; }
.hl-timeline-item small { color: var(--text-muted); }

/* --------------------------------------------------------------------------
   15. MÉDECINS
   -------------------------------------------------------------------------- */
.hl-doctor { text-align: center; padding: 26px 20px; }
.hl-doctor .hl-avatar { margin: 0 auto 14px; }
.hl-doctor h5 { font-size: 16px; margin-bottom: 2px; }
.hl-doctor .spec { color: var(--hl-sky-dark); font-size: 13px; font-weight: 600; }
.hl-dispo-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.hl-dispo-dot.on { background: var(--hl-green); box-shadow: 0 0 0 3px rgba(16,185,129,.2); }
.hl-dispo-dot.off { background: var(--text-muted); }

/* --------------------------------------------------------------------------
   16. FOOTER
   -------------------------------------------------------------------------- */
.hl-footer { background: var(--bg-topbar); color: #cbd5e1; padding: 56px 0 0; }
.hl-footer h6 {
  color: #fff; font-size: 14px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .06em; margin-bottom: 18px;
}
.hl-footer a { color: #94a3b8; font-size: 14px; display: inline-block; padding: 4px 0; }
.hl-footer a:hover { color: var(--hl-sky-light); }
.hl-footer p { color: #94a3b8; font-size: 14px; }
.hl-footer-bottom {
  border-top: 1px solid #1e293b; margin-top: 40px; padding: 18px 0;
  font-size: 13px; color: #64748b;
}
.hl-social {
  width: 38px; height: 38px; border-radius: 10px; background: #1e293b;
  display: inline-grid; place-items: center; color: #cbd5e1; margin-right: 6px;
}
.hl-social:hover { background: var(--hl-sky); color: #fff; }

/* --------------------------------------------------------------------------
   17. DIVERS
   -------------------------------------------------------------------------- */
.hl-alert {
  border: 0; border-left: 4px solid; border-radius: var(--radius-sm);
  padding: 14px 18px; font-size: 14px;
}
.hl-alert-sky { background: var(--hl-sky-soft); border-color: var(--hl-sky); color: var(--text-main); }
.hl-alert-green { background: rgba(16,185,129,.1); border-color: var(--hl-green); color: var(--text-main); }
.hl-alert-amber { background: rgba(245,158,11,.1); border-color: var(--hl-amber); color: var(--text-main); }

.nav-tabs { border-bottom: 1px solid var(--border-color); gap: 4px; }
.nav-tabs .nav-link {
  border: 0; border-bottom: 2.5px solid transparent; color: var(--text-muted);
  font-weight: 600; font-size: 14.5px; padding: 10px 16px; border-radius: 0;
}
.nav-tabs .nav-link:hover { color: var(--hl-sky-dark); border-bottom-color: var(--hl-sky-light); }
.nav-tabs .nav-link.active {
  background: transparent; color: var(--hl-sky-dark); border-bottom-color: var(--hl-sky);
}

.modal-content {
  background: var(--bg-surface); color: var(--text-main);
  border: 1px solid var(--border-color); border-radius: var(--radius);
}
.modal-header, .modal-footer { border-color: var(--border-color); }
.btn-close { filter: var(--bs-btn-close-filter, none); }
[data-theme="dark"] .btn-close { filter: invert(1) grayscale(100%) brightness(200%); }

.hl-back-top {
  position: fixed; right: 22px; bottom: 22px; z-index: 999;
  width: 46px; height: 46px; border-radius: 50%; border: 0;
  background: var(--hl-sky); color: #fff; box-shadow: var(--shadow-md);
  display: grid; place-items: center; opacity: 0; visibility: hidden; transition: all .3s;
}
.hl-back-top.show { opacity: 1; visibility: visible; }

::-webkit-scrollbar { width: 9px; height: 9px; }
::-webkit-scrollbar-track { background: var(--bg-surface-2); }
::-webkit-scrollbar-thumb { background: #94a3b8; border-radius: 100px; }
::-webkit-scrollbar-thumb:hover { background: var(--hl-sky); }

@media print {
  .hl-topbar, .hl-navbar, .hl-sidebar, .hl-footer, .hl-back-top, .no-print { display: none !important; }
  .hl-main { padding: 0; }
}

/* ==========================================================================
   18. EN-TÊTE ÉTENDU (topbar e-commerce, navbar majuscules, mini-pub)
   ========================================================================== */
.hl-topbar { padding: 7px 0; }
.hl-topbar-info { display: flex; flex-wrap: wrap; align-items: center; gap: 18px; }
.hl-topbar-tools { display: flex; align-items: center; gap: 10px; }

.hl-top-btn {
  display: inline-flex; align-items: center; gap: 6px;
  border: 1px solid #26354d; background: #16233a; color: #cbd5e1;
  border-radius: 8px; padding: 5px 11px; font-size: 12.5px; font-weight: 600;
  transition: all .2s; white-space: nowrap;
}
.hl-top-btn:hover { background: var(--hl-sky); border-color: var(--hl-sky); color: #fff; }
.hl-top-btn.is-primary { background: var(--hl-sky); border-color: var(--hl-sky); color: #fff; }
.hl-top-btn.is-primary:hover { background: var(--hl-sky-dark); border-color: var(--hl-sky-dark); }

.hl-icon-link {
  position: relative; display: inline-grid; place-items: center;
  width: 34px; height: 34px; border-radius: 9px;
  background: #16233a; border: 1px solid #26354d; color: #cbd5e1;
  font-size: 15px; transition: all .2s;
}
.hl-icon-link:hover { background: var(--hl-sky); border-color: var(--hl-sky); color: #fff; }
.hl-count {
  position: absolute; top: -6px; right: -6px; min-width: 18px; height: 18px;
  padding: 0 4px; border-radius: 100px; background: var(--hl-red); color: #fff;
  font-size: 10.5px; font-weight: 800; display: grid; place-items: center;
  border: 2px solid var(--bg-topbar);
}
.hl-count.is-sky { background: var(--hl-sky); }

.hl-lang-toggle {
  display: inline-flex; align-items: center; gap: 7px;
  background: #16233a; border: 1px solid #26354d; color: #cbd5e1;
  border-radius: 8px; padding: 5px 10px; font-size: 12.5px; font-weight: 600;
}
.hl-lang-toggle:hover, .hl-lang-toggle:focus { background: #1d2c46; color: #fff; }
.hl-lang-menu { min-width: 190px; }
.hl-lang-menu .dropdown-item { display: flex; align-items: center; gap: 10px; }
.hl-lang-menu .hl-flag { width: 22px; height: 15px; }

/* Navbar principale */
.hl-navbar .navbar-nav .nav-link {
  text-transform: uppercase; font-size: 13px; letter-spacing: .04em; font-weight: 700;
}
.hl-navbar .dropdown-menu .dropdown-item { text-transform: uppercase; font-size: 12.5px; font-weight: 600; letter-spacing: .03em; }
.hl-search {
  display: flex; align-items: stretch; background: var(--bg-surface-2);
  border: 1.5px solid var(--border-color); border-radius: 100px; overflow: hidden;
  min-width: 260px;
}
.hl-search select {
  border: 0; background: transparent; color: var(--text-muted);
  font-size: 12.5px; font-weight: 600; padding: 0 6px 0 14px; outline: none; max-width: 130px;
}
.hl-search input {
  border: 0; background: transparent; color: var(--text-main);
  font-size: 13.5px; padding: 9px 8px; flex: 1; min-width: 0; outline: none;
}
.hl-search input::placeholder { color: var(--text-muted); }
.hl-search button {
  border: 0; background: var(--hl-sky); color: #fff; padding: 0 18px; font-size: 15px;
}
.hl-search button:hover { background: var(--hl-sky-dark); }

/* Mini-pub */
.hl-minipub {
  background: linear-gradient(90deg, var(--hl-sky-dark), var(--hl-sky));
  color: #fff; font-size: 13px; font-weight: 600; overflow: hidden;
}
.hl-minipub-track {
  display: flex; align-items: center; gap: 42px; padding: 9px 0;
  white-space: nowrap; overflow-x: auto; scrollbar-width: none;
}
.hl-minipub-track::-webkit-scrollbar { display: none; }
.hl-minipub-track span { display: inline-flex; align-items: center; gap: 8px; }
.hl-minipub-track i { opacity: .85; }

/* ==========================================================================
   19. SLIDER DE BANNIÈRE
   ========================================================================== */
.hl-slider { position: relative; }
.hl-slide {
  position: relative; min-height: 560px; display: flex; align-items: center;
  background-size: cover; background-position: center; overflow: hidden;
}
.hl-slide::before {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(105deg, rgba(7,45,74,.94) 0%, rgba(2,132,199,.78) 52%, rgba(56,189,248,.42) 100%);
}
.hl-slide-shape {
  position: absolute; border-radius: 50%; background: rgba(255,255,255,.10);
  pointer-events: none;
}
.hl-slide-shape.s1 { width: 460px; height: 460px; top: -160px; right: -110px; }
.hl-slide-shape.s2 { width: 250px; height: 250px; bottom: -90px; left: 8%; background: rgba(255,255,255,.07); }
.hl-slide-shape.s3 {
  width: 190px; height: 190px; top: 18%; right: 22%; border-radius: 34%;
  background: rgba(255,255,255,.06); transform: rotate(24deg);
}
.hl-slide .container { position: relative; z-index: 2; }
.hl-slide-content { max-width: 640px; color: #fff; padding: 74px 0; }
.hl-slide-content h2 {
  color: #fff; font-size: clamp(28px, 4.4vw, 50px); line-height: 1.12; margin-bottom: 16px;
}
.hl-slide-content p { color: rgba(255,255,255,.9); font-size: 17px; margin-bottom: 26px; }
.hl-slide-badge {
  display: inline-flex; align-items: center; gap: 8px;
  background: rgba(255,255,255,.17); border: 1px solid rgba(255,255,255,.3);
  padding: 7px 16px; border-radius: 100px; font-size: 12.5px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .08em; margin-bottom: 16px;
}
.carousel-control-prev, .carousel-control-next { width: 6%; opacity: .8; }
.carousel-indicators [data-bs-target] {
  width: 34px; height: 4px; border-radius: 100px; background: rgba(255,255,255,.5);
  border: 0; opacity: 1;
}
.carousel-indicators .active { background: #fff; }

/* Bandeau d'accès rapide sous le slider */
.hl-quickbar {
  background: var(--bg-surface); border-bottom: 1px solid var(--border-color);
  box-shadow: var(--shadow-sm); position: relative; z-index: 3;
}
.hl-quick {
  display: flex; align-items: center; gap: 14px; padding: 20px 18px;
  border-right: 1px solid var(--border-color); height: 100%;
}
.hl-quick:last-child { border-right: 0; }
.hl-quick i { font-size: 26px; color: var(--hl-sky); }
.hl-quick strong { display: block; font-size: 14.5px; }
.hl-quick span { font-size: 12.5px; color: var(--text-muted); }

/* ==========================================================================
   20. SECTIONS D'ACCUEIL
   ========================================================================== */
.hl-feature-img {
  border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-md);
  aspect-ratio: 4 / 3; width: 100%; object-fit: cover; display: block;
}
.hl-cat-tile {
  position: relative; display: block; border-radius: var(--radius);
  overflow: hidden; height: 210px; color: #fff;
}
.hl-cat-tile img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .5s; }
.hl-cat-tile:hover img { transform: scale(1.07); }
.hl-cat-tile-body {
  position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end;
  padding: 18px; background: linear-gradient(to top, rgba(7,25,45,.86), rgba(7,25,45,.06) 65%);
}
.hl-cat-tile h5 { color: #fff; font-size: 17px; margin-bottom: 2px; }
.hl-cat-tile span { font-size: 12.5px; color: rgba(255,255,255,.85); }

.hl-chip {
  display: flex; align-items: center; gap: 10px; padding: 12px 14px;
  background: var(--bg-surface); border: 1px solid var(--border-color);
  border-radius: 12px; color: var(--text-main); font-weight: 600; font-size: 13.5px;
  transition: all .2s; height: 100%;
}
.hl-chip:hover { border-color: var(--hl-sky); background: var(--hl-sky-soft); color: var(--hl-sky-dark); }
.hl-chip i { font-size: 17px; color: var(--hl-sky); }

/* Carte de prestation (grille 4 colonnes) */
.hl-prestation { position: relative; height: 100%; overflow: hidden; }
.hl-prestation-media { position: relative; height: 160px; overflow: hidden; }
.hl-prestation-media img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .5s; }
.hl-prestation:hover .hl-prestation-media img { transform: scale(1.06); }
.hl-prestation-tag {
  position: absolute; top: 12px; left: 12px; z-index: 2;
  background: var(--hl-green); color: #fff; font-size: 11px; font-weight: 800;
  padding: 4px 10px; border-radius: 100px; text-transform: uppercase; letter-spacing: .05em;
}
.hl-prestation-tag.is-red { background: var(--hl-red); }
.hl-prestation-fav {
  position: absolute; top: 10px; right: 10px; z-index: 2;
  width: 34px; height: 34px; border-radius: 50%; border: 0;
  background: rgba(255,255,255,.92); color: var(--hl-ink);
  display: grid; place-items: center; font-size: 15px; transition: all .2s;
}
.hl-prestation-fav:hover { background: var(--hl-red); color: #fff; }
.hl-prestation-body { padding: 16px; }
.hl-prestation-body h6 { font-size: 15px; margin-bottom: 4px; }
.hl-prestation-meta { font-size: 12.5px; color: var(--text-muted); margin-bottom: 10px; }
.hl-price { font-family: var(--font-title); font-weight: 800; font-size: 18px; color: var(--hl-sky-dark); }
.hl-price-old { font-size: 13px; color: var(--text-muted); text-decoration: line-through; margin-left: 6px; }

/* Témoignages */
.hl-quote { font-size: 15px; color: var(--text-main); font-style: italic; }
.hl-stars { color: var(--hl-amber); font-size: 14px; }

/* Partenaires */
.hl-partner {
  display: grid; place-items: center; height: 92px; border-radius: var(--radius-sm);
  background: var(--bg-surface); border: 1px solid var(--border-color);
  color: var(--text-muted); font-weight: 800; letter-spacing: .06em; font-size: 14px;
  text-align: center; padding: 10px;
}

/* Bandeau CTA */
.hl-cta {
  position: relative; border-radius: var(--radius-lg); overflow: hidden;
  background-size: cover; background-position: center; color: #fff;
}
.hl-cta::before {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(100deg, rgba(7,45,74,.93), rgba(2,132,199,.72));
}
.hl-cta > * { position: relative; z-index: 2; }
.hl-cta h2 { color: #fff; }
.hl-cta p { color: rgba(255,255,255,.9); }

/* Actualités */
.hl-post-media { height: 190px; overflow: hidden; }
.hl-post-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s; }
.hl-card:hover .hl-post-media img { transform: scale(1.06); }
.hl-post-date {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 12.5px; color: var(--text-muted); font-weight: 600;
}

@media (max-width: 991.98px) {
  .hl-slide { min-height: 460px; }
  .hl-slide-content { padding: 56px 0; }
  .hl-quick { border-right: 0; border-bottom: 1px solid var(--border-color); padding: 16px; }
  .hl-search { min-width: 100%; margin: 10px 0; }
}
@media (max-width: 575.98px) {
  .hl-topbar { font-size: 12px; }
  .hl-slide { min-height: 420px; }
}

/* --------------------------------------------------------------------------
   21. AJUSTEMENTS FINS (barre de navigation large, cartes de même hauteur)
   -------------------------------------------------------------------------- */
.hl-navbar .navbar-collapse { flex-wrap: wrap; row-gap: 10px; }
.hl-navbar .navbar-nav .nav-link { padding: 8px 10px !important; }
@media (min-width: 1400px) {
  .hl-navbar .navbar-nav .nav-link { padding: 8px 13px !important; }
}
.hl-search { flex: 1 1 220px; max-width: 340px; }

/* Les cartes de prestation gardent leurs boutons alignés en bas */
.hl-prestation { display: flex; flex-direction: column; }
.hl-prestation .hl-prestation-body { display: flex; flex-direction: column; flex: 1; }
.hl-prestation .hl-prestation-body > .d-flex:last-child { margin-top: auto; }
.hl-doctor { display: flex; flex-direction: column; }
.hl-doctor .btn, .hl-doctor .d-flex.gap-2 { margin-top: auto; }
.hl-logo-text strong { white-space: nowrap; }
@media (max-width: 767.98px) {
  .carousel-control-prev, .carousel-control-next { display: none; }
  .hl-slide-content { padding: 44px 0; }
}

/* ==========================================================================
   GRAPHIQUES EN BARRES (tableaux de bord)
   Ajout a la feuille d'origine. Les barres utilisent les memes variables de
   theme que le reste du site : elles suivent donc automatiquement le mode
   clair et le mode sombre, sans regle dupliquee.
   ========================================================================== */

.hl-bar-track {
  height: 8px;
  border-radius: 999px;
  background: var(--bg-surface-2);
  overflow: hidden;
}

.hl-bar-fill {
  height: 100%;
  /* Extremite arrondie cote donnee, ancrage plat cote axe : la barre reste
     visuellement accrochee a sa ligne de base. */
  border-radius: 0 999px 999px 0;
  transition: width .4s ease;
  min-width: 4px;
}

/* Barres verticales pour les series temporelles (rendez-vous par mois). */
.hl-columns {
  display: flex;
  align-items: flex-end;
  gap: 6px;
  height: 160px;
  padding-top: 8px;
}

.hl-column {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  align-items: center;
  gap: 4px;
  min-width: 0;
}

.hl-column-fill {
  width: 100%;
  max-width: 34px;
  border-radius: 6px 6px 0 0;
  background: var(--hl-sky);
  min-height: 3px;
  transition: height .4s ease;
}

.hl-column-label {
  font-size: 11px;
  color: var(--text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}

.hl-column-value {
  font-size: 11px;
  font-weight: 700;
  color: var(--text-main);
}

/* Tuile cliquable des parcours (specialite, action rapide). */
.hl-choice-tile {
  display: block;
  padding: 18px;
  border: 1px solid var(--border-color);
  border-radius: var(--radius);
  background: var(--bg-surface);
  color: var(--text-main);
  text-align: center;
  transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}

.hl-choice-tile:hover {
  border-color: var(--hl-sky);
  box-shadow: var(--shadow-md);
  transform: translateY(-2px);
  color: var(--text-main);
}

.hl-choice-tile .hl-icon-box { margin-left: auto; margin-right: auto; }

/* Contenu riche issu de l'editeur (CKEditor) : on borne les images et on
   aere les paragraphes, sinon un collage depuis Word deborde de la colonne. */
.hl-rich { color: var(--text-muted); line-height: 1.8; }
.hl-rich p { margin-bottom: 1rem; }
.hl-rich img { max-width: 100%; height: auto; border-radius: var(--radius-sm); }
.hl-rich table { width: 100%; display: block; overflow-x: auto; }
.hl-rich h2, .hl-rich h3, .hl-rich h4 { margin-top: 1.6rem; margin-bottom: .7rem; }
.hl-rich ul, .hl-rich ol { padding-left: 1.4rem; margin-bottom: 1rem; }

/* Bordure d'accent pour la carte du jour dans les calendriers. */
.border-sky { border-color: var(--hl-sky) !important; }

@media print {
  .hl-bar-fill, .hl-column-fill { print-color-adjust: exact; -webkit-print-color-adjust: exact; }
}

/* ==========================================================================
   ==========================================================================
   REFONTE VISUELLE — VERSION 2
   --------------------------------------------------------------------------
   Tout ce qui suit s'ajoute a la feuille d'origine sans la reecrire : les
   regles sont plus specifiques ou plus basses dans le fichier, elles prennent
   donc le dessus. On peut revenir en arriere en supprimant ce seul bloc.
   ==========================================================================
   ========================================================================== */

/* --------------------------------------------------------------------------
   V2.1 — PALETTE ETENDUE : DEGRADES
   Un seul endroit definit les degrades, pour que toutes les sections se
   ressemblent au lieu d'inventer chacune sa nuance de bleu.
   -------------------------------------------------------------------------- */
:root {
  --hl-grad:        linear-gradient(135deg, #0284c7 0%, #0ea5e9 48%, #38bdf8 100%);
  --hl-grad-deep:   linear-gradient(135deg, #06304f 0%, #0b5f96 45%, #0ea5e9 100%);
  --hl-grad-soft:   linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);
  --hl-grad-care:   linear-gradient(135deg, #0ea5e9 0%, #22d3ee 100%);
  --hl-grad-life:   linear-gradient(135deg, #0ea5e9 0%, #10b981 100%);
  --hl-ring:        0 0 0 1px rgba(14,165,233,.16);
  --hl-glow:        0 18px 40px -18px rgba(14,165,233,.55);
  --hl-ease:        cubic-bezier(.22, 1, .36, 1);
}
[data-theme="dark"] {
  --hl-grad-soft: linear-gradient(135deg, #10243a 0%, #0d1a2b 100%);
  --hl-ring: 0 0 0 1px rgba(56,189,248,.20);
}

.hl-gradient-text {
  background: var(--hl-grad);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
}

/* --------------------------------------------------------------------------
   V2.2 — LARGEUR DU CONTENEUR
   Premier reglage : on avait elargi jusqu'a la quasi-totalite de l'ecran, et
   le contenu se retrouvait colle aux bords sur un grand moniteur. On revient
   a une largeur de lecture confortable — plus large que les 1320 px de
   Bootstrap, mais avec une vraie marge de chaque cote.

   Repere : au-dela d'environ 90 caracteres par ligne, l'oeil perd le debut de
   la ligne suivante. Les 1360 px retenus, gouttiere comprise, restent en
   dessous de cette limite sur les blocs de texte.
   -------------------------------------------------------------------------- */
@media (min-width: 1200px) {
  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {
    max-width: 1320px;
    padding-left: 28px;
    padding-right: 28px;
  }
}
@media (min-width: 1600px) {
  .container, .container-xxl { max-width: 1420px; }
}
/* Pleine largeur reelle, pour les bandeaux qui doivent toucher les bords. */
.hl-bleed { width: 100%; max-width: 100% !important; padding-left: 24px; padding-right: 24px; }

/* --------------------------------------------------------------------------
   V2.3 — SUPERPOSITION : LE MENU DE LANGUE PASSE DEVANT
   La barre du haut n'avait pas de contexte d'empilement : son menu deroulant
   se retrouvait DERRIERE la navigation collante (z-index 1030). On donne a la
   barre du haut un rang superieur ; ses menus suivent.
   -------------------------------------------------------------------------- */
.hl-topbar { position: relative; z-index: 1085; overflow: visible; }
.hl-topbar .dropdown { position: relative; }
.hl-topbar .dropdown-menu { z-index: 1090; }
.hl-navbar { z-index: 1040; }
.hl-lang-menu, .hl-topbar .dropdown-menu {
  border: 1px solid var(--border-color);
  box-shadow: var(--shadow-lg);
  border-radius: 14px;
  padding: 6px;
  animation: hl-pop .18s var(--hl-ease);
}
.hl-topbar .dropdown-menu .dropdown-item { border-radius: 9px; padding: 8px 10px; }
.hl-lang-menu .dropdown-item.active,
.hl-lang-menu .dropdown-item:active { background: var(--hl-sky-soft); color: var(--hl-sky-dark); }
.hl-flag { border-radius: 3px; box-shadow: 0 0 0 1px rgba(0,0,0,.12); object-fit: cover; }

@keyframes hl-pop {
  from { opacity: 0; transform: translateY(-6px) scale(.98); }
  to   { opacity: 1; transform: none; }
}

/* --------------------------------------------------------------------------
   V2.4 — ANIMATIONS D'APPARITION AU DEFILEMENT
   Pilotees par IntersectionObserver (main.js). Sans JavaScript, la classe
   .is-visible n'arrive jamais : la regle de repli plus bas garantit alors que
   le contenu reste visible — on n'affiche jamais une page blanche.
   -------------------------------------------------------------------------- */
[data-hl-reveal] {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity .75s var(--hl-ease), transform .75s var(--hl-ease);
  will-change: opacity, transform;
}
[data-hl-reveal="left"]  { transform: translateX(-38px); }
[data-hl-reveal="right"] { transform: translateX(38px); }
[data-hl-reveal="zoom"]  { transform: scale(.93); }
[data-hl-reveal="fade"]  { transform: none; }
[data-hl-reveal="flip"]  { transform: perspective(900px) rotateX(12deg) translateY(24px); }
[data-hl-reveal].is-visible { opacity: 1; transform: none; }

/* Sur telephone, les entrees LATERALES sont remplacees par une entree
   verticale. Un bloc decale de 38 px vers la gauche depasse du viewport tant
   qu'il n'est pas revele : la page gagne une barre de defilement horizontale
   et se decale au doigt, sans qu'on voie ce qui la provoque. Le mouvement
   vertical produit le meme effet sans jamais elargir la page. */
@media (max-width: 767.98px) {
  [data-hl-reveal="left"],
  [data-hl-reveal="right"] { transform: translateY(26px); }
}

[data-hl-delay="1"] { transition-delay: .08s; }
[data-hl-delay="2"] { transition-delay: .16s; }
[data-hl-delay="3"] { transition-delay: .24s; }
[data-hl-delay="4"] { transition-delay: .32s; }
[data-hl-delay="5"] { transition-delay: .40s; }
[data-hl-delay="6"] { transition-delay: .48s; }
[data-hl-delay="7"] { transition-delay: .56s; }
[data-hl-delay="8"] { transition-delay: .64s; }

/* Repli : si le JS ne tourne pas, tout reste lisible. */
.no-js [data-hl-reveal] { opacity: 1 !important; transform: none !important; }

@media (prefers-reduced-motion: reduce) {
  [data-hl-reveal] { opacity: 1 !important; transform: none !important; transition: none !important; }
  .hl-float, .hl-pulse-ring, .hl-minipub-track.is-marquee { animation: none !important; }
}

/* Animations d'ambiance */
@keyframes hl-float     { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-12px); } }
@keyframes hl-pulse     { 0% { box-shadow: 0 0 0 0 rgba(14,165,233,.45); } 70% { box-shadow: 0 0 0 18px rgba(14,165,233,0); } 100% { box-shadow: 0 0 0 0 rgba(14,165,233,0); } }
@keyframes hl-marquee   { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@keyframes hl-shine     { from { background-position: -220% 0; } to { background-position: 220% 0; } }
@keyframes hl-heartbeat { 0%,100% { transform: scale(1); } 14% { transform: scale(1.16); } 28% { transform: scale(1); } 42% { transform: scale(1.12); } 56% { transform: scale(1); } }

.hl-float      { animation: hl-float 6s ease-in-out infinite; }
.hl-pulse-ring { animation: hl-pulse 2.4s ease-out infinite; }
.hl-heartbeat  { animation: hl-heartbeat 2.6s ease-in-out infinite; display: inline-block; }

/* Survol generique : un seul comportement pour toutes les cartes. */
.hl-lift { transition: transform .38s var(--hl-ease), box-shadow .38s var(--hl-ease); }
.hl-lift:hover { transform: translateY(-8px); box-shadow: var(--shadow-lg); }

/* --------------------------------------------------------------------------
   V2.5 — TITRES DE SECTION
   -------------------------------------------------------------------------- */
.hl-eyebrow {
  background: var(--hl-grad-soft);
  color: var(--hl-sky-dark);
  border: 1px solid rgba(14,165,233,.22);
  border-radius: 100px;
  padding: 5px 14px;
  font-weight: 700;
  letter-spacing: .06em;
}
.hl-title { position: relative; }
.hl-title-underline::after {
  content: ""; display: block; width: 76px; height: 4px; margin-top: 14px;
  border-radius: 100px; background: var(--hl-grad);
}
.text-center .hl-title-underline::after, .hl-title-underline.text-center::after { margin-left: auto; margin-right: auto; }

.hl-section, .hl-section-sm { position: relative; }
/* Motif medical discret derriere certaines sections. */
.hl-section-pattern::before {
  content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background-image:
    radial-gradient(circle at 12% 18%, rgba(14,165,233,.09), transparent 42%),
    radial-gradient(circle at 88% 74%, rgba(16,185,129,.08), transparent 46%);
}
.hl-section-pattern > .container { position: relative; z-index: 1; }
.hl-section-tint { background: var(--hl-grad-soft); }

/* --------------------------------------------------------------------------
   V2.6 — BARRE DE MINI-PUBLICITES (sous la navigation)
   -------------------------------------------------------------------------- */
.hl-minipub { position: relative; z-index: 5; }
.hl-minipub-viewport { overflow: hidden; }
.hl-minipub-track.is-marquee {
  animation: hl-marquee 38s linear infinite;
  width: max-content;
  overflow: visible;
}
.hl-minipub:hover .hl-minipub-track.is-marquee { animation-play-state: paused; }
.hl-minipub-track a { color: #fff; }
.hl-minipub-track a:hover { color: #e0f2fe; text-decoration: underline; }
.hl-minipub-sep { opacity: .45; }

/* --------------------------------------------------------------------------
   V2.7 — BANNIERE : DEGRADE + FORMES
   -------------------------------------------------------------------------- */
.hl-slide::before {
  /* Voile en degrade pose sur la photo de la banniere.
     Il est dense a gauche, la ou se trouve le texte, et s'efface vers la
     droite : le titre reste lisible sans masquer l'image chargee depuis
     l'administration. */
  background:
    linear-gradient(102deg, rgba(4,32,56,.88) 0%, rgba(2,110,170,.62) 48%, rgba(34,211,238,.26) 100%);
}
.hl-slide::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background:
    radial-gradient(ellipse at 78% 20%, rgba(255,255,255,.16), transparent 55%),
    linear-gradient(0deg, rgba(2,18,32,.38) 0%, transparent 38%);
}
.hl-slide-shape {
  background: rgba(255,255,255,.09);
  backdrop-filter: blur(1px);
  animation: hl-float 9s ease-in-out infinite;
}
.hl-slide-shape.s2 { animation-duration: 11s; animation-delay: -3s; }
.hl-slide-shape.s3 { animation-duration: 13s; animation-delay: -6s; }
/* Une forme supplementaire, en croix medicale stylisee. */
.hl-slide-cross {
  position: absolute; right: 7%; bottom: 14%; width: 130px; height: 130px;
  opacity: .13; pointer-events: none; animation: hl-float 10s ease-in-out infinite;
}
.hl-slide-cross::before, .hl-slide-cross::after {
  content: ""; position: absolute; background: #fff; border-radius: 12px;
}
.hl-slide-cross::before { left: 40%; top: 0; width: 20%; height: 100%; }
.hl-slide-cross::after  { top: 40%; left: 0; height: 20%; width: 100%; }

.carousel-item.active .hl-slide-content > * { animation: hl-slide-in .85s var(--hl-ease) both; }
.carousel-item.active .hl-slide-content > *:nth-child(2) { animation-delay: .12s; }
.carousel-item.active .hl-slide-content > *:nth-child(3) { animation-delay: .22s; }
.carousel-item.active .hl-slide-content > *:nth-child(4) { animation-delay: .32s; }
@keyframes hl-slide-in { from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: none; } }

.hl-slide-content h2 { text-shadow: 0 6px 30px rgba(0,0,0,.35); }

/* --------------------------------------------------------------------------
   V2.8 — BANDEAU « ESTIMATION / RENDEZ-VOUS GRATUIT »
   Equivalent du bloc « devis gratuit » du site de reference.
   -------------------------------------------------------------------------- */
.hl-estimate {
  position: relative; overflow: hidden;
  background: var(--hl-grad-deep);
  border-radius: var(--radius-lg);
  color: #fff;
  padding: 34px 32px;
  box-shadow: var(--hl-glow);
}
.hl-estimate::before {
  content: ""; position: absolute; width: 420px; height: 420px; right: -120px; top: -180px;
  border-radius: 50%; background: rgba(255,255,255,.08);
}
.hl-estimate::after {
  content: ""; position: absolute; width: 240px; height: 240px; left: -80px; bottom: -140px;
  border-radius: 50%; background: rgba(255,255,255,.06);
}
.hl-estimate > * { position: relative; z-index: 2; }
.hl-estimate h3 { color: #fff; margin-bottom: 6px; }
.hl-estimate p { color: rgba(255,255,255,.86); margin-bottom: 0; }
.hl-estimate .hl-estimate-pill {
  display: inline-flex; align-items: center; gap: 8px;
  background: rgba(255,255,255,.14); border: 1px solid rgba(255,255,255,.22);
  border-radius: 100px; padding: 6px 14px; font-size: 12.5px; font-weight: 700;
  margin-bottom: 12px;
}

/* --------------------------------------------------------------------------
   V2.9 — CARTE PRATICIEN (photo de profil mise en avant)
   Remplace l'ancienne pastille d'initiales : le patient choisit d'abord un
   visage. Le bloc affiche, dans l'ordre : photo, nom, specialite, courte
   presentation, annees d'etudes / d'experience.
   -------------------------------------------------------------------------- */
.hl-doc {
  position: relative;
  display: flex; flex-direction: column;
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
  transition: transform .4s var(--hl-ease), box-shadow .4s var(--hl-ease), border-color .4s;
}
.hl-doc:hover {
  transform: translateY(-10px);
  box-shadow: var(--shadow-lg);
  border-color: rgba(14,165,233,.4);
}
.hl-doc-media {
  position: relative;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  background: var(--hl-grad-soft);
}
.hl-doc-media img {
  width: 100%; height: 100%; object-fit: cover; object-position: top center;
  transition: transform .7s var(--hl-ease), filter .5s;
}
.hl-doc:hover .hl-doc-media img { transform: scale(1.08); }
.hl-doc-media .hl-doc-initials {
  position: absolute; inset: 0; display: grid; place-items: center;
  font-family: var(--font-title); font-weight: 800; font-size: 46px;
  color: var(--hl-sky-dark); background: var(--hl-grad-soft);
}
.hl-doc-media::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg, transparent 45%, rgba(3,28,48,.78) 100%);
  opacity: .85; transition: opacity .4s;
}
.hl-doc:hover .hl-doc-media::after { opacity: 1; }

.hl-doc-flags { position: absolute; z-index: 3; top: 12px; left: 12px; display: flex; flex-direction: column; gap: 6px; }
.hl-doc-spec {
  position: absolute; z-index: 3; left: 14px; right: 14px; bottom: 12px;
  color: #fff; font-size: 12.5px; font-weight: 700; letter-spacing: .03em;
  text-transform: uppercase; text-shadow: 0 2px 10px rgba(0,0,0,.5);
}
/* Barre d'actions qui remonte au survol (elle reste accessible au clavier). */
.hl-doc-hover {
  position: absolute; z-index: 4; left: 0; right: 0; bottom: 0;
  display: flex; gap: 8px; padding: 12px;
  background: linear-gradient(0deg, rgba(3,28,48,.92), rgba(3,28,48,0));
  transform: translateY(110%); opacity: 0;
  transition: transform .42s var(--hl-ease), opacity .3s;
}
.hl-doc:hover .hl-doc-hover,
.hl-doc:focus-within .hl-doc-hover { transform: none; opacity: 1; }
.hl-doc:hover .hl-doc-spec, .hl-doc:focus-within .hl-doc-spec { opacity: 0; }

.hl-doc-body { padding: 16px 18px 6px; flex: 1; }
.hl-doc-body h5 { font-size: 16px; margin-bottom: 3px; }
.hl-doc-body h5 a { color: var(--text-main); }
.hl-doc-body h5 a:hover { color: var(--hl-sky-dark); }
.hl-doc-role { font-size: 12.5px; font-weight: 700; color: var(--hl-sky-dark); display: block; margin-bottom: 8px; }
.hl-doc-bio {
  font-size: 13px; color: var(--text-muted); margin-bottom: 12px;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.hl-doc-meta {
  display: flex; flex-wrap: wrap; gap: 8px 14px;
  border-top: 1px dashed var(--border-color); padding-top: 10px;
  font-size: 12.5px; color: var(--text-muted);
}
.hl-doc-meta strong { color: var(--text-main); font-weight: 700; }
.hl-doc-meta i { color: var(--hl-sky); margin-right: 5px; }
.hl-doc-foot { padding: 12px 18px 18px; display: flex; gap: 8px; }
.hl-doc-foot .btn { flex: 1; }

/* Variante horizontale, pour l'annuaire en mode liste. */
.hl-doc.is-row { flex-direction: row; }
.hl-doc.is-row .hl-doc-media { width: 190px; flex: 0 0 190px; aspect-ratio: auto; }
.hl-doc.is-row .hl-doc-foot { padding-top: 0; }
@media (max-width: 767.98px) {
  .hl-doc.is-row { flex-direction: column; }
  .hl-doc.is-row .hl-doc-media { width: 100%; flex: none; aspect-ratio: 16 / 10; }
}

/* --------------------------------------------------------------------------
   V2.10 — CHIFFRES CLES ANIMES
   -------------------------------------------------------------------------- */
.hl-figures { display: grid; gap: 18px; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); }
.hl-figure {
  position: relative; overflow: hidden;
  padding: 30px 22px 26px;
  border-radius: var(--radius-lg);
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  text-align: center;
  transition: transform .42s var(--hl-ease), box-shadow .42s var(--hl-ease), color .42s;
}
.hl-figure::before {
  content: ""; position: absolute; inset: 0; opacity: 0;
  background: var(--hl-grad); transition: opacity .42s var(--hl-ease);
}
.hl-figure > * { position: relative; z-index: 2; }
.hl-figure:hover { transform: translateY(-10px); box-shadow: var(--hl-glow); }
.hl-figure:hover::before { opacity: 1; }
.hl-figure:hover .hl-figure-value,
.hl-figure:hover .hl-figure-label,
.hl-figure:hover .hl-figure-icon { color: #fff; }
.hl-figure:hover .hl-figure-icon { background: rgba(255,255,255,.18); box-shadow: none; }

.hl-figure-icon {
  width: 62px; height: 62px; margin: 0 auto 14px;
  display: grid; place-items: center;
  border-radius: 20px;
  background: var(--hl-grad-soft);
  color: var(--hl-sky-dark);
  font-size: 26px;
  box-shadow: var(--hl-ring);
  transition: background .42s, color .42s, transform .42s var(--hl-ease);
}
.hl-figure:hover .hl-figure-icon { transform: rotate(-8deg) scale(1.06); }
.hl-figure-value {
  font-family: var(--font-title); font-weight: 800;
  font-size: clamp(30px, 3.4vw, 44px); line-height: 1.05;
  color: var(--text-main); transition: color .42s;
  font-variant-numeric: tabular-nums;
}
.hl-figure-value .hl-figure-suffix { font-size: .55em; margin-left: 2px; }
.hl-figure-label {
  display: block; margin-top: 8px; font-size: 13.5px; font-weight: 600;
  color: var(--text-muted); transition: color .42s;
}
.hl-figure-spark {
  height: 4px; width: 54px; margin: 14px auto 0; border-radius: 100px;
  background: var(--hl-grad); opacity: .7;
}
.hl-figure:hover .hl-figure-spark { background: #fff; opacity: .9; }

/* --------------------------------------------------------------------------
   V2.11 — TEMOIGNAGES EN CARROUSEL
   -------------------------------------------------------------------------- */
.hl-carousel { position: relative; }
.hl-carousel-viewport { overflow: hidden; }
.hl-carousel-track {
  display: flex; gap: 20px;
  transition: transform .6s var(--hl-ease);
  will-change: transform;
}
.hl-carousel-slide { flex: 0 0 auto; width: 100%; }
@media (min-width: 768px)  { .hl-carousel-slide { width: calc((100% - 20px) / 2); } }
@media (min-width: 1200px) { .hl-carousel-slide { width: calc((100% - 40px) / 3); } }

.hl-carousel-nav {
  position: absolute; top: 50%; transform: translateY(-50%);
  width: 44px; height: 44px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--bg-surface); color: var(--hl-sky-dark);
  border: 1px solid var(--border-color); box-shadow: var(--shadow-md);
  z-index: 4; transition: all .25s;
}
.hl-carousel-nav:hover { background: var(--hl-grad); color: #fff; border-color: transparent; }
.hl-carousel-nav[disabled] { opacity: .35; cursor: not-allowed; }
.hl-carousel-nav.is-prev { left: -10px; }
.hl-carousel-nav.is-next { right: -10px; }
@media (max-width: 991.98px) { .hl-carousel-nav { display: none; } }

.hl-carousel-dots { display: flex; justify-content: center; gap: 8px; margin-top: 22px; }
.hl-carousel-dot {
  width: 9px; height: 9px; border-radius: 100px; border: 0;
  background: var(--border-color); transition: all .3s;
}
.hl-carousel-dot.is-active { width: 28px; background: var(--hl-grad); }

/* La carte de temoignage : au survol, fond en degrade bleu, texte en blanc. */
.hl-testi {
  position: relative; overflow: hidden; height: 100%;
  display: flex; flex-direction: column;
  padding: 28px 26px;
  border-radius: var(--radius-lg);
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  transition: transform .42s var(--hl-ease), box-shadow .42s var(--hl-ease), border-color .42s;
}
.hl-testi::before {
  content: ""; position: absolute; inset: 0; opacity: 0;
  background: var(--hl-grad); transition: opacity .42s var(--hl-ease);
}
.hl-testi > * { position: relative; z-index: 2; }
.hl-testi:hover {
  transform: translateY(-8px); box-shadow: var(--hl-glow); border-color: transparent;
}
.hl-testi:hover::before { opacity: 1; }
.hl-testi:hover, .hl-testi:hover p, .hl-testi:hover strong,
.hl-testi:hover span, .hl-testi:hover .hl-testi-quote { color: #fff; }
.hl-testi:hover .hl-testi-avatar { background: rgba(255,255,255,.2); color: #fff; }
.hl-testi:hover .hl-stars i { color: #fff; }

.hl-testi-quote { font-size: 30px; line-height: 1; color: var(--hl-sky); opacity: .55; transition: color .42s; }
.hl-testi-text {
  font-size: 14.5px; line-height: 1.75; color: var(--text-muted);
  flex: 1; margin: 12px 0 18px; transition: color .42s;
}
.hl-testi-who { display: flex; align-items: center; gap: 12px; }
.hl-testi-avatar {
  width: 46px; height: 46px; border-radius: 50%; flex: none;
  display: grid; place-items: center; object-fit: cover;
  background: var(--hl-grad-soft); color: var(--hl-sky-dark);
  font-weight: 800; font-size: 15px; transition: all .42s;
}
.hl-testi-who strong { display: block; font-size: 14.5px; color: var(--text-main); transition: color .42s; }
.hl-testi-who span { font-size: 12.5px; color: var(--text-muted); transition: color .42s; }

/* --------------------------------------------------------------------------
   V2.12 — SELECT RECHERCHABLE + RECHERCHE INSTANTANEE
   Le <select> natif reste dans le HTML (et fonctionne sans JavaScript) ; le
   script le masque et affiche ce composant a la place. Indispensable quand la
   liste depasse la centaine d'entrees, comme pour les services.
   -------------------------------------------------------------------------- */
.hl-select { position: relative; }
.hl-select-native { position: absolute; opacity: 0; pointer-events: none; width: 0; height: 0; }
.hl-select-btn {
  display: flex; align-items: center; gap: 10px; width: 100%;
  padding: 10px 14px;
  background: var(--bg-surface);
  border: 1.5px solid var(--border-color);
  border-radius: 12px;
  color: var(--text-main); font-size: 14px; font-weight: 600;
  text-align: left; transition: border-color .2s, box-shadow .2s;
}
.hl-select-btn:hover { border-color: var(--hl-sky-light); }
.hl-select.is-open .hl-select-btn,
.hl-select-btn:focus-visible {
  border-color: var(--hl-sky); box-shadow: 0 0 0 4px rgba(14,165,233,.14); outline: none;
}
.hl-select-btn .hl-select-value { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hl-select-btn .hl-select-value.is-placeholder { color: var(--text-muted); font-weight: 500; }
.hl-select-btn .hl-select-caret { color: var(--text-muted); font-size: 12px; transition: transform .25s; }
.hl-select.is-open .hl-select-caret { transform: rotate(180deg); }

.hl-select-panel {
  position: absolute; z-index: 1200; top: calc(100% + 6px); left: 0; right: 0;
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  border-radius: 14px;
  box-shadow: var(--shadow-lg);
  padding: 8px;
  display: none;
  animation: hl-pop .16s var(--hl-ease);
}
.hl-select.is-open .hl-select-panel { display: block; }
.hl-select.is-up .hl-select-panel { top: auto; bottom: calc(100% + 6px); }

.hl-select-search {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 10px; margin-bottom: 6px;
  background: var(--bg-surface-2);
  border: 1px solid var(--border-color);
  border-radius: 10px;
}
.hl-select-search i { color: var(--text-muted); font-size: 14px; }
.hl-select-search input {
  flex: 1; border: 0; background: transparent; outline: none;
  color: var(--text-main); font-size: 13.5px;
}
.hl-select-list { max-height: 268px; overflow-y: auto; overscroll-behavior: contain; }
.hl-select-list::-webkit-scrollbar { width: 8px; }
.hl-select-list::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 100px; }
.hl-select-opt {
  display: flex; align-items: center; gap: 9px;
  padding: 9px 11px; border-radius: 10px;
  font-size: 13.5px; color: var(--text-main); cursor: pointer;
}
.hl-select-opt:hover, .hl-select-opt.is-active { background: var(--hl-sky-soft); color: var(--hl-sky-dark); }
.hl-select-opt.is-selected { font-weight: 700; color: var(--hl-sky-dark); }
.hl-select-opt.is-selected::after { content: "\F26E"; font-family: "bootstrap-icons"; margin-left: auto; }
.hl-select-group {
  padding: 10px 11px 4px; font-size: 11px; font-weight: 800;
  letter-spacing: .08em; text-transform: uppercase; color: var(--text-muted);
}
.hl-select-empty { padding: 16px 11px; text-align: center; font-size: 13px; color: var(--text-muted); }

/* Champ de recherche instantanee */
.hl-livesearch { position: relative; }
.hl-livesearch input { padding-right: 76px; }
.hl-livesearch-clear {
  position: absolute; right: 44px; top: 50%; transform: translateY(-50%);
  border: 0; background: transparent; color: var(--text-muted); font-size: 15px;
  display: none;
}
.hl-livesearch.has-value .hl-livesearch-clear { display: block; }
.hl-livesearch-spin {
  position: absolute; right: 16px; top: 50%; transform: translateY(-50%);
  width: 16px; height: 16px; border-radius: 50%;
  border: 2px solid var(--hl-sky-soft); border-top-color: var(--hl-sky);
  animation: hl-spin .7s linear infinite; display: none;
}
.hl-livesearch.is-busy .hl-livesearch-spin { display: block; }

/* Resultat du filtrage cote client */
[data-hl-filterable].is-filtered-out { display: none !important; }
.hl-filter-empty { display: none; }
.hl-filter-empty.is-shown { display: block; }
.hl-filter-count { font-size: 13px; color: var(--text-muted); }

/* Barre de filtres */
.hl-filterbar {
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  border-radius: var(--radius-lg);
  padding: 18px;
  box-shadow: var(--shadow-sm);
}

/* --------------------------------------------------------------------------
   V2.13 — ENQUETE DE SATISFACTION : REPONSES VISIBLEMENT SELECTIONNEES
   Le reproche d'origine : rien ne signalait qu'une reponse etait cochee. On
   agit sur quatre signaux a la fois — bordure, fond, pastille, et une marque
   de validation — pour que ce soit lisible meme en lumiere forte.
   -------------------------------------------------------------------------- */
.hl-opt { position: relative; display: block; margin-bottom: 10px; }
.hl-opt input {
  position: absolute; opacity: 0; width: 0; height: 0;
}
.hl-opt-tile {
  display: flex; align-items: center; gap: 14px;
  padding: 14px 16px;
  background: var(--bg-surface);
  border: 2px solid var(--border-color);
  border-radius: 14px;
  cursor: pointer;
  transition: border-color .22s, background .22s, box-shadow .22s, transform .22s var(--hl-ease);
}
.hl-opt-tile:hover { border-color: var(--hl-sky-light); background: var(--bg-surface-2); transform: translateX(3px); }

.hl-opt-mark {
  flex: none; width: 26px; height: 26px;
  border: 2px solid var(--border-color);
  display: grid; place-items: center;
  color: transparent; font-size: 14px;
  transition: all .22s var(--hl-ease);
}
.hl-opt input[type="radio"] + .hl-opt-tile .hl-opt-mark { border-radius: 50%; }
.hl-opt input[type="checkbox"] + .hl-opt-tile .hl-opt-mark { border-radius: 8px; }
.hl-opt-text { flex: 1; font-size: 14.5px; font-weight: 600; color: var(--text-main); }
.hl-opt-hint { display: block; font-size: 12.5px; font-weight: 500; color: var(--text-muted); margin-top: 2px; }

.hl-opt input:checked + .hl-opt-tile {
  border-color: var(--hl-sky);
  background: var(--hl-sky-soft);
  box-shadow: 0 0 0 4px rgba(14,165,233,.13);
}
.hl-opt input:checked + .hl-opt-tile .hl-opt-mark {
  background: var(--hl-grad); border-color: transparent; color: #fff;
  transform: scale(1.06);
}
.hl-opt input:checked + .hl-opt-tile .hl-opt-text { color: var(--hl-sky-dark); }
.hl-opt input:focus-visible + .hl-opt-tile {
  outline: 3px solid rgba(14,165,233,.45); outline-offset: 2px;
}
.hl-opt input:disabled + .hl-opt-tile { opacity: .55; cursor: not-allowed; }

/* Echelle (Likert) : boutons alignes, avec la valeur choisie bien marquee. */
.hl-scale-row { display: flex; flex-wrap: wrap; gap: 10px; }
.hl-scale-item { position: relative; flex: 1 1 84px; }
.hl-scale-item input { position: absolute; opacity: 0; width: 0; height: 0; }
.hl-scale-tile {
  display: flex; flex-direction: column; align-items: center; gap: 4px;
  padding: 14px 8px; border-radius: 14px;
  border: 2px solid var(--border-color); background: var(--bg-surface);
  cursor: pointer; text-align: center;
  transition: all .22s var(--hl-ease);
}
.hl-scale-tile strong { font-family: var(--font-title); font-size: 20px; color: var(--text-main); transition: color .22s; }
.hl-scale-tile span { font-size: 11.5px; color: var(--text-muted); line-height: 1.25; }
.hl-scale-item input:checked + .hl-scale-tile {
  border-color: transparent; background: var(--hl-grad);
  box-shadow: 0 10px 26px -12px rgba(14,165,233,.85); transform: translateY(-4px);
}
.hl-scale-item input:checked + .hl-scale-tile strong,
.hl-scale-item input:checked + .hl-scale-tile span { color: #fff; }
.hl-scale-item input:focus-visible + .hl-scale-tile { outline: 3px solid rgba(14,165,233,.45); outline-offset: 2px; }

/* Etoiles */
.hl-rating { display: inline-flex; flex-direction: row-reverse; gap: 6px; }
.hl-rating label { font-size: 32px; color: var(--border-color); cursor: pointer; transition: transform .18s, color .18s; }
.hl-rating input:checked ~ label,
.hl-rating label:hover, .hl-rating label:hover ~ label { color: #f59e0b; }
.hl-rating label:hover { transform: scale(1.16); }
.hl-rating-value { font-weight: 800; color: var(--hl-sky-dark); margin-left: 12px; }

/* NPS 0 a 10 */
.hl-nps { display: flex; flex-wrap: wrap; gap: 7px; }
.hl-nps-item { position: relative; }
.hl-nps-item input { position: absolute; opacity: 0; width: 0; height: 0; }
.hl-nps-tile {
  width: 46px; height: 46px; display: grid; place-items: center;
  border-radius: 12px; border: 2px solid var(--border-color);
  background: var(--bg-surface); font-weight: 800; cursor: pointer;
  transition: all .2s var(--hl-ease);
}
.hl-nps-item input:checked + .hl-nps-tile {
  color: #fff; border-color: transparent; transform: translateY(-4px) scale(1.06);
  box-shadow: var(--shadow-md);
}
/* Les couleurs suivent la convention NPS : detracteur / passif / promoteur. */
.hl-nps-item.is-detractor input:checked + .hl-nps-tile { background: var(--hl-red); }
.hl-nps-item.is-passive   input:checked + .hl-nps-tile { background: var(--hl-amber); }
.hl-nps-item.is-promoter  input:checked + .hl-nps-tile { background: var(--hl-green); }
.hl-nps-legend { display: flex; justify-content: space-between; font-size: 12px; color: var(--text-muted); margin-top: 8px; }

/* Grille de questions */
.hl-grid-table { width: 100%; border-collapse: separate; border-spacing: 0; }
.hl-grid-table th { font-size: 12.5px; font-weight: 700; color: var(--text-muted); padding: 10px; text-align: center; }
.hl-grid-table td { padding: 10px; text-align: center; border-top: 1px solid var(--border-color); }
.hl-grid-table td:first-child, .hl-grid-table th:first-child { text-align: left; }
.hl-grid-radio { width: 24px; height: 24px; accent-color: var(--hl-sky); }

/* Carte d'une enquete dans la liste */
.hl-survey-card {
  position: relative; height: 100%; display: flex; flex-direction: column;
  background: var(--bg-surface); border: 1px solid var(--border-color);
  border-radius: var(--radius-lg); overflow: hidden;
  transition: transform .4s var(--hl-ease), box-shadow .4s var(--hl-ease), border-color .3s;
}
.hl-survey-card:hover { transform: translateY(-8px); box-shadow: var(--hl-glow); border-color: rgba(14,165,233,.4); }
.hl-survey-cover { height: 132px; background: var(--hl-grad); position: relative; overflow: hidden; }
.hl-survey-cover img { width: 100%; height: 100%; object-fit: cover; }
.hl-survey-cover::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(135deg, rgba(2,132,199,.75), rgba(56,189,248,.35));
}
.hl-survey-cover i {
  position: absolute; z-index: 2; right: 18px; bottom: 12px;
  font-size: 46px; color: rgba(255,255,255,.32);
}
.hl-survey-body { padding: 20px; flex: 1; }
.hl-survey-foot { padding: 0 20px 20px; }
.hl-survey-meta { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 12.5px; color: var(--text-muted); margin: 10px 0 14px; }
.hl-survey-meta i { color: var(--hl-sky); margin-right: 4px; }

/* Progression de l'enquete */
.hl-survey-progress {
  position: sticky; top: 74px; z-index: 20;
  background: var(--bg-surface); border: 1px solid var(--border-color);
  border-radius: 100px; padding: 10px 16px; box-shadow: var(--shadow-md);
  display: flex; align-items: center; gap: 14px; margin-bottom: 26px;
}
.hl-survey-progress .progress { flex: 1; height: 8px; background: var(--bg-surface-2); border-radius: 100px; }
.hl-survey-progress .progress-bar { background: var(--hl-grad); border-radius: 100px; }
.hl-survey-progress strong { font-size: 13px; white-space: nowrap; }

/* Bloc d'une question */
.hl-question {
  background: var(--bg-surface); border: 1px solid var(--border-color);
  border-radius: var(--radius-lg); padding: 26px; margin-bottom: 20px;
  transition: border-color .3s, box-shadow .3s;
}
.hl-question.is-answered { border-color: rgba(16,185,129,.45); }
.hl-question.is-answered .hl-question-num { background: var(--hl-grad-life); }
.hl-question:focus-within { box-shadow: var(--shadow-md); }
.hl-question-num {
  width: 34px; height: 34px; border-radius: 11px; flex: none;
  display: grid; place-items: center;
  background: var(--hl-grad); color: #fff; font-weight: 800; font-size: 14px;
}
.hl-question-required { color: var(--hl-red); margin-left: 4px; }

/* --------------------------------------------------------------------------
   V2.14 — ORGANIGRAMME DE L'EQUIPE
   La hierarchie demandee : 1 direction generale, 1.x sous-directions,
   1.x.y departements, 1.x.y.z services (+ major). Les services sans
   departement se placent au meme rang que les chefs de departement.
   -------------------------------------------------------------------------- */
.hl-org { position: relative; }
.hl-org-level { position: relative; }
.hl-org-level + .hl-org-level { margin-top: 26px; }

.hl-org-node {
  position: relative;
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  border-radius: var(--radius);
  padding: 16px 18px;
  display: flex; gap: 14px; align-items: flex-start;
  transition: transform .35s var(--hl-ease), box-shadow .35s var(--hl-ease), border-color .3s;
}
.hl-org-node:hover { transform: translateY(-4px); box-shadow: var(--shadow-md); border-color: rgba(14,165,233,.4); }

.hl-org-code {
  flex: none; min-width: 46px; height: 30px; padding: 0 10px;
  display: grid; place-items: center; border-radius: 9px;
  background: var(--hl-grad-soft); color: var(--hl-sky-dark);
  font-weight: 800; font-size: 12.5px; letter-spacing: .04em;
  font-variant-numeric: tabular-nums;
}
.hl-org-photo {
  width: 56px; height: 56px; border-radius: 14px; flex: none; object-fit: cover;
  background: var(--hl-grad-soft); color: var(--hl-sky-dark);
  display: grid; place-items: center; font-weight: 800;
}
.hl-org-name { font-family: var(--font-title); font-weight: 700; font-size: 15px; color: var(--text-main); margin: 0; }
.hl-org-job { font-size: 12.5px; color: var(--hl-sky-dark); font-weight: 700; }
.hl-org-unit { font-size: 12.5px; color: var(--text-muted); }
.hl-org-extra { font-size: 12.5px; color: var(--text-muted); margin-top: 6px; }
.hl-org-extra strong { color: var(--text-main); }

/* Niveau 1 : la direction generale, mise en avant. */
.hl-org-root {
  background: var(--hl-grad-deep); color: #fff; border: 0;
  box-shadow: var(--hl-glow);
  padding: 26px 28px;
}
.hl-org-root .hl-org-name, .hl-org-root .hl-org-job, .hl-org-root .hl-org-unit, .hl-org-root .hl-org-extra { color: #fff; }
.hl-org-root .hl-org-job { color: #bae6fd; }
.hl-org-root .hl-org-code { background: rgba(255,255,255,.18); color: #fff; }
.hl-org-root .hl-org-photo { width: 84px; height: 84px; border: 3px solid rgba(255,255,255,.35); }

/* Traits de liaison : une bordure gauche + un trait horizontal par noeud. */
.hl-org-branch { position: relative; margin-left: 26px; padding-left: 30px; }
.hl-org-branch::before {
  content: ""; position: absolute; left: 0; top: -14px; bottom: 28px;
  width: 2px; background: linear-gradient(180deg, var(--hl-sky-light), var(--border-color));
  border-radius: 2px;
}
.hl-org-branch > .hl-org-item { position: relative; margin-top: 14px; }
.hl-org-branch > .hl-org-item::before {
  content: ""; position: absolute; left: -30px; top: 30px;
  width: 30px; height: 2px; background: var(--border-color); border-radius: 2px;
}
@media (max-width: 767.98px) {
  .hl-org-branch { margin-left: 8px; padding-left: 16px; }
  .hl-org-branch > .hl-org-item::before { left: -16px; width: 16px; }
}

.hl-org-sub {
  display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px;
  padding-top: 10px; border-top: 1px dashed var(--border-color);
}
.hl-org-pill {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 5px 11px; border-radius: 100px;
  background: var(--bg-surface-2); border: 1px solid var(--border-color);
  font-size: 12px; font-weight: 600; color: var(--text-muted);
}
.hl-org-pill i { color: var(--hl-sky); }
.hl-org-pill.is-major { background: rgba(16,185,129,.10); border-color: rgba(16,185,129,.3); color: #047857; }
.hl-org-pill.is-deputy { background: rgba(139,92,246,.10); border-color: rgba(139,92,246,.3); color: #6d28d9; }

/* Repere de niveau, a gauche des groupes */
.hl-org-tag {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 11.5px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  color: var(--text-muted); margin-bottom: 10px;
}
.hl-org-tag::before { content: ""; width: 22px; height: 2px; background: var(--hl-grad); border-radius: 2px; }

/* --------------------------------------------------------------------------
   V2.15 — PAGE « A PROPOS » REVUE
   -------------------------------------------------------------------------- */
.hl-about-hero {
  position: relative; overflow: hidden;
  border-radius: var(--radius-lg);
  background: var(--hl-grad-deep);
  color: #fff; padding: 46px 40px;
}
.hl-about-hero::before {
  content: ""; position: absolute; width: 520px; height: 520px; right: -160px; top: -220px;
  border-radius: 50%; background: rgba(255,255,255,.07);
}
.hl-about-hero > * { position: relative; z-index: 2; }
.hl-about-hero h1, .hl-about-hero h2 { color: #fff; }
.hl-about-hero p { color: rgba(255,255,255,.88); }

.hl-about-media { position: relative; }
.hl-about-media img {
  width: 100%; border-radius: var(--radius-lg); object-fit: cover;
  box-shadow: var(--shadow-lg);
}
/* Vignette decalee, pour casser la monotonie des blocs texte/image. */
.hl-about-media .hl-about-media-2 {
  position: absolute; right: -18px; bottom: -28px; width: 46%;
  border: 6px solid var(--bg-surface); border-radius: var(--radius);
}
.hl-about-badge {
  position: absolute; left: -18px; top: 26px;
  background: var(--bg-surface); border-radius: var(--radius);
  box-shadow: var(--shadow-lg); padding: 14px 18px;
  display: flex; align-items: center; gap: 12px;
}
.hl-about-badge i { font-size: 26px; color: var(--hl-sky); }
.hl-about-badge strong { display: block; font-family: var(--font-title); font-size: 20px; }
.hl-about-badge span { font-size: 12px; color: var(--text-muted); }
@media (max-width: 991.98px) {
  .hl-about-media .hl-about-media-2, .hl-about-badge { position: static; width: 100%; margin-top: 14px; border-width: 0; }
}

.hl-value-card {
  height: 100%; padding: 26px 24px;
  border-radius: var(--radius-lg);
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  position: relative; overflow: hidden;
  transition: transform .4s var(--hl-ease), box-shadow .4s var(--hl-ease);
}
.hl-value-card::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 3px;
  background: var(--hl-grad); transform: scaleX(0); transform-origin: left;
  transition: transform .45s var(--hl-ease);
}
.hl-value-card:hover { transform: translateY(-8px); box-shadow: var(--shadow-lg); }
.hl-value-card:hover::after { transform: scaleX(1); }
.hl-value-card .hl-icon-box { transition: transform .4s var(--hl-ease); }
.hl-value-card:hover .hl-icon-box { transform: rotate(-8deg) scale(1.08); }

/* Mot du directeur */
.hl-director {
  position: relative; overflow: hidden;
  border-radius: var(--radius-lg);
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  box-shadow: var(--shadow-md);
}
.hl-director-media { position: relative; min-height: 100%; background: var(--hl-grad-soft); }
.hl-director-media img { width: 100%; height: 100%; object-fit: cover; object-position: top center; }
.hl-director-body { padding: 34px; }
.hl-director-quote {
  font-family: var(--font-title); font-size: clamp(17px, 1.6vw, 21px);
  line-height: 1.55; color: var(--text-main); font-weight: 600;
  border-left: 4px solid var(--hl-sky); padding-left: 18px; margin-bottom: 18px;
}
.hl-director-sign { display: flex; align-items: center; gap: 14px; margin-top: 20px; }
.hl-director-sign img { max-height: 54px; width: auto; }

/* --------------------------------------------------------------------------
   V2.16 — PRESTATIONS SANS PRIX
   Sur le site public, on ne montre plus de tarif : le montant est annonce au
   recapitulatif du rendez-vous, une fois le motif et le praticien connus.
   -------------------------------------------------------------------------- */
.hl-public-scope .hl-price,
.hl-public-scope .hl-price-old { display: none !important; }

.hl-prestation { transition: transform .4s var(--hl-ease), box-shadow .4s var(--hl-ease), border-color .3s; }
.hl-prestation:hover { transform: translateY(-8px); box-shadow: var(--hl-glow); border-color: rgba(14,165,233,.35); }
.hl-prestation-media::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg, transparent 55%, rgba(3,28,48,.55) 100%);
  opacity: 0; transition: opacity .4s;
}
.hl-prestation:hover .hl-prestation-media::after { opacity: 1; }
.hl-prestation-icon {
  position: absolute; z-index: 3; right: 14px; bottom: -20px;
  width: 44px; height: 44px; border-radius: 14px;
  display: grid; place-items: center;
  background: var(--hl-grad); color: #fff; font-size: 19px;
  box-shadow: var(--hl-glow); transition: transform .4s var(--hl-ease);
}
.hl-prestation:hover .hl-prestation-icon { transform: rotate(-10deg) scale(1.1); }

/* --------------------------------------------------------------------------
   V2.17 — DIVERS
   -------------------------------------------------------------------------- */
.hl-partner { transition: transform .35s var(--hl-ease), box-shadow .35s var(--hl-ease), filter .35s; filter: grayscale(1); opacity: .72; }
.hl-partner:hover { transform: translateY(-6px); box-shadow: var(--shadow-md); filter: none; opacity: 1; }

.hl-quick { transition: background .35s var(--hl-ease), color .35s; position: relative; overflow: hidden; }
.hl-quick::before {
  content: ""; position: absolute; inset: 0; background: var(--hl-grad);
  transform: translateY(100%); transition: transform .4s var(--hl-ease); z-index: 0;
}
.hl-quick:hover::before { transform: none; }
.hl-quick > * { position: relative; z-index: 2; }
.hl-quick:hover, .hl-quick:hover strong, .hl-quick:hover span, .hl-quick:hover i { color: #fff !important; }

.hl-card { transition: transform .4s var(--hl-ease), box-shadow .4s var(--hl-ease), border-color .3s; }
.hl-card:hover { border-color: rgba(14,165,233,.32); }

.btn { transition: all .28s var(--hl-ease); }
.btn-sky { background: var(--hl-grad); border: 0; box-shadow: 0 10px 24px -14px rgba(14,165,233,.9); }
.btn-sky:hover { transform: translateY(-2px); box-shadow: var(--hl-glow); }
.btn-outline-sky:hover { transform: translateY(-2px); }

/* Bandeau d'appel a l'action */
.hl-cta { background-size: cover; background-position: center; border-radius: var(--radius-lg); }
.hl-cta::before { background: linear-gradient(102deg, rgba(4,32,56,.94), rgba(2,132,199,.78)); }

/* Fil d'actualite / en-tete de page */
.hl-pagehead { position: relative; overflow: hidden; }
.hl-pagehead::before {
  content: ""; position: absolute; width: 420px; height: 420px; right: -130px; top: -200px;
  border-radius: 50%; background: rgba(255,255,255,.07);
}

/* Squelette de chargement, pour les listes filtrees cote serveur */
.hl-skeleton {
  background: linear-gradient(90deg, var(--bg-surface-2) 25%, var(--border-color) 37%, var(--bg-surface-2) 63%);
  background-size: 400% 100%;
  animation: hl-shine 1.4s ease infinite;
  border-radius: var(--radius);
}

/* Navigation compactee au defilement */
.hl-navbar { transition: padding .3s var(--hl-ease), box-shadow .3s var(--hl-ease), background .3s; }
.hl-navbar.is-stuck { box-shadow: 0 10px 30px -18px rgba(15,23,42,.45); backdrop-filter: saturate(1.4) blur(6px); }
.hl-navbar.is-stuck .hl-logo img { height: 38px !important; }

/* Etat « occupe » d'un formulaire de filtres envoye automatiquement */
form.is-busy { opacity: .65; pointer-events: none; transition: opacity .2s; }

/* En-tete de page avec photo de fond : un voile bleu est pose PAR-DESSUS
   l'image (ombre interieure a tres large etalement), sinon le titre blanc
   devient illisible des que la photo est claire. Le contenu reste au-dessus
   du voile grace au z-index du conteneur. */
.hl-pagehead > .container { position: relative; z-index: 3; }
.hl-pagehead[style*="background-image"] {
  background-color: #0c4a6e;
  box-shadow: inset 0 0 0 100vmax rgba(8, 47, 76, .82);
}

/* ==========================================================================
   ==========================================================================
   AJUSTEMENTS — VERSION 3
   Bandeau de bannieres, prestations, poles : mise en forme revue.
   ==========================================================================
   ========================================================================== */

/* --------------------------------------------------------------------------
   V3.1 — CARROUSEL DE BANNIERES
   Les fleches et les pastilles de Bootstrap sont a peine visibles sur une
   photo : on les redessine en surfaces pleines, avec un contraste suffisant
   quelle que soit l'image chargee derriere.
   -------------------------------------------------------------------------- */
.hl-slider .carousel-control-prev,
.hl-slider .carousel-control-next {
  width: 62px;
  opacity: 1;
  z-index: 5;
}
.hl-slider .carousel-control-prev-icon,
.hl-slider .carousel-control-next-icon {
  width: 50px; height: 50px;
  background-image: none;
  background: rgba(255, 255, 255, .14);
  border: 1.5px solid rgba(255, 255, 255, .38);
  border-radius: 50%;
  backdrop-filter: blur(6px);
  display: grid; place-items: center;
  transition: background .25s var(--hl-ease), border-color .25s, transform .25s var(--hl-ease);
}
.hl-slider .carousel-control-prev-icon::before,
.hl-slider .carousel-control-next-icon::before {
  font-family: "bootstrap-icons";
  font-size: 22px;
  color: #fff;
  line-height: 1;
}
.hl-slider .carousel-control-prev-icon::before { content: "\F284"; margin-right: 3px; }
.hl-slider .carousel-control-next-icon::before { content: "\F285"; margin-left: 3px; }
.hl-slider .carousel-control-prev:hover .carousel-control-prev-icon,
.hl-slider .carousel-control-next:hover .carousel-control-next-icon {
  background: var(--hl-sky);
  border-color: var(--hl-sky);
  transform: scale(1.08);
}

.hl-slider .carousel-indicators {
  margin-bottom: 26px;
  gap: 9px;
}
.hl-slider .carousel-indicators [data-bs-target] {
  width: 10px; height: 10px;
  border-radius: 100px;
  border: 0;
  background: rgba(255, 255, 255, .45);
  opacity: 1;
  transition: width .35s var(--hl-ease), background .35s;
}
.hl-slider .carousel-indicators .active {
  width: 34px;
  background: #fff;
}

/* Numero du slide courant : repere utile quand les photos se ressemblent. */
.hl-slide-count {
  position: absolute; z-index: 4; right: 34px; bottom: 30px;
  display: flex; align-items: baseline; gap: 4px;
  color: rgba(255, 255, 255, .75);
  font-family: var(--font-title);
  font-size: 13px; font-weight: 600; letter-spacing: .08em;
}
.hl-slide-count strong { font-size: 26px; color: #fff; }
@media (max-width: 991.98px) { .hl-slide-count { display: none; } }

/* Le titre de la banniere reste la premiere chose lue : on lui donne une
   taille franche et une ombre portee, sinon il se noie dans la photo. */
.hl-slide-content h2 {
  font-size: clamp(28px, 4.2vw, 52px);
  line-height: 1.1;
  letter-spacing: -.025em;
  margin-bottom: 14px;
}
.hl-slide-content p {
  font-size: clamp(15px, 1.3vw, 18px);
  line-height: 1.65;
  max-width: 620px;
  color: rgba(255, 255, 255, .9);
  margin-bottom: 26px;
}

/* --------------------------------------------------------------------------
   V3.2 — PRESTATIONS
   Refonte de la vignette : l'ancienne empilait une photo, un nom et deux
   boutons de meme poids, sans hierarchie. On distingue desormais quatre
   niveaux de lecture — rattachement, intitule, description, action — et on
   ajoute une pastille d'icone a cheval sur la photo pour ancrer l'oeil.
   -------------------------------------------------------------------------- */
.hl-service {
  position: relative;
  display: flex; flex-direction: column;
  height: 100%;
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
  transition: transform .42s var(--hl-ease), box-shadow .42s var(--hl-ease), border-color .3s;
}
.hl-service::before {
  content: ""; position: absolute; z-index: 5; top: 0; left: 0; right: 0; height: 3px;
  background: var(--hl-grad);
  transform: scaleX(0); transform-origin: left;
  transition: transform .45s var(--hl-ease);
}
.hl-service:hover {
  transform: translateY(-8px);
  box-shadow: var(--hl-glow);
  border-color: rgba(14, 165, 233, .35);
}
.hl-service:hover::before { transform: scaleX(1); }

.hl-service-media {
  position: relative;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: var(--hl-grad-soft);
}
.hl-service-media img {
  width: 100%; height: 100%; object-fit: cover;
  transition: transform .8s var(--hl-ease);
}
.hl-service:hover .hl-service-media img { transform: scale(1.07); }
.hl-service-media::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(3, 28, 48, 0) 40%, rgba(3, 28, 48, .62) 100%);
}

.hl-service-tag {
  position: absolute; z-index: 3; top: 12px; left: 12px;
  background: rgba(255, 255, 255, .92);
  color: var(--hl-sky-dark);
  border-radius: 100px;
  padding: 5px 12px;
  font-size: 11px; font-weight: 800;
  letter-spacing: .07em; text-transform: uppercase;
}
.hl-service-icon {
  position: absolute; z-index: 4; right: 16px; bottom: -22px;
  width: 48px; height: 48px;
  display: grid; place-items: center;
  border-radius: 15px;
  background: var(--hl-grad);
  color: #fff; font-size: 21px;
  box-shadow: 0 12px 26px -12px rgba(14, 165, 233, .95);
  transition: transform .45s var(--hl-ease);
}
.hl-service:hover .hl-service-icon { transform: rotate(-10deg) scale(1.1); }

.hl-service-body {
  flex: 1;
  padding: 18px 20px 6px;
}
/* Rattachement : discret, en capitales espacees, au-dessus de l'intitule. */
.hl-service-unit {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 11px; font-weight: 800;
  letter-spacing: .09em; text-transform: uppercase;
  color: var(--hl-sky-dark);
  margin-bottom: 8px;
}
.hl-service-unit i { font-size: 12px; }
.hl-service-body h5 {
  font-size: 17px;
  line-height: 1.32;
  margin-bottom: 8px;
}
.hl-service-body h5 a { color: var(--text-main); transition: color .25s; }
.hl-service:hover .hl-service-body h5 a { color: var(--hl-sky-dark); }
.hl-service-text {
  font-size: 13.5px;
  line-height: 1.68;
  color: var(--text-muted);
  margin-bottom: 0;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

.hl-service-foot {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 14px 20px 18px;
  margin-top: 12px;
  border-top: 1px dashed var(--border-color);
}
.hl-service-link {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 13.5px; font-weight: 700;
  color: var(--hl-sky-dark);
}
.hl-service-link i { transition: transform .3s var(--hl-ease); }
.hl-service-link:hover i, .hl-service:hover .hl-service-link i { transform: translateX(4px); }
.hl-service-more {
  width: 36px; height: 36px; flex: none;
  display: grid; place-items: center;
  border-radius: 11px;
  background: var(--bg-surface-2);
  border: 1px solid var(--border-color);
  color: var(--text-muted);
  transition: all .28s var(--hl-ease);
}
.hl-service-more:hover {
  background: var(--hl-grad); border-color: transparent; color: #fff;
  transform: translateY(-2px);
}

/* --------------------------------------------------------------------------
   V3.3 — POLES
   Format revu : un numero en filigrane, un intitule franc, le nombre de
   praticiens, puis les specialites. Au survol, la carte entiere bascule en
   degrade et tout le texte passe en blanc — le survol n'etait jusque-la
   qu'un leger deplacement, ce qui ne se remarquait pas.
   -------------------------------------------------------------------------- */
.hl-pole {
  position: relative;
  height: 100%;
  display: flex; flex-direction: column;
  padding: 28px 24px 24px;
  border-radius: var(--radius-lg);
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  overflow: hidden;
  transition: transform .45s var(--hl-ease), box-shadow .45s var(--hl-ease), border-color .3s;
}
.hl-pole::before {
  content: ""; position: absolute; inset: 0; opacity: 0;
  background: var(--hl-grad);
  transition: opacity .45s var(--hl-ease);
}
.hl-pole > * { position: relative; z-index: 2; }
.hl-pole:hover {
  transform: translateY(-10px);
  box-shadow: var(--hl-glow);
  border-color: transparent;
}
.hl-pole:hover::before { opacity: 1; }

/* Numero en filigrane : repere de lecture, jamais un element a cliquer. */
.hl-pole-index {
  position: absolute; z-index: 1; top: 6px; right: 14px;
  font-family: var(--font-title);
  font-size: 76px; font-weight: 800; line-height: 1;
  color: var(--hl-sky);
  opacity: .07;
  pointer-events: none;
  transition: color .45s, opacity .45s;
}
.hl-pole:hover .hl-pole-index { color: #fff; opacity: .22; }

.hl-pole-icon {
  width: 56px; height: 56px;
  display: grid; place-items: center;
  border-radius: 18px;
  background: var(--hl-grad-soft);
  color: var(--hl-sky-dark);
  font-size: 24px;
  margin-bottom: 16px;
  box-shadow: var(--hl-ring);
  transition: background .45s, color .45s, transform .45s var(--hl-ease), box-shadow .45s;
}
.hl-pole:hover .hl-pole-icon {
  background: rgba(255, 255, 255, .18);
  color: #fff;
  box-shadow: none;
  transform: rotate(-8deg) scale(1.06);
}

.hl-pole-title {
  font-family: var(--font-title);
  font-size: 18px; font-weight: 700;
  line-height: 1.3; letter-spacing: -.015em;
  color: var(--text-main);
  margin-bottom: 6px;
  transition: color .45s;
}
.hl-pole-count {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 12.5px; font-weight: 700;
  color: var(--hl-sky-dark);
  background: var(--hl-sky-soft);
  border-radius: 100px;
  padding: 4px 11px;
  margin-bottom: 16px;
  transition: background .45s, color .45s;
}
.hl-pole:hover .hl-pole-title { color: #fff; }
.hl-pole:hover .hl-pole-count { background: rgba(255, 255, 255, .2); color: #fff; }

.hl-pole-list { list-style: none; padding: 0; margin: 0 0 4px; flex: 1; }
.hl-pole-list li + li { margin-top: 2px; }
.hl-pole-list a {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 0;
  font-size: 13.5px; font-weight: 600;
  color: var(--text-muted);
  border-bottom: 1px solid transparent;
  transition: color .3s, padding-left .3s var(--hl-ease);
}
.hl-pole-list a i { font-size: 11px; color: var(--hl-sky); transition: color .45s, transform .3s var(--hl-ease); }
.hl-pole-list a:hover { padding-left: 5px; color: var(--hl-sky-dark); }
.hl-pole-list a:hover i { transform: translateX(3px); }
.hl-pole:hover .hl-pole-list a { color: rgba(255, 255, 255, .92); }
.hl-pole:hover .hl-pole-list a i { color: rgba(255, 255, 255, .75); }
.hl-pole:hover .hl-pole-list a:hover { color: #fff; }

.hl-pole-more {
  display: inline-flex; align-items: center; gap: 7px;
  margin-top: 14px; padding-top: 14px;
  border-top: 1px dashed var(--border-color);
  font-size: 13px; font-weight: 700;
  color: var(--hl-sky-dark);
  transition: color .45s, border-color .45s;
}
.hl-pole-more i { transition: transform .3s var(--hl-ease); }
.hl-pole:hover .hl-pole-more { color: #fff; border-color: rgba(255, 255, 255, .28); }
.hl-pole:hover .hl-pole-more i { transform: translateX(4px); }

/* --------------------------------------------------------------------------
   V3.4 — TITRES DE SECTION : HIERARCHIE PLUS NETTE
   -------------------------------------------------------------------------- */
.hl-title {
  font-size: clamp(23px, 2.5vw, 34px);
  line-height: 1.2;
  letter-spacing: -.025em;
}
.hl-subtitle {
  font-size: 15px;
  line-height: 1.7;
  color: var(--text-muted);
  max-width: 680px;
}
.hl-eyebrow {
  font-size: 11.5px;
  text-transform: uppercase;
}

/* Pastilles de specialite : plus lisibles, avec un survol en degrade. */
.hl-chip {
  font-size: 13px; font-weight: 600;
  transition: all .28s var(--hl-ease);
}
.hl-chip:hover {
  background: var(--hl-grad);
  border-color: transparent;
  color: #fff;
  transform: translateY(-3px);
  box-shadow: 0 10px 20px -12px rgba(14, 165, 233, .9);
}
.hl-chip:hover i, .hl-chip:hover .hl-badge { color: #fff; }
.hl-chip:hover .hl-badge { background: rgba(255, 255, 255, .22); }

/* La pastille d'icone chevauche le bas de la photo. Le rognage necessaire au
   zoom de l'image est donc confie a un calque interieur : le conteneur, lui,
   laisse la pastille depasser au lieu de la couper en deux. */
.hl-service-media { overflow: visible; }
.hl-service-clip {
  position: absolute; inset: 0;
  overflow: hidden;
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;
}
.hl-service-clip img { width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--hl-ease); }
.hl-service:hover .hl-service-clip img { transform: scale(1.07); }
.hl-service-media::after { border-radius: var(--radius-lg) var(--radius-lg) 0 0; }

/* La carte est une colonne flex : sans cette ligne, la pastille du nombre de
   praticiens s'etire sur toute la largeur au lieu d'epouser son texte. */
.hl-pole-count { align-self: flex-start; }

/* Le nombre de bannieres n'est plus plafonne : les pastilles de position
   doivent donc pouvoir passer a la ligne plutot que de deborder de l'ecran
   quand une dizaine de bannieres sont publiees. */
.hl-slider .carousel-indicators { flex-wrap: wrap; padding-inline: 70px; }

/* ==========================================================================
   V3.5 — LE PANNEAU D'UN SELECT DOIT PASSER DEVANT LES RESULTATS
   --------------------------------------------------------------------------
   Symptome : en ouvrant « Spécialité », la liste s'affichait DERRIERE les
   cartes de praticiens et se retrouvait coupee net.

   Cause : `z-index` ne compare que des elements du MEME contexte
   d'empilement. Le panneau porte bien z-index 1200, mais son ancetre — le
   formulaire de filtres — n'en cree aucun : le panneau concourt donc au
   niveau de la section. Or chaque carte animee porte
   `will-change: opacity, transform`, et cette seule propriete suffit a creer
   un contexte d'empilement. Les cartes, situees plus bas dans le document,
   passaient donc devant.

   Trois corrections, chacune utile seule, ensemble sures :
   ========================================================================== */

/* 1. `will-change` n'a d'interet que PENDANT l'animation. Une fois la carte
      apparue, on le libere : plus de contexte d'empilement parasite, et le
      navigateur cesse de reserver une couche graphique pour rien. */
[data-hl-reveal].is-visible { will-change: auto; }

/* 2. La barre de filtres devient elle-meme un contexte d'empilement, place
      au-dessus des resultats. Tout ce qu'elle contient suit. */
.hl-filterbar { position: relative; z-index: 60; }

/* 3. Le select ouvert prend le dessus sur ses voisins immediats — le champ de
      recherche et les autres listes de la meme rangee. */
.hl-select { z-index: 1; }
.hl-select.is-open { z-index: 1200; }

/* 4. Filet de securite : n'importe quel conteneur abritant un select ouvert
      est eleve, meme hors de la barre de filtres (encarts, cartes, sections).
      `:has()` n'est pas connu des navigateurs les plus anciens — d'ou les
      trois regles precedentes, qui couvrent deja le cas courant. */
form:has(.hl-select.is-open),
.hl-card:has(.hl-select.is-open),
.hl-card-body:has(.hl-select.is-open),
section:has(.hl-select.is-open) {
  position: relative;
  z-index: 1200;
}

/* ==========================================================================
   V4 — FORMULAIRES PUBLICS
   --------------------------------------------------------------------------
   Rendu des formulaires construits depuis le back-office. Les tuiles de choix
   reutilisent `hl-opt`, deja mis au point pour les enquetes : un visiteur
   passant d'un formulaire a une enquete retrouve les memes reperes.
   ========================================================================== */

.hl-form-card {
  background: var(--bg-surface);
  border: 1px solid var(--border-color);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
  padding: 32px;
}
@media (max-width: 575.98px) { .hl-form-card { padding: 22px 18px; } }

.hl-form-field .form-label {
  font-size: 14.5px;
  font-weight: 600;
  color: var(--text-main);
  margin-bottom: 6px;
}
.hl-required { color: var(--hl-red); margin-left: 3px; font-weight: 700; }

/* La note est desormais SOUS le champ : la marge passe donc au-dessus. */
.hl-form-help {
  display: block;
  font-size: 12.5px;
  color: var(--text-muted);
  margin-top: 6px;
  line-height: 1.5;
}

/* L'erreur se lit sans avoir a chercher : bordure rouge sur le champ ET
   message sous celui-ci. La couleur seule ne suffit pas — elle echappe aux
   daltoniens comme aux ecrans mal calibres. */
.hl-form-error {
  display: flex; align-items: center; gap: 6px;
  font-size: 12.5px; font-weight: 600;
  color: var(--hl-red);
  margin-top: 6px;
}
.hl-form-error::before { content: "\F33A"; font-family: "bootstrap-icons"; font-size: 13px; }
.hl-form-field.is-invalid .form-control,
.hl-form-field.is-invalid .form-select {
  border-color: var(--hl-red);
  box-shadow: 0 0 0 3px rgba(239, 68, 68, .14);
}

/* Titre de section : il decoupe un formulaire long en etapes lisibles. */
.hl-form-section {
  border-top: 1px solid var(--border-color);
  padding-top: 22px;
  margin-top: 8px;
}
.hl-form-section:first-child { border-top: 0; padding-top: 0; margin-top: 0; }
.hl-form-section h3 {
  font-family: var(--font-title);
  font-size: 18px;
  letter-spacing: -.02em;
  margin: 0 0 4px;
}
.hl-form-section p { font-size: 13.5px; color: var(--text-muted); margin: 0; }

.hl-form-choices { display: flex; flex-direction: column; gap: 8px; }
.hl-form-choices .hl-opt { margin-bottom: 0; }

.hl-form-foot {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: 14px;
  margin-top: 28px; padding-top: 22px;
  border-top: 1px solid var(--border-color);
}

/* ---- Page de confirmation ---- */
.hl-form-done {
  width: 72px; height: 72px; margin: 0 auto;
  display: grid; place-items: center;
  border-radius: 50%;
  background: var(--hl-grad-life);
  color: #fff; font-size: 34px;
  box-shadow: 0 16px 34px -16px rgba(16, 185, 129, .9);
}

.hl-reference {
  margin-top: 26px; padding: 20px;
  border: 2px dashed var(--hl-sky);
  border-radius: var(--radius);
  background: var(--hl-sky-soft);
}
.hl-reference span {
  display: block; font-size: 12px; font-weight: 800;
  letter-spacing: .1em; text-transform: uppercase;
  color: var(--hl-sky-dark);
}
.hl-reference strong {
  display: block;
  font-family: var(--font-title);
  font-size: clamp(22px, 3vw, 30px);
  letter-spacing: .06em;
  color: var(--text-main);
  margin: 6px 0 4px;
}
.hl-reference small { font-size: 12.5px; color: var(--text-muted); }

/* La page de remerciement s'imprime souvent : on ne met sur le papier que la
   confirmation et la reference. */
@media print {
  .hl-topbar, .hl-navbar, .hl-minipub, .hl-footer,
  .hl-pagehead .breadcrumb, .hl-back-top, .hl-form-card .btn { display: none !important; }
  .hl-form-card { border: 0; box-shadow: none; }
}

/* ==========================================================================
   V5.1 — PAGE DE COUVERTURE D'UN FORMULAIRE
   --------------------------------------------------------------------------
   C'est le premier ecran de quelqu'un qui arrive par le QR code. Il doit
   repondre a trois questions avant toute saisie : de quoi s'agit-il, combien
   de temps cela prend, jusqu'a quand.
   ========================================================================== */
.hl-form-cover {
  position: relative;
  overflow: hidden;
  padding: 64px 0 96px;
  background: var(--hl-grad-deep);
  background-size: cover;
  background-position: center;
  color: #fff;
}
/* Avec une photo, un voile bleu est pose PAR-DESSUS : sans lui, un titre
   blanc devient illisible des que l'image est claire. */
.hl-form-cover.has-image {
  box-shadow: inset 0 0 0 100vmax rgba(6, 42, 68, .82);
}
.hl-form-cover > .container { position: relative; z-index: 3; }

.hl-form-cover-shape {
  position: absolute; border-radius: 50%;
  background: rgba(255, 255, 255, .07);
  pointer-events: none;
}
.hl-form-cover-shape.s1 { width: 420px; height: 420px; top: -190px; right: -110px; }
.hl-form-cover-shape.s2 { width: 240px; height: 240px; bottom: -130px; left: 6%; background: rgba(255, 255, 255, .05); }

.hl-form-cover-crumb { margin-bottom: 18px; }
.hl-form-cover-crumb .breadcrumb-item,
.hl-form-cover-crumb .breadcrumb-item a { color: rgba(255, 255, 255, .78); font-size: 13px; }
.hl-form-cover-crumb .breadcrumb-item + .breadcrumb-item::before { color: rgba(255, 255, 255, .45); }

.hl-form-cover-badge {
  display: inline-flex; align-items: center; gap: 8px;
  background: rgba(255, 255, 255, .14);
  border: 1px solid rgba(255, 255, 255, .24);
  border-radius: 100px;
  padding: 6px 15px;
  font-size: 12px; font-weight: 700;
  letter-spacing: .07em; text-transform: uppercase;
  margin-bottom: 16px;
}

.hl-form-cover h1 {
  color: #fff;
  font-size: clamp(26px, 3.6vw, 42px);
  line-height: 1.12;
  letter-spacing: -.025em;
  margin: 0 0 12px;
  max-width: 20ch;
  text-wrap: balance;
}
.hl-form-cover p {
  color: rgba(255, 255, 255, .88);
  font-size: clamp(15px, 1.3vw, 17px);
  line-height: 1.7;
  max-width: 62ch;
  margin: 0;
}

.hl-form-cover-meta {
  display: flex; flex-wrap: wrap; gap: 10px 22px;
  margin-top: 22px;
  font-size: 13px;
  color: rgba(255, 255, 255, .82);
}
.hl-form-cover-meta i { margin-right: 6px; opacity: .8; }

/* Le formulaire remonte sur la couverture : la liaison entre les deux est
   visuelle, on comprend qu'il s'agit d'un seul et meme document. */
.hl-form-stage { margin-top: -60px; padding-top: 0; position: relative; z-index: 4; }
@media (max-width: 767.98px) {
  .hl-form-cover { padding: 44px 0 70px; }
  .hl-form-stage { margin-top: -46px; }
}

/* ==========================================================================
   V5.2 — ARTICLE : COUVERTURE, GALERIE, VIDEOS, VISIONNEUR
   --------------------------------------------------------------------------
   Meme principe que la couverture d'un formulaire : celui qui arrive par un
   QR code doit savoir en une seconde ce qu'il lit. Ensuite viennent les
   medias, dans l'ordre exact compose au back-office.
   ========================================================================== */

/* ---------- Couverture ---------- */
.hl-post-cover {
  position: relative;
  overflow: hidden;
  padding: 68px 0 88px;
  background: var(--hl-grad-deep);
  background-size: cover;
  background-position: center;
  color: #fff;
}
.hl-post-cover.has-image { box-shadow: inset 0 0 0 100vmax rgba(6, 42, 68, .80); }
.hl-post-cover > .container { position: relative; z-index: 3; }

.hl-post-cover-shape {
  position: absolute; width: 460px; height: 460px;
  top: -210px; right: -120px; border-radius: 50%;
  background: rgba(255, 255, 255, .07);
  pointer-events: none;
}

.hl-post-crumb { margin-bottom: 18px; }
.hl-post-crumb .breadcrumb-item,
.hl-post-crumb .breadcrumb-item a { color: rgba(255, 255, 255, .78); font-size: 13px; }
.hl-post-crumb .breadcrumb-item + .breadcrumb-item::before { color: rgba(255, 255, 255, .45); }

/* La pastille « A la une » reprend l'ambre du theme : au milieu d'un
   bandeau bleu, c'est le seul accent chaud, donc le premier regard. */
.hl-post-flag {
  display: inline-flex; align-items: center; gap: 8px;
  background: linear-gradient(135deg, #f59e0b, #fbbf24);
  color: #3a2708;
  border-radius: 100px;
  padding: 6px 16px;
  font-size: 12px; font-weight: 800;
  letter-spacing: .07em; text-transform: uppercase;
  margin-bottom: 16px;
  box-shadow: 0 10px 24px -12px rgba(245, 158, 11, .8);
}

.hl-post-cover h1 {
  color: #fff;
  font-size: clamp(27px, 3.8vw, 46px);
  line-height: 1.1;
  letter-spacing: -.028em;
  margin: 0 0 14px;
  max-width: 22ch;
  text-wrap: balance;
}
.hl-post-lead {
  color: rgba(255, 255, 255, .88);
  font-size: clamp(15px, 1.35vw, 18px);
  line-height: 1.7;
  max-width: 64ch;
  margin: 0;
}

.hl-post-meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px 22px;
  margin-top: 24px;
  font-size: 13px;
  color: rgba(255, 255, 255, .82);
}
.hl-post-meta i { margin-right: 6px; opacity: .8; }
.hl-post-tag {
  background: rgba(255, 255, 255, .13);
  border: 1px solid rgba(255, 255, 255, .22);
  border-radius: 100px;
  padding: 4px 13px;
  font-size: 12px; font-weight: 600;
}

/* ---------- Corps de l'article ---------- */
.hl-post-body { font-size: 16.5px; line-height: 1.82; }
.hl-post-body > p:first-child::first-letter {
  float: left;
  font-size: 3.1em;
  line-height: .86;
  font-weight: 800;
  padding: 4px 12px 0 0;
  color: var(--hl-sky-dark);
}
.hl-post-body img { border-radius: 16px; max-width: 100%; height: auto; }
.hl-post-body blockquote {
  border-left: 4px solid var(--hl-sky);
  background: var(--hl-grad-soft);
  border-radius: 0 14px 14px 0;
  padding: 16px 20px;
  margin: 24px 0;
  font-style: italic;
}

/* ---------- Suite de medias ---------- */
.hl-article-media { margin-top: 34px; display: grid; gap: 26px; }
.hl-gallery-hint { font-size: 13px; color: var(--hl-muted, #64748b); margin: -14px 0 0; }

/* ---------- Galeries ----------
   Les trois dispositions partagent la meme grille : seul le placement des
   pistes change. Un reglage pris au back-office ne demande donc aucun
   balisage different cote site. */
.hl-gallery {
  display: grid;
  gap: 14px;
  margin: 0;
}
.hl-gallery-item {
  position: relative;
  display: block;
  padding: 0;
  border: 0;
  background: #0f172a;
  border-radius: 18px;
  overflow: hidden;
  cursor: zoom-in;
  aspect-ratio: 4 / 3;
  box-shadow: 0 14px 34px -22px rgba(15, 23, 42, .55);
  transition: transform .4s var(--hl-ease), box-shadow .4s var(--hl-ease);
}
.hl-gallery-item img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  transition: transform .6s var(--hl-ease), filter .4s var(--hl-ease);
}
.hl-gallery-item:hover { transform: translateY(-4px); box-shadow: var(--hl-glow); }
.hl-gallery-item:hover img { transform: scale(1.06); }
.hl-gallery-item:focus-visible { outline: 3px solid var(--hl-sky); outline-offset: 3px; }

.hl-gallery-zoom {
  position: absolute; top: 12px; right: 12px;
  width: 36px; height: 36px;
  display: grid; place-items: center;
  border-radius: 50%;
  background: rgba(255, 255, 255, .92);
  color: var(--hl-sky-dark);
  opacity: 0; transform: scale(.7);
  transition: opacity .3s var(--hl-ease), transform .3s var(--hl-ease);
}
.hl-gallery-item:hover .hl-gallery-zoom,
.hl-gallery-item:focus-visible .hl-gallery-zoom { opacity: 1; transform: scale(1); }

/* La legende n'apparait qu'au survol : posee en permanence, elle mange le
   tiers bas de chaque photo dans une galerie de douze. */
.hl-gallery-caption {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 26px 14px 12px;
  background: linear-gradient(to top, rgba(6, 42, 68, .92), rgba(6, 42, 68, 0));
  color: #fff;
  font-size: 13px; line-height: 1.45;
  text-align: left;
  transform: translateY(100%);
  transition: transform .35s var(--hl-ease);
}
.hl-gallery-item:hover .hl-gallery-caption,
.hl-gallery-item:focus-visible .hl-gallery-caption { transform: translateY(0); }

/* Grille reguliere : deux ou trois colonnes selon le nombre de photos. */
.hl-gallery-grid { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
.hl-gallery-grid.hl-gallery-n1 { grid-template-columns: 1fr; }
.hl-gallery-grid.hl-gallery-n1 .hl-gallery-item { aspect-ratio: 16 / 9; }

/* Mosaique : la premiere photo occupe deux colonnes et deux rangees. Cela
   donne un point d'entree au regard sans demander de choix a la redaction. */
.hl-gallery-mosaic { grid-template-columns: repeat(4, 1fr); grid-auto-rows: 150px; }
.hl-gallery-mosaic .hl-gallery-item { aspect-ratio: auto; height: 100%; }
.hl-gallery-mosaic .hl-gallery-item:first-child { grid-column: span 2; grid-row: span 2; }
/* Une ou deux photos ne font pas une mosaique : la premiere reprendrait
   deux rangees et occuperait 780 px de haut a elle seule. En dessous de
   trois photos, on revient donc a une grille simple. */
.hl-gallery-mosaic.hl-gallery-n1 { grid-template-columns: 1fr; grid-auto-rows: 400px; }
.hl-gallery-mosaic.hl-gallery-n2 { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 260px; }
.hl-gallery-mosaic.hl-gallery-n1 .hl-gallery-item:first-child,
.hl-gallery-mosaic.hl-gallery-n2 .hl-gallery-item:first-child { grid-column: span 1; grid-row: span 1; }

/* Carrousel : defilement horizontal avec accroche. Pas de fleches — le geste
   de glisser est acquis sur mobile, et la molette suffit au bureau. */
.hl-gallery-carousel {
  grid-auto-flow: column;
  grid-auto-columns: minmax(280px, 42%);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  padding-bottom: 10px;
  scrollbar-width: thin;
}
.hl-gallery-carousel .hl-gallery-item { scroll-snap-align: start; }

@media (max-width: 575.98px) {
  .hl-gallery-mosaic { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 130px; }
  .hl-gallery-carousel { grid-auto-columns: 80%; }
}

/* ---------- Videos ---------- */
.hl-post-video { margin: 0; }
.hl-video-frame {
  position: relative;
  aspect-ratio: 16 / 9;
  border-radius: 20px;
  overflow: hidden;
  background: #0b1728;
  box-shadow: 0 22px 48px -26px rgba(15, 23, 42, .7);
}
.hl-video-frame iframe,
.hl-video-frame video {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  border: 0;
  display: block;
}
.hl-media-legend {
  display: flex; align-items: center;
  margin-top: 10px;
  font-size: 13.5px;
  color: var(--hl-muted, #64748b);
}

/* ---------- Visionneur ---------- */
body.hl-noscroll { overflow: hidden; }

.hl-lightbox {
  position: fixed; inset: 0;
  z-index: 2000;
  display: flex; align-items: center; justify-content: center;
  gap: 12px;
  padding: 24px;
  background: rgba(4, 20, 34, .93);
  backdrop-filter: blur(6px);
  opacity: 0;
  transition: opacity .2s ease;
}
.hl-lightbox.is-open { opacity: 1; }
.hl-lightbox[hidden] { display: none; }

.hl-lightbox-stage {
  margin: 0;
  max-width: min(1100px, 92vw);
  max-height: 88vh;
  display: flex; flex-direction: column; align-items: center; gap: 12px;
}
.hl-lightbox-stage img {
  max-width: 100%;
  max-height: 78vh;
  border-radius: 16px;
  object-fit: contain;
  box-shadow: 0 30px 70px -30px rgba(0, 0, 0, .9);
  transform: scale(.96);
  transition: transform .25s var(--hl-ease);
}
.hl-lightbox.is-open .hl-lightbox-stage img { transform: scale(1); }
.hl-lightbox-stage figcaption {
  color: rgba(255, 255, 255, .86);
  font-size: 14px;
  text-align: center;
  max-width: 70ch;
}

.hl-lightbox-close,
.hl-lightbox-nav {
  width: 46px; height: 46px;
  flex: 0 0 auto;
  display: grid; place-items: center;
  border: 1px solid rgba(255, 255, 255, .26);
  background: rgba(255, 255, 255, .10);
  color: #fff;
  border-radius: 50%;
  transition: background .25s ease, transform .25s var(--hl-ease);
}
.hl-lightbox-close:hover,
.hl-lightbox-nav:hover { background: rgba(255, 255, 255, .22); transform: scale(1.08); }
.hl-lightbox-close { position: absolute; top: 20px; right: 22px; }

@media (max-width: 767.98px) {
  .hl-post-cover { padding: 46px 0 66px; }
  .hl-post-body > p:first-child::first-letter { font-size: 2.6em; }
  .hl-lightbox { padding: 12px; gap: 6px; }
  .hl-lightbox-nav { width: 38px; height: 38px; }
}

/* Mouvement reduit : les transformations disparaissent, l'information reste. */
@media (prefers-reduced-motion: reduce) {
  .hl-gallery-item,
  .hl-gallery-item img,
  .hl-gallery-caption,
  .hl-lightbox-stage img { transition: none !important; transform: none !important; }
}

/* ==========================================================================
   V5.3 — RUBRIQUES ET ARTICLES : LISTE
   --------------------------------------------------------------------------
   Les filtres remontent au-dessus de la liste, le premier article passe en
   grand format, et une pastille indique ce que contient chaque article
   (photos, video) avant meme de l'ouvrir.
   ========================================================================== */

/* ---------- Barre de filtres ---------- */
.hl-news-bar {
  display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between; gap: 16px;
  padding: 16px 20px;
  margin-bottom: 30px;
  background: #fff;
  border-radius: 18px;
  box-shadow: 0 16px 38px -28px rgba(15, 23, 42, .45), var(--hl-ring);
}
[data-theme="dark"] .hl-news-bar { background: #10243a; }

.hl-news-search {
  position: relative;
  display: flex; align-items: center; gap: 8px;
  flex: 1 1 280px; max-width: 420px;
}
.hl-news-search > i {
  position: absolute; left: 14px;
  color: var(--hl-sky); font-size: 15px;
  pointer-events: none;
}
.hl-news-search input {
  flex: 1;
  border: 1px solid rgba(148, 163, 184, .34);
  border-radius: 100px;
  padding: 9px 14px 9px 38px;
  font-size: 14px;
  background: transparent;
  color: inherit;
  transition: border-color .25s ease, box-shadow .25s ease;
}
.hl-news-search input:focus {
  outline: 0;
  border-color: var(--hl-sky);
  box-shadow: 0 0 0 4px rgba(14, 165, 233, .14);
}

.hl-news-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.hl-news-chips .hl-chip {
  display: inline-flex; align-items: center;
  border: 1px solid rgba(148, 163, 184, .34);
  border-radius: 100px;
  padding: 6px 15px;
  color: var(--hl-ink-soft);
  text-decoration: none;
}
.hl-news-chips .hl-chip.is-active {
  background: var(--hl-grad);
  border-color: transparent;
  color: #fff;
  box-shadow: 0 10px 20px -12px rgba(14, 165, 233, .9);
}
.hl-chip-sm {
  display: inline-flex;
  font-size: 11.5px; font-weight: 700;
  letter-spacing: .05em; text-transform: uppercase;
  background: var(--hl-sky-soft);
  color: var(--hl-sky-dark);
  border-radius: 100px;
  padding: 4px 11px;
}

/* ---------- Article de tete ---------- */
.hl-news-lead {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  gap: 0;
  background: #fff;
  border-radius: 24px;
  overflow: hidden;
  margin-bottom: 30px;
  box-shadow: 0 26px 56px -34px rgba(15, 23, 42, .5), var(--hl-ring);
  transition: box-shadow .4s var(--hl-ease), transform .4s var(--hl-ease);
}
[data-theme="dark"] .hl-news-lead { background: #10243a; }
.hl-news-lead:hover { transform: translateY(-4px); box-shadow: var(--hl-glow); }

.hl-news-lead-media {
  position: relative;
  display: block;
  min-height: 320px;
  overflow: hidden;
  background: #0f172a;
}
.hl-news-lead-media img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform .7s var(--hl-ease);
}
.hl-news-lead:hover .hl-news-lead-media img { transform: scale(1.06); }

.hl-news-lead-body { padding: 34px 34px 32px; display: flex; flex-direction: column; }
.hl-news-lead-body h3 {
  font-size: clamp(21px, 2.1vw, 28px);
  line-height: 1.22;
  letter-spacing: -.02em;
  margin: 12px 0 12px;
}
.hl-news-lead-body h3 a { color: inherit; text-decoration: none; }
.hl-news-lead-body h3 a:hover { color: var(--hl-sky-dark); }
.hl-news-lead-body p { font-size: 15px; line-height: 1.75; color: var(--hl-muted, #64748b); margin-bottom: 18px; }
.hl-news-lead-body .btn { align-self: flex-start; margin-top: auto; }

/* ---------- Grille ---------- */
.hl-news-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(290px, 1fr));
  gap: 22px;
}
.hl-news-card {
  display: flex; flex-direction: column;
  background: #fff;
  border-radius: 20px;
  overflow: hidden;
  box-shadow: 0 18px 42px -32px rgba(15, 23, 42, .5), var(--hl-ring);
  transition: transform .4s var(--hl-ease), box-shadow .4s var(--hl-ease);
}
[data-theme="dark"] .hl-news-card { background: #10243a; }
.hl-news-card:hover { transform: translateY(-6px); box-shadow: var(--hl-glow); }

.hl-news-card-media {
  position: relative; display: block;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: #0f172a;
}
.hl-news-card-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .7s var(--hl-ease); }
.hl-news-card:hover .hl-news-card-media img { transform: scale(1.07); }

/* La date en pastille reprend le geste des quotidiens : le jour ressort, le
   mois l'accompagne. Plus rapide a lire qu'une ligne « 17 septembre 2026 ». */
.hl-news-date {
  position: absolute; left: 14px; bottom: 14px;
  display: grid; place-items: center;
  min-width: 54px;
  padding: 7px 10px;
  background: rgba(255, 255, 255, .94);
  color: var(--hl-sky-dark);
  border-radius: 14px;
  font-size: 10.5px; font-weight: 700;
  letter-spacing: .08em; text-transform: uppercase;
  line-height: 1.1;
  box-shadow: 0 10px 22px -14px rgba(15, 23, 42, .8);
}
.hl-news-date strong { display: block; font-size: 19px; letter-spacing: -.02em; }

.hl-news-flag {
  position: absolute; top: 14px; left: 14px;
  display: inline-flex; align-items: center; gap: 6px;
  background: linear-gradient(135deg, #f59e0b, #fbbf24);
  color: #3a2708;
  border-radius: 100px;
  padding: 5px 13px;
  font-size: 11px; font-weight: 800;
  letter-spacing: .06em; text-transform: uppercase;
  box-shadow: 0 10px 22px -12px rgba(245, 158, 11, .9);
  z-index: 2;
}

.hl-news-card-body { padding: 18px 20px 20px; display: flex; flex-direction: column; flex: 1; }
.hl-news-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.hl-news-card-body h6 { font-size: 16px; line-height: 1.34; margin: 10px 0 8px; }
.hl-news-card-body h6 a { color: inherit; text-decoration: none; }
.hl-news-card-body h6 a:hover { color: var(--hl-sky-dark); }
.hl-news-card-body p { font-size: 13.8px; line-height: 1.65; color: var(--hl-muted, #64748b); margin-bottom: 14px; }

.hl-news-foot {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px;
  margin-top: auto;
  font-size: 12.5px;
  color: var(--hl-muted, #64748b);
}
.hl-news-foot i { margin-right: 5px; }
.hl-news-more { margin-left: auto; font-weight: 700; color: var(--hl-sky-dark); text-decoration: none; }
.hl-news-more:hover { color: var(--hl-sky); }

.hl-media-badge {
  display: inline-flex; align-items: center; gap: 5px;
  background: var(--hl-sky-soft);
  color: var(--hl-sky-dark);
  border-radius: 100px;
  padding: 3px 10px;
  font-size: 11.5px; font-weight: 700;
}
.hl-media-badge.is-video { background: rgba(139, 92, 246, .14); color: #7c3aed; }

/* ---------- Bande « articles recents » ---------- */
.hl-news-recent { margin-top: 46px; }
.hl-news-recent-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 14px;
}
.hl-news-recent-item {
  display: flex; align-items: center; gap: 12px;
  padding: 10px;
  background: #fff;
  border-radius: 16px;
  text-decoration: none;
  color: inherit;
  box-shadow: var(--hl-ring);
  transition: transform .3s var(--hl-ease), box-shadow .3s var(--hl-ease);
}
[data-theme="dark"] .hl-news-recent-item { background: #10243a; }
.hl-news-recent-item:hover { transform: translateY(-3px); box-shadow: var(--hl-glow); }
.hl-news-recent-item img { width: 62px; height: 62px; border-radius: 12px; object-fit: cover; flex: 0 0 auto; }
.hl-news-recent-item strong { display: block; font-size: 13.5px; line-height: 1.4; }
.hl-news-recent-item em { font-style: normal; font-size: 12px; color: var(--hl-muted, #64748b); }

@media (max-width: 991.98px) {
  .hl-news-lead { grid-template-columns: 1fr; }
  .hl-news-lead-media { min-height: 220px; aspect-ratio: 16 / 9; }
  .hl-news-lead-body { padding: 24px 22px; }
}
@media (max-width: 575.98px) {
  .hl-news-bar { padding: 14px; }
  .hl-news-search { max-width: none; }
}

/* ==========================================================================
   V5.4 — ACCUEIL « A LA UNE » ET QR CODE PUBLIC
   --------------------------------------------------------------------------
   Le bloc prend place juste apres la presentation de l'hopital. Fond bleu
   profond : entre deux sections claires, il marque une rupture et se lit
   comme une actualite, pas comme un troisieme paragraphe de presentation.
   ========================================================================== */
.hl-highlight {
  position: relative;
  overflow: hidden;
  background: var(--hl-grad-deep);
  color: #fff;
}
.hl-highlight > .container { position: relative; z-index: 3; }
.hl-highlight .hl-title { color: #fff; }
.hl-highlight .hl-sub { color: rgba(255, 255, 255, .82); }

.hl-highlight-shape {
  position: absolute; border-radius: 50%;
  background: rgba(255, 255, 255, .06);
  pointer-events: none;
}
.hl-highlight-shape.s1 { width: 480px; height: 480px; top: -220px; left: -140px; }
.hl-highlight-shape.s2 { width: 280px; height: 280px; bottom: -150px; right: -70px; background: rgba(56, 189, 248, .12); }

.hl-eyebrow-light {
  background: rgba(255, 255, 255, .14);
  border: 1px solid rgba(255, 255, 255, .24);
  color: #fff;
}
.hl-eyebrow-light i { color: #fbbf24; }

/* ---------- Article principal ---------- */
.hl-highlight-lead {
  height: 100%;
  display: flex; flex-direction: column;
  background: #fff;
  color: var(--hl-ink);
  border-radius: 24px;
  overflow: hidden;
  box-shadow: 0 30px 60px -34px rgba(2, 20, 38, .9);
}
[data-theme="dark"] .hl-highlight-lead { background: #10243a; color: #e2e8f0; }

/* Le plafond de hauteur compte : quand un seul article est mis en avant, le
   bloc occupe les douze colonnes et un simple rapport 16/8 donnerait une
   photo de 630 px de haut, qui pousse le titre hors de l'ecran. */
.hl-highlight-media {
  display: block;
  aspect-ratio: 16 / 8;
  max-height: 400px;
  overflow: hidden;
  background: #0f172a;
}
.hl-highlight-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .7s var(--hl-ease); }
.hl-highlight-lead:hover .hl-highlight-media img { transform: scale(1.05); }

.hl-highlight-body { padding: 26px 28px 28px; display: flex; flex-direction: column; flex: 1; }
.hl-highlight-body h3 {
  font-size: clamp(20px, 2vw, 26px);
  line-height: 1.24; letter-spacing: -.02em;
  margin: 12px 0 10px;
}
.hl-highlight-body h3 a { color: inherit; text-decoration: none; }
.hl-highlight-body h3 a:hover { color: var(--hl-sky-dark); }
.hl-highlight-body p { font-size: 15px; line-height: 1.75; color: var(--hl-muted, #64748b); margin-bottom: 18px; }

.hl-highlight-actions {
  display: flex; align-items: center; justify-content: space-between;
  gap: 18px; margin-top: auto;
}

/* Le QR reste petit et discret : il accompagne le bouton, il ne le remplace
   pas. Sur telephone il disparait — on ne scanne pas l'ecran que l'on tient. */
.hl-highlight-qr {
  display: flex; align-items: center; gap: 12px;
  padding: 8px 12px;
  border-radius: 16px;
  background: var(--hl-grad-soft);
}
.hl-highlight-qr span {
  font-size: 12px; font-weight: 600; line-height: 1.35;
  max-width: 13ch;
  color: var(--hl-sky-dark);
}

/* ---------- Colonne des autres articles ---------- */
.hl-highlight-side { display: flex; flex-direction: column; gap: 12px; height: 100%; }
.hl-highlight-item {
  display: flex; align-items: center; gap: 14px;
  padding: 12px;
  background: rgba(255, 255, 255, .09);
  border: 1px solid rgba(255, 255, 255, .16);
  border-radius: 18px;
  color: #fff;
  text-decoration: none;
  transition: background .3s var(--hl-ease), transform .3s var(--hl-ease);
}
.hl-highlight-item:hover { background: rgba(255, 255, 255, .17); transform: translateX(4px); color: #fff; }
.hl-highlight-item img { width: 76px; height: 68px; border-radius: 14px; object-fit: cover; flex: 0 0 auto; }
.hl-highlight-item em { display: block; font-style: normal; font-size: 11.5px; color: rgba(255, 255, 255, .7); }
.hl-highlight-item strong { display: block; font-size: 14px; line-height: 1.4; margin: 3px 0 5px; }
.hl-highlight-side .btn { margin-top: auto; }
.hl-highlight-side .btn-outline-sky { border-color: rgba(255, 255, 255, .45); color: #fff; }
.hl-highlight-side .btn-outline-sky:hover { background: #fff; color: var(--hl-sky-dark); }

/* ---------- QR code cote site public ----------
   `admin-soft.css` porte les memes styles pour le back-office ; il n'est pas
   charge ici, d'ou cette definition autonome plutot qu'un fichier partage
   qu'il faudrait servir deux fois. */
.hl-qr { display: flex; flex-direction: column; align-items: center; gap: 10px; }
.hl-qr canvas {
  border-radius: 14px;
  background: #fff;
  padding: 8px;
  box-shadow: 0 14px 30px -20px rgba(15, 23, 42, .6);
}
.hl-qr.is-plain { gap: 0; }
.hl-qr.is-plain canvas { padding: 5px; border-radius: 10px; box-shadow: none; }

.hl-qr-actions { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; }
.hl-qr-btn {
  display: inline-flex; align-items: center; gap: 6px;
  border: 0; cursor: pointer;
  background: var(--hl-sky-dark);
  color: #fff;
  border-radius: 100px;
  padding: 7px 15px;
  font-size: 12.5px; font-weight: 700;
  text-decoration: none;
  transition: background .25s ease, transform .25s var(--hl-ease);
}
.hl-qr-btn:hover { background: var(--hl-sky); color: #fff; transform: translateY(-2px); }
.hl-qr-btn.is-ghost { background: var(--hl-sky-soft); color: var(--hl-sky-dark); }
.hl-qr-btn.is-ghost:hover { background: #bae6fd; color: var(--hl-sky-dark); }

.hl-qr-url {
  display: block;
  font-size: 11px;
  word-break: break-all;
  color: var(--hl-muted, #64748b);
  max-width: 100%;
}

@media (max-width: 991.98px) {
  .hl-highlight-actions { flex-direction: column; align-items: stretch; }
}

/* ==========================================================================
   V6 — PAGE PUBLIQUE D'UN FORMULAIRE (« page de campagne »)
   --------------------------------------------------------------------------
   Une inscription a un evenement ne se presente pas comme une fiche
   administrative. L'ordre de lecture est impose : de quoi s'agit-il, quand et
   ou, pourquoi, puis seulement le formulaire.

   La page a sa propre palette — bleu nuit et or — plus proche d'une affiche
   que du site courant. C'est assume : une page de campagne s'assume comme
   telle, et le bleu ciel du theme y perdrait le contraste qu'exige un titre
   de 90 px en blanc.

   Tout est prefixe `fp-` et confine a `body.hl-formpage` : aucune regle ici
   ne peut atteindre une autre page.
   ========================================================================== */
body.hl-formpage {
  --fp-navy: #0f2a47;
  --fp-navy-2: #163a5f;
  --fp-sky: #3e86bd;
  --fp-sky-light: #eaf3fa;
  --fp-gold: #e3a23a;
  --fp-paper: #ffffff;
  --fp-paper-2: #f4f7fa;
  --fp-line: #dce4ec;
  --fp-muted: #5b6b7c;
  --fp-ok: #2e7d4f;
  --fp-err: #b3402a;
}
[data-theme="dark"] body.hl-formpage,
body.hl-formpage[data-theme="dark"] {
  --fp-navy: #0a1a2c;
  --fp-navy-2: #0f2540;
  --fp-sky: #6aa8da;
  --fp-sky-light: #12293f;
  --fp-paper: #0c1622;
  --fp-paper-2: #111e2e;
  --fp-line: #233246;
  --fp-muted: #94a6b8;
}

/* ---------- Entete ---------- */
.fp-hero {
  position: relative;
  overflow: hidden;
  padding: 58px 0 92px;
  color: #fff;
  background: radial-gradient(ellipse at 15% -10%, var(--fp-navy-2), var(--fp-navy) 60%);
  background-size: cover;
  background-position: center;
}
/* Avec une photo, un voile bleu nuit est pose PAR-DESSUS : sans lui, un titre
   blanc devient illisible des que l'image est claire. */
.fp-hero.has-image { box-shadow: inset 0 0 0 100vmax rgba(10, 26, 44, .84); }
.fp-hero > .container { position: relative; z-index: 3; }

/* Anneaux plutot que disques pleins : ils evoquent une piste sans alourdir
   le fond ni concurrencer le titre. */
.fp-ring {
  position: absolute;
  border-radius: 50%;
  pointer-events: none;
}
.fp-ring.r1 { width: 420px; height: 420px; top: -120px; right: -120px; border: 2px solid rgba(255, 255, 255, .08); }
.fp-ring.r2 { width: 300px; height: 300px; bottom: -160px; right: -40px; border: 2px solid rgba(227, 162, 58, .18); }

.fp-crumb { margin-bottom: 20px; }
.fp-crumb .breadcrumb-item,
.fp-crumb .breadcrumb-item a { color: rgba(255, 255, 255, .75); font-size: 13px; text-decoration: none; }
.fp-crumb .breadcrumb-item a:hover { color: #fff; }
.fp-crumb .breadcrumb-item + .breadcrumb-item::before { color: rgba(255, 255, 255, .42); }

/* L'etiquette est legerement inclinee, comme un dossard epingle de travers.
   Ce detail fait plus pour le ton de la page que n'importe quel aplat. */
.fp-bib {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--fp-gold);
  color: #0f2a47;
  padding: 7px 15px;
  border-radius: 6px;
  font-weight: 800;
  font-size: 13px;
  letter-spacing: .07em;
  text-transform: uppercase;
  transform: rotate(-2deg);
  box-shadow: 0 10px 24px -14px rgba(227, 162, 58, .9);
}
.fp-bib i { font-size: 14px; }

.fp-display {
  font-family: 'Big Shoulders Display', 'Poppins', system-ui, sans-serif;
  font-weight: 900;
  color: #fff;
  font-size: clamp(42px, 8.5vw, 92px);
  line-height: .94;
  letter-spacing: .01em;
  margin: 22px 0 10px;
  max-width: 13ch;
  text-wrap: balance;
}
.fp-sub {
  color: #cfe0f0;
  font-size: clamp(16px, 2.2vw, 20px);
  line-height: 1.6;
  max-width: 48ch;
  margin: 0 0 30px;
}

.fp-cta {
  display: inline-flex;
  align-items: center;
  background: var(--fp-sky);
  color: #fff;
  font-weight: 600;
  font-size: 16px;
  padding: 14px 26px;
  border-radius: 9px;
  text-decoration: none;
  border: 0;
  transition: background .2s ease, transform .2s var(--hl-ease);
}
.fp-cta:hover { background: #357aad; color: #fff; transform: translateY(-2px); }
.fp-cta:active { transform: translateY(0); }

/* ---------- Reperes chiffres ---------- */
.fp-stats { position: relative; z-index: 4; margin-top: -46px; }
.fp-stats-grid {
  background: var(--fp-paper);
  border: 1px solid var(--fp-line);
  border-radius: 14px;
  box-shadow: 0 16px 38px -20px rgba(15, 42, 71, .4);
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  overflow: hidden;
}
.fp-stat { padding: 22px 20px; border-right: 1px solid var(--fp-line); }
.fp-stat:last-child { border-right: 0; }
.fp-stat-num {
  font-family: 'Big Shoulders Display', 'Poppins', sans-serif;
  font-weight: 700;
  font-size: 26px;
  line-height: 1.12;
  color: var(--fp-navy-2);
}
[data-theme="dark"] .fp-stat-num { color: #cfe0f0; }
.fp-stat-lbl { font-size: 13px; color: var(--fp-muted); margin-top: 3px; }

/* Deux colonnes des que quatre deviennent illisibles : a 680 px, un libelle
   sur quatre colonnes tient sur cinq lignes d'un mot. */
@media (max-width: 767.98px) {
  .fp-stats-grid { grid-template-columns: repeat(2, 1fr); }
  .fp-stat { border-bottom: 1px solid var(--fp-line); }
  .fp-stat:nth-child(2n) { border-right: 0; }
  .fp-stat:nth-last-child(-n+2) { border-bottom: 0; }
}

/* ---------- Presentation ---------- */
.fp-about { padding: 76px 0 56px; }
.fp-rich { color: var(--fp-muted); font-size: 16.5px; line-height: 1.75; max-width: 54ch; }
.fp-rich strong { color: var(--fp-navy-2); }
[data-theme="dark"] .fp-rich strong { color: #cfe0f0; }

.fp-note {
  background: var(--fp-sky-light);
  border: 1px solid var(--fp-line);
  border-radius: 12px;
  padding: 20px 22px;
  font-size: 14.5px;
  line-height: 1.7;
  color: #33475c;
}
[data-theme="dark"] .fp-note { color: #b9cbdd; }
.fp-note strong { display: block; color: var(--fp-navy-2); margin-bottom: 6px; }
[data-theme="dark"] .fp-note strong { color: #cfe0f0; }
.fp-note p { margin: 0; }

/* ---------- Bloc du formulaire ---------- */
.fp-register {
  background: var(--fp-paper-2);
  border-top: 1px solid var(--fp-line);
  padding: 70px 0 90px;
}
.fp-h2 {
  font-size: clamp(26px, 4vw, 34px);
  color: var(--fp-navy-2);
  margin: 0 0 6px;
  letter-spacing: -.02em;
}
[data-theme="dark"] .fp-h2 { color: #e6eef7; }
.fp-lead { color: var(--fp-muted); margin: 0 0 30px; max-width: 58ch; }

.fp-form-wrap { max-width: 660px; }
.fp-form {
  background: var(--fp-paper);
  border: 1px solid var(--fp-line);
  border-radius: 14px;
  padding: 30px;
}

/* Les champs sont produits par le constructeur : on habille donc les classes
   de Bootstrap plutot que d'imposer un balisage particulier. */
.fp-form .form-label {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--fp-navy-2);
  margin-bottom: 6px;
}
[data-theme="dark"] .fp-form .form-label { color: #cfe0f0; }
.fp-form .form-control,
.fp-form .form-select {
  border: 1px solid var(--fp-line);
  border-radius: 8px;
  background: var(--fp-paper);
  color: var(--hl-ink);
  padding: 11px 12px;
  font-size: 15px;
  box-shadow: none;
}
.fp-form .form-control:focus,
.fp-form .form-select:focus {
  border-color: var(--fp-sky);
  box-shadow: 0 0 0 3px rgba(62, 134, 189, .18);
}
.fp-form .form-text { color: var(--fp-muted); font-size: 12.5px; }

.fp-form textarea.form-control { min-height: 118px; }

/* Choix : meme traitement que le reste, encadre clair qui se remplit une
   fois coche. L'etat coche doit se voir sans comparer deux cases. */
.fp-form .hl-opt {
  border: 1px solid var(--fp-line);
  border-radius: 9px;
  background: var(--fp-paper);
}
.fp-form .hl-opt:has(input:checked) {
  border-color: var(--fp-sky);
  background: var(--fp-sky-light);
}

.fp-submit {
  display: block;
  width: 100%;
  background: var(--fp-navy-2);
  color: #fff;
  border: 0;
  padding: 15px 20px;
  border-radius: 9px;
  font-size: 16px;
  font-weight: 600;
  margin-top: 22px;
  cursor: pointer;
  transition: background .2s ease, transform .2s var(--hl-ease);
}
.fp-submit:hover { background: var(--fp-navy); transform: translateY(-1px); }
.fp-submit:disabled { opacity: .6; cursor: not-allowed; transform: none; }

.fp-fineprint { font-size: 12.5px; color: var(--fp-muted); text-align: center; margin: 14px 0 0; }

.fp-alert {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  border-radius: 10px;
  padding: 14px 16px;
  font-size: 14.5px;
  margin-bottom: 18px;
}
.fp-alert i { font-size: 17px; line-height: 1.4; }
.fp-alert.warn { background: #fdf3e3; border: 1px solid #f0d6a6; color: #7a5312; }
.fp-alert.info { background: var(--fp-sky-light); border: 1px solid var(--fp-line); color: #245c8a; }
[data-theme="dark"] .fp-alert.warn { background: #33270f; border-color: #5c4718; color: #f0cd8a; }
[data-theme="dark"] .fp-alert.info { color: #9cc6e8; }

.fp-ghost {
  display: inline-flex; align-items: center;
  border: 1px solid var(--fp-line);
  border-radius: 9px;
  padding: 11px 20px;
  color: var(--fp-navy-2);
  text-decoration: none;
  font-weight: 600; font-size: 14.5px;
  transition: background .2s ease;
}
.fp-ghost:hover { background: var(--fp-sky-light); color: var(--fp-navy-2); }
[data-theme="dark"] .fp-ghost { color: #cfe0f0; }

.fp-count {
  display: flex; align-items: center; gap: 9px;
  margin: 30px 0 0;
  font-size: 13.5px;
  color: var(--fp-muted);
}
.fp-dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--fp-ok);
  box-shadow: 0 0 0 4px rgba(46, 125, 79, .16);
  flex: 0 0 auto;
}

/* ---------- Confirmation ---------- */
.fp-confirm {
  max-width: 660px;
  background: var(--fp-navy);
  color: #fff;
  border-radius: 16px;
  padding: 36px 32px;
  box-shadow: 0 30px 60px -34px rgba(10, 26, 44, .9);
}
.fp-confirm-tag {
  display: inline-block;
  background: var(--fp-gold);
  color: #0f2a47;
  font-weight: 800;
  font-size: 12px;
  letter-spacing: .06em;
  text-transform: uppercase;
  padding: 5px 12px;
  border-radius: 6px;
  margin-bottom: 16px;
}
.fp-confirm h2 { color: #fff; font-size: clamp(22px, 3vw, 28px); margin: 0 0 10px; }
.fp-confirm p { color: #cbdcec; font-size: 14.5px; margin: 4px 0; }

/* La reference est le seul element a conserver : elle est isolee, en tres
   grand, et non noyee dans le paragraphe de remerciement. */
.fp-dossard {
  font-family: 'Big Shoulders Display', 'Poppins', sans-serif;
  font-weight: 900;
  font-size: clamp(40px, 8vw, 58px);
  line-height: 1;
  color: var(--fp-gold);
  margin: 18px 0 6px;
  letter-spacing: .02em;
}
.fp-confirm-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 26px; }
.fp-confirm-actions .fp-cta { font-size: 14.5px; padding: 11px 20px; }
.fp-confirm-actions .fp-ghost { border-color: rgba(255, 255, 255, .3); color: #fff; }
.fp-confirm-actions .fp-ghost:hover { background: rgba(255, 255, 255, .12); color: #fff; }

@media (max-width: 767.98px) {
  .fp-hero { padding: 40px 0 74px; }
  .fp-about { padding: 52px 0 36px; }
  .fp-register { padding: 48px 0 64px; }
  .fp-form { padding: 22px; }
}

/* A l'impression, le dossard doit rester lisible sur papier blanc. */
@media print {
  .fp-confirm { background: #fff; color: #0f2a47; box-shadow: none; border: 2px solid #0f2a47; }
  .fp-confirm p { color: #33475c; }
  .fp-confirm-actions { display: none; }
}

/* ==========================================================================
   V6.1 — LES DEUX LOGOS DE LA BARRE DE NAVIGATION
   --------------------------------------------------------------------------
   A gauche le logo de l'hopital, a droite — apres « Contact » — le logo avec
   le nom ecrit a cote. Les deux viennent de la fiche d'entreprise.
   ========================================================================== */

/* ---------- A gauche : le logo ---------- */
.hl-logo-img {
  height: 100px;
  max-height: 100px;
  width: auto;
  /* Large, parce que ce logo peut porter le nom ecrit a cote : le brider a la
     largeur d'un symbole carre le reduirait a un timbre illisible. */
  max-width: 340px;
  display: block;
  /* `contain` et non `cover` : un logo rogne n'est plus un logo. */
  object-fit: contain;
}
/* Avec une image, la pastille bleue et la signature disparaissent : le logo
   porte deja le nom de l'etablissement, les repeter fait triple emploi. */
.hl-logo.has-image { gap: 0; }

/* Le theme choisit la declinaison : la claire est faite pour un fond sombre,
   la sombre pour un fond clair. Posee sur le mauvais fond, l'une comme
   l'autre devient illisible — c'est le genre de detail qui ne se voit qu'une
   fois le site bascule en mode sombre. */
.hl-logo-img.on-dark { display: none; }
[data-theme="dark"] .hl-logo-img.on-light { display: none; }
[data-theme="dark"] .hl-logo-img.on-dark { display: block; }

/* Une seule declinaison televersee : elle sert dans les deux themes, faute de
   mieux. `:only-child` suffit a le detecter, sans classe supplementaire. */
.hl-logo.has-image .hl-logo-img:only-child { display: block !important; }

/* ---------- A droite : le logo principal ---------- */
.hl-logo-aside {
  align-items: center;
  margin-left: 18px;
  padding-left: 18px;
  /* Un filet discret separe le menu du logo : sans lui, « Contact » et le
     logo se lisent comme une seule et meme suite d'elements cliquables. */
  border-left: 1px solid var(--border-color);
  flex: 0 0 auto;
  opacity: .92;
  transition: opacity .25s var(--hl-ease);
}
.hl-logo-aside:hover { opacity: 1; }

.hl-logo-aside-img {
  height: 100px;
  max-height: 100px;
  width: auto;
  max-width: 200px;
  object-fit: contain;
  display: block;
}

/* Deux logos de 100 px imposent leur hauteur a la barre : sans cet ajustement
   des espacements, la navigation se retrouvait collee au bord superieur, le
   logo debordant vers le bas. */
.hl-navbar { padding-top: 6px; padding-bottom: 6px; }
.hl-navbar .container { min-height: 112px; }

/* En dessous de 1400 px le logo de droite disparait et le menu se replie :
   la barre n'a plus a porter deux images de 100 px, et une hauteur pareille
   mangerait la moitie d'un ecran de telephone. */
@media (max-width: 1399.98px) {
  .hl-logo-img { height: 72px; max-height: 72px; max-width: 260px; }
  .hl-navbar .container { min-height: auto; }
}
@media (max-width: 575.98px) {
  .hl-logo-img { height: 56px; max-height: 56px; max-width: 200px; }
}
