﻿/* ===========================================================================
 * Couche de compatibilité Bootstrap 3.4.1
 * ---------------------------------------------------------------------------
 * Rétablit deux comportements de Bootstrap 3.3.2 sur lesquels l'application
 * s'appuie et que 3.4.1 a changés. À charger IMMÉDIATEMENT APRÈS
 * `bootstrap.min.css`, dans tous les gabarits qui chargent Bootstrap.
 *
 * Ce fichier est une DETTE ASSUMÉE, pas une amélioration : chaque règle est là
 * pour annuler un changement de 3.4.1, et porte la trace de ce qu'elle annule
 * pour qu'on puisse la retirer le jour où le code applicatif est adapté.
 * Ne rien ajouter ici qui ne soit pas une compensation de montée de version.
 *
 * 🛑 NE PAS BUNDLER NI INLINER CE FICHIER. Deux raisons :
 *   1. Il doit être chargé APRÈS `bootstrap.min.css`. Le bundle `~/Content/css` est
 *      rendu AVANT lui (`_Layout.cshtml` l. 101 vs 105) : y placer ces règles leur
 *      ferait perdre la cascade, silencieusement.
 *   2. Le fichier est en UTF-8 **avec BOM** (convention du dépôt). Servi par un
 *      `<link href>`, le navigateur retire le BOM comme signature d'encodage et tout
 *      va bien (vérifié). Mais s'il est INLINÉ dans un `<style>` ou concaténé dans un
 *      bundle, le BOM devient un caractère au milieu du flux CSS : le parseur invalide
 *      alors la PREMIÈRE règle du fichier — c'est-à-dire le `pointer-events` ci-dessous,
 *      celui qui empêche la modification d'un choix verrouillé. La régression bloquante
 *      reviendrait sans le moindre message.
 * =========================================================================== */

/* ---------------------------------------------------------------------------
 * 1. Inertie des boutons désactivés par la CLASSE `disabled`
 * ---------------------------------------------------------------------------
 * 3.3.2 : `.btn.disabled, .btn[disabled], fieldset[disabled] .btn { pointer-events: none }`
 * 3.4.1 : `a.btn.disabled, fieldset[disabled] a.btn { pointer-events: none }`
 *         (restreint aux seules balises <a>)
 *
 * POURQUOI C'EST CRITIQUE ICI : le helper `RadioButtonGroup`
 * (`Communs/TeoGest.Core/Generic/Label/LabelExtensions.cs`, lignes ~292/296/368)
 * rend un groupe de boutons-bascule sous la forme
 *
 *     <label class="btn btn-choix disabled"><input type="radio" name="..." ...></label>
 *
 * et, quand il est appelé avec `disabled: true`, il ne pose la classe QUE sur le
 * `<label>` : le `<input type="radio">` à l'intérieur n'est JAMAIS désactivé
 * (voir l'appel `html.RadioButton(...)` qui ne reçoit que `autocomplete="off"`).
 * Le `pointer-events: none` de Bootstrap était donc la SEULE chose qui rendait
 * ces choix inertes. Sans cette règle, un clic sur un choix « désactivé » coche
 * le radio et la nouvelle valeur PART AU POST — ce n'est pas un défaut d'aspect
 * mais une atteinte à l'intégrité de la donnée.
 * Vérifié : Facturation (Devis, pièces commerciales : type/base de remise),
 * État des stocks, Paramètres de stock, Immobilisations. Même problème pour tous
 * les `addClass("disabled")` posés en JS sur un bouton d'action
 * (ex. `Scripts/Teogest/Commun/Import/importCFONB_form.js`), qui ne posent pas
 * non plus l'attribut `disabled`.
 *
 * POUR RETIRER CETTE RÈGLE : poser l'attribut HTML `disabled` sur les `<input>`
 * concernés (helper + sites JS), ce qui neutraliserait nativement le clic.
 */
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
  pointer-events: none;
}

/* ---------------------------------------------------------------------------
 * 2. Anneau de focus des boutons-bascule
 * ---------------------------------------------------------------------------
 * `Content/teogest.css` (~l. 152) supprime le contour de focus des boutons :
 *     #foot .btn:focus, .btn:focus { outline: none !important; }
 * mais il ne cible que la PSEUDO-classe `:focus`.
 *
 * Or `button.js` de 3.4.1 ajoute un handler `focus`/`blur` en data-api qui pose la
 * CLASSE `.focus` sur le `.btn` (`$(e.target).closest('.btn').toggleClass('focus', …)`),
 * et le CSS de Bootstrap style `.btn.focus` exactement comme `.btn:focus`
 * (`outline: 5px auto -webkit-focus-ring-color`). Le data-api force en plus le focus sur
 * le radio masqué du groupe. Résultat sans cette règle : après chaque clic sur un
 * bouton-bascule `.btn-choix`, un anneau de focus apparaît et **persiste** jusqu'au
 * changement de focus, sur tous les écrans à groupes de choix.
 *
 * POUR RETIRER CETTE RÈGLE : ajouter `.btn.focus` à la règle de `teogest.css` et
 * régénérer `teogest.min.css` (`bundleconfig.json`). On ne le fait pas ici pour éviter
 * de mêler une régénération de bundle à une montée de version.
 */
#foot .btn.focus,
.btn.focus {
  outline: none !important;
}

/* ---------------------------------------------------------------------------
 * 3. Empilement (z-index) des modales
 * ---------------------------------------------------------------------------
 * 3.4.1 a relevé `.modal` de 1040 à 1050 et donné au `.modal-backdrop` un
 * `z-index: 1040` qu'il n'avait pas (variables LESS `@zindex-modal-background`
 * / `@zindex-modal`, introduites en 3.4.0).
 * Or plusieurs écrans empilent leurs propres pops juste au-dessus de 1040 :
 *
 *   - Content/Dashboard.css                          `.pop-grille-personnalisation { z-index: 1042 }`
 *   - Lib/MvcGrid/Js/mvc-grid.custom.js (~2900, ~2947) pop « mémoriser / charger
 *                                                     les filtres » : 1050, voile forcé à 1049
 *   - Scripts/Teogest/Widget/DemandesInfosClient.js (~143) pop imbriquée : 1050, voile 1049
 *
 * Sans ces règles, `.modal` à 1050 passe AU-DESSUS de la pop à 1042, et les
 * voiles à 1049 passent EN DESSOUS de la modale qu'ils doivent recouvrir (la
 * fenêtre du dessous n'est plus grisée).
 *
 * ⚠️ LES DEUX RÈGLES VONT ENSEMBLE, ne pas les séparer : remettre `.modal` à
 * 1040 sans abaisser le voile les mettrait à égalité (1040/1040), et le voile
 * — ajouté au DOM après la modale — peut alors se peindre PAR-DESSUS elle, ce
 * qui rend la fenêtre inutilisable. La valeur 1000 du voile est celle que
 * `bootstrap.modal.css` appliquait déjà de son côté.
 *
 * POUR RETIRER CES RÈGLES : renormaliser l'échelle d'empilement applicative
 * (pops de l'application au-dessus de 1050). C'est un chantier à part entière.
 */
.modal {
  z-index: 1040;
}

.modal-backdrop {
  z-index: 1000;
}
