/*
 * Backoffice NEOVARIM : habillage modernisé (lot A, 02/10/2026), éléments de style seulement.
 * Chargé en dernier par template/backoffice/load_css.htm : il ne fait que surcharger le thème
 * Homer (homer.css). Retirer la ligne de load_css.htm suffit à revenir à l'ancien affichage.
 * Police : Outfit (licence SIL OFL 1.1), la même que le site public, hébergée dans backoffice/fonts/outfit/.
 * Couleurs : anthracite #353D42 (couleur principale) et rouge NEOVARIM #E40042 (accent).
 * Les couleurs d'état des lots (libre, optionné, pré-réservé, réservé, acté) ne changent pas.
 * Tailles de texte augmentées d'environ 1 px par rapport à la feuille d'origine : Outfit paraît plus petite à taille égale.
 */


/* Outfit (licence SIL OFL 1.1), police variable 100 à 900 : les graisses 600 et 800 existent */
@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-marque: #353D42;
  --bo-marque-survol: #4a545b;
  --bo-accent: #E40042;
  --bo-accent-survol: #c2003a;
  --bo-texte: #2b3a45;
  --bo-texte-doux: #5f6d78;  /* plus foncé que l'original (#6b7a86, 4,4:1) pour atteindre 4,5:1 */
  --bo-bordure: #dfe5ea;
  --bo-fond: #fbf9fa;  /* blanc légèrement rosé (variante 6) au lieu du gris bleuté */
  --bo-fond-clair: #fdfbfc;
  --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: 14.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-marque); }
a:hover, a:focus { color: var(--bo-accent-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-marque); }

/* ---------- Panneaux ---------- */
.hpanel .panel-body {
  border-color: var(--bo-bordure);
  border-radius: var(--bo-rayon);
  box-shadow: 0 1px 2px rgba(30, 34, 38, .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-marque);
}
.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(30, 34, 38, .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: 13px; border-radius: 7px; }
.btn-xs, .btn-group-xs > .btn { padding: 3px 9px; font-size: 12px; border-radius: 6px; }
.btn-lg, .btn-group-lg > .btn { padding: 11px 22px; border-radius: 10px; }
.btn:hover { box-shadow: 0 3px 8px rgba(30, 34, 38, .14); }
.btn:active, .btn.active { transform: translateY(1px); box-shadow: 0 1px 2px rgba(30, 34, 38, .12); }
.btn:focus, .btn.focus, .btn:active:focus { outline: none; box-shadow: 0 0 0 3px rgba(228, 0, 66, .35); }

/* Action principale (variante 6 choisie le 02/10/2026) : bouton blanc à contour anthracite, rempli au survol.
   Le bandeau garde l'anthracite du logo ; le contenu reste clair et aéré. */
.btn-primary {
  background-color: #fff; border: 1.5px solid var(--bo-marque); color: var(--bo-marque);
}
.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active {
  background-color: var(--bo-marque); border-color: var(--bo-marque); color: #fff;
}
.btn-info {
  background-color: var(--bo-marque); border-color: var(--bo-marque); color: #fff;
}
.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active {
  background-color: var(--bo-marque-survol); border-color: var(--bo-marque-survol); color: #fff;
}
/* Ajouter / valider : même style que l'action principale (l'état « LIBRE » garde son vert, règle .btn-success.libre plus bas) */
.btn-success {
  background-color: #fff; border: 1.5px solid var(--bo-marque); color: var(--bo-marque);
}
.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active {
  background-color: var(--bo-marque); border-color: var(--bo-marque); 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-marque);
}
.btn-warning { background-color: #f0a202; border-color: #f0a202; color: var(--bo-marque); }  /* texte anthracite : le blanc sur orange était illisible (2,1:1) */
.btn-warning:hover, .btn-warning:focus { background-color: #d99200; border-color: #d99200; color: #1f2427; }
.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: #b9c0c6; color: var(--bo-marque); }
.btn-outline.btn-success { background: #fff; border-color: #b9c0c6; color: var(--bo-marque); }
.btn-outline.btn-warning { background: #fff; border-color: #f0a202; color: #8a5c00; }
.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-marque); color: #fff; }
.btn-outline.btn-success:hover, .btn-outline.btn-success:focus, .btn-outline.btn-success.active { background: var(--bo-marque); color: #fff; }
.btn-outline.btn-warning:hover, .btn-outline.btn-warning:focus, .btn-outline.btn-warning.active { background: #f0a202; color: var(--bo-marque); }
.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-accent) !important;
  box-shadow: 0 0 0 3px rgba(228, 0, 66, .18) !important;
  outline: none;
}
.form-control::placeholder { color: #66737e; }  /* était #9aa7b1 (2,5:1) */
.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: 13px;
  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: #fdeef2; }
.table-hover > tbody > tr:hover > td { cursor: pointer; }

/* Pagination et barre des listes (DataTables) */
.pagination > li > a, .pagination > li > span { color: var(--bo-marque); 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-accent); border-color: var(--bo-accent); 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: #fdeef2; color: var(--bo-marque); }
#side-menu .nav-second-level li.active > a, #side-menu .nav-second-level li.active2 > a {
  background: var(--bo-accent); color: #fff; box-shadow: 0 2px 6px rgba(228, 0, 66, .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-marque), var(--bo-accent)) !important; }
#header { border-bottom: 1px solid var(--bo-bordure); box-shadow: 0 1px 3px rgba(30, 34, 38, .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-marque); 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: #fdeef2; }
#header .navbar-nav > li > a:hover i, #header .navbar-nav > li.open > a i { opacity: 1; color: var(--bo-accent-survol); }
.dropdown-menu { border: 1px solid var(--bo-bordure); border-radius: 12px; box-shadow: 0 12px 32px rgba(30, 34, 38, .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: 12px; 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-marque); 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-marque); box-shadow: 0 2px 6px rgba(53, 61, 66, .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: 22px; font-weight: 600; letter-spacing: 0; color: var(--bo-marque); margin: 0;
}
.small-header .panel-body small, .normalheader small { color: var(--bo-texte-doux); font-size: 14px; }

/* 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: 12.5px; letter-spacing: .06em; font-weight: 600; }
.btn-xs { font-size: 11.5px; }

/* Bleu « info » distinct de la couleur principale */
.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); color: var(--bo-marque); }  /* OPTIONNÉ : couleur inchangée, texte anthracite (le blanc donnait 2,3:1) */
.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-accent); }
.checkbox input[type="checkbox"]:checked + label::before, .radio input[type="radio"]:checked + label::before { border-color: var(--bo-accent); }
.checkbox-success input[type="checkbox"]:checked + label::before, .checkbox-primary input[type="checkbox"]:checked + label::before { background-color: var(--bo-accent); border-color: var(--bo-accent); }

/* =====================================================================
 * Bandeau du haut foncé (29/09/2026) : fond anthracite, logo blanc,
 * icônes et libellés clairs.
 * ===================================================================== */
#header { background: var(--bo-marque); border-bottom: none; box-shadow: 0 2px 8px rgba(30, 34, 38, .18); }
.color-line { height: 3px; background: var(--bo-accent) !important; }
#logo1 img { content: url('../images/logo-neovarim-white.svg'); }
#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: #fff; border-color: #fff; color: var(--bo-marque); box-shadow: none; }
#header .btn:hover, #header .btn:focus { background: #eef0f1; border-color: #eef0f1; color: var(--bo-marque); }
#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-accent-survol); opacity: 1; }

/* É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: 14.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: 14px; 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: 13px; 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-accent-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; }

/* 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; }
}

/* Variante 6 (02/10/2026) : liseré framboise à gauche des en-têtes de panneau */
/* (liseré gauche des titres de panneau supprimé le 02/10/2026) */

/* =====================================================================
 * Écran de connexion (preindex.htm, preindexetape2.htm) : fond aux couleurs
 * du logo NEOVARIM (lot B, 02/10/2026), carte centrée. Limité aux pages qui contiennent .login-container.
 * ===================================================================== */
body:has(.login-container) {
  min-height: 100vh; margin: 0;
  background: radial-gradient(900px 500px at 15% -10%, rgba(255, 255, 255, .18), transparent 60%),
              linear-gradient(150deg, #E40042 0%, #a8104f 45%, #5a1c55 100%) fixed;   /* framboise vers prune */
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  padding: 32px 16px; box-sizing: border-box;
}
.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(30, 34, 38, .35), 0 2px 6px rgba(30, 34, 38, .12);
}
.login-container .panel-body img { display: block; width: 300px; max-width: 88%; height: auto; margin: 6px auto 30px; }  /* logo agrandi (230 → 300 px) à la demande du 02/10/2026 */
.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 .g-recaptcha { display: flex; justify-content: center; margin: 4px 0 18px; }
.login-container .btn-block {
  height: 48px; font-size: 13px; letter-spacing: .08em; border-radius: 10px; margin-top: 4px;
  background: var(--bo-marque); border-color: var(--bo-marque); color: #fff;
}
.login-container .btn-block:hover:not([disabled]) { background: var(--bo-marque-survol); border-color: var(--bo-marque-survol); color: #fff; }
.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-marque); font-weight: 500; text-decoration: none; border-bottom: 1px solid rgba(53, 61, 66, .25); }
.login-container p.text-center a:hover { color: var(--bo-accent); 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; }
}

