/*
 * Backoffice : habillage modernisé (proposition du 29/09/2026).
 * Chargé en dernier par template/backoffice/load_css.htm : il ne fait que surcharger le thème
 * « Homer » (css/homer.css) ; retirer la ligne de load_css.htm suffit à revenir à l'ancien style.
 * Police : Outfit (depuis le 04/10/2026, auparavant Plus Jakarta Sans), hébergée dans backoffice/fonts/outfit/ (aucun appel à Google).
 * Couleurs : bleu nuit #004760 et émeraude #25b4b4 du logo RUNIMMO.
 */


/* Outfit (licence SIL OFL 1.1, https://fonts.google.com/specimen/Outfit), police variable 100 à 900, même police que le
   back-office neovarim (04/10/2026, à la demande de l'utilisateur : Plus Jakarta Sans paraissait trop fine) */
@font-face { font-family: 'Outfit'; font-style: normal; font-weight: 100 900; font-display: swap;
  src: url('../fonts/outfit/Outfit-latin-wght.woff2') format('woff2'); }

:root {
  --bo-bleu: #004760;
  --bo-bleu-survol: #0a5a78;
  --bo-emeraude: #25b4b4;
  --bo-emeraude-survol: #1f9e9e;
  --bo-texte: #2b3a45;
  --bo-texte-doux: #6b7a86;
  --bo-bordure: #dfe5ea;
  --bo-fond: #f4f6f8;
  --bo-fond-clair: #f8fafb;
  --bo-rayon: 8px;
  --bo-police: 'Outfit', 'Helvetica Neue', Arial, sans-serif;
}