.login-container .alert-danger { background: #fdeef2; border-color: #f6c6d3; color: #8f0029; }

/* Tableaux larges (lot A, provisoire) : défilement horizontal dans leur cadre au lieu de faire déborder la page.
   À remplacer par le bloc « Tableaux » du lot E (en-tête figé, classe .bo-defile). */
/* (règle provisoire du lot A retirée au lot E) */

/* =====================================================================
 * Lot C (02/10/2026) : boutons d'action distincts.
 * « Enregistrer » (.bo-enregistrer) : action principale, contour anthracite, texte gras, coche.
 * « Supprimer » (.bo-supprimer) : discret au repos (texte gris, sans contour, corbeille), rouge au survol.
 * Les classes .btn-danger / .btn-success restent réservées aux couleurs d'état des lots.
 * ===================================================================== */
.btn.bo-enregistrer { font-weight: 700; border-width: 1.5px; }
.btn.bo-enregistrer::before { font-family: FontAwesome; content: "\f00c"; margin-right: 7px; font-weight: normal; }
.btn.bo-supprimer {
  background: transparent; border-color: transparent; color: var(--bo-texte-doux); box-shadow: none;
}
.btn.bo-supprimer::before { font-family: FontAwesome; content: "\f014"; margin-right: 7px; font-weight: normal; font-size: 1.1em; }
.btn.bo-supprimer:hover, .btn.bo-supprimer:focus {
  background: #fdeef2; border-color: #f6c6d3; color: #b8003a; box-shadow: none;
}
.btn.bo-supprimer:active { background: #E40042; border-color: #E40042; color: #fff; }

/* 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-marque); }

/* =====================================================================================
 * Direction C « Clair et lumineux », retenue le 02/10/2026. Elle est placée en fin de fichier
 * pour l'emporter sur les règles précédentes.
 * ===================================================================================== */
:root {
  --d-fond: #f3f4f6; --d-surface: #ffffff; --d-surface-2: #f9fafb; --d-thead: #f9fafb;
  --d-bordure: #e3e6e9; --d-bordure-forte: #d2d6da; --d-bordure-table: #eaedf0;
  --d-texte: #262d32; --d-texte-doux: #5b646b; --d-titre: #262d32; --d-panneau-titre: #353D42;
  --d-ombre: 0 1px 2px rgba(38, 45, 50, .05), 0 2px 8px rgba(38, 45, 50, .04);
  --d-lien: #353D42; --d-lien-survol: #b0003a;
  --d-bandeau: #ffffff; --d-bandeau-ombre: 0 1px 3px rgba(38, 45, 50, .06); --d-bandeau-bord: 1px solid #e3e6e9;
  --d-filet: #E40042; --d-filet-h: 3px; --d-logo: url('../images/logo-neovarim.svg');
  --d-bandeau-icone: #353D42; --d-bandeau-icone-survol: #b0003a; --d-bandeau-survol: #fdf0f4;
  --d-bandeau-champ: #f3f4f6; --d-bandeau-champ-bord: #e3e6e9;
  --d-bandeau-btn-fond: #353D42; --d-bandeau-btn-texte: #fff;
  --d-menu-fond: #ffffff; --d-menu-rubrique: #5b646b; --d-menu-rubrique-actif: #262d32; --d-menu-texte: #3a4248;
  --d-menu-survol: #f3f4f6; --d-menu-actif-fond: #fdf0f4; --d-menu-actif-texte: #b0003a; --d-menu-actif-barre: #E40042;
  --d-accent: #E40042; --d-accent-texte: #b0003a; --d-lisere: 0 solid transparent;
  --d-btn1-fond: #353D42; --d-btn1-bord: #353D42; --d-btn1-texte: #fff; --d-btn1-survol-fond: #23292d; --d-btn1-survol-texte: #fff;
  --d-enr-fond: #353D42; --d-enr-texte: #fff; --d-enr-survol: #23292d;
  --d-ajout-fond: #fff; --d-ajout-bord: #353D42; --d-ajout-texte: #353D42; --d-ajout-survol-fond: #353D42; --d-ajout-survol-texte: #fff;
  --d-btn2-texte: #353D42; --d-btn2-survol: #f3f4f6; --d-btn2-survol-bord: #b9bdc2;
  --d-champ-fond: #fff; --d-focus-bord: #c2003a; --d-focus-anneau: rgba(228, 0, 66, .16);
  --d-coche: #353D42;
  --d-ligne-paire: #fbfbfc; --d-ligne-survol: #f6f1f3; --d-pagination-actif: #353D42;
  --d-neutre-pale: #eceef0;
  --d-primaire-pale: #eceef0; --d-primaire-texte: #353D42;
  --d-succes-pale: #e6f4ec; --d-succes-bord: #a9d8bd; --d-succes-texte: #1f6e48;
  --d-info-pale: #e7f0f6; --d-info-bord: #b3cfe2; --d-info-texte: #2c5f80;
  --d-attention-pale: #fdf1dc; --d-attention-bord: #f1cf8e; --d-attention-texte: #8a5600;
  --d-danger-pale: #fdecef; --d-danger-bord: #f4c3d0; --d-danger-texte: #a3002f; --d-danger-plein: #c8102e;
  /* connexion claire : blanc rosé, deux lueurs douces (framboise en haut à droite, anthracite en bas à gauche) */
  --d-login-fond:
    radial-gradient(700px 420px at 92% -8%, rgba(228, 0, 66, .13), transparent 65%),
    radial-gradient(800px 480px at 4% 110%, rgba(53, 61, 66, .10), transparent 65%),
    linear-gradient(180deg, #faf7f8 0%, #f3f1f3 100%);
  --d-login-ombre: 0 18px 48px rgba(38, 45, 50, .12), 0 1px 3px rgba(38, 45, 50, .08); --d-login-carte-bord: 1px solid #e7e3e6;
  --d-login-bouton: #353D42; --d-login-bouton-survol: #23292d;
  --d-login-bouton-inactif: #e9eaec; --d-login-bouton-inactif-texte: #5b646b;
}
/* Filet framboise en haut de l'écran de connexion */
body:has(.login-container) { border-top: 4px solid #E40042; }
/* ---------- Corps commun aux directions : tout passe par les variables --d-* définies plus haut ---------- */
:root {
  --bo-fond: var(--d-fond); --bo-fond-clair: var(--d-surface-2); --bo-bordure: var(--d-bordure);
  --bo-texte: var(--d-texte); --bo-texte-doux: var(--d-texte-doux);
}
body { font-size: 14px; color: var(--d-texte); }
#wrapper, body:not(:has(.login-container)) { background: var(--d-fond); }
a { color: var(--d-lien); }
a:hover, a:focus { color: var(--d-lien-survol); }
label, .control-label { color: var(--d-texte); }
.text-muted, small { color: var(--d-texte-doux); }

/* Bandeau */
#header { background: var(--d-bandeau); box-shadow: var(--d-bandeau-ombre); border-bottom: var(--d-bandeau-bord); }
#logo, #logo.light-version { background: transparent; border: 0; }
.color-line { height: var(--d-filet-h) !important; background: var(--d-filet) !important; }
#logo1 img { content: var(--d-logo); }
#header .header-link, #header .header-link i { color: var(--d-bandeau-icone); }
#header .navbar-nav > li > a, #header .navbar-nav > li > a h5, #header .navbar-nav > li > a span { color: var(--d-bandeau-icone); }
#header .navbar-nav > li > a i { color: var(--d-bandeau-icone); opacity: .85; }
#header .header-link:hover, #header .navbar-nav > li > a:hover, #header .navbar-nav > li > a:focus, #header .navbar-nav > li.open > a { background: var(--d-bandeau-survol); }
#header .navbar-nav > li > a:hover i, #header .navbar-nav > li.open > a i { color: var(--d-bandeau-icone-survol); opacity: 1; }
#header .navbar-form-custom .form-control { background: var(--d-bandeau-champ); border-color: var(--d-bandeau-champ-bord) !important; color: var(--d-bandeau-icone); }

/* Menu latéral */
#menu, #side-menu { background: var(--d-menu-fond); }
#menu { border-right: 1px solid var(--d-bordure); }
.profile-picture { border-bottom-color: var(--d-bordure); }
.profile-picture, .profile-picture a, .profile-picture .font-extra-bold { color: var(--d-texte); }
#side-menu > li > a { color: var(--d-menu-rubrique); }
#side-menu > li.active > a, #side-menu > li > a:hover { color: var(--d-menu-rubrique-actif); }
#side-menu li a.colored, #side-menu li a.colored:hover, #side-menu li a.colored-info, #side-menu li a.colored-info:hover { color: var(--d-menu-rubrique) !important; }
#side-menu li .nav-second-level li a { color: var(--d-menu-texte); }
#side-menu li .nav-second-level li a:hover { background: var(--d-menu-survol); color: var(--d-texte); }
/* Élément actif : la règle d'origine de Homer (vert #62cb31) l'emportait sur moderne.css ; même spécificité, chargée après */
#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: var(--d-menu-actif-fond); color: var(--d-menu-actif-texte); font-weight: 600;
  box-shadow: none;
}

/* Titres de page et panneaux */
.normalheader .hpanel .panel-body, .small-header .panel-body { background: var(--d-surface); border-bottom-color: var(--d-bordure); }
.small-header .panel-body h2, .normalheader h2 { color: var(--d-titre); }
.hpanel .panel-body { background: var(--d-surface); border-color: var(--d-bordure); box-shadow: var(--d-ombre); }
.hpanel .panel-heading, .hpanel .panel-heading.hbuilt { border-color: var(--d-bordure); }
.hpanel .panel-heading.hbuilt { background: var(--d-surface); color: var(--d-panneau-titre); border-left: var(--d-lisere); }
.hpanel .panel-footer { background: var(--d-surface-2); border-color: var(--d-bordure); }

/* Boutons */
.btn:focus, .btn.focus, .btn:active:focus { box-shadow: 0 0 0 3px var(--d-focus-anneau); }
.btn-primary:not(.btn-outline) {
  background: var(--d-btn1-fond); border: 1.5px solid var(--d-btn1-bord); color: var(--d-btn1-texte);
}
.btn-primary:not(.btn-outline):hover, .btn-primary:not(.btn-outline):focus, .btn-primary:not(.btn-outline):active, .btn-primary.active:not(.btn-outline) {
  background: var(--d-btn1-survol-fond); border-color: var(--d-btn1-survol-fond); color: var(--d-btn1-survol-texte);
}
.btn.bo-enregistrer { background: var(--d-enr-fond); border-color: var(--d-enr-fond); color: var(--d-enr-texte); }
.btn.bo-enregistrer:hover, .btn.bo-enregistrer:focus, .btn.bo-enregistrer:active { background: var(--d-enr-survol); border-color: var(--d-enr-survol); color: var(--d-enr-texte); }
.btn-success:not(.libre), .btn-outline.btn-success:not(.libre), .btn-outline.btn-primary {
  background: var(--d-ajout-fond); border: 1.5px solid var(--d-ajout-bord); color: var(--d-ajout-texte);
}
.btn-success:not(.libre):hover, .btn-success:not(.libre):focus, .btn-success:not(.libre):active,
.btn-outline.btn-success:not(.libre):hover, .btn-outline.btn-primary:hover, .btn-outline.btn-primary:focus, .btn-outline.btn-primary.active {
  background: var(--d-ajout-survol-fond); border-color: var(--d-ajout-survol-fond); color: var(--d-ajout-survol-texte);
}
.btn-default, .btn-white, .btn-outline.btn-info {
  background: var(--d-surface); border-color: var(--d-bordure-forte); color: var(--d-btn2-texte);
}
.btn-default:hover, .btn-default:focus, .btn-white:hover, .btn-outline.btn-info:hover {
  background: var(--d-btn2-survol); border-color: var(--d-btn2-survol-bord); color: var(--d-btn2-texte);
}
.btn.bo-supprimer { background: transparent; border-color: transparent; color: var(--d-texte-doux); }
.btn.bo-supprimer:hover, .btn.bo-supprimer:focus { background: var(--d-danger-pale); border-color: var(--d-danger-bord); color: var(--d-danger-texte); }
.btn.bo-supprimer:active { background: var(--d-danger-plein); border-color: var(--d-danger-plein); color: #fff; }
#header .btn { background: var(--d-bandeau-btn-fond); border-color: var(--d-bandeau-btn-fond); color: var(--d-bandeau-btn-texte); }

/* Champs */
.form-control, .select2-container .select2-choice, .select2-container-multi .select2-choices { border-color: var(--d-bordure-forte) !important; background-color: var(--d-champ-fond); }
.form-control:focus, .select2-container-active .select2-choice, .select2-container-active .select2-choices {
  border-color: var(--d-focus-bord) !important; box-shadow: 0 0 0 3px var(--d-focus-anneau) !important; background-color: #fff;
}
.input-group-addon { background: var(--d-surface-2); border-color: var(--d-bordure-forte); }
.dataTables_wrapper .dataTables_filter input, .dataTables_wrapper .dataTables_length select { border-color: var(--d-bordure-forte); }
input[type="checkbox"], input[type="radio"] { accent-color: var(--d-coche); }
.checkbox-success input[type="checkbox"]:checked + label::before, .checkbox-primary input[type="checkbox"]:checked + label::before { background-color: var(--d-coche); border-color: var(--d-coche); }
/* Cases et boutons radio dessinés (awesome-bootstrap-checkbox, vert de Homer) */
.radio input[type="radio"]:checked + label::before, .checkbox input[type="checkbox"]:checked + label::before { border-color: var(--d-coche); }
.radio-success input[type="radio"]:checked + label::after, .radio-primary input[type="radio"]:checked + label::after,
.radio input[type="radio"]:checked + label::after { background-color: var(--d-coche); }
.checkbox-success input[type="checkbox"]:checked + label::after, .checkbox-primary input[type="checkbox"]:checked + label::after { color: #fff; }

/* Tableaux */
.table > thead > tr > th { background: var(--d-thead); color: var(--d-texte-doux); border-bottom-color: var(--d-bordure) !important; }
.table-bordered, .table-bordered > thead > tr > th, .table-bordered > tbody > tr > td { border-color: var(--d-bordure-table); }
.table-striped > tbody > tr:nth-of-type(odd) { background-color: var(--d-ligne-paire); }
.table-hover > tbody > tr:hover { background-color: var(--d-ligne-survol); }

/* Pagination */
.pagination > li > a, .pagination > li > span { color: var(--d-texte); border-color: var(--d-bordure-forte); background: var(--d-surface); }
.pagination > li > a:hover { background: var(--d-btn2-survol); color: var(--d-texte); }
.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > span, .pagination > .active > a:focus {
  background-color: var(--d-pagination-actif); border-color: var(--d-pagination-actif); color: #fff;
}
.pagination > .disabled > a, .pagination > .disabled > span { color: var(--d-texte-doux); background: var(--d-surface-2); }

/* Étiquettes et pastilles (hors couleurs d'état des lots) : fond teinté, texte foncé */
.label-default, .badge:not([class*="badge-"]) { background: var(--d-neutre-pale); color: var(--d-texte); }
.label-primary, .badge.badge-primary { background: var(--d-primaire-pale); color: var(--d-primaire-texte); }
.label-success, .badge.badge-success { background: var(--d-succes-pale); color: var(--d-succes-texte); }
.label-info, .badge.badge-info { background: var(--d-info-pale); color: var(--d-info-texte); }
.label-warning, .badge.badge-warning { background: var(--d-attention-pale); color: var(--d-attention-texte); }
.label-danger, .badge.badge-danger { background: var(--d-danger-pale); color: var(--d-danger-texte); }

/* Alertes */
.alert { border-radius: 10px; border-width: 1px; }
.alert-success { background: var(--d-succes-pale); border-color: var(--d-succes-bord); color: var(--d-succes-texte); }
.alert-info { background: var(--d-info-pale); border-color: var(--d-info-bord); color: var(--d-info-texte); }
.alert-warning { background: var(--d-attention-pale); border-color: var(--d-attention-bord); color: var(--d-attention-texte); }
.alert-danger { background: var(--d-danger-pale); border-color: var(--d-danger-bord); color: var(--d-danger-texte); }

/* Menus déroulants et fenêtres */
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { background: var(--d-menu-survol); color: var(--d-texte); }
.modal-header { border-bottom-color: var(--d-bordure); }
.modal-footer { background: var(--d-surface-2); border-top-color: var(--d-bordure); }

/* Écran de connexion */
body:has(.login-container) { background: var(--d-login-fond) fixed; }
.login-container .hpanel .panel-body { box-shadow: var(--d-login-ombre); border: var(--d-login-carte-bord); }
.login-container .form-control { background: var(--d-champ-fond); }
.login-container .btn-block { background: var(--d-login-bouton); border-color: var(--d-login-bouton); color: #fff; }
.login-container .btn-block:hover:not([disabled]) { background: var(--d-login-bouton-survol); border-color: var(--d-login-bouton-survol); color: #fff; }
.login-container .btn-block[disabled] { opacity: 1; background: var(--d-login-bouton-inactif); border-color: var(--d-login-bouton-inactif); color: var(--d-login-bouton-inactif-texte); }
.login-container p.text-center a { color: var(--d-lien); }

/* Titres de panneau : pas de liseré framboise (la framboise reste réservée aux repères d'état et de navigation) */
.hpanel .panel-heading.hbuilt { border-left: 1px solid var(--d-bordure); }

/* Bandeau en encre prune (retenu le 02/10/2026) : couleur sombre mais teintée, logo blanc, filet framboise */
:root { --d-bandeau: #4a3352; --d-bandeau-ombre: 0 1px 3px rgba(0,0,0,.18); --d-bandeau-bord: 0; --d-logo: url('../images/logo-neovarim-white.svg');
  --d-bandeau-icone: #ffffff; --d-bandeau-icone-survol: #ffffff; --d-bandeau-survol: rgba(255,255,255,.10);
  --d-bandeau-champ: rgba(255,255,255,.10); --d-bandeau-champ-bord: rgba(255,255,255,.18); --d-bandeau-btn-fond: rgba(255,255,255,.14); }   /* pas de bouton framboise plein */
#header { background: #4a3352; }
#header .navbar-nav > li > a i, #header .header-link i { opacity: .92; }
#header .navbar-form-custom .form-control::placeholder { color: rgba(255,255,255,.7); }

/* =====================================================================================
 * Harmonisation prune (02/10/2026) : le prune du bandeau devient la couleur de l'interface.
 * - boutons blancs à contour prune, remplis de prune au survol ; « Enregistrer » est le seul bouton plein ;
 * - icônes des menus, rubrique active, pagination, cases cochées, focus des champs : prune ;
 * - la framboise ne reste que sur le filet du haut et sur le logo ;
 * - les pastilles d'état des lots (libre, optionné, pré-réservé, réservé, acté) gardent leurs couleurs.
 * ===================================================================================== */
:root {
  --p: #4a3352;            /* prune du bandeau : boutons pleins, page active, titres */
  --p-survol: #3b2742;
  --p-texte: #5a2d5e;      /* prune lisible sur fond clair (icônes, rubrique active, liens au survol) : 9,9:1 sur blanc */
  --p-pale: #f5eff6;       /* fonds légers : rubrique active, survol */
  --p-contour: #9d93a0;    /* contour des boutons blancs */
  --p-anneau: rgba(90, 45, 94, .22);
  --d-lien-survol: var(--p-texte); --d-coche: var(--p); --d-pagination-actif: var(--p);
  --d-focus-bord: var(--p-texte); --d-focus-anneau: var(--p-anneau);
  --d-menu-actif-fond: var(--p-pale); --d-menu-actif-texte: var(--p-texte); --d-menu-actif-barre: var(--p);
  --d-ligne-survol: #f8f4f8; --d-primaire-pale: var(--p-pale); --d-primaire-texte: var(--p-texte);
  --d-enr-fond: var(--p); --d-enr-survol: var(--p-survol); --d-login-bouton: var(--p); --d-login-bouton-survol: var(--p-survol);
}

/* Titres de page */
.small-header .panel-body h2, .normalheader h2 { color: var(--p); }

/* Menus déroulants du bandeau : icônes prune au lieu de rouge, quelle que soit leur classe d'origine (text-success, text-info…) */
#header .dropdown-menu i, #header .dropdown-menu .text-success, #header .dropdown-menu .text-info { color: var(--p-texte) !important; }
#header .dropdown-menu > li > a:hover, #header .dropdown-menu > li > a:focus, .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { background: var(--p-pale); color: var(--p); }

/* Menu latéral : rubrique active et survol */
#side-menu li .nav-second-level li a:hover { background: var(--p-pale); color: var(--p); }

/* Boutons : tous blancs à contour prune, remplis au survol (hors pastilles d'état des lots, en .btn-xs) */
.btn-default, .btn-white, .btn-primary, .btn-outline.btn-primary, .btn-success:not(.libre), .btn-outline.btn-success:not(.libre),
.btn-info:not(.btn-xs), .btn-outline.btn-info {
  background: #fff; border: 1.5px solid var(--p-contour); color: var(--p);
}
.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active,
.btn-white:hover, .btn-white:focus,
.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active,
.btn-success:not(.libre):hover, .btn-success:not(.libre):focus, .btn-success:not(.libre):active,
.btn-info:not(.btn-xs):hover, .btn-info:not(.btn-xs):focus, .btn-info:not(.btn-xs):active,
.btn-outline.btn-info:hover, .btn-outline.btn-primary:hover, .btn-outline.btn-success:not(.libre):hover,
.open > .dropdown-toggle.btn-default, .open > .dropdown-toggle.btn-primary, .open > .dropdown-toggle.btn-success {
  background: var(--p); border-color: var(--p); color: #fff;
}
/* Filtre actif parmi les pastilles (« PROMOTEUR », « TOUS ») : contour prune, sans aplat */
.btn-primary.btn-xs:not(:hover), .btn-outline.btn-primary.btn-xs:not(:hover) { background: #fff; border-color: var(--p-contour); color: var(--p); }
/* Seule action pleine : « Enregistrer » */
.btn.bo-enregistrer { background: var(--p); border-color: var(--p); color: #fff; }
.btn.bo-enregistrer:hover, .btn.bo-enregistrer:focus, .btn.bo-enregistrer:active { background: var(--p-survol); border-color: var(--p-survol); color: #fff; }
.btn:focus, .btn.focus, .btn:active:focus { box-shadow: 0 0 0 3px var(--p-anneau); outline: none; }

/* Liens d'action dans les tableaux (crayon, lecture…) */
.table a:hover i, .table a:focus i { color: var(--p-texte); }

/* Connexion : halo prune en bas à gauche à la place de l'anthracite */
body:has(.login-container) {
  background:
    radial-gradient(700px 420px at 92% -8%, rgba(228, 0, 66, .10), transparent 65%),
    radial-gradient(800px 480px at 4% 110%, rgba(74, 51, 82, .14), transparent 65%),
    linear-gradient(180deg, #faf7f9 0%, #f3f0f4 100%) fixed;
}
.login-container .form-control:focus { border-color: var(--p-texte) !important; box-shadow: 0 0 0 3px var(--p-anneau) !important; }

/* =====================================================================================
 * Lot D (03/10/2026) : titre collant, envoi de fichier, listes à choix multiples.
 * ===================================================================================== */
/* Titre de page fixé (suivi commercial, listes…) : « collant » au lieu de fixe, pour qu'il occupe sa vraie
   hauteur et ne recouvre jamais le haut des blocs, 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, alignés, sans cadre autour */
.fileupload .btn-file.btn-white { padding: 0; border: 0; background: none; box-shadow: none; }
.fileupload .btn-file { display: inline-flex; align-items: center; vertical-align: middle; line-height: 1; margin: 0 !important; }
.fileupload .btn-file .fileupload-new, .fileupload .btn-file .fileupload-exists { display: inline-flex; }
.fileupload > div:last-child { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 10px; }
.fileupload .btn-file .btn, .fileupload > div:last-child > a.btn { margin: 0 !important; top: 0 !important; }
.fileupload .thumbnail { border-radius: 10px; border-color: var(--d-bordure); }
/* Listes à choix multiples (Select2) : hauteur selon le contenu, étiquettes prune clair */
.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; background: var(--p-pale); border: 1px solid #e3d8e5; color: var(--p); box-shadow: none;
}
/* Intitulés de rubrique du menu latéral : majuscules par le style, pour un rendu égal quel que soit le texte saisi */
#side-menu li a.colored, #side-menu li a.colored-info { text-transform: uppercase; }
/* Bouton « + » de dépliage des lignes (DataTables Responsive, vert par défaut) */
table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child:before, table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child:before,
table.dataTable.dtr-column > tbody > tr > td.control:before, table.dataTable.dtr-column > tbody > tr > th.control:before {
  background-color: var(--p) !important; border-color: #fff !important; box-shadow: 0 0 0 1px var(--p-contour) !important;
}
table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td:first-child:before, table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th:first-child:before,
table.dataTable.dtr-column > tbody > tr.parent td.control:before { background-color: var(--p-texte) !important; }
/* Boutons du visuel (« Sélection du visuel », « Effacer ») sur une seule ligne */
.fileupload > div:last-child { flex-wrap: nowrap; gap: 4px; }
.fileupload .btn-file .btn, .fileupload > div:last-child > a.btn { padding: 5px 8px; font-size: 10.5px; letter-spacing: .03em; white-space: nowrap; }

/* =====================================================================================
 * Lot E (03/10/2026) : ligne des noms de colonnes figée pendant le défilement de la page (js/bo-tableaux.js).
 * Version corrigée runimmo du 01/10/2026 : aucun défilement vertical propre au tableau (la molette atteint
 * toujours la dernière ligne). L'en-tête se fige sous le bandeau ; un tableau plus large que sa zone
 * reçoit .bo-defile (défilement horizontal seulement, en-tête non figé).
 * ===================================================================================== */
.dataTables_wrapper { max-width: 100%; overflow: visible; }
.table-responsive:has(.dataTables_wrapper) { overflow: visible; }
.bo-zone-tableau { max-width: 100%; border: 1px solid var(--d-bordure); border-radius: 8px; }
.bo-zone-tableau.bo-defile { overflow-x: auto; }
.bo-zone-tableau > table.dataTable { margin: 0 !important; border: 0; }
.bo-zone-tableau > table.dataTable > thead > tr > th, .bo-zone-tableau > table.dataTable > thead > tr > td {
  background: var(--d-thead); box-shadow: inset 0 -1px 0 var(--d-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;
}
/* Tableaux larges : plus compacts, pour que l'en-tête reste figé (sans défilement horizontal) le plus souvent possible */
.table > thead > tr > th { font-size: 12px; letter-spacing: 0; font-weight: 600; text-transform: none; 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.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; }
/* Colonne « Action » : icônes côte à côte */
.table td a.effet-survol { float: none !important; display: inline-block; margin: 0 3px; vertical-align: middle; }
.table td:has(a.effet-survol) { white-space: nowrap; }
/* Bandeau : la marge négative de Bootstrap faisait dépasser la zone d'icônes */
#header .navbar-right, #header .navbar-right:last-child { margin-right: 0; }
/* DataTables fixe la largeur du tableau en pixels avant la création de la zone : on la laisse suivre la zone */
.bo-zone-tableau > table.dataTable { width: 100% !important; }
/* Listes de codes postaux sans espace (attribution des guides, 4e colonne) : seule cette colonne peut couper ses chaînes ;
   les autres colonnes gardent leurs mots entiers (une règle générale coupait « BORDE/AUX », « CRETEI/L ») */
table.table-configuration-guide-attribution > tbody > tr > td:nth-child(4) { overflow-wrap: anywhere; min-width: 260px; }
/* Boutons .btn-primary simples : la règle de la direction C (.btn-primary:not(.btn-outline), plus spécifique) les
   remplissait d'anthracite ; on aligne ses variables sur l'harmonisation prune (blanc à contour, plein au survol).
   « Enregistrer » (.btn.bo-enregistrer, déclaré après) reste plein. */
:root {
  --d-btn1-fond: #fff; --d-btn1-bord: var(--p-contour); --d-btn1-texte: var(--p);
  --d-btn1-survol-fond: var(--p); --d-btn1-survol-texte: #fff;
}
.btn.bo-enregistrer:not(.btn-outline) { background: var(--p); border-color: var(--p); color: #fff; }
.btn.bo-enregistrer:not(.btn-outline):hover, .btn.bo-enregistrer:not(.btn-outline):focus { background: var(--p-survol); border-color: var(--p-survol); color: #fff; }

/* =====================================================================================
 * Boutons (03/10/2026), sur le modèle de complémentarité de runimmo :
 * - actions secondaires : pleines, teinte « baie » #a23b72 (entre la framboise du logo et le prune), texte blanc 6,4:1 ;
 * - action principale « Enregistrer » et filtre actif : pleins, prune #4a3352 ;
 * - filtre inactif (« Tous ») : contour prune ;
 * - « Supprimer » : seul bouton blanc, contour et texte framboise foncé, plein au survol ;
 * - pastilles d'état des lots (libre, optionné…) : inchangées.
 * ===================================================================================== */
:root { --baie: #a23b72; --baie-survol: #87305f; --suppr: #c2003a; }
.btn-default, .btn-white, .btn-primary, .btn-outline.btn-primary, .btn-success:not(.libre), .btn-outline.btn-success:not(.libre),
.btn-info:not(.btn-xs), .btn-outline.btn-info,
.btn-primary:not(.btn-outline), .btn-default:not(.bo-supprimer) {
  background: var(--baie); border: 1.5px solid var(--baie); color: #fff;
}
.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-white:hover, .btn-white:focus,
.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary:not(.btn-outline):hover, .btn-primary:not(.btn-outline):focus,
.btn-success:not(.libre):hover, .btn-success:not(.libre):focus, .btn-info:not(.btn-xs):hover, .btn-info:not(.btn-xs):focus,
.btn-outline.btn-info:hover, .btn-outline.btn-primary:hover, .btn-outline.btn-success:not(.libre):hover,
.open > .dropdown-toggle.btn-default, .open > .dropdown-toggle.btn-primary, .open > .dropdown-toggle.btn-success {
  background: var(--baie-survol); border-color: var(--baie-survol); color: #fff;
}
/* Action principale */
.btn.bo-enregistrer, .btn.bo-enregistrer:not(.btn-outline) { background: var(--p); border-color: var(--p); color: #fff; }
.btn.bo-enregistrer:hover, .btn.bo-enregistrer:focus, .btn.bo-enregistrer:not(.btn-outline):hover { background: var(--p-survol); border-color: var(--p-survol); color: #fff; }
/* Filtres parmi les pastilles d'état : actif plein prune, « Tous » à contour */
.btn-primary.btn-xs:not(.btn-outline), .btn-primary.btn-xs:not(.btn-outline):not(:hover) { background: var(--p); border-color: var(--p); color: #fff; }
.btn-outline.btn-primary.btn-xs, .btn-outline.btn-primary.btn-xs:not(:hover) { background: #fff; border-color: var(--p); color: var(--p); }
.btn-outline.btn-primary.btn-xs:hover { background: var(--p); color: #fff; }
/* Supprimer : seul bouton blanc */
.btn.bo-supprimer, .btn-default.bo-supprimer { background: #fff; border: 1.5px solid var(--suppr); color: var(--suppr); }
.btn.bo-supprimer:hover, .btn.bo-supprimer:focus { background: var(--suppr); border-color: var(--suppr); color: #fff; }
.btn.bo-supprimer:active { background: #a3002f; border-color: #a3002f; color: #fff; }
/* Fenêtre de confirmation (SweetAlert) : bouton d'annulation lisible */
.sweet-alert button.cancel { background: #fff !important; border: 1.5px solid var(--p-contour) !important; color: var(--p) !important; }
/* En-têtes de panneau avec une rangée de boutons (fiche programme…) : une seule ligne, comme sur runimmo.
   Le gabarit donne width:100% à la cellule du titre ; ici le titre ne prend que sa place et les boutons restent groupés. */
.hpanel .panel-heading table:not(.table) { width: 100%; }
.hpanel .panel-heading table:not(.table) > tbody > tr { display: flex; flex-wrap: nowrap; align-items: center; justify-content: flex-end; gap: 6px; }
.hpanel .panel-heading table:not(.table) > tbody > tr > td { padding: 0; width: auto !important; white-space: nowrap; }
.hpanel .panel-heading table:not(.table) > tbody > tr > td:first-child { flex: 1 1 auto; min-width: 0; white-space: normal; }
.hpanel .panel-heading .btn + .btn, .hpanel .panel-heading td .btn { margin-left: 0; }
.hpanel .panel-heading .btn:not(.btn-xs) { padding: 7px 11px; letter-spacing: .03em; }
/* Rangée des pastilles d'état + filtre (fiche programme, lots…) : pastilles sur une ligne, le filtre prend le reste */
.hpanel .panel-heading > .row[style*="display: flex"] > [class*="col-"]:first-child:has(.btn-xs) { flex: 0 0 auto; width: auto; white-space: nowrap; }
.hpanel .panel-heading > .row[style*="display: flex"] > [class*="col-"]:first-child .btn-xs { margin: 2px 1px; }
.hpanel .panel-heading > .row[style*="display: flex"]:has(> [class*="col-"]:first-child .btn-xs) > [class*="col-"]:nth-child(2) { flex: 1 1 auto; width: auto; min-width: 0; }
/* Autres en-têtes en flex (filtres par région + boutons) : les filtres passent à la ligne, les boutons restent groupés à droite */
.hpanel .panel-heading > .row[style*="display: flex"] > [class*="col-"]:last-child:not(:first-child) { white-space: nowrap; }
/* Écrans jusqu'à 1400 px : boutons d'en-tête un peu plus serrés pour rester sur une ligne */
@media (max-width: 1400px) {
  .hpanel .panel-heading .btn:not(.btn-xs) { padding: 6px 9px; font-size: 11.5px; letter-spacing: .02em; }
  .hpanel .panel-heading table:not(.table) > tbody > tr { gap: 4px; }
  .hpanel .panel-heading.hbuilt { padding-left: 18px; padding-right: 18px; }
}

/* =====================================================================================
 * Audit design du 04/10/2026 (validé par l'utilisateur le 03/10/2026) : confort d'un usage quotidien intensif.
 * Le bandeau, les couleurs de boutons validées et l'absence de barre latérale ne changent pas.
 * ===================================================================================== */
/* Outfit a un œil plus petit qu'Helvetica : texte courant 14,5 px, cellules de tableau 14 px */
body { font-size: 14.5px; }
.table > tbody > tr > td { font-size: 14px; }
/* Texte des boutons : 12 px au moins (10,5 px auparavant dans certains en-têtes), une seule ligne conservée */
.btn-sm, .btn-group-sm > .btn,
.hpanel .panel-heading table:not(.table) .btn,
.hpanel .panel-heading .btn:not(.btn-xs) { font-size: 12px; letter-spacing: .02em; }
.btn-xs { font-size: 11.5px; }
@media (max-width: 1400px) {
  .hpanel .panel-heading .btn:not(.btn-xs), .hpanel .panel-heading table:not(.table) .btn { font-size: 11.5px; padding: 6px 8px; letter-spacing: .01em; }
}
/* Suivi des lignes : ligne paire et survol réellement visibles (prune très pâle) */
.table-striped > tbody > tr:nth-of-type(odd) { background-color: #f8f6f9; }
.table-hover > tbody > tr:hover, .table-hover > tbody > tr:hover > td { background-color: #f1e9f3; }
/* Densité : cellules moins hautes */
.table > tbody > tr > td { padding-top: 6px; padding-bottom: 6px; line-height: 1.35; }
/* Focus clavier visible (navigation au clavier seulement, pas au clic) */
.btn:focus-visible, a:focus-visible, .form-control:focus-visible, input[type="checkbox"]:focus-visible, input[type="radio"]:focus-visible {
  outline: 2px solid #5a2d5e !important; outline-offset: 2px;
}
/* En-têtes de tableau légèrement teintés prune (texte 5,5:1) */
.table > thead > tr > th, .bo-zone-tableau > table.dataTable > thead > tr > th { background: #f7f4f8; }
/* 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; }
/* Pastilles d'état des lots : même teinte, un cran plus foncée, texte blanc lisible (AA) */
:root { --bo-etat-libre: #23855a; --bo-etat-prereserve: #b94d78; --bo-etat-reserve: #c63d30; }
.btn-danger { background-color: var(--bo-etat-reserve); border-color: var(--bo-etat-reserve); color: #fff; }
.btn-danger:hover, .btn-danger:focus { background-color: #a9332a; border-color: #a9332a; color: #fff; }
.btn-rose:hover, .btn-rose:focus, .btn-rose:active, .btn-rose.active { background-color: #a14267; border-color: #a14267; color: #fff; }
.btn-success.libre:hover, .btn-success.libre:focus { background-color: #1d7049; border-color: #1d7049; color: #fff; }

/* Retouches du 03/10/2026 (demande de l'utilisateur) : police un peu plus grande partout (+1 px),
   prune éclairci (#3b2742 → #4a3352, 11,1:1 avec le blanc ; l'ancien prune devient la teinte de survol) */
body { font-size: 15.5px; }
.table > tbody > tr > td { font-size: 15px; }
.table > thead > tr > th { font-size: 13px; }
label, .control-label { font-size: 14.5px; }
.form-control, .select2-container .select2-choice { font-size: 15px; }
#side-menu li .nav-second-level li a { font-size: 14.5px; }
.btn, .btn-sm, .btn-group-sm > .btn, .hpanel .panel-heading table:not(.table) .btn, .hpanel .panel-heading .btn:not(.btn-xs) { font-size: 13px; }
.btn-xs { font-size: 12px; }
@media (max-width: 1400px) {
  .hpanel .panel-heading .btn:not(.btn-xs), .hpanel .panel-heading table:not(.table) .btn { font-size: 12px; padding: 6px 8px; letter-spacing: .01em; }
}
/* 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; }
/* Boutons du visuel (« Sélectionner », « Effacer ») : petits, à la largeur de l'image (180 px) */
.fileupload .btn-file .btn, .fileupload > div:last-child > a.btn, .fileupload .btn-file input.btn { font-size: 11px !important; padding: 5px 9px !important; letter-spacing: .03em; }
.fileupload .btn.bo-supprimer::before { display: none; }
/* Étiquettes des listes à choix multiples (Select2) : 13 px, sur une ligne */
.select2-container-multi .select2-choices .select2-search-choice { font-size: 13px; line-height: 1.4; }
/* Taille des boutons : intermédiaire (13 px jugé un peu gros, 12 px un peu petit) */
.btn, .btn-sm, .btn-group-sm > .btn, .hpanel .panel-heading table:not(.table) .btn, .hpanel .panel-heading .btn:not(.btn-xs) { font-size: 12.5px; }
.btn-xs { font-size: 11.5px; }
.hpanel .panel-heading .btn:not(.btn-xs) { padding: 7px 11px; }
@media (max-width: 1400px) {
  .hpanel .panel-heading .btn:not(.btn-xs), .hpanel .panel-heading table:not(.table) .btn { font-size: 11.5px; padding: 6px 8px; }
}

/* Menu de gauche (03/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(--d-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: var(--p-pale); color: var(--p); }
/* Intitulé de page (« Programme »…) et rubriques « colored » : bloc plein prune, comme le bloc vert d'origine */
#side-menu li a.colored, #side-menu li a.colored:hover {
  background: var(--p) !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(--baie) !important; color: #fff !important;
  font-size: 13px !important; font-weight: 700; letter-spacing: .04em; padding: 14px 20px !important; text-transform: uppercase;
}
/* Intitulé de page discret (03/10/2026) : le bloc prune plein, de la couleur du bandeau, attirait l'œil sur un simple
   rappel de rubrique. Fond pâle teinté, texte prune ; 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: var(--p-pale) !important; color: var(--p) !important;
}
/* 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(--d-fond) 180px) !important;
}
/* Boutons : 12 px (12,5 px encore jugé un peu gros) */
.btn, .btn-sm, .btn-group-sm > .btn, .hpanel .panel-heading table:not(.table) .btn, .hpanel .panel-heading .btn:not(.btn-xs) { font-size: 12px; }
.btn-xs { font-size: 11px; }
.hpanel .panel-heading .btn:not(.btn-xs) { padding: 6px 10px; }
@media (max-width: 1400px) {
  .hpanel .panel-heading .btn:not(.btn-xs), .hpanel .panel-heading table:not(.table) .btn { font-size: 11.5px; padding: 6px 8px; }
}

/* Fiche programme réorganisée par thème (03/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(--d-bordure); margin: 0 0 14px; padding: 0 0 8px;
  font-size: 12.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--p-texte);
}
.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; }
/* Identité : le visuel occupe la première colonne sur deux rangées */
.bo-grille-identite > .col-md-10:first-child { grid-row: span 2; }
/* Statut et options : choix Oui / Non compacts, sur une ligne quand la place le permet */
.bo-grille-options { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
.bo-grille-options > .col-md-10 > p.font-bold { margin: 0 0 6px; font-size: 14.5px; }
/* Localisation : adresse (sur deux colonnes), code postal, ville, puis région et zone */

/* 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; }
/* Champs complémentaires : les quatre valeurs côte à côte */
.bo-champ .champsOptionnelLot { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 0 28px; }
.bo-champ .champsOptionnelLot > [class*="col-"] { width: auto; float: none; padding: 0; }
/* Origines des contacts : la longue liste de cases en colonnes régulières */
.bo-champ.bo-pleine > .col-md-12 { margin-bottom: 6px; }
/* 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; }

/* Documents du programme (03/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; margin: 0; }  /* le thème d'origine décale .chat-users de -30 px : la barre d'ajout sortait du panneau à gauche */
#pdfUpdateForm > .row { display: flex !important; flex-wrap: wrap; align-items: flex-end; gap: 12px 24px; padding: 16px 20px !important;
  background: var(--d-surface-2); border-bottom: 1px solid var(--d-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; }

/* Détail d'un lot (ligne dépliée par « + », DataTables Responsive) : fiches « libellé / valeur » en grille,
   au lieu d'une longue liste d'une information par ligne (03/10/2026) */
table.dataTable > tbody > tr.child > td.child { padding: 14px 18px !important; background: #faf7fb; }
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; padding: 0 0 8px; border-bottom: 1px solid var(--d-bordure); min-width: 0;
}
table.dataTable > tbody > tr.child ul.dtr-details > li:first-child { padding-top: 0; }
table.dataTable > tbody > tr.child span.dtr-title { min-width: 0; font-size: 12px; font-weight: 600; color: var(--d-texte-doux); text-transform: none; letter-spacing: .01em; }
table.dataTable > tbody > tr.child span.dtr-data { font-size: 14.5px; color: var(--d-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: #b9bdc2; }

/* 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); }

/* 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)); } }
/* Message de confirmation (« Enregistrement effectué »…), réglé avec l'utilisateur le 03/10/2026 : vert intermédiaire
   (plein trop foncé, pâle trop clair), coche, courte apparition ; disparition et croix gérées par backoffice/js/bo-messages.js */
.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; }
@keyframes bo-confirmation { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .alert-success { animation: none; } }
.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 { background: rgba(15, 79, 49, .10); opacity: 1; }
/* Champ masqué d'origine (style="display: none;", ex. « Conseiller commercial ») : sa cellule ne prend pas de place dans la grille */
.bo-grille > .bo-champ:has(> [style*="display: none"]) { display: none; }

/* Documents du programme, 2e version (03/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(--p-texte); }
.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(--d-texte-doux); }
.bo-doc { position: relative; min-width: 0; }
.bo-doc-lien { display: flex; flex-direction: column; height: 100%; border: 1px solid var(--d-bordure); border-radius: 10px; overflow: hidden;
  background: #fff; color: var(--d-texte); text-decoration: none; transition: border-color .15s, box-shadow .15s; }
.bo-doc-lien:hover, .bo-doc-lien:focus-visible { border-color: #d8cadb; box-shadow: 0 3px 10px rgba(74, 51, 82, .12); color: var(--d-texte); text-decoration: none; }
.bo-doc-apercu { display: flex; align-items: center; justify-content: center; height: 120px; background: var(--d-surface-2); border-bottom: 1px solid var(--d-bordure); }
.bo-doc-apercu img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bo-doc-apercu i.fa { font-size: 44px; color: var(--p-texte); 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(--d-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: var(--p-pale); color: var(--p-texte); 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(--d-texte-doux); font-size: 15px; text-decoration: none; transition: background .15s, color .15s; }
.bo-doc-suppr:hover, .bo-doc-suppr:focus-visible { background: var(--suppr); 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(--p) !important; box-shadow: none !important; }
/* 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(--d-bordure); }

/* Boutons d'option Oui / Non en deux couleurs (03/10/2026, comme runimmo) : les gabarits portent déjà le sens
   (« Oui » dans .radio-success, « Non » dans .radio-danger) ; les règles génériques de coche les rendaient identiques.
   Oui coché : vert clair (#34a874, 3:1 sur blanc, seuil des éléments d'interface) ; Non coché : rouge (5:1 sur blanc). */
.radio.radio-success input[type="radio"]:checked + label::before { border-color: #34a874; }
.radio.radio-success input[type="radio"]:checked + label::after { background-color: #34a874; }
.radio.radio-success input[type="radio"] { accent-color: #34a874; }
.radio.radio-danger input[type="radio"]:checked + label::before { border-color: #c63d30; }
.radio.radio-danger input[type="radio"]:checked + label::after { background-color: #c63d30; }
.radio.radio-danger input[type="radio"] { accent-color: #c63d30; }
/* Titre de page (« Liste des agences… », « Edition du programme… ») : un peu plus petit, 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; }

/* 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: 14px; }
/* 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; } }

/* Suivi commercial (03/10/2026, repris de runimmo) : titre écrit dans un <span class="pull-left"> du h2, ramené à 15 px
   par la règle des éléments du titre ; contrôles du bandeau (période, semaines…) plus lisibles et sur une ligne */
.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(--p); }
.small-header .panel-body h2 > span.pull-left:first-child { white-space: nowrap; margin-right: 16px; }
.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; }
.small-header .panel-body h2 #periode-range { width: 228px !important; }
@media (max-width: 1380px) {
  .small-header .panel-body h2 > *:not(a), .normalheader h2 > *:not(a) { font-size: 13.5px; }
  .small-header .panel-body h2 > span.pull-left:first-child { font-size: 19px; }
  .small-header .panel-body h2 form { display: flex; flex-wrap: nowrap; align-items: center; }
  .small-header .panel-body h2 .radio-inline + .radio-inline { margin-left: 8px; }
  .small-header .panel-body h2 form > .inline { margin-right: 12px !important; }
  .small-header .panel-body h2 #periode-range { width: 200px !important; }
}
/* Suivi commercial (03/10/2026) : recherche dans les cartes (programme, ville, 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 */
.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; align-items: center; gap: 14px; flex: 1 1 auto; min-width: 0; justify-content: flex-end; }
.bo-recherche-prog { position: relative; flex: 0 1 440px; min-width: 270px; margin: 0; font-weight: 400; }
.bo-recherche-prog > .fa { position: absolute; left: 13px; top: 50%; transform: translateY(-50%); color: #8a8f94; font-size: 14px; pointer-events: none; }
.bo-recherche-prog > input.form-control { width: 100%; padding-left: 36px; border-radius: 8px; }
.bo-periode {
  display: inline-flex; align-items: center; gap: 8px; margin: 0; padding: 0 12px; height: 36px; flex: 0 0 auto;
  border: 1px solid #d3d7db; border-radius: 8px; background: #fff; cursor: pointer; font-weight: 400; white-space: nowrap;
}
.bo-periode:hover { border-color: #b9c0c6; background: var(--p-pale); }
.bo-periode > .fa-calendar { color: var(--p); }
.bo-periode > .fa-caret-down { color: #8a8f94; }
.bo-periode-libelle { font-weight: 600; color: var(--p); font-size: 14px; }
.small-header .panel-body h2 .bo-periode #periode-range, .bo-periode #periode-range {
  width: 172px !important; border: 0; padding: 0; height: auto; background: transparent; box-shadow: none; outline: none;
  cursor: pointer; font-size: 14px; color: #4b545b; display: inline-block;
}
.bo-recherche-vide { margin: 4px 0 18px; padding: 14px 18px; border-radius: 8px; background: var(--p-pale); color: var(--p); font-size: 15px; }
@media (max-width: 1100px) { .bo-periode-libelle { display: none; } }

/* Cartes des programmes : coins carrés à la jonction entre le haut et le pied des chiffres */
.hpanel.contact-panel > .panel-body { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }

/* Fiche contact réorganisée (03/10/2026, proposition 2 validée) : carte Suivi en tête, puis « Demande et projet » et
   « Contact » côte à côte, puis le message. Mêmes champs, mêmes noms ; cartes à titre sur fond pâle, sans barre latérale */
.bo-fiche-contact { container-type: inline-size; }
.bo-fiche-contact .bo-section { border: 1px solid #e2dde5; border-radius: 10px; padding: 0 16px 4px; margin: 0 0 14px; background: #fff; min-width: 0; }
.bo-fiche-contact .bo-section > legend {
  float: left; width: calc(100% + 32px); margin: 0 -16px 14px; padding: 9px 16px; border: 0;
  border-bottom: 1px solid #e2dde5; border-radius: 10px 10px 0 0; background: var(--p-pale); color: var(--p);
}
.bo-fiche-contact .bo-section > legend + * { clear: both; }
.bo-fiche-contact .bo-duo { display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; align-items: stretch; }
.bo-fiche-contact .bo-grille { grid-template-columns: repeat(auto-fill, minmax(155px, 1fr)); gap: 0 22px; }
.bo-fiche-contact .bo-grille > .bo-champ > [class*="col-"] { margin-bottom: 10px; }
.bo-fiche-contact .bo-champ p.font-bold { margin: 0 0 6px; }
/* Libellés sur une ligne */
.bo-fiche-contact .bo-champ label.form-label { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Message : le titre de la carte suffit */
.bo-fiche-contact .bo-champ:has(textarea[name="message"]) label.form-label { display: none; }
/* Typologie et type d'investissement : les cases sur une ligne */
.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; }
.bo-fiche-contact .bo-champ:has(input[name="adresse"]) { grid-column: span 2; }
/* Fiche étroite (associé à côté) : les deux cartes l'une sous l'autre */
@container (max-width: 760px) {
  .bo-fiche-contact .bo-duo { grid-template-columns: 1fr; }
  .bo-fiche-contact .bo-champ:has(input[name="adresse"]) { grid-column: 1 / -1; }
}
/* « Nouveau contact salon » : rarement utilisé, bouton discret (blanc, texte gris) */
.hpanel .panel-heading .btn.bo-bouton-discret { background: #fff; border-color: #d3d7db; color: #6b7177; }
.hpanel .panel-heading .btn.bo-bouton-discret:hover, .hpanel .panel-heading .btn.bo-bouton-discret:focus { background: #f4f1f5; border-color: #b9c0c6; color: var(--bo-marque); }

/* Calendrier de période (daterangepicker) aux couleurs du site : prune pour la sélection, fond pâle pour l'intervalle (03/10/2026) */
.daterangepicker .ranges li.active, .daterangepicker td.active, .daterangepicker td.active:hover { background-color: var(--p) !important; color: #fff !important; }
.daterangepicker .ranges li:hover:not(.active) { background-color: var(--p-pale); color: var(--p); }
.daterangepicker td.in-range:not(.active) { background-color: var(--p-pale); color: #262d32; }

/* Fiche programme, « Dispositifs fiscaux et labels » (03/10/2026) : trois groupes (Fiscalité, Normes et labels, Outre-mer),
   une ligne par dispositif : libellé à gauche, case ou Oui / Non à droite */
.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 { border: 1px solid #e4d9e7; border-radius: 8px; padding: 10px 14px 4px; background: #fff; }
/* Cases d'abord, Oui / Non ensuite, calés en bas de chaque carte : les Oui / Non des trois groupes sont sur les mêmes lignes */
.bo-fisc-groupe { display: flex; flex-direction: column; }
.bo-fisc-ligne.bo-fisc-bas { margin-top: auto; border-top: 1px solid #f0ebf2; }
.bo-fisc-titre { margin: 0 0 4px; font-size: 12px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--p); }
.bo-fisc-ligne { display: grid; grid-template-columns: minmax(0, 1fr) 128px; align-items: center; gap: 12px; min-height: 40px; border-bottom: 1px solid #f0ebf2; }
.bo-fisc-ligne:last-child { border-bottom: 0; }
/* Libellés tous alignés à gauche ; commandes dans une même colonne à droite : la case se place sous le « Oui » */
.bo-fisc-lib { margin: 0; font-size: 14px; font-weight: 400; color: #262d32; 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; }

/* Fiche lot réorganisée par thème (03/10/2026) : 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(--p); }
.bo-remu-lib { font-size: 14px; font-weight: 600; color: #4b545b; }
.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; } }

/* Avatars de conseiller (03/10/2026) : 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: #262d32; 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; } }

/* Mode maintenance (03/10/2026) : rappel fixe en bas de l'écran, visible du seul support tant que la maintenance est active */
.bo-rappel-maintenance {
  position: fixed; left: 50%; bottom: 16px; transform: translateX(-50%); z-index: 2000; display: inline-flex; align-items: center; gap: 8px;
  padding: 9px 18px; border-radius: 24px; background: #fdf0d9; border: 1px solid #f0c879; color: #7a5000; font-size: 14px;
  box-shadow: 0 4px 14px rgba(0, 0, 0, .15); text-decoration: none; white-space: nowrap;
}
.bo-rappel-maintenance:hover, .bo-rappel-maintenance:focus { color: #5c3c00; text-decoration: none; background: #fbe6bf; }
.bo-rappel-maintenance .las { font-size: 18px; }

/* Icône « plan du lot » (03/10/2026) : plan d'appartement vu de dessus (murs, cloisons, ouvertures de portes)
   au lieu du crayon et de la règle ; couleur prune, tracée par un masque SVG pour suivre la couleur du texte */
.bo-icone-plan {
  display: inline-block; width: 30px; height: 30px; vertical-align: middle; background-color: var(--p);
  -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: #E40042; }

/* Origines des contacts : case et libellé alignés, libellés longs sur deux lignes sans décalage ni 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; }

/* Lots : la zone dépliée (« + » d'une ligne) se détache du tableau : fond prune pâle, informations en cartes blanches */
table.dataTable > tbody > tr.child > td.child { background: #efe6f2 !important; border-top: 1px solid #ddcfe2; border-bottom: 1px solid #ddcfe2; }
table.dataTable > tbody > tr.child ul.dtr-details > li { background: #fff; border: 1px solid #e4d9e7 !important; border-radius: 6px; padding: 8px 10px !important; }

/* Période en segments (suivi commercial du conseiller BV, 03/10/2026) : les boutons radio deviennent un sélecteur compact */
.bo-segments { display: inline-flex; flex: 0 0 auto; border: 1px solid #d3d7db; border-radius: 8px; overflow: hidden; background: #fff; }
.bo-segments .radio, .bo-segments .radio-inline { margin: 0 !important; padding: 0 !important; display: block; }
.bo-segments .radio-inline + .radio-inline { border-left: 1px solid #e4dde7; }
.bo-segments input[type="radio"] { position: absolute; opacity: 0; width: 1px; height: 1px; }
.bo-segments label { margin: 0 !important; padding: 8px 14px !important; cursor: pointer; font-size: 13.5px !important; font-weight: 500; color: #4b545b; white-space: nowrap; }
.bo-segments label::before, .bo-segments label::after { display: none !important; }
.bo-segments label:hover { background: var(--p-pale); color: var(--p); }
.bo-segments input:checked + label { background: var(--p); color: #fff; }
.bo-segments input:focus-visible + label { outline: 2px solid #E40042; outline-offset: -2px; }

/* Tableau de bord du conseiller BV (03/10/2026) : statuts des prospects en pastilles (au lieu de boutons radio en majuscules),
   critères Type / Typo / Budget max sur une ligne avec des 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 #d3d7db; border-radius: 20px; background: #fff; cursor: pointer;
  font-size: 13.5px !important; font-weight: 500 !important; color: #4b545b; 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: #b9c0c6; background: var(--p-pale); color: var(--p); }
.bo-filtres-prospects > h5 input:checked + label { background: var(--p); border-color: var(--p); color: #fff; }
.bo-filtres-prospects > h5 input:focus-visible + label { outline: 2px solid #E40042; outline-offset: 2px; }
.bo-filtres-prospects > .row { display: flex; flex-wrap: wrap; gap: 0 20px; margin: 0 !important; }
.bo-filtres-prospects > .row > [class*="col-"] { width: 220px; float: none; padding: 0; }
.bo-filtres-prospects > .row label { display: block; margin-bottom: 6px; font-size: 13px; font-weight: 600; color: #4b545b; text-transform: none !important; letter-spacing: 0 !important; }
/* Fiche prospect (conseiller BV) : le programme est imposé par le bureau de vente (champ caché) : sa cellule vide disparaît */
.bo-fiche-contact .bo-champ:not(:has(label, select)) { display: none; }
/* Bouton secondaire (retour, navigation) : blanc, contour et texte prune, l'action principale garde le plein */
.btn.bo-bouton-secondaire { background: #fff; border: 1px solid #c9bccd; color: var(--p); }
.btn.bo-bouton-secondaire:hover, .btn.bo-bouton-secondaire:focus { background: var(--p-pale); border-color: #b9a7bf; color: var(--p); }

/* Calendrier (conseiller BV, 03/10/2026) : titre en casse normale, puis une ligne de filtres : région, programmes en pastilles
   à cocher, bouton « Tout cocher / décocher » discret à droite */
.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; }
.bo-cal-entete .bo-cal-titre { font-size: 19px; font-weight: 600; color: var(--p); text-transform: none; margin-right: auto; }
.bo-cal-entete > h2 > .row { margin: 0; }
.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 #d3d7db; border-radius: 20px; background: #fff; cursor: pointer;
  font-size: 13.5px; font-weight: 500; color: #4b545b; white-space: nowrap;
}
.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 input:checked + label { background: var(--p-pale); border-color: #c9bccd; color: var(--p); }
.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; }
.bo-cal-entete .form-group .checkbox input:focus-visible + label { outline: 2px solid #E40042; outline-offset: 2px; }
.small-header .panel-body.bo-cal-entete h2 > span.bo-cal-titre { font-size: 19px !important; font-weight: 600; color: var(--p); }

/* CRM prospect (03/10/2026) : titre en casse normale et informations en grille régulière de 6 colonnes (la personne, puis le projet) */
.bo-crm-titre { font-weight: 600; color: var(--p); margin-right: 4px; }
.small-header h2:has(.bo-crm-titre) { text-transform: none !important; font-size: 19px !important; }
.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 #ece6ef; min-width: 0; }
.bo-crm-info:nth-child(6n) { border-right: 0; }
.bo-crm-info:nth-child(n+7) { border-top: 1px solid #ece6ef; }
.bo-crm-lib { display: block; font-size: 12.5px; font-weight: 600; color: #6b6070; margin-bottom: 4px; }
.bo-crm-val, .bo-crm-val h5 { font-size: 14.5px !important; font-weight: 400; color: #262d32; 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 #ece6ef; } .bo-crm-info:nth-child(3n) { border-right: 0; } .bo-crm-info:nth-child(n+4) { border-top: 1px solid #ece6ef; } }
.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::before, .bo-filtres-prospects > .row::after { display: none; }  /* clearfix Bootstrap : compté comme élément flex, il décalait la ligne de 20 px */

/* Compteurs du tableau de bord du conseiller (03/10/2026) : 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: var(--p-pale); position: relative; }
.bo-stat-icone::after { content: ""; position: absolute; inset: 12px; background-color: var(--p); -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 (03/10/2026) : 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(26, 20, 30, .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 #ece6ef; }
.bo-visio-titre { font-size: 16px; font-weight: 600; color: var(--p); flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bo-visio-rang { font-size: 13px; color: #6b6070; white-space: nowrap; }
.bo-visio-btn { display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 14px; border-radius: 8px; border: 1px solid #c9bccd; background: #fff; color: var(--p); font-size: 13.5px; font-weight: 600; cursor: pointer; text-decoration: none; }
.bo-visio-btn:hover, .bo-visio-btn:focus { background: var(--p-pale); color: var(--p); text-decoration: none; }
.bo-visio-btn.plein { background: var(--p); border-color: var(--p); color: #fff; }
.bo-visio-btn.plein:hover { background: #3a2841; color: #fff; }
.bo-visio-corps { position: relative; flex: 1 1 auto; background: #f3f0f5; 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: #4b545b; 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(--p); 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: #E40042; }
.bo-visio-fleche.prec { left: 14px; } .bo-visio-fleche.suiv { right: 14px; }
.bo-visio-fleche[disabled] { opacity: .35; cursor: default; }

/* Carte « Le programme » du tableau de bord du conseiller (03/10/2026) : visuel à gauche, l'essentiel à droite */
.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: #e9e4ec 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(--p); }
.bo-prog-etiquette { padding: 3px 10px; border-radius: 20px; background: #fde4ea; color: #9b1c3c; font-size: 12px; font-weight: 700; letter-spacing: .03em; }
.bo-prog-minisite { margin-left: auto; }
.bo-prog-adresse { margin: -6px 0 0; font-size: 15px; color: #4b545b; }
.bo-prog-faits { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)) minmax(0, 1.5fr); gap: 0; border: 1px solid #ece6ef; border-radius: 10px; overflow: hidden; }
.bo-prog-faits > div { padding: 10px 14px; border-right: 1px solid #ece6ef; 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: #6b6070; margin-bottom: 3px; }
.bo-prog-faits strong { font-size: 16px; font-weight: 600; color: #262d32; }
.bo-prog-faits small { font-size: 13px; font-weight: 400; color: #6b6070; }
.bo-prog-pastilles { display: flex; flex-wrap: wrap; gap: 6px 8px; }
.bo-prog-dispositif { padding: 4px 11px; border-radius: 20px; background: var(--p-pale); color: var(--p); font-size: 13px; font-weight: 600; }
.bo-prog-interet { padding: 4px 11px; border-radius: 20px; border: 1px solid #d9d2dc; color: #4b545b; font-size: 13px; }
.bo-prog-description > summary { cursor: pointer; font-size: 14px; font-weight: 600; color: var(--p); }
.bo-prog-description > div { margin-top: 8px; font-size: 14.5px; line-height: 1.55; color: #3a4248; max-height: 260px; overflow: auto; }
@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 #ece6ef; } }
@media (max-width: 900px) { .bo-prog-carte > .panel-body { flex-direction: column; } .bo-prog-visuel { flex-basis: 180px; } }
.bo-prog-description > summary { 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); }
/* Carte programme 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, #f5eff6, #ece3f0); color: var(--p); }
.bo-prog-visuel-vide::before { content: ""; width: 54px; height: 54px; background-color: #b9a7bf;
  -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: #8a7491; }
.bo-prog-description > summary:focus { outline: none; }
.bo-prog-description > summary:focus-visible { outline: 2px solid #E40042; outline-offset: 3px; border-radius: 4px; }
.bo-prog-faits > div:last-child strong { white-space: nowrap; }
/* Document jamais téléversé (nom de fichier vide en base) : bouton grisé, ni cliquable ni présent dans la visionneuse (03/10/2026) */
.btn.bo-doc-absent, .btn.bo-doc-absent:hover { background: #f1eff2 !important; border-color: #e1dde3 !important; color: #a39ca7 !important; cursor: not-allowed; box-shadow: none; }

/* Suivi commercial (03/10/2026) : menu de tri à côté de la recherche, et date du dernier contact sur chaque carte */
.bo-tri { display: inline-flex; align-items: center; gap: 8px; margin: 0; flex: 0 0 auto; font-weight: 400; }
.bo-tri > span { font-size: 13.5px; color: #6b6070; white-space: nowrap; }
.bo-tri select.form-control { width: auto; min-width: 220px; height: 36px; border-radius: 8px; font-size: 14px; }
.bo-derniere-activite { margin-top: 6px; font-size: 12.5px; color: #6b6070; }

/* Fiche bureau de vente (05/10/2026) : cartes « Bureau de vente », « Horaires », puis les deux équipes côte à côte
   (NEOVARIM / NEOVARIM Partenaire) au lieu de six champs dispersés sur trois colonnes à moitié vides */
.bo-fiche-bdv { container-type: inline-size; }
.bo-fiche-bdv .bo-section { border: 1px solid #e2dde5; border-radius: 10px; padding: 0 16px 4px; margin: 0 0 14px; background: #fff; min-width: 0; }
.bo-fiche-bdv .bo-section > legend { float: left; width: calc(100% + 32px); margin: 0 -16px 14px; padding: 9px 16px; border: 0;
  border-bottom: 1px solid #e2dde5; border-radius: 10px 10px 0 0; background: var(--p-pale); color: var(--p); }
.bo-fiche-bdv .bo-section > legend + * { clear: both; }
.bo-fiche-bdv .bo-grille { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 0 22px; }
.bo-fiche-bdv .bo-champ p.font-bold { margin: 0 0 6px; }
.bo-fiche-bdv .bo-duo { display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; align-items: stretch; }
@container (max-width: 760px) { .bo-fiche-bdv .bo-duo { grid-template-columns: 1fr; } }
.bo-fiche-bdv .bo-champ:has(#horaires) > [class*="col-"] > label { display: none; }  /* titre de la carte suffisant */
/* En-tête de bloc repliable : cliquable sur toute sa surface (05/10/2026) */
.hpanel > .panel-heading:has(.showhide) { cursor: pointer; user-select: none; }
.hpanel > .panel-heading:has(.showhide) :is(a, button, input, select, textarea, .btn, .select2-container) { cursor: pointer; }
.hpanel > .panel-heading:has(.showhide) :is(input, textarea) { cursor: text; user-select: text; }

/* Menu des tâches à traiter (dénonciations, mandats, tâches…) : liste de liens, en 14,5 px et graisse 500 comme le menu
   de gauche (05/10/2026). En 13 px maigre, elle paraissait plus petite que les autres menus. */
#header .hdropdown.notification:not(.big) > li > a { font-size: 14.5px !important; font-weight: 500; }

/* Liste des contacts, colonne Action (05/10/2026) : les deux icônes grises de 17 px (crayon, triangle « lecture ») étaient
   trop pâles et peu compréhensibles. Deux petits boutons teintés, un crayon (Modifier la fiche) et un bloc-notes (Suivi du
   prospect, CRM), avec une bulle immédiate au survol (attribut data-bulle, posé dans client_script*.php). */
.table td a.effet-survol { position: relative; width: 30px; padding: 0 !important; box-sizing: border-box; height: 30px; margin: 0 2px; border-radius: 8px; display: inline-flex !important;
  align-items: center; justify-content: center; background: #f4edf6; color: var(--p, #4a3352) !important; text-decoration: none;
  animation: none !important; transition: background-color .15s ease, color .15s ease; }
.table td a.effet-survol i { font-size: 18px; line-height: 1; color: inherit !important; padding: 0; }
.table td a.effet-survol .ss-write::before { content: "\eb04" !important; }
.table td a.effet-survol .ss-play::before { content: "\ea6d" !important; }
.table td a.effet-survol:hover, .table td a.effet-survol:focus-visible { background: var(--p, #4a3352); color: #fff !important; }
.table td a.effet-survol[data-bulle]:hover::after, .table td a.effet-survol[data-bulle]:focus-visible::after {
  content: attr(data-bulle); position: absolute; right: calc(100% + 6px); top: 50%; transform: translateY(-50%); z-index: 20;
  background: #262d32; color: #fff; font-size: 12.5px; font-weight: 500; line-height: 1.2; padding: 5px 8px; border-radius: 6px;
  white-space: nowrap; pointer-events: none; box-shadow: 0 2px 8px rgba(0,0,0,.18); }

/* Détail du suivi d'un programme (reportbdv_detail) : « PROGRAMME, VILLE (CP) » et le choix de période partagent la même
   ligne ; un nom long passait sous la période. Le nom se coupe avec « … » et s'affiche en entier au survol (05/10/2026). */
.bo-rapport-entete { display: flex; align-items: center; gap: 20px; }
.bo-rapport-entete > .pull-right { float: none !important; flex: 0 0 auto; margin-left: auto; }
.bo-rapport-entete > .pull-right form { display: flex; align-items: center; flex-wrap: nowrap; white-space: nowrap; }
.bo-rapport-titre { position: relative; flex: 1 1 auto; min-width: 0; }
.bo-rapport-titre > span { display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.bo-rapport-titre:hover::after { content: attr(data-bo-titre); position: absolute; left: 0; top: calc(100% + 6px); z-index: 30;
  background: #262d32; color: #fff; font-size: 13px; font-weight: 500; line-height: 1.3; padding: 6px 10px; border-radius: 6px;
  white-space: nowrap; pointer-events: none; box-shadow: 0 2px 8px rgba(0,0,0,.18); }

/* Connexion, étape 2 (choix du profil) : homer.js transforme la liste en select2 ; son cadre reprenait le style des champs de
   connexion (marge intérieure, bordure), d'où une liste plus étroite, encadrée deux fois, collée au bouton. Même largeur,
   même hauteur et même arrondi que les champs Identifiant et Mot de passe (05/10/2026). */
.login-container .select2-container.form-control { display: block; width: 100% !important; padding: 0 !important; border: 0 !important; height: auto !important; background: none !important; box-shadow: none !important; }
.login-container .select2-container .select2-choice { height: 46px; line-height: 44px; padding: 0 40px 0 14px; font-size: 15px;
  border-radius: 10px !important; background: var(--bo-fond-clair) !important; background-image: none !important; }
.login-container .select2-container .select2-choice .select2-arrow { width: 36px; background: none !important; border: 0 !important; }
.login-container .select2-container .select2-choice .select2-arrow b { background: none !important; position: relative; }
.login-container .select2-container .select2-choice .select2-arrow b::after { content: ""; position: absolute; left: 50%; top: 50%; margin: -2px 0 0 -5px;
  border: 5px solid transparent; border-top-color: var(--bo-texte-doux); border-bottom: 0; }
.login-container .form-group:has(.select2-container) { margin-bottom: 22px; }

/* Boutons « + » / crayon d'ajout de document (classe add-client-icon : pré-réservation, réception de dossier, annulation de
   réservation). Le champ fichier invisible était posé sur l'icône par un décalage de l'ancien style (float + top: -35px) ;
   avec l'alignement en flex de la nouvelle présentation, il se retrouvait au-dessus de l'icône, coupé : le clic n'ouvrait plus
   le choix du fichier (SUP-2026-0047, 06/10/2026). Le champ couvre maintenant toute l'icône, quelle que soit la mise en page. */
.btn-file.add-client-icon { position: relative !important; overflow: hidden; cursor: pointer; }
.btn-file.add-client-icon > input[type="file"] { position: absolute !important; top: 0 !important; left: 0 !important; right: auto !important;
  width: 100% !important; height: 100% !important; margin: 0 !important; float: none !important; transform: none !important;
  opacity: 0; font-size: 0; cursor: pointer; display: block !important; }

/* Graphiques de répartition (08/10/2026, js/bo-graphiques.js) : anneau Chart.js avec le total au centre, légende chiffrée
   à droite (nombre et pourcentage), sous l'anneau quand la carte est étroite. */
.panel-body:has(.bo-graph) > .stats-title { float: none !important; margin-bottom: 4px; }   /* titre au-dessus : le graphique prend toute la largeur */
.bo-graph { display: flex; align-items: center; gap: 28px; min-height: 220px; padding: 6px 4px; container-type: inline-size; }
.bo-graph-anneau { position: relative; flex: 0 0 200px; width: 200px; height: 200px; }
.bo-graph-anneau canvas { width: 100% !important; height: 100% !important; }
.bo-graph-total { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; pointer-events: none; }
.bo-graph-total strong { font-size: 28px; font-weight: 600; line-height: 1.1; color: var(--bo-texte, #2b3a45); }
.bo-graph-total span { font-size: 12px; color: var(--bo-texte-doux, #5f6d78); }
.bo-graph-legende { list-style: none; margin: 0; padding: 0; flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.bo-graph-legende li { display: grid; grid-template-columns: 12px minmax(0, 1fr) auto 52px; align-items: center; gap: 10px; padding: 6px 8px; border-radius: 8px; font-size: 13px; cursor: default; }
.bo-graph-legende li:hover { background: #f6f2f8; }
.bo-graph-pastille { width: 12px; height: 12px; border-radius: 4px; }
.bo-graph-nom { color: var(--bo-texte, #2b3a45); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bo-graph-valeur { font-weight: 600; color: var(--bo-texte, #2b3a45); font-variant-numeric: tabular-nums; text-align: right; }
.bo-graph-pct { color: var(--bo-texte-doux, #5f6d78); font-variant-numeric: tabular-nums; text-align: right; font-size: 12px; }
.bo-graph-vide { margin: 0; width: 100%; text-align: center; color: var(--bo-texte-doux, #5f6d78); font-size: 13px; }
@container (max-width: 460px) {
  .bo-graph { flex-direction: column; gap: 14px; }
  .bo-graph-legende { width: 100%; }
}

/* Fiche programme, Statut et options (08/10/2026) : colonnes égales de 150 px + largeur col-md-10 = libellés longs coupés
   (« Afficher l'espace de vente », « Mise en avant site agence ») alors que la ligne avait de la place. Chaque option prend
   la largeur de son libellé, sans retour à la ligne ; passage à la ligne suivante seulement quand la place manque. */
.bo-grille.bo-grille-options { display: flex; flex-wrap: wrap; gap: 12px 44px; }
.bo-grille-options > .bo-champ { flex: 0 0 auto; }
.bo-grille-options > .bo-champ > .col-md-10, .bo-grille-options > .col-md-10 { width: auto; float: none; padding: 0; }
.bo-grille-options p.font-bold { white-space: nowrap; }

/* ===== Téléphone et petite tablette (08/10/2026) : le back-office n'était pas utilisable sous 768 px ===== */
@media (max-width: 767px) {
  /* Bandeau : fond prune (le logo blanc et les icônes blanches étaient sur fond clair), icônes sur une ligne défilante */
  /* Le bandeau (2 lignes, 126 px) défile avec la page au lieu de rester fixe : le contenu n'est plus caché dessous,
     le titre de la page reste collé en haut pendant le défilement */
  body.fixed-navbar #header, #header { position: relative !important; height: auto !important; }
  body.fixed-navbar #wrapper, #wrapper { top: 0 !important; margin-top: 0 !important; }
  body.fixed-small-header .normalheader, .normalheader { top: 0 !important; }
  body.fixed-sidebar #menu, #menu { position: absolute !important; top: 126px !important; z-index: 95; }
  body.page-small:not(.show-sidebar) #menu { visibility: hidden; }   /* fermé : 17 px dépassaient sur la page */
  #header nav { background: var(--p, #4a3352) !important; min-height: 56px; }
  #header nav .mobile-menu, #mobile-collapse { display: none !important; }   /* menu de démonstration du thème (Login, Projects, Forum…) */
  #header #logo1 { z-index: 2; }
  #header .navbar-right { float: none !important; margin: 0 !important; width: 100%; }
  #header .navbar-right > ul.nav { display: flex !important; flex-wrap: nowrap; justify-content: space-between; overflow-x: auto; overflow-y: hidden;
    margin: 0 !important; width: 100% !important; background: rgba(0, 0, 0, .14) !important; padding: 0 6px; scrollbar-width: none; }
  #header .navbar-right > ul.nav::-webkit-scrollbar { display: none; }
  #header .navbar-right > ul.nav > li { float: none !important; flex: 0 0 auto; }
  #header .navbar-right > ul.nav > li > a { padding: 10px 11px !important; color: #fff !important; }
  #header .navbar-right > ul.nav > li > a i { font-size: 24px !important; color: #fff !important; }
  /* Menus déroulants des icônes : toute la largeur de l'écran, défilement si trop long */
  #header .navbar-right .dropdown-menu { position: fixed !important; left: 8px !important; right: 8px !important; top: 122px !important;
    width: auto !important; min-width: 0 !important; max-height: calc(100vh - 140px); overflow-y: auto; margin: 0 !important; }
  #header .navbar-right .dropdown-menu.bigmenu table, #header .navbar-right .dropdown-menu.bigmenu tbody { display: block; width: 100%; }
  #header .navbar-right .dropdown-menu.bigmenu tr { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
  #header .navbar-right .dropdown-menu.bigmenu td { display: block; width: auto !important; padding: 10px 4px !important; }

  /* Titres de page */
  .normalheader h2, .small-header h2 { font-size: 18px !important; line-height: 1.3; }
  .normalheader .panel-body, .small-header .panel-body { padding: 12px 16px !important; }
  .bo-rapport-entete { flex-wrap: wrap; }
  .bo-rapport-entete > .pull-right form { flex-wrap: wrap; white-space: normal; gap: 6px 14px; }

  /* En-têtes de blocs : titre puis boutons, qui passent à la ligne */
  .hpanel > .panel-heading { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; height: auto !important; }
  .hpanel > .panel-heading > .pull-right, .hpanel > .panel-heading .panel-tools { float: none !important; display: flex; flex-wrap: wrap; gap: 6px; margin: 0 !important; }
  .hpanel > .panel-heading .table-responsive { overflow: visible !important; border: 0 !important; margin: 0; width: 100%; }
  .hpanel > .panel-heading table, .hpanel > .panel-heading tbody { display: block; width: 100% !important; }
  .hpanel > .panel-heading tr { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
  .hpanel > .panel-heading td, .hpanel > .panel-heading th { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 !important; border: 0 !important; width: auto !important; }
  .hpanel > .panel-heading .btn { margin: 0 !important; }
  /* même sélecteur que la règle d'ordinateur (lignes « nowrap ») pour pouvoir la remplacer ici */
  .hpanel .panel-heading table:not(.table) > tbody > tr { flex-wrap: wrap !important; justify-content: flex-start !important; gap: 8px !important; }
  .hpanel .panel-heading table:not(.table) > tbody > tr > td { white-space: normal !important; }
  .hpanel .panel-heading table:not(.table) > tbody > tr > td:first-child { flex: 1 1 100% !important; min-width: 0 !important; }
  .hpanel .panel-heading table:not(.table) > tbody > tr > td:first-child:not(:has(span, h4, h5, strong, b)) { flex: 0 0 auto !important; }
  /* Rangées de boutons de filtre (statuts des lots…) : retour à la ligne */
  .hpanel .panel-heading > .row { display: flex !important; flex-wrap: wrap !important; gap: 8px; margin: 0 !important; }
  .hpanel .panel-heading > .row > [class*="col-"] { white-space: normal !important; flex: 1 1 100% !important; width: 100% !important; padding: 0 !important; }
  .hpanel .panel-heading > .row > [class*="col-"] > a { display: inline-block; margin: 0 4px 6px 0; }

  /* Contenu : marges réduites, tableaux défilants dans leur cadre au lieu d'élargir la page */
  .content { padding: 12px 10px !important; }
  .hpanel > .panel-body { padding: 14px 12px !important; }
  .content .table-responsive, .dataTables_wrapper { overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%; }
  .dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter { text-align: left !important; float: none !important; }
  .dataTables_wrapper .dataTables_filter input { width: 100% !important; margin-left: 0 !important; }
  #wrapper { overflow-x: hidden; }
}