/* ---------- Police et texte ---------- */
body, button, input, select, textarea, .tooltip, .popover,
.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {
  font-family: var(--bo-police);
}
body {
  color: var(--bo-texte);
  font-size: 13.5px;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
#wrapper { background: var(--bo-fond); }
label, .control-label { font-weight: 600; color: var(--bo-texte); }
label strong, label b { font-weight: 600; }
a { color: var(--bo-bleu); }
a:hover, a:focus { color: var(--bo-emeraude-survol); }
.text-muted, small { color: var(--bo-texte-doux); }

/* En-tête de page (fil d'Ariane / titre) */
.normalheader .hpanel .panel-body,
.small-header .panel-body { border: none; border-bottom: 1px solid var(--bo-bordure); border-radius: 0; background: #fff; }
.small-header .panel-body h2 { font-weight: 600; letter-spacing: .02em; color: var(--bo-bleu); }

/* ---------- Panneaux ---------- */
.hpanel .panel-body {
  border-color: var(--bo-bordure);
  border-radius: var(--bo-rayon);
  box-shadow: 0 1px 2px rgba(16, 40, 56, .04);
}
.hpanel .panel-heading.hbuilt,
.hpanel.hblue .panel-body, .hpanel .panel-heading {
  border-color: var(--bo-bordure);
}
.hpanel .panel-heading.hbuilt {
  border-radius: var(--bo-rayon) var(--bo-rayon) 0 0;
  background: #fff;
  font-weight: 600;
  letter-spacing: .02em;
  color: var(--bo-bleu);
}
.hpanel .panel-heading.hbuilt + .panel-body { border-top-left-radius: 0; border-top-right-radius: 0; }
.hpanel .panel-footer {
  border-color: var(--bo-bordure);
  background: var(--bo-fond-clair);
  border-radius: 0 0 var(--bo-rayon) var(--bo-rayon);
}

/* ---------- Boutons ---------- */
.btn {
  font-family: var(--bo-police);
  font-weight: 600;
  letter-spacing: .02em;
  border-radius: var(--bo-rayon);
  border-width: 1px;
  padding: 7px 16px;
  box-shadow: 0 1px 2px rgba(16, 40, 56, .08);
  transition: background-color .15s ease, border-color .15s ease, box-shadow .15s ease, transform .05s ease;
}
.btn-sm, .btn-group-sm > .btn { padding: 6px 14px; font-size: 12px; border-radius: 7px; }
.btn-xs, .btn-group-xs > .btn { padding: 3px 9px; font-size: 11px; border-radius: 6px; }
.btn-lg, .btn-group-lg > .btn { padding: 11px 22px; border-radius: 10px; }
.btn:hover { box-shadow: 0 3px 8px rgba(16, 40, 56, .14); }
.btn:active, .btn.active { transform: translateY(1px); box-shadow: 0 1px 2px rgba(16, 40, 56, .12); }
.btn:focus, .btn.focus, .btn:active:focus { outline: none; box-shadow: 0 0 0 3px rgba(37, 180, 180, .35); }

/* Action principale : bleu nuit */
.btn-primary, .btn-info {
  background-color: var(--bo-bleu); border-color: var(--bo-bleu); color: #fff;
}
.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active,
.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active {
  background-color: var(--bo-bleu-survol); border-color: var(--bo-bleu-survol); color: #fff;
}
/* Ajouter / valider : émeraude */
.btn-success {
  background-color: var(--bo-emeraude); border-color: var(--bo-emeraude); color: #fff;
}
.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active {
  background-color: var(--bo-emeraude-survol); border-color: var(--bo-emeraude-survol); color: #fff;
}
/* Secondaire : contour */
.btn-default {
  background: #fff; border-color: var(--bo-bordure); color: var(--bo-texte);
}
.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active {
  background: var(--bo-fond-clair); border-color: #c9d3db; color: var(--bo-bleu);
}
.btn-warning { background-color: #f0a202; border-color: #f0a202; color: #fff; }
.btn-warning:hover, .btn-warning:focus { background-color: #d99200; border-color: #d99200; color: #fff; }
.btn-danger { background-color: #d9483b; border-color: #d9483b; color: #fff; }
.btn-danger:hover, .btn-danger:focus { background-color: #c13b2f; border-color: #c13b2f; color: #fff; }
.btn.disabled, .btn[disabled], fieldset[disabled] .btn { opacity: .5; box-shadow: none; }

/* Boutons à contour (btn-outline) : fond blanc, bordure et texte colorés, fond coloré au survol */
.btn-outline.btn-primary, .btn-outline.btn-info { background: #fff; border-color: var(--bo-bleu); color: var(--bo-bleu); }
.btn-outline.btn-success { background: #fff; border-color: var(--bo-emeraude); color: var(--bo-emeraude-survol); }
.btn-outline.btn-warning { background: #fff; border-color: #f0a202; color: #b87a00; }
.btn-outline.btn-danger { background: #fff; border-color: #d9483b; color: #c13b2f; }
.btn-outline.btn-primary:hover, .btn-outline.btn-primary:focus, .btn-outline.btn-primary.active,
.btn-outline.btn-info:hover, .btn-outline.btn-info:focus, .btn-outline.btn-info.active { background: var(--bo-bleu); color: #fff; }
.btn-outline.btn-success:hover, .btn-outline.btn-success:focus, .btn-outline.btn-success.active { background: var(--bo-emeraude); color: #fff; }
.btn-outline.btn-warning:hover, .btn-outline.btn-warning:focus, .btn-outline.btn-warning.active { background: #f0a202; color: #fff; }
.btn-outline.btn-danger:hover, .btn-outline.btn-danger:focus, .btn-outline.btn-danger.active { background: #d9483b; color: #fff; }

/* ---------- Champs de formulaire ---------- */
.form-control, .select2-container .select2-choice, .select2-container-multi .select2-choices {
  border-color: var(--bo-bordure) !important;
  border-radius: 7px !important;
  box-shadow: none;
  color: var(--bo-texte);
  transition: border-color .15s ease, box-shadow .15s ease;
}
.form-control { height: 36px; padding: 7px 11px; }
textarea.form-control { height: auto; }
.form-control:focus, .select2-container-active .select2-choice, .select2-container-active .select2-choices {
  border-color: var(--bo-emeraude) !important;
  box-shadow: 0 0 0 3px rgba(37, 180, 180, .18) !important;
  outline: none;
}
.form-control::placeholder { color: #9aa7b1; }
.input-group-addon { border-color: var(--bo-bordure); background: var(--bo-fond-clair); }

/* ---------- Tableaux ---------- */
.table > thead > tr > th {
  background: var(--bo-fond-clair);
  color: var(--bo-texte-doux);
  font-weight: 600;
  font-size: 12px;
  letter-spacing: .03em;
  text-transform: uppercase;
  border-bottom: 1px solid var(--bo-bordure) !important;
}
.table-bordered, .table-bordered > thead > tr > th, .table-bordered > tbody > tr > td { border-color: #e8edf1; }
.table > tbody > tr > td { vertical-align: middle; }
.table-striped > tbody > tr:nth-of-type(odd) { background-color: #fbfcfd; }
.table-hover > tbody > tr:hover { background-color: #eef8f8; }
.table-hover > tbody > tr:hover > td { cursor: pointer; }

/* Pagination et barre des listes (DataTables) */
.pagination > li > a, .pagination > li > span { color: var(--bo-bleu); border-color: var(--bo-bordure); }
.pagination > li:first-child > a, .pagination > li:first-child > span { border-radius: 7px 0 0 7px; }
.pagination > li:last-child > a, .pagination > li:last-child > span { border-radius: 0 7px 7px 0; }
.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > span {
  background-color: var(--bo-bleu); border-color: var(--bo-bleu); color: #fff;
}
.dataTables_wrapper .dataTables_filter input, .dataTables_wrapper .dataTables_length select {
  border: 1px solid var(--bo-bordure); border-radius: 7px; height: 32px; padding: 4px 10px;
}

/* ---------- Menu de gauche et barre du haut ---------- */
#side-menu li a { font-weight: 500; letter-spacing: .01em; }
#side-menu .nav-second-level li a { margin: 1px 8px; padding-left: 16px; padding-right: 8px; border-radius: 7px; }
#side-menu .nav-second-level li a:hover { background: #eef8f8; color: var(--bo-bleu); }
#side-menu .nav-second-level li.active > a, #side-menu .nav-second-level li.active2 > a {
  background: var(--bo-emeraude); color: #fff; box-shadow: 0 2px 6px rgba(37, 180, 180, .35);
}
#header { box-shadow: 0 1px 0 var(--bo-bordure); }

/* Pastilles et étiquettes */
.label, .badge { font-weight: 600; letter-spacing: .02em; border-radius: 999px; padding: .3em .7em; }

/* =====================================================================
 * Deuxième passe (29/09/2026) : barre du haut, menu de gauche, titres,
 * boutons en casse normale, couleurs d'état harmonisées, densité.
 * ===================================================================== */
:root {
  --bo-info: #3a7ca5;
  --bo-info-survol: #316b8f;
  --bo-etat-libre: #2e9e6b;
  --bo-etat-option: #e39d0b;
  --bo-etat-prereserve: #d9719b;
  --bo-etat-reserve: #d9483b;
  --bo-etat-acte: #3a7ca5;
}

/* Barre du haut : filet aux couleurs du logo au lieu du bandeau multicolore */
.color-line { height: 3px; background: linear-gradient(90deg, var(--bo-bleu), var(--bo-emeraude)) !important; }
#header { border-bottom: 1px solid var(--bo-bordure); box-shadow: 0 1px 3px rgba(16, 40, 56, .05); }
#header .navbar-nav > li > a { border-radius: 10px; margin: 6px 2px; transition: background-color .15s ease, color .15s ease; }
#header .navbar-nav > li > a i { color: var(--bo-bleu); opacity: .78; transition: opacity .15s ease, color .15s ease; }
#header .navbar-nav > li > a:hover, #header .navbar-nav > li > a:focus, #header .navbar-nav > li.open > a { background: #eef8f8; }
#header .navbar-nav > li > a:hover i, #header .navbar-nav > li.open > a i { opacity: 1; color: var(--bo-emeraude-survol); }
.dropdown-menu { border: 1px solid var(--bo-bordure); border-radius: 12px; box-shadow: 0 12px 32px rgba(16, 40, 56, .14); padding: 8px; }
.dropdown-menu > li > a { border-radius: 7px; }

/* Menu de gauche : fond blanc, sans traits, rubriques discrètes */
#menu, #side-menu { background: #fff; }
#menu { border-right: 1px solid var(--bo-bordure); }
#wrapper { border-left: none; }
.profile-picture { border-bottom: 1px solid var(--bo-bordure); padding: 16px 12px; }
#side-menu li, #side-menu .nav-second-level li:first-child { border: none; }
#side-menu > li > a {
  font-size: 11px; font-weight: 600; letter-spacing: .08em; color: var(--bo-texte-doux);
  padding: 16px 20px 8px;
}
#side-menu > li.active > a, #side-menu > li > a:hover { color: var(--bo-bleu); background: transparent !important; }
#side-menu li.active { background: transparent; }
#side-menu li .nav-second-level li a { font-weight: 500; color: var(--bo-texte); text-transform: none; padding: 8px 10px 8px 12px; margin: 1px 8px; }
#side-menu li .nav-second-level li.active2 > a { background: var(--bo-bleu); box-shadow: 0 2px 6px rgba(0, 71, 96, .3); }

/* Titres de page : casse normale, plus présents */
.small-header .panel-body, .normalheader .hpanel .panel-body { padding: 18px 24px; }
.small-header .panel-body h2, .normalheader h2 {
  text-transform: none; font-size: 21px; font-weight: 600; letter-spacing: 0; color: var(--bo-bleu); margin: 0;
}
.small-header .panel-body small, .normalheader small { color: var(--bo-texte-doux); font-size: 13px; }

/* Boutons : majuscules conservées (78 libellés sont écrits en majuscules dans les gabarits),
   mais plus fines et légèrement espacées */
.btn { text-transform: uppercase; font-size: 11.5px; letter-spacing: .06em; font-weight: 600; }
.btn-xs { font-size: 10.5px; }

/* Bleu « info » distinct du bleu nuit principal */
.btn-info { background-color: var(--bo-info); border-color: var(--bo-info); color: #fff; }
.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active { background-color: var(--bo-info-survol); border-color: var(--bo-info-survol); color: #fff; }
.btn-outline.btn-info { background: #fff; border-color: var(--bo-info); color: var(--bo-info); }
.btn-outline.btn-info:hover, .btn-outline.btn-info:focus, .btn-outline.btn-info.active { background: var(--bo-info); color: #fff; }

/* Couleurs d'état des lots (filtres de la liste des lots, pastilles) */
.btn-success.libre { background-color: var(--bo-etat-libre); border-color: var(--bo-etat-libre); color: #fff; }
.btn-rose { background-color: var(--bo-etat-prereserve); border-color: var(--bo-etat-prereserve); color: #fff; }
.btn-rose:hover, .btn-rose:focus, .btn-rose:active, .btn-rose.active { background-color: #c85f8a; border-color: #c85f8a; color: #fff; }
.btn-warning { background-color: var(--bo-etat-option); border-color: var(--bo-etat-option); }
.btn-danger { background-color: var(--bo-etat-reserve); border-color: var(--bo-etat-reserve); }

/* Densité : panneaux et tableaux plus aérés */
.content { padding: 20px 24px; }
.hpanel { margin-bottom: 20px; }
.hpanel .panel-body { padding: 22px 24px; }
.table > thead > tr > th, .table > tbody > tr > td { padding: 10px 12px; }
.form-group { margin-bottom: 18px; }

/* Cases à cocher et boutons radio : couleur de la marque */
input[type="checkbox"], input[type="radio"] { accent-color: var(--bo-emeraude); }
.checkbox input[type="checkbox"]:checked + label::before, .radio:not(.radio-danger) input[type="radio"]:checked + label::before { border-color: var(--bo-emeraude); }
/* Boutons d'option « Non » (classe radio-danger des gabarits) : anneau et point rouges, pour se distinguer du « Oui » émeraude */
.radio-danger input[type="radio"]:checked + label::before { border-color: #d9483b; }
.radio-danger input[type="radio"]:checked + label::after { background-color: #d9483b; }
.checkbox-success input[type="checkbox"]:checked + label::before, .checkbox-primary input[type="checkbox"]:checked + label::before { background-color: var(--bo-emeraude); border-color: var(--bo-emeraude); }

/* =====================================================================
 * Bandeau du haut foncé (29/09/2026) : fond bleu nuit, logo blanc,
 * icônes et libellés clairs.
 * ===================================================================== */
#header { background: var(--bo-bleu); border-bottom: none; box-shadow: 0 2px 8px rgba(0, 40, 56, .18); }
.color-line { height: 3px; background: var(--bo-emeraude) !important; }
#logo1 img { content: url('../../dist/img/logo-runimmo-white.png'); }
#header .header-link { background: transparent; border: none; color: rgba(255, 255, 255, .85); }
#header .header-link:hover { background: rgba(255, 255, 255, .1); color: #fff; }
#header .navbar-nav > li > a, #header .navbar-nav > li > a h5, #header .navbar-nav > li > a span,
#header .small-logo, #header .small-logo .text-primary { color: rgba(255, 255, 255, .9); }
#header .navbar-nav > li > a i { color: #fff; opacity: .82; }
#header .navbar-nav > li > a:hover, #header .navbar-nav > li > a:focus, #header .navbar-nav > li.open > a { background: rgba(255, 255, 255, .12); }
#header .navbar-nav > li > a:hover i, #header .navbar-nav > li.open > a i { color: #fff; opacity: 1; }
#header .btn { background: var(--bo-emeraude); border-color: var(--bo-emeraude); color: #fff; box-shadow: none; }
#header .btn:hover, #header .btn:focus { background: var(--bo-emeraude-survol); border-color: var(--bo-emeraude-survol); }
#header .navbar-form-custom .form-control { background: rgba(255, 255, 255, .1); border-color: rgba(255, 255, 255, .2) !important; color: #fff; }
/* Les menus déroulants restent clairs */
#header .dropdown-menu, #header .dropdown-menu h5, #header .dropdown-menu a { color: var(--bo-texte); }
#header .dropdown-menu i { color: var(--bo-emeraude-survol); opacity: 1; }
/* Menus déroulants du bandeau (grille, notifications) : le bandeau est fixe, la page qui défile ne les fait pas bouger.
   Sur un écran peu haut, la dernière ligne (Actualités, Paramétrage, Flux Partenaire…) devenait inaccessible :
   hauteur limitée à la fenêtre et défilement propre au menu (14/10/2026). */
#header .dropdown-menu.hdropdown { max-height: calc(100vh - 72px); max-height: calc(100dvh - 72px); overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; }

/* Éléments placés à l'intérieur d'un titre de page (période, dates, cases) : taille normale */
.small-header .panel-body h2 > *:not(a), .normalheader h2 > *:not(a) {
  font-size: 13.5px; font-weight: 500; letter-spacing: 0; color: var(--bo-texte); vertical-align: middle;
}
.small-header .panel-body h2 .form-control, .normalheader h2 .form-control { font-size: 13px; height: 34px; }

/* =====================================================================
 * Finitions d'espacement (29/09/2026) : grille de 4 px, alignements.
 * ===================================================================== */
body { line-height: 1.5; }
label, .control-label { margin-bottom: 6px; line-height: 1.35; }
.form-group { margin-bottom: 20px; }
.hpanel .panel-heading.hbuilt { padding: 14px 24px; font-size: 12px; letter-spacing: .07em; text-transform: uppercase; }
.hpanel .panel-footer { padding: 14px 24px; }
.hpanel .panel-footer .btn + .btn, .hpanel .panel-heading .btn + .btn, .text-right .btn + .btn { margin-left: 8px; }
.checkbox, .radio { margin-top: 2px; margin-bottom: 8px; }
.checkbox label, .radio label { font-weight: 400; line-height: 1.4; }
.radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline { margin-left: 16px; }
.table > thead > tr > th:first-child, .table > tbody > tr > td:first-child { padding-left: 16px; }
.table > thead > tr > th:last-child, .table > tbody > tr > td:last-child { padding-right: 16px; }
.dataTables_wrapper .row + .row { margin-top: 12px; }
.small-header .panel-body h2 small, .normalheader h2 small { display: block; margin-top: 4px; }

/* Intitulés de rubrique du menu de gauche (« CLIENT », « SUIVI COMMERCIAL »…) : même style que « PARAMÉTRAGE » */
#side-menu li a.colored, #side-menu li a.colored:hover, #side-menu li a.colored-info, #side-menu li a.colored-info:hover {
  background: transparent !important; color: var(--bo-emeraude-survol) !important; cursor: default;
  font-size: 11px; font-weight: 600; letter-spacing: .08em; padding: 16px 20px 8px;
}

/* Listes déroulantes Select2, calendrier, fenêtres : même police que le reste */
.select2-container, .select2-container .select2-choice, .select2-drop, .select2-results, .select2-search input,
.fc, .modal-content, .sweet-alert, .toast, .datepicker, .bootstrap-datetimepicker-widget, .note-editor { font-family: var(--bo-police) !important; }

/* Bandeau : pastille de survol contenue dans le bandeau, menus déroulants ouverts sous le bandeau */
#header .navbar-nav > li > a { height: 44px; margin: 6px 2px; padding: 6px 16px; line-height: 32px; }
#header .navbar-nav > li:last-child > a { padding-right: 16px; margin-right: 12px; }
#header .navbar-nav > li > .dropdown-menu { margin-top: 10px; }

/* Tableaux larges (liste des contacts…) : plus compacts, et défilement horizontal dans le cadre
   plutôt qu'un débordement hors de l'interface */
.content { padding: 18px 20px; }
.hpanel .panel-body { padding: 20px; }
.table > thead > tr > th { font-size: 11px; letter-spacing: .02em; padding: 9px 8px; }
.table > tbody > tr > td { padding: 8px; }
.table > thead > tr > th:first-child, .table > tbody > tr > td:first-child { padding-left: 12px; }
.table > thead > tr > th:last-child, .table > tbody > tr > td:last-child { padding-right: 12px; }
.table-responsive { max-width: 100%; overflow-x: auto; }

/* Colonne « Action » des listes : icônes toujours côte à côte (la première était en float:left) */
.table td a.effet-survol { float: none !important; display: inline-block; margin: 0 3px; vertical-align: middle; }
.table td:has(> div > nobr > a.effet-survol), .table td:has(a.effet-survol) { white-space: nowrap; }

/* En-têtes de colonnes en casse normale : plus compacts (les majuscules espacées élargissaient les tableaux) */
.table > thead > tr > th { text-transform: none; font-size: 12px; letter-spacing: 0; font-weight: 600; color: var(--bo-texte-doux); }
/* Bandeau : Bootstrap donne une marge négative à la zone d'icônes, qui dépassait de l'écran (défilement horizontal) */
#header .navbar-right, #header .navbar-right:last-child { margin-right: 0; }

/* Flèches de tri DataTables : 20 px réservés au lieu de 30 */
table.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc,
table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled { padding-right: 20px; }
table.dataTable thead .sorting:after, table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc:after { right: 4px; }

/* Tableaux : ligne des noms de colonnes figée pendant le défilement de la page (js/bo-tableaux.js).
   Corrigé le 01/10/2026 : la version du 29/09 plaçait chaque tableau dans une zone haute comme l'écran,
   qui défilait d'elle-même ; arrivée en bas de la zone, la molette ne faisait plus descendre la page et
   les derniers lots restaient cachés sous le bord de l'écran. Désormais il n'y a plus de défilement
   vertical propre au tableau : l'en-tête se fige par rapport à la page, sous le bandeau.
   Un tableau trop large pour l'écran défile horizontalement dans sa zone (.bo-defile) ; son en-tête
   n'est alors pas figé (une zone qui défile empêche l'en-tête de suivre la page).
   Les blocs parents ne doivent pas défiler eux-mêmes, sinon l'en-tête se figerait par rapport à eux.
   Vérifié le 29/09/2026 : aucun menu déroulant n'est placé dans ces tableaux, rien n'est coupé. */
.dataTables_wrapper { max-width: 100%; overflow: visible; }
.table-responsive:has(.dataTables_wrapper) { overflow: visible; }
.bo-zone-tableau { max-width: 100%; border: 1px solid var(--bo-bordure); border-radius: 8px; }
.bo-zone-tableau.bo-defile { overflow-x: auto; }
.bo-zone-tableau > table.dataTable { margin: 0 !important; border: 0; }
/* DataTables fixe la largeur du tableau en pixels avant sa mise en zone : quelques pixels de trop suffisaient à
   faire défiler la zone et à perdre l'en-tête figé (contacts, programmes). Largeur de la zone ; un tableau
   réellement plus large s'élargit quand même (largeur minimale du contenu). Repéré sur neovarim, 03/10/2026. */
.bo-zone-tableau > table.dataTable { width: 100% !important; }
.bo-zone-tableau > table.dataTable > thead > tr > th, .bo-zone-tableau > table.dataTable > thead > tr > td {
  background: var(--bo-fond-clair); box-shadow: inset 0 -1px 0 var(--bo-bordure);
}
.bo-zone-tableau:not(.bo-defile) > table.dataTable > thead > tr > th,
.bo-zone-tableau:not(.bo-defile) > table.dataTable > thead > tr > td {
  position: sticky; top: var(--bo-haut-tableau, var(--bo-haut-fixe, 62px)); z-index: 4;
}

/* En-têtes de panneau avec une rangée de boutons dans un tableau de mise en page (fiche programme…) :
   les boutons passent à la ligne quand la place manque, au lieu de dépasser */
.hpanel .panel-heading table:not(.table) { width: 100%; }
.hpanel .panel-heading table:not(.table) > tbody > tr {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 6px;
}
.hpanel .panel-heading table:not(.table) > tbody > tr > td { padding: 0; }
.hpanel .panel-heading table:not(.table) > tbody > tr > td { flex: 0 0 auto; width: auto !important; }
.hpanel .panel-heading table:not(.table) > tbody > tr > td:first-child { flex: 1 1 auto; min-width: 140px; }
.hpanel .panel-heading table:not(.table) .btn { padding: 6px 10px; font-size: 10.5px; letter-spacing: .02em; min-width: 0; margin: 0; }
.hpanel .panel-heading table:not(.table) > tbody > tr > td > a:not(.btn), .hpanel .panel-heading table:not(.table) > tbody > tr > td > ul,
.hpanel .panel-heading table:not(.table) ul.nav, .hpanel .panel-heading table:not(.table) li.dropdown { margin: 0 !important; padding: 0 !important; }
.hpanel .panel-heading table:not(.table) li.dropdown { list-style: none; }
.hpanel .panel-heading table:not(.table) > tbody > tr > td:empty { display: none; }
.hpanel .panel-heading .table-responsive { overflow: visible; }
/* Petits boutons plus compacts */
.btn-sm, .btn-group-sm > .btn { padding: 6px 12px; letter-spacing: .04em; }

/* Cartes du suivi commercial (bureaux de vente) : statistiques sans passage à la ligne */
.hpanel .panel-footer.contact-footer { padding: 14px 12px 6px; }
.contact-footer .row { margin-left: -4px; margin-right: -4px; }
.contact-footer .row > [class*="col-"] { padding-left: 4px; padding-right: 4px; margin-bottom: 10px; }
.contact-footer .row > [class*="col-"]:nth-child(7), .contact-footer .row > [class*="col-"]:nth-child(8) { width: 50%; }
.contact-footer .contact-stat span {
  display: block; font-size: 10px; letter-spacing: .03em; text-transform: uppercase; color: var(--bo-texte-doux);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-bottom: 2px;
}
.contact-footer .contact-stat strong {
  display: block; font-size: 15px; font-weight: 700; color: var(--bo-texte); white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
@media (max-width: 1399px) {
  .contact-footer .contact-stat span { font-size: 9.5px; letter-spacing: 0; }
  .hpanel .panel-footer.contact-footer { padding-left: 10px; padding-right: 10px; }
}

/* =====================================================================
 * Écran de connexion (preindex.htm, preindexetape2.htm) : fond aux couleurs
 * du logo, carte centrée. Limité aux pages qui contiennent .login-container.
 * ===================================================================== */
body:has(.login-container) {
  min-height: 100vh; margin: 0;
  background: radial-gradient(1200px 600px at 85% 110%, rgba(37, 180, 180, .35), transparent 60%),
              linear-gradient(160deg, #003448 0%, var(--bo-bleu) 55%, #0a5f73 100%) fixed;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 32px 16px; box-sizing: border-box;
}
body:has(.login-container)::after {
  content: "Espace collaborateurs RUNIMMO"; margin-top: 22px;
  font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: rgba(255, 255, 255, .6);
}
.login-container { width: 100%; max-width: 420px; margin: 0 auto; padding: 0; }
.login-container .row { margin: 0; }
.login-container .col-md-12 { padding: 0; }
.login-container .hpanel { margin: 0; }
.login-container .hpanel .panel-body {
  border: none; border-radius: 18px; padding: 36px 36px 28px;
  box-shadow: 0 24px 60px rgba(0, 20, 30, .35), 0 2px 6px rgba(0, 20, 30, .12);
}
.login-container .panel-body img { display: block; width: 230px; max-width: 80%; height: auto; margin: 4px auto 28px; }
.login-container label, .login-container .control-label { font-size: 13px; font-weight: 600; color: var(--bo-texte); margin-bottom: 6px; }
.login-container .form-control { height: 46px; font-size: 15px; padding: 10px 14px; border-radius: 10px !important; background: var(--bo-fond-clair); }
.login-container .form-control:focus { background: #fff; }
.login-container .form-control[readonly] { color: var(--bo-texte-doux); }
.login-container .form-group { margin-bottom: 18px; }
.login-container .cf-turnstile { display: flex; justify-content: center; }
.login-container .btn-block {
  height: 48px; font-size: 13px; letter-spacing: .08em; border-radius: 10px; margin-top: 4px;
  background: var(--bo-bleu); border-color: var(--bo-bleu); color: #fff;
}
.login-container .btn-block:hover:not([disabled]) { background: var(--bo-emeraude-survol); border-color: var(--bo-emeraude-survol); }
.login-container .btn-block[disabled] { opacity: .45; }
.login-container p.text-center { margin: 18px 0 0; font-size: 13.5px; }
.login-container p.text-center a { color: var(--bo-bleu); font-weight: 500; text-decoration: none; border-bottom: 1px solid rgba(0, 71, 96, .25); }
.login-container p.text-center a:hover { color: var(--bo-emeraude-survol); border-color: currentColor; }
.login-container .alert { border-radius: 10px; font-size: 13.5px; }
.login-container .select2-container .select2-choice { height: 46px; line-height: 44px; border-radius: 10px !important; }
@media (max-width: 480px) {
  .login-container .hpanel .panel-body { padding: 28px 22px 22px; border-radius: 16px; }
  .login-container .panel-body img { margin-bottom: 22px; }
}

/* Flèche de repli des panneaux : centrée à droite de l'en-tête, avec un espace réservé
   pour qu'elle ne touche pas les boutons (« Enregistrer »…) */
.hpanel .panel-heading:has(> .panel-tools a.showhide) { position: relative; padding-right: 60px; }
.hpanel .panel-heading > .panel-tools:has(> a.showhide) {
  position: absolute; right: 16px; top: 50%; transform: translateY(-50%); float: none; margin: 0;
}
.hpanel .panel-heading > .panel-tools a.showhide { display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 8px; color: var(--bo-texte-doux); }
.hpanel .panel-heading > .panel-tools a.showhide:hover { background: var(--bo-fond); color: var(--bo-bleu); }
/* Bouton principal « Enregistrer » un peu plus affirmé */
.btn-primary { font-weight: 700; }

/* Titre de page fixé (pages de suivi commercial…) : « collant » au lieu de fixe, pour qu'il occupe
   sa vraie hauteur et ne recouvre jamais le contenu, même s'il passe sur deux lignes */
.fixed-small-header .small-header {
  position: sticky; top: 62px; left: auto; right: auto; margin-left: 0; z-index: 90;
}
.fixed-small-header .content, .fixed-small-header.page-small .content { padding-top: 18px; }
/* Envoi de fichier (visuel du programme…) : boutons côte à côte, sans cadre autour */
.fileupload .btn-file.btn-white { padding: 0; border: 0; background: none; box-shadow: none; }
.fileupload > div:last-child { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 10px; }
.fileupload .thumbnail { border-radius: 10px; border-color: var(--bo-bordure); }
/* Listes à choix multiples (Select2) : hauteur selon le contenu */
.select2-container-multi .select2-choices { min-height: 36px; height: auto !important; padding: 3px 6px; }
.select2-container-multi .select2-choices .select2-search-choice { margin: 3px 4px 3px 0; border-radius: 6px; }
.fileupload .btn-file { display: inline-flex; align-items: center; vertical-align: middle; line-height: 1; }
.fileupload .btn-file .fileupload-new, .fileupload .btn-file .fileupload-exists { display: inline-flex; }
.fileupload .btn-file .btn, .fileupload > div:last-child > a.btn { margin: 0; padding: 5px 9px; font-size: 10px; line-height: 1.4; letter-spacing: .03em; }
.fileupload > div:last-child { align-items: flex-start; gap: 4px; }
.fileupload .btn-file .btn, .fileupload > div:last-child > a.btn { padding: 5px 8px; }
.fileupload > div:last-child > a.btn, .fileupload .btn-file { margin: 0 !important; }
.fileupload > div:last-child > a.btn { top: 0 !important; }

/* Messages de confirmation (« Enregistrement effectué »…), version validée sur neovarim le 03/10/2026 : vert
   intermédiaire bien visible, coche ronde à gauche, apparition douce ; disparition au bout de 5 s et croix de
   fermeture gérées par js/bo-messages.js. Les messages d'erreur et d'avertissement ne changent pas. */
.alert-success {
  background: #bfe9d1 !important; border: 1px solid #77c99c !important; color: #0f4f31 !important;
  font-size: 15px; font-weight: 600; padding: 14px 46px 14px 50px; border-radius: 10px; position: relative;
  box-shadow: 0 3px 10px rgba(35, 133, 90, .20); animation: bo-confirmation .45s ease-out;
}
.alert-success::before {
  content: "\f00c"; font-family: FontAwesome; font-weight: normal; position: absolute; left: 16px; top: 50%; transform: translateY(-50%);
  width: 22px; height: 22px; border-radius: 50%; background: #23855a; color: #fff; display: flex; align-items: center; justify-content: center; font-size: 12px;
}
.alert-success a { color: #0f4f31; text-decoration: underline; }
.bo-message-fermer { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); width: 28px; height: 28px; border: 0; border-radius: 50%;
  background: transparent; color: #0f4f31; font-size: 20px; line-height: 1; cursor: pointer; opacity: .7; }
.bo-message-fermer:hover, .bo-message-fermer:focus-visible { opacity: 1; background: rgba(15, 79, 49, .1); }
@keyframes bo-confirmation { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .alert-success { animation: none; } }

/* Fiche programme réorganisée par thème (neovarim 03/10/2026, runimmo 04/10/2026) : sections titrées, grille souple, sans barre latérale */
.bo-sections { padding: 4px 6px; }
.bo-section { border: 0; margin: 0 0 22px; padding: 0; min-width: 0; }
.bo-section > legend {
  width: 100%; border: 0; border-bottom: 1px solid var(--bo-bordure); margin: 0 0 14px; padding: 0 0 8px;
  font-size: 12.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--bo-bleu);
}
.bo-grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 2px 28px; align-items: start; }
.bo-grille > .col-md-10 { width: auto; float: none; padding: 0; margin-bottom: 14px; min-height: 0 !important; }

/* Fiche programme complète (03/10/2026) : chaque champ dans une cellule de grille ; largeurs selon le contenu */
.bo-grille > .bo-champ { min-width: 0; }
.bo-grille > .bo-champ > [class*="col-"] { width: auto; float: none; padding: 0; margin-bottom: 14px; min-height: 0 !important; }
.bo-grille > .bo-champ > [class*="col-"] > [class*="col-"] { width: auto; float: none; padding: 0; }
.bo-grille > .bo-champ > .form-group { margin-bottom: 14px; }
.bo-grille > .bo-pleine { grid-column: 1 / -1; }
.bo-grille > .bo-double { grid-column: span 2; }
.bo-grille > .bo-double-ligne { grid-row: span 2; }
.bo-grille-identite > .bo-champ:first-child { grid-row: span 2; }
.bo-grille-options > .bo-champ p.font-bold { margin: 0 0 6px; font-size: 14.5px; }

/* Origines des contacts : les 4 colonnes préparées par le serveur, côte à côte */
.bo-grille > .bo-champ:has(input[name="typesource[]"]) { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0 28px; }
@media (max-width: 1100px) { .bo-grille > .bo-champ:has(input[name="typesource[]"]) { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.bo-champ:has(input[name="typesource[]"]) .checkbox { margin: 0 0 4px; }

/* Éditeur de la description : initialisé bloc replié, il prenait une hauteur nulle */
.bo-champ .note-editor .note-editable { min-height: 200px; }

/* Points forts : les cinq intérêts sur une ligne (sous la description, pleine largeur) */
.bo-grille-interets { grid-template-columns: repeat(5, minmax(0, 1fr)); }
@media (max-width: 1300px) { .bo-grille-interets { grid-template-columns: repeat(3, minmax(0, 1fr)); } }

/* Fiche programme : en-tête du bloc (titre + actions + « Enregistrer ») figé pendant le défilement du bloc,
   sous le bandeau s'il est fixe. Il ne sort pas du bloc : il ne recouvre jamais le tableau des lots. */
#programme-panel > .panel-heading { position: sticky; top: var(--bo-haut-fixe, 0px); z-index: 30; background: #fff; }
#programme-panel:not(.collapsed) > .panel-heading { box-shadow: 0 6px 12px -10px rgba(38, 45, 50, .35); }

/* Fiche programme : crayon « Modifier le promoteur » à côté de la liste (le gabarit donne 90 % à la liste, le crayon passait dessous) */
.col-md-10:has(> span[id$="_ajax"] + span[id^="modifier_"]) { display: flex; flex-wrap: wrap; align-items: flex-start; column-gap: 8px; }
.col-md-10:has(> span[id$="_ajax"] + span[id^="modifier_"]) > label { flex: 0 0 100%; }
.col-md-10:has(> span[id$="_ajax"] + span[id^="modifier_"]) > span[id$="_ajax"] { flex: 1 1 0; width: auto !important; min-width: 0; }
.col-md-10 > span[id^="modifier_"] { flex: 0 0 auto; margin-top: 8px; cursor: pointer; }
/* Champs masqués d'origine (style="display: none", ex. « Conseiller commercial ») : leur cellule ne prend pas de place */
.bo-grille > .bo-champ:has(> [style*="display: none"]), .bo-grille > .bo-champ:has(> [style*="display:none"]) { display: none; }
/* Fiche programme : « Statut et options » sur une seule ligne (5 réglages Oui/Non) */
.bo-grille.bo-grille-statut { grid-template-columns: repeat(5, max-content); column-gap: 56px; }
.bo-grille-statut p.font-bold, .bo-grille-statut label { white-space: nowrap; }
@media (max-width: 1100px) { .bo-grille.bo-grille-statut { grid-template-columns: repeat(3, minmax(0, 1fr)); } }

/* Documents du programme (neovarim 03/10/2026, runimmo 04/10/2026) : formulaire d'ajout en haut sur une ligne, documents en vignettes régulières */
.hpanel:has(#pdfUpdateForm) > .panel-body > .row { display: flex; flex-direction: column; margin: 0; }
.hpanel:has(#pdfUpdateForm) > .panel-body > .row > [class*="col-"] { width: 100%; float: none; padding: 0; }
.hpanel:has(#pdfUpdateForm) > .panel-body > .row > [class*="col-"]:has(#pdfUpdateForm) { order: -1; }
.hpanel:has(#pdfUpdateForm) .chat-users, .hpanel:has(#pdfUpdateForm) .users-list { height: auto; max-height: none; overflow: visible; border: 0; background: none; padding: 0; }
#pdfUpdateForm > .row { display: flex !important; flex-wrap: wrap; align-items: flex-end; gap: 12px 24px; padding: 16px 20px !important;
  background: var(--bo-fond-clair); border-bottom: 1px solid var(--bo-bordure); }
#pdfUpdateForm > .row > [class*="col-"] { width: auto; float: none !important; padding: 0; margin: 0; }
#pdfUpdateForm > .row > [class*="col-"]:has(.select2-container, select) { flex: 0 1 260px; }
#pdfUpdateForm > .row > [class*="col-"]:has(#nomreel_doc) { flex: 1 1 280px; }
#pdfUpdateForm > .row > [class*="col-"]:has(.bo-enregistrer) { flex: 0 0 auto; }
#pdfUpdateForm > .row > [class*="col-"] .bo-enregistrer { float: none !important; margin: 0 !important; }
#pdfUpdateForm > .row > [class*="col-"] > p.font-bold { margin: 0 0 6px; }


/* Documents du programme, 2e version (neovarim 03/10/2026, runimmo 04/10/2026) : visuels puis documents, cartes de hauteur égale, miniatures 400 px */
.hpanel:has(#pdfUpdateForm) .chat-discussion { display: block; height: auto; max-height: none; overflow: visible; background: none; padding: 8px 20px 20px; }
.bo-docs-titre { margin: 14px 0 10px; font-size: 12.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--bo-bleu); }
.bo-docs-grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 14px; }
.bo-docs-vide { margin: 14px 0 0; color: var(--bo-texte-doux); }
.bo-doc { position: relative; min-width: 0; }
.bo-doc-lien { display: flex; flex-direction: column; height: 100%; border: 1px solid var(--bo-bordure); border-radius: 10px; overflow: hidden;
  background: #fff; color: var(--bo-texte); text-decoration: none; transition: border-color .15s, box-shadow .15s; }
.bo-doc-lien:hover, .bo-doc-lien:focus-visible { border-color: #bfe3e3; box-shadow: 0 3px 10px rgba(0, 71, 96, .12); color: var(--bo-texte); text-decoration: none; }
.bo-doc-apercu { display: flex; align-items: center; justify-content: center; height: 120px; background: var(--bo-fond-clair); border-bottom: 1px solid var(--bo-bordure); }
.bo-doc-apercu img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bo-doc-apercu i.fa { font-size: 44px; color: var(--bo-bleu); opacity: .75; }
.bo-doc-type { padding: 10px 12px 0; font-size: 14px; font-weight: 700; line-height: 1.3; }
.bo-doc-nom { padding: 3px 12px 12px; font-size: 12.5px; color: var(--bo-texte-doux); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bo-doc-badge { align-self: flex-start; margin: -4px 12px 12px; padding: 2px 8px; border-radius: 999px; background: #eef8f8; color: var(--bo-bleu); font-size: 11.5px; font-weight: 600; }
/* Suppression : bouton rond bien visible dans le coin de l'aperçu (la confirmation reste celle de js/programme.js) */
.bo-doc-suppr { position: absolute; top: 8px !important; right: 8px; left: auto !important; z-index: 2; display: inline-flex !important; align-items: center; justify-content: center;
  width: 32px; height: 32px; border-radius: 50%; background: rgba(255, 255, 255, .95); box-shadow: 0 1px 4px rgba(0, 0, 0, .18);
  color: var(--bo-texte-doux); font-size: 15px; text-decoration: none; transition: background .15s, color .15s; }
.bo-doc-suppr:hover, .bo-doc-suppr:focus-visible { background: #d9483b; color: #fff; }


/* Fenêtres de confirmation (SweetAlert) : bouton « Oui » aux couleurs du back-office au lieu du vert de l'ancien thème */
.sweet-alert button.confirm { background-color: var(--bo-bleu) !important; box-shadow: none !important; }

/* Rubrique active des sous-menus (repris de neovarim le 04/10/2026) : fond émeraude très pâle, texte bleu nuit en gras, sans barre latérale */
#side-menu li .nav-second-level li.active a, #side-menu li .nav-second-level li.active2 a,
#side-menu li .nav-second-level li.active > a, #side-menu li .nav-second-level li.active2 > a {
  background: #eef8f8; color: var(--bo-bleu); font-weight: 600;
  box-shadow: none;
}

#side-menu li .nav-second-level li a { font-size: 14.5px; }
#side-menu li .nav-second-level li a:hover { background: #eef8f8; color: var(--bo-bleu); }

/* Avatar du menu : 72 px au lieu d'environ 170 px, le menu remonte d'environ 100 px */
.profile-picture img.img-circle, .profile-picture a > img { width: 72px !important; height: 72px !important; display: block; margin: 0 auto 8px; }
.profile-picture { padding: 12px; text-align: center; }
/* Avatar du menu : jamais déformé (photo personnalisée non carrée), léger contour */
.profile-picture img.img-circle, .profile-picture a > img { object-fit: cover; object-position: center 30%; border: 2px solid #fff; box-shadow: 0 0 0 1px var(--bo-bordure); }

/* Menu de gauche (neovarim 03/10/2026, runimmo 04/10/2026) : retour à la structure d'origine du thème (rubriques en lignes séparées par un filet,
   intitulé de page en bloc plein), aux couleurs actuelles. Pas de barre colorée latérale. */
#side-menu > li { border-bottom: 1px solid var(--bo-bordure); }
#side-menu > li > a, #side-menu > li > a .nav-second-level {
  display: block; padding: 14px 20px; font-size: 13px !important; font-weight: 700; letter-spacing: .03em;
  text-transform: uppercase; color: #4b545b;
}
#side-menu > li > a > span.nav-second-level { padding: 0; display: inline; }
#side-menu > li > a:hover, #side-menu > li > a:focus, #side-menu > li.active > a { background: #eef8f8; color: var(--bo-bleu); }
/* Intitulé de page (« Programme »…) et rubriques « colored » : bloc plein bleu nuit, comme le bloc vert d'origine */
#side-menu li a.colored, #side-menu li a.colored:hover {
  background: var(--bo-bleu) !important; color: #fff !important; cursor: default;
  font-size: 13px !important; font-weight: 700; letter-spacing: .04em; padding: 14px 20px !important; text-transform: uppercase;
}
#side-menu li a.colored-info, #side-menu li a.colored-info:hover {
  background: var(--bo-emeraude-survol) !important; color: #fff !important;
  font-size: 13px !important; font-weight: 700; letter-spacing: .04em; padding: 14px 20px !important; text-transform: uppercase;
}
/* Colonne du menu blanche sur toute la hauteur de la page (le menu, positionné sur la fenêtre, s'arrêtait au défilement) */
body:has(#menu):not(.hide-sidebar):not(.page-small):not(:has(.login-container)) {
  background: linear-gradient(90deg, #fff 0, #fff 180px, var(--bo-fond) 180px) !important;
}

/* Repris de neovarim le 04/10/2026 */
/* Liste des programmes : barre des filtres par région et des boutons figée sous le titre de page ;
   l'en-tête des colonnes se fige juste dessous (--bo-haut-tableau, calculé par js/bo-tableaux.js) */
.hpanel:has(input[name="myselectprog"]) > .panel-heading { position: sticky; top: var(--bo-haut-fixe, 0px); z-index: 25; background: #fff; box-shadow: 0 6px 12px -10px rgba(38, 45, 50, .35); }
/* Liste des programmes : colonnes ajustées à leur contenu (DataTables fixait des largeurs trop généreuses au démarrage),
   pour que le tableau tienne dans l'écran et garde ses noms de colonnes figés */
.hpanel:has(input[name="myselectprog"]) .bo-zone-tableau > table.dataTable > thead > tr > th { width: auto !important; }
.hpanel:has(input[name="myselectprog"]) .bo-zone-tableau > table.dataTable > tbody > tr > td { font-size: 13px; } /* 14 px chez neovarim, dont le texte de base est plus grand */
/* En-tête de panneau figé (classe .bo-colle posée par js/bo-tableaux.js) : coins carrés et fond opaque tant qu'il est collé,
   ombre légère pour le détacher du contenu qui passe dessous ; coins arrondis quand la page est en haut */
.hpanel > .panel-heading { transition: border-radius .15s ease; }
.hpanel > .panel-heading.bo-colle { border-radius: 0 !important; background: #fff; box-shadow: 0 6px 12px -10px rgba(38, 45, 50, .35); }
@media (prefers-reduced-motion: reduce) { .hpanel > .panel-heading { transition: none; } }
/* Liste des programmes runimmo : marges des cases un peu réduites (12 colonnes), pour que le tableau tienne en 1440 px
   et garde ses noms de colonnes figés sous la barre des filtres */
.hpanel:has(input[name="myselectprog"]) .bo-zone-tableau > table.dataTable > thead > tr > th,
.hpanel:has(input[name="myselectprog"]) .bo-zone-tableau > table.dataTable > tbody > tr > td { padding-left: 9px; padding-right: 9px; }
.hpanel:has(input[name="myselectprog"]) .bo-zone-tableau > table.dataTable > thead > tr > th.sorting,
.hpanel:has(input[name="myselectprog"]) .bo-zone-tableau > table.dataTable > thead > tr > th.sorting_asc,
.hpanel:has(input[name="myselectprog"]) .bo-zone-tableau > table.dataTable > thead > tr > th.sorting_desc { padding-right: 20px; }

/* Titres de page (04/10/2026, comme neovarim) : 19 px et bandeau de titre moins haut */
.small-header .panel-body h2, .normalheader h2 { font-size: 19px; line-height: 1.3; }
.small-header .panel-body, .normalheader .hpanel .panel-body { padding-top: 14px; padding-bottom: 14px; }
/* Contrôles placés dans le bandeau de titre (période, semaine en cours…) : plus lisibles, sur toutes les pages */
.small-header .panel-body h2 > *:not(a), .normalheader h2 > *:not(a) { font-size: 15px; }
.small-header .panel-body h2 .form-control, .normalheader h2 .form-control { font-size: 14.5px; height: 36px; }
.small-header .panel-body h2 .radio-inline + .radio-inline, .normalheader h2 .radio-inline + .radio-inline { margin-left: 18px; }
/* Titre écrit dans un sous-élément (« Suivi commercial ») : même taille que les autres titres de page */
.small-header .panel-body h2 > span.pull-left:first-child, .normalheader h2 > span.pull-left:first-child { font-size: 19px; font-weight: 600; color: var(--bo-bleu); }

/* Cartes du suivi commercial : coins carrés à la jonction entre le haut blanc et le pied des chiffres
   (les coins extérieurs de la carte restent arrondis) */
.hpanel.contact-panel > .panel-body { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
/* Champ « Période » du suivi commercial : remplacé le 04/10/2026 par le sélecteur compact .bo-periode (voir fin de fichier) */
.small-header .panel-body h2 > span.pull-left:first-child { white-space: nowrap; margin-right: 16px; }
@media (max-width: 1380px) {
  .small-header .panel-body h2 > *:not(a), .normalheader h2 > *:not(a) { font-size: 13.5px; }
  .small-header .panel-body h2 .form-control, .normalheader h2 .form-control { font-size: 13.5px; }
  .small-header .panel-body h2 form, .normalheader h2 form { display: flex; flex-wrap: nowrap; align-items: center; }
  .small-header .panel-body h2 > span.pull-left:first-child { font-size: 19px; }
  .small-header .panel-body h2 .radio-inline + .radio-inline, .normalheader h2 .radio-inline + .radio-inline { margin-left: 8px; }
}

/* « Nouveau contact salon » : rarement utilisé, bouton discret (blanc, texte gris) */
.hpanel .panel-heading .btn.bo-bouton-discret { background: #fff; border-color: var(--bo-bordure); color: var(--bo-texte-doux); }
.hpanel .panel-heading .btn.bo-bouton-discret:hover, .hpanel .panel-heading .btn.bo-bouton-discret:focus { background: var(--bo-fond-clair); border-color: var(--bo-texte-doux); color: var(--bo-bleu); }

/* Fiche programme, fiche lot et lots (04/10/2026, reprise de neovarim 03/10/2026) ----------------------------------------
   « Dispositifs fiscaux et labels » en trois cartes (Fiscalité, Normes et labels, Outre-mer) : une ligne par dispositif,
   libellé à gauche, commande dans une colonne fixe à droite ; cases d'abord, Oui / Non calés en bas pour s'aligner d'une carte à l'autre */
.bo-fiscal { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin-bottom: 8px; }
@media (max-width: 1100px) { .bo-fiscal { grid-template-columns: 1fr; } }
.bo-fisc-groupe { display: flex; flex-direction: column; border: 1px solid var(--bo-bordure); border-radius: var(--bo-rayon); padding: 10px 14px 4px; background: #fff; }
.bo-fisc-titre { margin: 0 0 4px; font-size: 12px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--bo-bleu); }
.bo-fisc-ligne { display: grid; grid-template-columns: minmax(0, 1fr) 128px; align-items: center; gap: 12px; min-height: 40px; border-bottom: 1px solid #edf1f4; }
.bo-fisc-ligne:last-child { border-bottom: 0; }
.bo-fisc-ligne.bo-fisc-bas { margin-top: auto; border-top: 1px solid #edf1f4; }
.bo-fisc-lib { margin: 0; font-size: 14px; font-weight: 400; color: var(--bo-texte); cursor: pointer; }
.bo-fisc-ouinon { display: flex; align-items: center; gap: 18px; }
.bo-fisc-ouinon .radio, .bo-fisc-ouinon .checkbox { margin: 0 !important; padding-top: 0 !important; padding-bottom: 0; min-height: 0; display: flex; align-items: center; }
.bo-fisc-ouinon .checkbox { padding-left: 20px; }
.bo-fisc-ouinon .checkbox > label { min-height: 17px; padding-left: 0; }

/* Origines des contacts : case et libellé alignés, libellés longs sur deux lignes sans ligne vide
   (le gabarit met une espace insécable et un <br> entre la case et le libellé) */
.bo-champ:has(input[name="typesource[]"]) .checkbox { display: flex; align-items: flex-start; font-size: 0; margin: 0 0 6px; min-height: 22px; }
.bo-champ:has(input[name="typesource[]"]) .checkbox br { display: none; }
.bo-champ:has(input[name="typesource[]"]) .checkbox label { font-size: 14px; line-height: 1.4; padding-left: 6px; }

/* Documents du programme : le thème décale .chat-users de -30 px, la barre d'ajout sortait du panneau à gauche */
.hpanel:has(#pdfUpdateForm) .chat-users { margin: 0; }

/* Lots : la zone dépliée (« + » d'une ligne) se détache du tableau : fond émeraude très pâle, informations « libellé / valeur »
   en cartes blanches disposées en grille, au lieu d'une longue liste d'une information par ligne */
table.dataTable > tbody > tr.child > td.child { padding: 14px 18px !important; background: #eef8f8 !important; border-top: 1px solid #cfe8e8; border-bottom: 1px solid #cfe8e8; }
table.dataTable > tbody > tr.child ul.dtr-details {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 10px 22px; width: 100%; margin: 0; padding: 0;
}
table.dataTable > tbody > tr.child ul.dtr-details > li {
  display: flex; flex-direction: column; gap: 2px; min-width: 0;
  background: #fff; border: 1px solid var(--bo-bordure) !important; border-radius: 6px; padding: 8px 10px !important;
}
table.dataTable > tbody > tr.child span.dtr-title { min-width: 0; font-size: 12px; font-weight: 600; color: var(--bo-texte-doux); text-transform: none; letter-spacing: .01em; }
table.dataTable > tbody > tr.child span.dtr-data { font-size: 14.5px; color: var(--bo-texte); overflow-wrap: anywhere; }
/* Valeur vide : un tiret discret plutôt qu'un blanc */
table.dataTable > tbody > tr.child span.dtr-data:empty::before { content: "—"; color: #b9c3cb; }

/* Icône « plan du lot » : plan d'appartement vu de dessus (murs, cloisons, ouverture de porte) au lieu du crayon et de la règle ;
   tracé par un masque SVG, la couleur vient de background-color */
.bo-icone-plan {
  display: inline-block; width: 30px; height: 30px; vertical-align: middle; background-color: var(--bo-bleu);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2.5' y='3.5' width='19' height='17' rx='1'/%3E%3Cpath d='M11 3.5v6M11 13.5v7M11 13.5h3.5M18 13.5h3.5'/%3E%3Cpath d='M11 9.5a4 4 0 0 1 4 4' stroke-dasharray='1.4 1.6'/%3E%3Cpath d='M2.5 9.5h4'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2.5' y='3.5' width='19' height='17' rx='1'/%3E%3Cpath d='M11 3.5v6M11 13.5v7M11 13.5h3.5M18 13.5h3.5'/%3E%3Cpath d='M11 9.5a4 4 0 0 1 4 4' stroke-dasharray='1.4 1.6'/%3E%3Cpath d='M2.5 9.5h4'/%3E%3C/svg%3E") center / contain no-repeat;
}
a:hover > .bo-icone-plan, a:focus > .bo-icone-plan { background-color: var(--bo-emeraude); }

/* Fiche lot réorganisée par thème : Identification, Commercialisation, Prix, Surfaces, Parking/box/cave et plan,
   Location et rendement, Champs complémentaires, Rémunérations. Mêmes champs, mêmes noms ; grille souple comme la fiche programme */
.bo-fiche-lot .bo-grille { grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 0 24px; }
.bo-fiche-lot .bo-champ p.font-bold { margin: 0 0 6px; }
.bo-fiche-lot .bo-champ label.control-label { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bo-fiche-lot .bo-champ:has(input[name="allot_libre"]) nobr { white-space: normal; display: flex; flex-wrap: wrap; gap: 4px 18px; }
.bo-fiche-lot .bo-champ:has(input[name="allot_libre"]) br { display: none; }
.bo-fiche-lot .bo-champ:has(input[name="allot_libre"]) .checkbox-inline { margin: 0 !important; }
/* Sélection CGP masquée tant qu'aucun allotement CGP n'est coché : la cellule disparaît avec */
.bo-fiche-lot .bo-champ:has(> #cgpi-container[style*="none"]) { display: none; }
/* Champs complémentaires : les quatre listes du serveur aplaties dans une seule grille */
.bo-complements > .row { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 0 24px; margin: 0; }
.bo-complements > .row > [class*="col-"], .bo-complements .form-group, .bo-complements .form-group > .row { display: contents; }
.bo-complements .col-md-10 { width: auto; float: none; padding: 0; margin-bottom: 14px; min-width: 0; }
.bo-complements label.control-label { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Rémunérations : un tableau, une colonne par bénéficiaire, une ligne pour le prix de base et une pour le taux */
.bo-remu { display: grid; grid-template-columns: 190px repeat(5, minmax(0, 1fr)); gap: 8px 18px; align-items: center; }
.bo-remu-tete { font-size: 12.5px; font-weight: 700; letter-spacing: .04em; color: var(--bo-bleu); }
.bo-remu-lib { font-size: 14px; font-weight: 600; color: var(--bo-texte); }
.bo-remu > .bo-champ > [class*="col-"] { width: auto; float: none; padding: 0; margin: 0; }
.bo-remu > .bo-champ label.control-label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
@media (max-width: 1000px) { .bo-remu { grid-template-columns: 140px repeat(5, minmax(90px, 1fr)); overflow-x: auto; } }

/* =====================================================================
 * 04/10/2026 — Reprise des améliorations neovarim du 03/10/2026, aux couleurs runimmo
 * ===================================================================== */
/* Suivi commercial : recherche dans les cartes (programme, ville ou code postal, promoteur) qui prend la place libre,
   période en un seul sélecteur compact (libellé + dates) ; les raccourcis sont dans le calendrier qui s'ouvre au clic.
   Les quatre boutons radio de période sont retirés du bandeau. */
.reportbdv_display .small-header h2 > span.pull-right { flex: 1 1 auto; min-width: 0; display: flex; justify-content: flex-end; }
.bo-suivi-outils { display: flex !important; flex-wrap: nowrap; align-items: center; gap: 14px; flex: 1 1 auto; min-width: 0; justify-content: flex-end; margin: 0; }
.bo-recherche-prog { position: relative; flex: 0 1 440px; min-width: 240px; margin: 0; font-weight: 400; }
.bo-recherche-prog > .fa { position: absolute; left: 13px; top: 50%; transform: translateY(-50%); color: var(--bo-texte-doux); font-size: 14px; pointer-events: none; }
.bo-recherche-prog > input.form-control { width: 100%; padding-left: 36px; border-radius: var(--bo-rayon); }
.bo-periode {
  display: inline-flex; align-items: center; gap: 8px; margin: 0; padding: 0 12px; height: 36px; flex: 0 0 auto;
  border: 1px solid var(--bo-bordure); border-radius: var(--bo-rayon); background: #fff; cursor: pointer; font-weight: 400; white-space: nowrap;
}
.bo-periode:hover { border-color: var(--bo-emeraude); background: #eef8f8; }
.bo-periode:focus-within { border-color: var(--bo-emeraude); box-shadow: 0 0 0 3px rgba(37, 180, 180, .18); }
.bo-periode > .fa-calendar { color: var(--bo-bleu); }
.bo-periode > .fa-caret-down { color: var(--bo-texte-doux); }
.small-header .panel-body h2 .bo-periode-libelle { font-weight: 600; color: var(--bo-bleu); font-size: 14px; }
.small-header .panel-body h2 .bo-periode #periode-range, .bo-periode #periode-range {
  width: 182px !important; border: 0; padding: 0; height: auto; background: transparent; box-shadow: none; outline: none;
  cursor: pointer; font-size: 14px; color: var(--bo-texte); display: inline-block;
}
.bo-recherche-vide { margin: 4px 0 18px; padding: 14px 18px; border-radius: var(--bo-rayon); background: #eef8f8; color: var(--bo-bleu); font-size: 15px; }
@media (max-width: 1100px) { .bo-periode-libelle { display: none; } }

/* Calendrier de période (daterangepicker) aux couleurs du site : bleu nuit pour la sélection, fond pâle émeraude pour l'intervalle */
.daterangepicker .ranges li.active, .daterangepicker td.active, .daterangepicker td.active:hover { background-color: var(--bo-bleu) !important; color: #fff !important; }
.daterangepicker .ranges li:hover:not(.active) { background-color: #eef8f8; color: var(--bo-bleu); }
.daterangepicker td.in-range:not(.active) { background-color: #eef8f8; color: var(--bo-texte); }
.daterangepicker .drp-buttons .btn-primary, .daterangepicker .applyBtn { background-color: var(--bo-bleu); border-color: var(--bo-bleu); }

/* Avatars de conseiller : initiales dans un rond coloré quand il n'y a pas de photo, nom affiché tout de suite au survol */
.bo-avatar-initiales {
  display: inline-flex; align-items: center; justify-content: center; width: 76px; height: 76px; border-radius: 50%;
  font-size: 26px; font-weight: 700; letter-spacing: .03em; line-height: 1; vertical-align: middle; user-select: none;
}
.bo-avatar-cadre { position: relative; display: inline-block; }
[data-bo-bulle] { position: relative; }
[data-bo-bulle]::after {
  content: attr(data-bo-bulle); position: absolute; left: calc(100% + 10px); top: 50%; transform: translate(-4px, -50%);
  padding: 5px 10px; border-radius: 6px; background: var(--bo-bleu); color: #fff; font-size: 12.5px; font-weight: 600; letter-spacing: 0;
  white-space: nowrap; pointer-events: none; opacity: 0; transition: opacity .12s ease, transform .12s ease; z-index: 60;
  box-shadow: 0 4px 12px rgba(0, 0, 0, .18);
}
[data-bo-bulle]:hover::after { opacity: 1; transform: translate(0, -50%); }  /* à droite de l'avatar : ne cache pas le nom du programme */
@media (prefers-reduced-motion: reduce) { [data-bo-bulle]::after { transition: none; } }

/* Intitulé de rubrique du menu (« Programme »…, a.colored et a.colored-info) discret : le bloc plein bleu nuit attirait l'œil
   sur un simple rappel de rubrique. Fond pâle teinté, texte bleu nuit ; pas de barre latérale */
#side-menu li a.colored, #side-menu li a.colored:hover, #side-menu li a.colored-info, #side-menu li a.colored-info:hover {
  background: #eef8f8 !important; color: var(--bo-bleu) !important;
}

/* =====================================================================
 * 04/10/2026 — Profil conseiller BV : reprise des améliorations neovarim du 03/10/2026, aux couleurs runimmo
 * (bleu nuit, émeraude, fond pâle #eef8f8 ; pas de prune, pas de barre colorée latérale)
 * ===================================================================== */
/* Suivi commercial du conseiller : même bandeau que le suivi admin (recherche + sélecteur de période) */
.select_bdv_display .small-header h2 > span.pull-right { flex: 1 1 auto; min-width: 0; display: flex; justify-content: flex-end; }

/* Tableau de bord du conseiller : statuts des prospects en pastilles (au lieu de boutons radio en majuscules),
   critères Type / Typo / Budget max sur une ligne, libellés en casse normale */
.bo-filtres-prospects { padding: 16px 20px !important; }
.bo-filtres-prospects > h5 { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 16px; text-transform: none !important; letter-spacing: 0 !important; }
.bo-filtres-prospects > h5 > br { display: none; }
.bo-filtres-prospects > h5 .radio { margin: 0 !important; padding: 0 !important; }
.bo-filtres-prospects > h5 input[type="radio"] { position: absolute; opacity: 0; width: 1px; height: 1px; }
.bo-filtres-prospects > h5 label {
  margin: 0 !important; padding: 6px 14px !important; border: 1px solid var(--bo-bordure); border-radius: 20px; background: #fff; cursor: pointer;
  font-size: 13.5px !important; font-weight: 500 !important; color: var(--bo-texte); text-transform: none !important; letter-spacing: 0 !important;
}
.bo-filtres-prospects > h5 label::before, .bo-filtres-prospects > h5 label::after { display: none !important; }
.bo-filtres-prospects > h5 label:hover { border-color: var(--bo-emeraude); background: #eef8f8; color: var(--bo-bleu); }
.bo-filtres-prospects > h5 input:checked + label { background: var(--bo-bleu); border-color: var(--bo-bleu); color: #fff; }
.bo-filtres-prospects > h5 input:focus-visible + label { outline: 2px solid var(--bo-emeraude); outline-offset: 2px; }
.bo-filtres-prospects > .row { display: flex; flex-wrap: wrap; gap: 0 20px; margin: 0 !important; }
.bo-filtres-prospects > .row, .bo-filtres-prospects > .row > [class*="col-"] { padding-left: 0 !important; padding-right: 0 !important; margin-left: 0 !important; }
.bo-filtres-prospects > .row > [class*="col-"] { width: 220px; float: none; }
/* clearfix Bootstrap (::before / ::after) : compté comme élément flex, il décalait la ligne de 20 px */
.bo-filtres-prospects > .row::before, .bo-filtres-prospects > .row::after { display: none; }
.bo-filtres-prospects > .row label { display: block; margin-bottom: 6px; font-size: 13px; font-weight: 600; color: var(--bo-texte-doux); text-transform: none !important; letter-spacing: 0 !important; }

/* Compteurs du tableau de bord : icônes au trait dans un carré teinté, au lieu des pictogrammes épais */
.bo-stat-icone { display: inline-block; width: 52px; height: 52px; border-radius: 12px; background: #eef8f8; position: relative; }
.bo-stat-icone::after { content: ""; position: absolute; inset: 12px; background-color: var(--bo-bleu); -webkit-mask: var(--bo-ico) center / contain no-repeat; mask: var(--bo-ico) center / contain no-repeat; }
.bo-ico-taches { --bo-ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6l1.5 1.5L7.5 4.5M3 12l1.5 1.5 3-3M3 18l1.5 1.5 3-3M11 6h10M11 12h10M11 18h10'/%3E%3C/svg%3E"); }
.bo-ico-rdv { --bo-ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4.5' width='18' height='16.5' rx='2.5'/%3E%3Cpath d='M8 2.5v4M16 2.5v4M3 10h18M9 15.5l2 2 4-4'/%3E%3C/svg%3E"); }
.bo-ico-cr { --bo-ico: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13.5 3H6.5A2.5 2.5 0 0 0 4 5.5v13A2.5 2.5 0 0 0 6.5 21H11M13.5 3L19 8.5V11M13.5 3v5.5H19M18.6 13.4a2 2 0 0 1 2.8 2.8L16 21.6l-3.6.9.9-3.6z'/%3E%3C/svg%3E"); }

/* Visionneuse de documents : aperçu en fenêtre (image ou PDF), flèches précédent / suivant, téléchargement */
.bo-visio { position: fixed; inset: 0; z-index: 3000; background: rgba(0, 30, 42, .72); display: flex; align-items: center; justify-content: center; padding: 24px; }
.bo-visio[hidden] { display: none; }
.bo-visio-cadre { background: #fff; border-radius: 12px; width: min(1100px, 100%); height: min(88vh, 900px); display: flex; flex-direction: column; overflow: hidden; box-shadow: 0 20px 60px rgba(0, 0, 0, .35); }
.bo-visio-tete { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--bo-bordure); }
.bo-visio-titre { font-size: 16px; font-weight: 600; color: var(--bo-bleu); flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bo-visio-rang { font-size: 13px; color: var(--bo-texte-doux); white-space: nowrap; }
.bo-visio-btn { display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 14px; border-radius: var(--bo-rayon); border: 1px solid var(--bo-bordure); background: #fff; color: var(--bo-bleu); font-size: 13.5px; font-weight: 600; cursor: pointer; text-decoration: none; }
.bo-visio-btn:hover, .bo-visio-btn:focus { background: #eef8f8; color: var(--bo-bleu); text-decoration: none; }
.bo-visio-btn.plein { background: var(--bo-bleu); border-color: var(--bo-bleu); color: #fff; }
.bo-visio-btn.plein:hover, .bo-visio-btn.plein:focus { background: var(--bo-bleu-survol); color: #fff; }
.bo-visio-corps { position: relative; flex: 1 1 auto; background: var(--bo-fond-clair); display: flex; align-items: center; justify-content: center; min-height: 0; }
.bo-visio-corps img { max-width: 100%; max-height: 100%; object-fit: contain; }
.bo-visio-corps iframe { width: 100%; height: 100%; border: 0; background: #fff; }
.bo-visio-vide { text-align: center; color: var(--bo-texte); font-size: 15px; padding: 24px; }
.bo-visio-fleche { position: absolute; top: 50%; transform: translateY(-50%); width: 46px; height: 46px; border-radius: 50%; border: 0; background: rgba(255, 255, 255, .95);
  color: var(--bo-bleu); font-size: 26px; line-height: 1; cursor: pointer; box-shadow: 0 2px 10px rgba(0, 0, 0, .2); z-index: 2; }
.bo-visio-fleche:hover { background: #fff; color: var(--bo-emeraude); }
.bo-visio-fleche.prec { left: 14px; } .bo-visio-fleche.suiv { right: 14px; }
.bo-visio-fleche[disabled] { opacity: .35; cursor: default; }
.bo-visio-btn:focus-visible, .bo-visio-fleche:focus-visible { outline: 2px solid var(--bo-emeraude); outline-offset: 2px; }

/* Carte « Le programme » du tableau de bord du conseiller : visuel à gauche, l'essentiel à droite (rien sur les rémunérations) */
.bo-prog-carte > .panel-body { display: flex; gap: 22px; align-items: stretch; padding: 18px 20px !important; }
.bo-prog-visuel { flex: 0 0 280px; min-height: 190px; border-radius: 10px; background: var(--bo-fond-clair) center / cover no-repeat; }
.bo-prog-infos { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 12px; }
.bo-prog-tete { display: flex; align-items: center; gap: 10px 14px; flex-wrap: wrap; }
.bo-prog-nom { margin: 0; font-size: 24px; font-weight: 600; color: var(--bo-bleu); }
.bo-prog-etiquette { padding: 3px 10px; border-radius: 20px; background: #dff3f3; color: #17605f; font-size: 12px; font-weight: 700; letter-spacing: .03em; }
.bo-prog-minisite { margin-left: auto; }
.btn.bo-bouton-secondaire { background: #fff; border: 1px solid var(--bo-bordure); color: var(--bo-bleu); font-weight: 600; }
.btn.bo-bouton-secondaire:hover, .btn.bo-bouton-secondaire:focus { background: #eef8f8; border-color: var(--bo-emeraude); color: var(--bo-bleu); }
.bo-prog-adresse { margin: -6px 0 0; font-size: 15px; color: var(--bo-texte-doux); }
.bo-prog-adresse strong { color: var(--bo-texte); font-weight: 600; }
.bo-prog-faits { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)) minmax(0, 1.5fr); gap: 0; border: 1px solid var(--bo-bordure); border-radius: 10px; overflow: hidden; }
.bo-prog-faits > div { padding: 10px 14px; border-right: 1px solid var(--bo-bordure); min-width: 0; }
.bo-prog-faits > div:last-child { border-right: 0; }
.bo-prog-faits span { display: block; font-size: 12.5px; font-weight: 600; color: var(--bo-texte-doux); margin-bottom: 3px; }
.bo-prog-faits strong { font-size: 16px; font-weight: 600; color: var(--bo-texte); }
.bo-prog-faits small { font-size: 13px; font-weight: 400; color: var(--bo-texte-doux); }
.bo-prog-faits > div:last-child strong { white-space: nowrap; }
.bo-prog-pastilles { display: flex; flex-wrap: wrap; gap: 6px 8px; }
.bo-prog-dispositif { padding: 4px 11px; border-radius: 20px; background: #eef8f8; color: var(--bo-bleu); font-size: 13px; font-weight: 600; }
.bo-prog-interet { padding: 4px 11px; border-radius: 20px; border: 1px solid var(--bo-bordure); color: var(--bo-texte); font-size: 13px; }
.bo-prog-description > summary { cursor: pointer; font-size: 14px; font-weight: 600; color: var(--bo-bleu); list-style: none; display: inline-flex; align-items: center; gap: 6px; }
.bo-prog-description > summary::-webkit-details-marker { display: none; }
.bo-prog-description > summary::before { content: "▸"; transition: transform .15s ease; display: inline-block; }
.bo-prog-description[open] > summary::before { transform: rotate(90deg); }
.bo-prog-description > summary:focus { outline: none; }
.bo-prog-description > summary:focus-visible { outline: 2px solid var(--bo-emeraude); outline-offset: 3px; border-radius: 4px; }
.bo-prog-description > div { margin-top: 8px; font-size: 14.5px; line-height: 1.55; color: var(--bo-texte); max-height: 260px; overflow: auto; }
/* Carte sans image disponible : emplacement neutre teinté, pictogramme d'immeuble et nom du programme */
.bo-prog-visuel-vide { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; background: linear-gradient(135deg, #eef8f8, #e2edf3); color: var(--bo-bleu); }
.bo-prog-visuel-vide::before { content: ""; width: 54px; height: 54px; background-color: #9fbfca;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 21V5.5A1.5 1.5 0 0 1 5.5 4h7A1.5 1.5 0 0 1 14 5.5V21M14 10h4.5A1.5 1.5 0 0 1 20 11.5V21M2.5 21h19M7.5 8h3M7.5 12h3M7.5 16h3M16.5 14h1M16.5 17.5h1'/%3E%3C/svg%3E") center / contain no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 21V5.5A1.5 1.5 0 0 1 5.5 4h7A1.5 1.5 0 0 1 14 5.5V21M14 10h4.5A1.5 1.5 0 0 1 20 11.5V21M2.5 21h19M7.5 8h3M7.5 12h3M7.5 16h3M16.5 14h1M16.5 17.5h1'/%3E%3C/svg%3E") center / contain no-repeat; }
.bo-prog-visuel-vide span { font-size: 15px; font-weight: 600; letter-spacing: .04em; color: #5f8291; }
@media (max-width: 1200px) { .bo-prog-faits { grid-template-columns: repeat(3, minmax(0, 1fr)); } .bo-prog-faits > div:nth-child(3) { border-right: 0; } .bo-prog-faits > div:nth-child(n+4) { border-top: 1px solid var(--bo-bordure); } }
@media (max-width: 900px) { .bo-prog-carte > .panel-body { flex-direction: column; } .bo-prog-visuel { flex-basis: 180px; } }
@media (prefers-reduced-motion: reduce) { .bo-prog-description > summary::before { transition: none; } }

/* Document jamais téléversé (nom de fichier vide en base) : bouton grisé, ni cliquable ni présent dans la visionneuse */
.btn.bo-doc-absent, .btn.bo-doc-absent:hover { background: var(--bo-fond-clair) !important; border-color: var(--bo-bordure) !important; color: #a7b2ba !important; cursor: not-allowed; box-shadow: none; }

/* =====================================================================
 * 04/10/2026 — Fiche prospect, calendrier global et CRM prospect : reprise des améliorations neovarim du 03/10/2026,
 * aux couleurs runimmo (bleu nuit, émeraude, fond pâle #eef8f8 ; pas de prune, pas de barre colorée latérale)
 * ===================================================================== */
/* Fiche prospect : mêmes sections que la fiche contact (.bo-fiche-contact, bloc final du 04/10/2026) ; pour le conseiller BV, le programme
   est imposé par le bureau de vente (champ caché) : sa cellule vide disparaît */
.prospect_update .bo-fiche-contact .bo-champ:not(:has(label, select)) { display: none; }

/* Calendrier global : titre en casse normale, puis une ligne de filtres : région, programmes en pastilles à cocher,
   bouton « Tout cocher / décocher » discret (.bo-bouton-secondaire) */
.bo-cal-entete { padding: 14px 20px !important; }
.bo-cal-entete > h2 { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 16px; margin: 0 !important; }
.small-header .panel-body.bo-cal-entete h2 > span.bo-cal-titre { font-size: 19px; font-weight: 600; color: var(--bo-bleu); text-transform: none; margin-right: auto; }
.bo-cal-entete > h2 > .row { margin: 0; }
.bo-cal-entete > h2 > .row::before, .bo-cal-entete > h2 > .row::after { display: none; }
.bo-cal-entete > h2 > .row:first-of-type { order: 1; }
.bo-cal-entete > h2 > .row:first-of-type > [class*="col-"] { width: auto; margin: 0; padding: 0; float: none; }
.bo-cal-entete > h2 > .row:last-of-type { order: 2; flex: 1 1 100%; }
.bo-cal-entete > h2 > .row:last-of-type > .col-md-12 { padding: 0; }
.bo-cal-entete .form-group { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; margin: 0 0 4px !important; }
.bo-cal-entete .form-group > .col-md-12 { width: auto; float: none; padding: 0; margin-right: 8px; }
.bo-cal-entete .form-group > .col-md-12 .hpanel, .bo-cal-entete .form-group > .col-md-12 .panel-body { margin: 0; padding: 0 !important; border: 0; box-shadow: none; background: none; }
.bo-cal-entete .form-group > .col-md-12 .row { margin: 0; }
.bo-cal-entete .form-group > .col-md-12 .col-md-3 { width: 220px; padding: 0; float: none; }
.bo-cal-entete .form-group > .col-md-3.m-b { display: contents; }
.bo-cal-entete .form-group .checkbox { margin: 0 !important; padding: 0; }
.bo-cal-entete .form-group .checkbox input[type="checkbox"] { position: absolute; opacity: 0; width: 1px; height: 1px; }
.bo-cal-entete .form-group .checkbox label {
  margin: 0; padding: 6px 14px; border: 1px solid var(--bo-bordure); border-radius: 20px; background: #fff; cursor: pointer;
  font-size: 13.5px; font-weight: 500; color: var(--bo-texte); white-space: nowrap; text-transform: none; letter-spacing: 0;
}
.bo-cal-entete .form-group .checkbox label::before, .bo-cal-entete .form-group .checkbox label::after { display: none !important; }
.bo-cal-entete .form-group .checkbox label:hover { border-color: var(--bo-emeraude); color: var(--bo-bleu); }
.bo-cal-entete .form-group .checkbox input:checked + label { background: #eef8f8; border-color: var(--bo-emeraude); color: var(--bo-bleu); }
.bo-cal-entete .form-group .checkbox input:checked + label::before { content: "\2713"; display: inline !important; position: static; border: 0; background: none; width: auto; height: auto; margin: 0 6px 0 0; font-weight: 700; color: var(--bo-emeraude-survol); }
.bo-cal-entete .form-group .checkbox input:focus-visible + label { outline: 2px solid var(--bo-emeraude); outline-offset: 2px; }

/* CRM prospect : titre en casse normale et informations en grille régulière de 6 colonnes sur 2 lignes
   (la personne, puis le projet) */
.small-header .panel-body h2:has(.bo-crm-titre) { text-transform: none !important; font-size: 19px !important; font-weight: 400; }
.small-header .panel-body h2 > span.bo-crm-titre { font-size: 19px; font-weight: 600; color: var(--bo-bleu); margin-right: 4px; vertical-align: baseline; }
.bo-crm-fiche { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 0; margin: 4px 0; }
.bo-crm-info { padding: 10px 14px; border-right: 1px solid var(--bo-bordure); min-width: 0; }
.bo-crm-info:nth-child(6n) { border-right: 0; }
.bo-crm-info:nth-child(n+7) { border-top: 1px solid var(--bo-bordure); }
.bo-crm-lib { display: block; font-size: 12.5px; font-weight: 600; color: var(--bo-texte-doux); margin-bottom: 4px; }
.bo-crm-val, .bo-crm-val h5 { font-size: 14.5px !important; font-weight: 400; color: var(--bo-texte); margin: 0 !important; overflow-wrap: anywhere; }
.bo-crm-val strong { font-weight: 600; }
.bo-crm-val .btn { white-space: normal; text-align: left; }
@media (max-width: 1200px) {
  .bo-crm-fiche { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .bo-crm-info:nth-child(6n) { border-right: 1px solid var(--bo-bordure); }
  .bo-crm-info:nth-child(3n) { border-right: 0; }
  .bo-crm-info:nth-child(n+4) { border-top: 1px solid var(--bo-bordure); }
}

/* ==========================================================================
 * 04/10/2026 — Mode maintenance du back-office, aux couleurs runimmo
 * Pastille de rappel (support seul), page de pilotage backoffice/maintenance.php, avertissement de connexion
 * ========================================================================== */
.bo-rappel-maintenance {
  position: fixed; left: 50%; bottom: 16px; transform: translateX(-50%); z-index: 2000; display: inline-flex; align-items: center; gap: 8px;
  max-width: calc(100vw - 32px); padding: 9px 18px; border-radius: 24px; background: var(--bo-bleu); border: 1px solid var(--bo-bleu); color: #fff;
  font-size: 14px; box-shadow: 0 4px 14px rgba(0, 71, 96, .25); text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.bo-rappel-maintenance strong { color: var(--bo-emeraude); }
.bo-rappel-maintenance:hover, .bo-rappel-maintenance:focus { color: #fff; text-decoration: none; background: var(--bo-bleu-survol); }
.bo-rappel-maintenance .las { font-size: 18px; color: var(--bo-emeraude); }
@media (max-width: 768px) { .bo-rappel-maintenance { white-space: normal; border-radius: 12px; } }

.bo-maintenance { max-width: 820px; }
.bo-maintenance .etat { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 16px 20px; border-radius: var(--bo-rayon); margin-bottom: 18px; border: 1px solid; }
.bo-maintenance .etat .las { font-size: 24px; }
.bo-maintenance .etat.inactif { background: #e9f7f7; border-color: #bfe7e7; color: #17696b; }
.bo-maintenance .etat.actif { background: #fff6e5; border-color: #f0d39a; color: #7a5000; }
.bo-maintenance .etat strong { font-size: 17px; }
.bo-maintenance .etat span { font-size: 14px; }
.bo-maintenance .bloc { background: #fff; border: 1px solid var(--bo-bordure); border-radius: var(--bo-rayon); padding: 20px; margin-bottom: 18px; }
.bo-maintenance .bloc h3 { margin: 0 0 12px; font-size: 13px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--bo-bleu); }
.bo-maintenance .bloc p, .bo-maintenance .bloc li { font-size: 14.5px; color: var(--bo-texte); }
.bo-maintenance .bloc li + li { margin-top: 4px; }
.bo-maintenance .bloc .aide { font-size: 13px; color: var(--bo-texte-doux); margin: 6px 0 0; }
.bo-maintenance textarea { min-height: 70px; }
.bo-maintenance .actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
.bo-avertissement-maintenance { font-weight: 600; }

/* =====================================================================
 * 04/10/2026 — Fiche contact (et prospect) : bloc unique (remplace le bloc « cartes » d'origine et le bloc « aérée »).
 * Ordre des sections dans les gabarits : en-tête d'identité, Contact, Message, Demande et projet, Suivi.
 * Sections empilées sur toute la largeur, sans cadre, titre souligné ; 4 colonnes régulières, 2 si la fiche est étroite
 * (vue avec associé : deux fiches côte à côte, ou petit écran). Aucun champ ne change.
 * ===================================================================== */
.bo-fiche-contact { container-type: inline-size; }
.bo-fiche-contact .bo-section { border: 0; border-radius: 0; background: transparent; padding: 0; margin: 0 0 26px; min-width: 0; }
.bo-fiche-contact .bo-section > legend { float: none; width: 100%; border: 0; border-bottom: 1px solid var(--bo-bordure); border-radius: 0; margin: 0 0 18px; padding: 0 0 8px; background: transparent; color: var(--bo-bleu); }
.bo-fiche-contact .bo-grille { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0 36px; }
.bo-fiche-contact .bo-grille > .bo-champ > [class*="col-"] { margin-bottom: 18px; }
.bo-fiche-contact .bo-champ p.font-bold { margin: 0 0 8px; }
/* Libellés sur une ligne */
.bo-fiche-contact .bo-champ label.form-label { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-bottom: 8px; }
/* Message : le titre de la section suffit ; éditeur d'environ 120 px au repos */
.bo-fiche-contact .bo-champ:has(textarea[name="message"]) label.form-label { display: none; }
.bo-fiche-contact .bo-champ .note-editor .note-editable { min-height: 120px; }
.bo-fiche-contact .bo-champ textarea[name="message"] { min-height: 120px; resize: vertical; }
/* Typologie et type d'investissement : les cases sur une ligne, sur toute la largeur */
.bo-fiche-contact .bo-champ .checkbox { display: inline-block; margin: 0 16px 4px 0; }
.bo-fiche-contact .bo-champ .checkbox br { display: none; }
.bo-fiche-contact .bo-champ:has(input[name="typeRech[]"]), .bo-fiche-contact .bo-champ:has(input[name="possibilite[]"]) { grid-column: 1 / -1; }
/* Adresse sur deux colonnes, toujours en début de ligne (ligne Adresse, Code postal, Ville) */
.bo-fiche-contact .bo-champ:has(input[name="adresse"]) { grid-column: 1 / span 2; }

/* En-tête d'identité (lecture seule, rempli par js/bo-identite.js) : nom en grand, pastille de statut, coordonnées.
   Ni cadre ni fond. */
.bo-identite { margin: 2px 0 28px; min-width: 0; }
.bo-identite:empty { display: none; }
.bo-identite-nom { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; margin: 0; font-size: 22px; font-weight: 700; line-height: 1.25; color: var(--bo-bleu); overflow-wrap: anywhere; }
.bo-identite-nom.bo-identite-vide { color: var(--bo-texte-doux); }
.bo-identite-statut { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; line-height: 1.5; white-space: nowrap; }
.bo-identite-statut.bo-statut-prospect { background: rgba(37, 180, 180, .12); color: #1a8a8a; }
.bo-identite-statut.bo-statut-client { background: rgba(0, 71, 96, .10); color: var(--bo-bleu); }
/* Séparateurs « · » devant chaque élément ; le bloc est décalé de leur largeur à gauche puis rogné (clip-path), de sorte
   qu'aucune ligne (y compris après un retour à la ligne) ne commence par un séparateur */
.bo-identite-coord { display: flex; flex-wrap: wrap; align-items: baseline; margin: 6px 0 0 -20px; clip-path: inset(-4px -4px -4px 20px); font-size: 14px; line-height: 1.5; color: var(--bo-texte-doux); min-width: 0; }
.bo-identite-coord > span { min-width: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bo-identite-coord > span::before { content: "·"; display: inline-block; width: 20px; text-align: center; color: var(--bo-texte-doux); }
.bo-identite-coord a { color: var(--bo-bleu); }
.bo-identite-coord a:hover, .bo-identite-coord a:focus-visible { color: var(--bo-emeraude); text-decoration: underline; }

/* Fiche étroite : 2 colonnes, nom un peu plus petit */
@container (max-width: 860px) {
  .bo-fiche-contact .bo-grille { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .bo-identite-nom { font-size: 20px; }
}

/* =====================================================================
 * 04/10/2026 — Fiche contact, vue couple (contact principal + associé, co-acquéreurs) :
 * un seul cadre ; en-tête d'identité du couple ; section Contact sur deux colonnes « Contact principal » | « Associé (type) » ;
 * puis Message, Demande et projet, Suivi du principal sur toute la largeur. Les deux <form> restent distincts dans le DOM
 * (display: contents) : chaque champ reste dans son formulaire. Les sections Message / Demande / Suivi de l'associé sont
 * masquées : js/client.js (synchroniserProjetAssocie) y recopie le projet du principal juste avant l'envoi.
 * Ne s'applique que si le formulaire associé est présent (:has) : vue sans associé et fiche prospect inchangées.
 * ===================================================================== */
#container-client-ajax:has(> #container_form_clientasso) {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: 48px; align-items: start;
  margin: 0 0 20px; padding: 0 24px 2px; background: #fff; border: 1px solid var(--bo-bordure); border-radius: var(--bo-rayon);
  box-shadow: 0 1px 2px rgba(16, 40, 56, .04); container-type: inline-size;
}
#container-client-ajax:has(> #container_form_clientasso)::before,
#container-client-ajax:has(> #container_form_clientasso)::after { display: none; }
#container-client-ajax:has(> #container_form_clientasso) > #container_form_client_with_clientasso,
#container-client-ajax:has(> #container_form_clientasso) > #container_form_clientasso,
#container-client-ajax:has(> #container_form_clientasso) > div > form,
#container-client-ajax:has(> #container_form_clientasso) > div > form > .hpanel,
#container-client-ajax:has(> #container_form_clientasso) > div > form > .hpanel > .panel-body,
#container-client-ajax:has(> #container_form_clientasso) .bo-fiche-contact { display: contents; }
/* Bandeau « FICHE CONTACT » (Lancer le CRM, Enregistrer, navigation) et messages : toute la largeur, en tête */
#clientUpdateWithAssoForm > .hpanel > .panel-heading { grid-column: 1 / -1; order: 1; margin: 0 -24px 22px; border: 0; border-bottom: 1px solid var(--bo-bordure); }
#clientUpdateWithAssoForm > .hpanel > .alert { grid-column: 1 / -1; order: 2; }
#clientUpdateWithAssoForm .bo-identite { grid-column: 1 / -1; order: 3; margin-top: 0; }
#clientUpdateWithAssoForm .bo-section-principal { grid-column: 1; order: 4; }
#assoclientUpdateForm .bo-section-associe { grid-column: 2; order: 5; }
#clientUpdateWithAssoForm .bo-section:not(.bo-section-principal) { grid-column: 1 / -1; order: 6; }
/* Doublons masqués : messages (identiques à ceux du principal) et projet de l'associé (recopié à l'envoi) */
#assoclientUpdateForm > .hpanel > .alert,
#assoclientUpdateForm .bo-section:not(.bo-section-associe) { display: none; }
/* Colonnes Contact : grille de 2 colonnes (Civilité | Nom, Prénom | Mobile, Email | Téléphone, Offre mail | Adresse, CP | Ville) */
#container-client-ajax:has(> #container_form_clientasso) .bo-section-principal > .bo-grille,
#container-client-ajax:has(> #container_form_clientasso) .bo-section-associe > .bo-grille { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 28px; }
#container-client-ajax:has(> #container_form_clientasso) .bo-section-principal .bo-champ:has(input[name="adresse"]),
#container-client-ajax:has(> #container_form_clientasso) .bo-section-associe .bo-champ:has(input[name="adresse"]) { grid-column: auto; }
.bo-associe-type { font-weight: inherit; }
/* Colonne associé : type d'associé et bouton « Retirer l'associé » sur une ligne, au-dessus des champs */
.bo-associe-outils { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 10px 20px; margin: 0 0 18px; }
.bo-associe-type-choix { flex: 0 1 260px; min-width: 0; }
.bo-associe-type-choix label.form-label { display: block; margin-bottom: 8px; }
.bo-associe-outils #delete_client_associe { margin-bottom: 2px; }
/* En-tête du couple : tiret long entre les coordonnées du principal et celles de l'associé */
.bo-identite-coord > span.bo-identite-associe::before { content: "\2014"; }
/* Moins de 1100 px : les deux colonnes Contact s'empilent */
@media (max-width: 1100px) {
  #container-client-ajax:has(> #container_form_clientasso) { grid-template-columns: minmax(0, 1fr); }
  #assoclientUpdateForm .bo-section-associe { grid-column: 1; }
}
/* Vue couple (04/10/2026) : le choix du type d'associé et « Retirer l'associé » passent sous les champs, pour que
   les champs de l'associé restent alignés ligne à ligne avec ceux du contact principal (Nom en face de Nom…).
   En-tête d'identité retiré à la demande de l'utilisateur (il répétait les champs juste en dessous). */
.bo-section-associe { display: flex; flex-direction: column; }
.bo-section-associe > .bo-associe-outils { order: 2; margin-top: 4px; }

/* Tailles de texte alignées sur neovarim avec la police Outfit (04/10/2026) */
body { font-size: 14.5px; }
.btn { font-size: 12.5px; }
.btn-xs { font-size: 11.5px; }
.btn-sm, .btn-group-sm > .btn { font-size: 13px; }
.form-control { font-size: 14px; }
.table > tbody > tr > td { font-size: 14px; }
/* Page 404 du back-office (04/10/2026) */
.bo-introuvable { padding: 32px 28px; }
.bo-introuvable-code { margin: 0 0 6px; font-size: 44px; font-weight: 700; line-height: 1; color: var(--bo-bleu); }
.bo-introuvable-adresse { color: var(--bo-texte-doux); overflow-wrap: anywhere; }
.bo-introuvable-actions { margin-top: 18px; display: flex; flex-wrap: wrap; gap: 10px; }

/* Historique des accès (04/10/2026) : onglets Journal / Dernières connexions, barre de filtres combinables,
   info-bulle des colonnes non triables sans filtre. Sobre : filets gris, bleu nuit pour l'actif, émeraude au survol. */
.bo-histo-onglets { display: flex; gap: 4px; margin: 0 0 14px; border-bottom: 1px solid var(--bo-bordure); }
.bo-histo-onglet {
  display: inline-flex; align-items: center; gap: 8px; margin: 0 0 -1px; padding: 10px 18px; border: 1px solid transparent;
  border-radius: var(--bo-rayon) var(--bo-rayon) 0 0; background: transparent; color: var(--bo-texte-doux);
  font: 500 14.5px var(--bo-police); cursor: pointer; transition: color .15s ease, background-color .15s ease;
}
.bo-histo-onglet:hover { color: var(--bo-bleu); background: #eef8f8; }
.bo-histo-onglet[aria-selected="true"] { color: var(--bo-bleu); font-weight: 600; background: #fff; border-color: var(--bo-bordure); border-bottom-color: #fff; }
.bo-histo-onglet:focus-visible { outline: 2px solid var(--bo-emeraude); outline-offset: 2px; }
.bo-histo-onglet .fa { font-size: 14px; }
.bo-histo-panneau[hidden] { display: none !important; }

.bo-histo-filtres { padding: 18px 20px 14px !important; }
.bo-histo-grille { display: grid; grid-template-columns: minmax(0, 1.35fr) repeat(3, minmax(0, 1fr)); gap: 14px 18px; align-items: end; }
.bo-histo-champ { min-width: 0; }
.bo-histo-champ > label, .bo-histo-etiquette {
  display: block; margin: 0 0 6px; font-size: 13px; font-weight: 600; color: var(--bo-texte-doux); letter-spacing: 0; text-transform: none;
}
.bo-histo-champ-type { grid-column: span 2; }
.bo-histo-periode { display: flex; width: 100%; height: 36px; position: relative; }
.bo-histo-periode > input.form-control {
  flex: 1 1 auto; min-width: 0; height: 34px; padding: 0; border: 0 !important; box-shadow: none !important; background: transparent; cursor: pointer;
  font-size: 13.5px; text-overflow: ellipsis;
}
.daterangepicker { font-family: var(--bo-police); }
.bo-histo-effacer-champ {
  flex: 0 0 auto; width: 24px; height: 24px; border: 0; border-radius: 50%; background: transparent; color: var(--bo-texte-doux);
  font-size: 18px; line-height: 22px; padding: 0; cursor: pointer;
}
.bo-histo-effacer-champ:hover { background: var(--bo-fond); color: var(--bo-bleu); }
.bo-histo-effacer-champ[hidden] { display: none; }
.bo-histo-champ .select2-container .select2-choice { height: 36px; line-height: 34px; }
.bo-histo-champ .select2-container.select2-container-disabled .select2-choice { background: var(--bo-fond-clair); color: var(--bo-texte-doux); }

/* Type de compte : boutons segmentés (remplacent les boutons BV / Partenaire / Promoteur / Tous) */
.bo-histo-segments { display: inline-flex; flex-wrap: wrap; border: 1px solid var(--bo-bordure); border-radius: var(--bo-rayon); background: #fff; overflow: hidden; }
.bo-histo-segments input[type="radio"] { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }
.bo-histo-segments label {
  margin: 0; padding: 0 16px; height: 34px; line-height: 34px; border-left: 1px solid var(--bo-bordure); cursor: pointer;
  font-size: 13.5px; font-weight: 500; color: var(--bo-texte); white-space: nowrap; transition: background-color .15s ease, color .15s ease;
}
.bo-histo-segments label:first-of-type { border-left: 0; }
.bo-histo-segments label:hover { background: #eef8f8; color: var(--bo-bleu); }
.bo-histo-segments input:checked + label { background: var(--bo-bleu); color: #fff; }
.bo-histo-segments input:focus-visible + label { outline: 2px solid var(--bo-emeraude); outline-offset: -2px; }

.bo-histo-barre { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--bo-bordure); }
.bo-histo-barre-haut { margin: 0 0 12px; padding: 0 0 12px; border-top: 0; border-bottom: 1px solid var(--bo-bordure); }
.bo-histo-resume { color: var(--bo-texte-doux); font-size: 13.5px; }
.bo-histo-avis { margin: 0 0 14px; padding: 10px 16px; border-radius: var(--bo-rayon); background: #eef8f8; color: var(--bo-bleu); font-size: 14px; }
.bo-histo-avis[hidden] { display: none; }

/* Colonnes non triables sans filtre : info-bulle sous l'en-tête */
.historique_display th[data-histo-bulle] { position: relative; cursor: help; }
.historique_display th[data-histo-bulle]::after {
  content: attr(data-histo-bulle); position: absolute; left: 8px; top: calc(100% + 6px); z-index: 20; width: 260px; padding: 8px 11px;
  border-radius: 7px; background: var(--bo-bleu); color: #fff; font-size: 12.5px; font-weight: 400; line-height: 1.4; white-space: normal;
  text-align: left; box-shadow: 0 6px 18px rgba(0, 41, 56, .18); opacity: 0; visibility: hidden; transition: opacity .12s ease; pointer-events: none;
}
.historique_display th[data-histo-bulle]:hover::after { opacity: 1; visibility: visible; }
.historique_display .table-responsive { overflow: visible; }
@media (max-width: 1100px) { .historique_display .table-responsive { overflow-x: auto; } }

/* Dernières connexions */
.bo-histo-connexions td { vertical-align: middle !important; }
.bo-histo-lien-personne { font-weight: 600; color: var(--bo-bleu); }
.bo-histo-lien-personne:hover { color: var(--bo-emeraude-survol); text-decoration: underline; }
.bo-histo-depuis { margin-left: 6px; color: var(--bo-texte-doux); font-size: 12.5px; }
.bo-histo-type { display: inline-block; padding: 2px 10px; border-radius: 20px; font-size: 12.5px; font-weight: 500; background: var(--bo-fond); color: var(--bo-texte); white-space: nowrap; }
.bo-histo-type-bo { background: #e6eef1; color: var(--bo-bleu); }
.bo-histo-type-partenaire { background: #e6f5f5; color: #17777a; }
.bo-histo-type-promoteur { background: #f3efe6; color: #6e5a2b; }

@media (max-width: 1280px) { .bo-histo-grille { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 640px) {
  .bo-histo-grille { grid-template-columns: minmax(0, 1fr); }
  .bo-histo-champ-type { grid-column: auto; }
  .bo-histo-onglet { padding: 9px 12px; }
}

/* Journal : détail des modifications de lots et de programmes (04/10/2026) */
.bo-histo-detail { margin: 4px 0 0; padding-left: 18px; font-size: 12px; color: #4a4f57; }
.bo-histo-detail li { margin: 1px 0; overflow-wrap: anywhere; }
.bo-histo-champ-nom { font-weight: 600; color: #2f3338; }
.bo-histo-detail-suite { margin-top: 2px; font-size: 12px; }
.bo-histo-detail-suite > summary { cursor: pointer; color: #2a6db0; }
.bo-histo-detail-suite > summary:focus-visible { outline: 2px solid #2a6db0; outline-offset: 2px; }
/* Champ « Recherche » d'un tableau qui contient un texte (classe posée par js/bo-tableaux.js, 04/10/2026) :
   bien visible, pour ne pas oublier qu'un filtre est actif */
.dataTables_filter input.bo-recherche-active, input.bo-recherche-active {
  background: #fff4d6 !important; border-color: #e0a800 !important; color: #5c4400; font-weight: 600;
  box-shadow: 0 0 0 3px rgba(224, 168, 0, .18) !important;
}
/* Recherche active : couleur gardée aussi pendant la saisie (le focus des champs est vert émeraude par ailleurs) */
input.bo-recherche-active:focus, .dataTables_filter input.bo-recherche-active:focus, .bo-recherche-prog > input.form-control.bo-recherche-active:focus {
  background: #fff4d6 !important; border-color: #e0a800 !important; box-shadow: 0 0 0 3px rgba(224, 168, 0, .25) !important;
}
/* Boutons « + » / crayon d'ajout de fichier (pré-réservation, réception de dossier, annulation de réservation) (06/10/2026) :
   le champ fichier invisible était décalé de 250 px pour retomber sur l'icône ; depuis que .btn-file est un bloc qui
   masque ce qui dépasse, il était caché et le clic restait sans effet. Il recouvre maintenant exactement l'icône. */
.btn-file.ss-plus > input[type="file"], .btn-file.ss-write > input[type="file"] {
  position: absolute !important; top: 0 !important; left: 0 !important; right: auto !important; float: none !important;
  width: 100% !important; height: 100% !important; margin: 0 !important; transform: none !important; opacity: 0; cursor: pointer; font-size: 0; display: block !important;
}
.btn-file.ss-plus, .btn-file.ss-write { position: relative; overflow: visible !important; }

/* Documents du programme (23/10/2026) : fiche dont le fichier manque sur le serveur, et message d'envoi refusé */
.bo-doc-manquant { background: #fdf0ee; border-color: #f0c4be; }
.bo-doc-manquant .bo-doc-apercu { background: none; border-bottom-color: #f0c4be; }
.bo-doc-manquant .bo-doc-apercu i.fa { color: #b8362b; }
.bo-doc-nom-manquant { white-space: normal; color: #b8362b; font-weight: 600; }
.bo-docs-erreur { margin: 14px 0 0; }
.bo-doc-limite { margin: 6px 0 0; font-size: 12.5px; color: var(--bo-texte-doux); }
.bo-doc-limite-depassee { padding: 8px 10px; border-radius: 8px; background: #fdf0ee; color: #b8362b; font-weight: 600; }
