/* /Components/Layout/MainLayout.razor.rz.scp.css */
/* ===========================================================================
   Géométrie de PAGEMOD_Menu, reprise du bloc « properties » de
   PAGEMOD_Menu.wwt. Plan de 1180 px de large : en-tête 79, corps 648,
   pied 39, soit 766 de haut.

   Transcrite à la main, contrairement aux pages : ce fichier emploie des
   classes sémantiques liées au balisage du layout, pas les identifiants
   WEBDEV. Elle est néanmoins REVALIDABLE — les 8 champs du gabarit qui
   portent une géométrie se régénèrent, et les valeurs doivent concorder :

     tools/ihm/gen-css.sh -r .    PAGEMOD_Menu gabarit        766
     tools/ihm/gen-css.sh -r . -f PAGEMOD_Menu gabarit-header AREA_Header
     tools/ihm/gen-css.sh -r . -f PAGEMOD_Menu gabarit-footer AREA_Footer

   Vérifié conforme le 11 août 2026, les 8 au pixel. Les 8 autres champs sont
   les options de MENU_Princ : les sources ne leur donnent aucune géométrie,
   WEBDEV les plaçant lui-même. D'où la mise en page en flex ci-dessous, qui
   n'a pas d'original à respecter.

   Couleurs WEBDEV, stockées en BGR — c'est le relevé de l'ORIGINE :
     14474460 -> #DCDCDC   fond de page, en-tête et pied
      6052956 -> #5C5C5C   texte courant
     16777215 -> #FFFFFF   fond de la zone de travail, texte du menu
      8388608 -> #000080   fond du menu principal

   CHARTE PORCELAINE, 16 août 2026 : plus aucune couleur en dur ici — la
   feuille puise dans les jetons --e-* de wwwroot/app.css. Le relevé ci-dessus
   reste la référence de l'apparence d'origine (sauvegardée dans
   _avant-charte-porcelaine-2026-08-16.zip, à la racine du dossier).
   =========================================================================== */

.gabarit[b-1yuklckeie] {
    width: 1180px;
    margin: 0 auto;
    background-color: var(--e-chrome);
    color: var(--e-texte);
    font-family: var(--e-police);
    font-size: var(--e-taille);

    /* --- Le cadre qui détache la zone de travail du fond -------------------

       Demandé en recette le 13 août 2026, et la cause était simple : le
       gabarit et le fond de page portent LA MÊME COULEUR, #DCDCDC. Rien ne
       pouvait les séparer — le panneau se fondait dans la page.

       L'original s'en tire autrement : il enveloppe tout dans un
       « wbCadreArrondi9Img », le cadre arrondi de WEBDEV, dessiné en NEUF
       IMAGES découpées. Nous n'avons pas ces visuels, et les redessiner pour
       un liseré serait disproportionné : trois propriétés CSS donnent le même
       effet, et s'adaptent seules à la hauteur de la page.

       « overflow: hidden » n'est pas décoratif : sans lui, le bandeau bleu du
       menu déborderait des coins arrondis. */
    margin-top: 10px;
    margin-bottom: 10px;
    border: 1px solid var(--e-cadre);
    border-radius: var(--e-rayon);
    box-shadow: var(--e-ombre);
    overflow: hidden;
}

/* ---- AREA_Header : 1180x79 ---------------------------------------------- */
.area-header[b-1yuklckeie] {
    position: relative;
    height: 79px;
    background-color: var(--e-chrome);
    /* Le liseré est un box-shadow interne, pas une bordure : une bordure
       ajouterait 1 px aux 79 de l'en-tête et décalerait tout ce qui suit. */
    box-shadow: inset 0 -1px 0 var(--e-chrome-filet);
}

/* IMG_Logo_KelPano_60x409 : 12,24 162x30 */
.img-logo-produit[b-1yuklckeie] {
    position: absolute;
    left: 12px;
    top: 24px;
    line-height: 0;
}

/* IMG_LogoClient : 1089,4 71x71 */
.img-logo-client[b-1yuklckeie] {
    position: absolute;
    left: 1089px;
    top: 4px;
    object-fit: contain;
}

/* ---- MENU_Princ : 200,0 534x79 ------------------------------------------ */
.menu-princ[b-1yuklckeie] {
    position: absolute;
    left: 200px;
    top: 0;
    width: 534px;
    height: 79px;
    /* Porcelaine : le bandeau plein disparaît, les entrées vivent sur le
       blanc de l'en-tête. La bande de 534 px garde ses positions. */
    background-color: var(--e-menu-fond);
    color: var(--e-menu-texte);
}

.menu-princ ul[b-1yuklckeie] {
    display: flex;
    height: 100%;
    margin: 0;
    padding: 0;
    list-style: none;
}

/* Largeurs des quatre options, relevées dans l'export PDF :
   122 + 136 + 104 + 172 = 534, la largeur de MENU_Princ. Elles sont posées en
   ligne depuis Navigation.cs, pour que la donnée reste à un seul endroit. */
.menu-princ > ul > li[b-1yuklckeie] {
    display: flex;
    align-items: stretch;
    position: relative;
}

.menu-princ .option[b-1yuklckeie],
.menu-princ summary[b-1yuklckeie] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 79px;
    box-sizing: border-box;
    padding: 0 8px;
    color: var(--e-menu-texte);
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
}

.menu-princ summary[b-1yuklckeie] { list-style: none; }
.menu-princ summary[b-1yuklckeie]::-webkit-details-marker { display: none; }

.menu-princ summary[b-1yuklckeie]::after {
    content: '▾';
    margin-left: 6px;
    font-size: 8pt;
}

.menu-princ .option:hover[b-1yuklckeie],
.menu-princ summary:hover[b-1yuklckeie],
.menu-princ details[open] > summary[b-1yuklckeie] {
    background-color: var(--e-menu-hover);
}

/* L'état actif d'origine — pavé blanc sur bandeau navy — n'a plus de bandeau
   où s'inverser : l'entrée courante porte la couleur d'action et un trait
   sous elle, en box-shadow interne pour ne pas toucher aux 79 px. */
.menu-princ .option.active[b-1yuklckeie] {
    color: var(--e-accent);
    font-weight: 600;
    box-shadow: inset 0 -3px 0 var(--e-accent);
}

/* Une page pas encore transposée : visible, mais inerte. */
.menu-princ .en-chantier[b-1yuklckeie] {
    color: var(--e-menu-inactif);
    cursor: not-allowed;
}

.menu-princ .en-chantier:hover[b-1yuklckeie] { background-color: transparent; }

/* Sous-menus : déroulés sous leur parent, hors du flux de l'en-tête. */
.menu-princ .sous-menu[b-1yuklckeie] {
    display: block;
    position: absolute;
    left: 0;
    top: 79px;
    z-index: 10;
    min-width: 200px;
    height: auto;
    background-color: var(--e-chrome);
    border: 1px solid var(--e-table-bord);
    border-radius: 0 0 var(--e-btn-rayon) var(--e-btn-rayon);
    overflow: hidden;
    box-shadow: 0 4px 12px rgba(30, 41, 59, .14);
}

.menu-princ .sous-menu .option[b-1yuklckeie],
.menu-princ .sous-menu .en-chantier[b-1yuklckeie] {
    height: auto;
    padding: 10px 16px;
}

/* Bloc utilisateur — sans équivalent WEBDEV, logé dans l'espace resté libre de
   l'en-tête entre MENU_Princ (fin à 734) et IMG_LogoClient (début à 1089). */
.bloc-utilisateur[b-1yuklckeie] {
    position: absolute;
    left: 744px;
    top: 0;
    width: 335px;
    height: 79px;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    justify-content: center;
    gap: 4px;
}

.bloc-utilisateur .nom-utilisateur[b-1yuklckeie] {
    color: var(--e-chrome-texte);
    font-weight: bold;
}

.bloc-utilisateur form[b-1yuklckeie] { margin: 0; }

.lien-deconnexion[b-1yuklckeie] {
    padding: 0;
    border: 0;
    background: none;
    color: var(--e-lien);
    font-family: inherit;
    font-size: inherit;
    text-decoration: underline;
    cursor: pointer;
}

/* ---- Zone_Zone_de_Travail : 0,79 1180x648 ------------------------------- */
.zone-de-travail[b-1yuklckeie] {
    /* Repère des champs de la page : WEBDEV les positionne en absolu par
       rapport à cette zone, et les sources donnent des coordonnées relatives au
       conteneur parent. Aucun padding, sinon il s'ajouterait à ces coordonnées. */
    position: relative;
    min-height: 648px;
    box-sizing: border-box;
    background-color: var(--e-travail);
    color: var(--e-texte);
}

/* ---- AREA_Footer : 0,727 1180x39 ----------------------------------------
   Le y=727 des sources n'est pas repris tel quel : il tombe naturellement de
   l'enchaînement en-tête (79) + zone de travail (648). Le pied suit donc le
   contenu si celui-ci dépasse, au lieu de se faire recouvrir. */
.area-footer[b-1yuklckeie] {
    position: relative;
    height: 39px;
    background-color: var(--e-chrome);
    box-shadow: inset 0 1px 0 var(--e-chrome-filet);
}

/* IMG_Sabaur_01_99x24 : 14,8 99x23 */
.img-sabaur[b-1yuklckeie] {
    position: absolute;
    left: 14px;
    top: 8px;
}

/* LIB_NumSem : 1066,11 100x20 */
.lib-num-sem[b-1yuklckeie] {
    position: absolute;
    left: 1066px;
    top: 11px;
    width: 100px;
    height: 20px;
    color: var(--e-chrome-texte);
}
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-cwdd747rgi],
.components-reconnect-repeated-attempt-visible[b-cwdd747rgi],
.components-reconnect-failed-visible[b-cwdd747rgi],
.components-pause-visible[b-cwdd747rgi],
.components-resume-failed-visible[b-cwdd747rgi],
.components-rejoining-animation[b-cwdd747rgi] {
    display: none;
}

#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible[b-cwdd747rgi],
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation[b-cwdd747rgi],
#components-reconnect-modal.components-reconnect-paused .components-pause-visible[b-cwdd747rgi],
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible[b-cwdd747rgi],
#components-reconnect-modal.components-reconnect-retrying[b-cwdd747rgi],
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible[b-cwdd747rgi],
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation[b-cwdd747rgi],
#components-reconnect-modal.components-reconnect-failed[b-cwdd747rgi],
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible[b-cwdd747rgi] {
    display: block;
}


#components-reconnect-modal[b-cwdd747rgi] {
    background-color: white;
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 0;
    border-radius: 0.5rem;
    box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-cwdd747rgi 0.5s both;
    &[open]

{
    animation: components-reconnect-modal-slideUp-b-cwdd747rgi 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity-b-cwdd747rgi 0.5s ease-in-out 0.3s;
    animation-fill-mode: both;
}

}

#components-reconnect-modal[b-cwdd747rgi]::backdrop {
    background-color: rgba(0, 0, 0, 0.4);
    animation: components-reconnect-modal-fadeInOpacity-b-cwdd747rgi 0.5s ease-in-out;
    opacity: 1;
}

@keyframes components-reconnect-modal-slideUp-b-cwdd747rgi {
    0% {
        transform: translateY(30px) scale(0.95);
    }

    100% {
        transform: translateY(0);
    }
}

@keyframes components-reconnect-modal-fadeInOpacity-b-cwdd747rgi {
    0% {
        opacity: 0;
    }

    100% {
        opacity: 1;
    }
}

@keyframes components-reconnect-modal-fadeOutOpacity-b-cwdd747rgi {
    0% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

.components-reconnect-container[b-cwdd747rgi] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
}

#components-reconnect-modal p[b-cwdd747rgi] {
    margin: 0;
    text-align: center;
}

#components-reconnect-modal button[b-cwdd747rgi] {
    border: 0;
    background-color: var(--e-prim-fond);
    color: var(--e-prim-texte);
    padding: 4px 24px;
    border-radius: var(--e-btn-rayon);
}

    #components-reconnect-modal button:hover[b-cwdd747rgi] {
        background-color: var(--e-prim-hover);
    }

    #components-reconnect-modal button:active[b-cwdd747rgi] {
        background-color: var(--e-prim-fond);
    }

.components-rejoining-animation[b-cwdd747rgi] {
    position: relative;
    width: 80px;
    height: 80px;
}

    .components-rejoining-animation div[b-cwdd747rgi] {
        position: absolute;
        border: 3px solid var(--e-accent);
        opacity: 1;
        border-radius: 50%;
        animation: components-rejoining-animation-b-cwdd747rgi 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
    }

        .components-rejoining-animation div:nth-child(2)[b-cwdd747rgi] {
            animation-delay: -0.5s;
        }

@keyframes components-rejoining-animation-b-cwdd747rgi {
    0% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    4.9% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    5% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 1;
    }

    100% {
        top: 0px;
        left: 0px;
        width: 80px;
        height: 80px;
        opacity: 0;
    }
}
/* /Components/Pages/Accueil.razor.rz.scp.css */
/* IMG_Dreamstime_xxl_900 : 191,17 799x615.

   Coordonnées relatives à Zone_Zone_de_Travail, comme dans les sources. Le
   gabarit fait de cette zone le repère de positionnement. */

.img-accueil[b-dji1zq4jto] {
    position: absolute;
    left: 191px;
    top: 17px;
}
/* /Components/Pages/Bdcs.razor.rz.scp.css */
/* ===========================================================================
   Géométrie de PAGE_BDCs, générée depuis ihm/champs-sources.tsv par
   tools/ihm/gen-css.sh. Ne pas retoucher a la main : regenerer.

   Coordonnées relatives à Zone_Zone_de_Travail, comme dans les sources.

   Deux blocs, générés par les commandes suivantes et concaténés :

     tools/ihm/gen-css.sh    PAGE_BDCs page-bdcs 836
     tools/ihm/gen-css.sh -f PAGE_BDCs cell-bdc  CELL_BDC

   ATTENTION — LE PIÈGE QUI A DÉFIGURÉ CET ÉCRAN. La feuille précédente avait
   été produite d'un seul appel, « gen-css.sh PAGE_BDCs page-bdcs 836 CELL_BDC ».
   Les coordonnées en sortaient JUSTES, au pixel, mais rattachées à la mauvaise
   règle : le script écrit « .page-bdcs > * { position: absolute } » alors que
   les champs qu'il énumérait sont enfants de CELL_BDC, d'un niveau plus bas.
   Aucun d'eux n'était donc positionné — « left » et « top » sont sans effet sur
   un élément en flux — et rien n'accrochait le reste de l'habillage.

   À l'écran : la liste s'étirait sur toute sa hauteur au lieu de défiler dans
   son cadre, elle débordait jusqu'en bas de la page, la ligne choisie ne se
   distinguait pas, et les intitulés destinés aux seuls lecteurs d'écran
   s'affichaient en clair. Constaté le 12 août 2026 à la première ouverture du
   site sur les données réelles.

   Le conteneur intermédiaire se génère avec -f, comme sur PAGE_Gestion_des_-
   Factures. Une feuille dont TOUTES les règles portent sur des champs qui ne
   sont pas enfants directs du sélecteur est une feuille inerte : le script ne
   peut pas le voir, il ne connaît pas le balisage.
   =========================================================================== */

.page-bdcs[b-7sisvnrjt1] {
    position: relative;
    height: 836px;
}

.page-bdcs > *[b-7sisvnrjt1] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#CELL_BDC[b-7sisvnrjt1] { left: 8px; top: 1px; width: 1164px; height: 834px; }

/* --- Zone_Zone_de_Travail > CELL_BDC -------------------------------------------------- */

.cell-bdc[b-7sisvnrjt1] {
    /* Positionne par le « > * » du bloc parent : ne pas y redeclarer
       « position », cela l'ecraserait — meme specificite, et cette regle
       vient apres. Voir tools/ihm/gen-css.sh. */
}

.cell-bdc > *[b-7sisvnrjt1] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#TABLE_ListeBDC[b-7sisvnrjt1] { left: 3px; top: 57px; width: 1161px; height: 769px; }
/* ÉLARGIS le 13 août 2026, en recette — même motif que sur la liste des
   factures : boutons image de 48 px portant un intitulé, où « Imprimer » ne
   tenait pas. Ils passent à 72 en gardant le bord droit d'origine, et
   BTN_Actualiser — un vrai bouton image, lui — recule d'autant pour leur
   laisser la place. */
#BTN_NvBDC[b-7sisvnrjt1] { left: 930px; top: 8px; width: 72px; height: 48px; }
#BTN_ModifBDC[b-7sisvnrjt1] { left: 1008px; top: 8px; width: 72px; height: 48px; }
#BTN_ImprimeBDC[b-7sisvnrjt1] { left: 1086px; top: 8px; width: 72px; height: 48px; }
#BTN_Actualiser[b-7sisvnrjt1] { left: 852px; top: 9px; width: 46px; height: 46px; }
#INT_Statut[b-7sisvnrjt1] { left: 369px; top: 17px; width: 510px; height: 30px; }
#LIB_Gestion_des_Bons_de[b-7sisvnrjt1] { left: 6px; top: 21px; width: 349px; height: 23px; }
#CMOD_BDC[b-7sisvnrjt1] { left: 31px; top: 5px; width: 1102px; height: 825px; }


/* ---------------------------------------------------------------------------
   Habillage. Écrit à la main : seules les positions ci-dessus sont générées.
   Charte Porcelaine (16 août 2026) : les couleurs viennent des jetons --e-*
   de wwwroot/app.css — plus aucune valeur en dur ici.

   CELL_BDC porte deux plans : 1 la liste, 2 la fiche (CMOD_BDC, instance de
   MDLC_BDC). Un seul est rendu à la fois, comme le faisait « CELL_BDC..Plan = 2 ».
   La règle #CMOD_BDC ci-dessus ne fixe que le cadre du composant enfant, qui
   porte sa propre géométrie.
   --------------------------------------------------------------------------- */

#LIB_Gestion_des_Bons_de[b-7sisvnrjt1] {
    display: flex;
    align-items: center;
    color: var(--e-titre);
    font-size: 12pt;
    font-weight: var(--e-titre-graisse);
}

/* INT_Statut — groupe d'interrupteurs, rendu en fieldset. Le cadre et la marge
   par défaut du fieldset n'ont pas d'équivalent WEBDEV : le champ n'affichait
   que ses cinq libellés. La réserve à droite tient le bouton « Facturer », qui
   n'a pas d'original (voir plus bas) hors de portée du contenu. */
#INT_Statut[b-7sisvnrjt1] {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 0 70px 0 0;
    border: 0;
    min-width: 0;
}

#INT_Statut label[b-7sisvnrjt1] {
    display: flex;
    align-items: center;
    gap: 4px;
    color: var(--e-texte);
    white-space: nowrap;
    cursor: pointer;
}

#INT_Statut input[b-7sisvnrjt1] { margin: 0; accent-color: var(--e-accent); }

/* TABLE_ListeBDC : douze colonnes, triables.
   « overflow: auto » est ce qui rend le cadre défilant plutôt que débordant :
   la hauteur de 769 px vient des sources, le nombre de bons, lui, ne s'y plie
   pas. */
#TABLE_ListeBDC[b-7sisvnrjt1] {
    overflow: auto;
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-travail);
}

#TABLE_ListeBDC table[b-7sisvnrjt1] {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--e-taille);
}

#TABLE_ListeBDC thead th[b-7sisvnrjt1] {
    position: sticky;
    top: 0;
    z-index: 1;
    padding: var(--e-th-pad);
    background-color: var(--e-th-fond);
    color: var(--e-th-texte);
    /* Le filet appuyé sous l'en-tête est un box-shadow interne : une bordure
       basse disparaît au défilement avec « border-collapse » sous un th
       sticky, le box-shadow reste collé à lui. */
    box-shadow: inset 0 -2px 0 var(--e-th-filet);
    text-align: left;
    white-space: nowrap;
    cursor: pointer;
    user-select: none;
}

#TABLE_ListeBDC thead th:hover[b-7sisvnrjt1] { background-color: var(--e-th-hover); }

#TABLE_ListeBDC tbody td[b-7sisvnrjt1] {
    padding: var(--e-cellule-pad);
    border-bottom: 1px solid var(--e-ligne);
    color: var(--e-texte);
    white-space: nowrap;
}

#TABLE_ListeBDC tbody tr[b-7sisvnrjt1] { cursor: pointer; }

/* Un double-clic selectionne le mot sous le pointeur : sans cela, ouvrir une
   ligne laisse du texte en surbrillance derriere soi. */
#TABLE_ListeBDC tbody tr[b-7sisvnrjt1] { user-select: none; }
#TABLE_ListeBDC tbody tr:hover[b-7sisvnrjt1] { background-color: var(--e-sel); }
#TABLE_ListeBDC tbody tr.selectionnee[b-7sisvnrjt1] { background-color: var(--e-sel); font-weight: bold; }

.page-bdcs .montant[b-7sisvnrjt1] { text-align: right; white-space: nowrap; }
.page-bdcs .vide[b-7sisvnrjt1] { padding: 12px; color: var(--e-sourd); font-style: italic; }

/* Boutons image dans l'original. Faute des visuels, ils portent un intitulé. */
/* Le lien du duplicata partage l'habillage des boutons : c'est un lien parce
   qu'il ouvre un document, mais il occupe un emplacement de bouton. */
.page-bdcs button[b-7sisvnrjt1],
.page-bdcs a.bouton[b-7sisvnrjt1] {
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--e-btn-bord);
    background-color: var(--e-btn-fond);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-family: inherit;
    font-size: var(--e-btn-taille);
    text-align: center;
    text-decoration: none;
    cursor: pointer;
}

.page-bdcs button:hover:not(:disabled)[b-7sisvnrjt1],
.page-bdcs a.bouton:hover[b-7sisvnrjt1] { background-color: var(--e-sel); }

.page-bdcs button:disabled[b-7sisvnrjt1] {
    border-color: var(--e-inactif-bord);
    color: var(--e-inactif-texte);
    cursor: not-allowed;
}

#BTN_NvBDC[b-7sisvnrjt1] {
    background-color: var(--e-prim-fond);
    border-color: var(--e-prim-fond);
    color: var(--e-prim-texte);
}
#BTN_NvBDC:hover:not(:disabled)[b-7sisvnrjt1] { background-color: var(--e-prim-hover); }
#BTN_NvBDC:disabled[b-7sisvnrjt1] { background-color: var(--e-btn-fond); color: var(--e-inactif-texte); }

/* BTN_FacturerBDC n'a pas d'original : l'enchaînement bon -> facture partait
   d'ailleurs dans WEBDEV. Il est posé dans l'espace resté libre entre la fin
   des cinq interrupteurs — environ 380 px sur les 510 de INT_Statut — et
   BTN_Actualiser, qui commence à 919. */
#BTN_FacturerBDC[b-7sisvnrjt1] { left: 772px; top: 8px; width: 72px; height: 48px; }

/* --- Messages ---------------------------------------------------------------- */

/* Ancré au bas de CELL_BDC plutôt qu'à un « top » calculé : sa hauteur dépend
   du texte, et un ordonnancement par le haut le fait déborder de la cellule dès
   que le message tient sur deux lignes. */
.message[b-7sisvnrjt1] {
    left: 3px;
    bottom: 2px;
    width: 1161px;
    height: auto;
    padding: 4px 8px;
    border-radius: var(--e-btn-rayon);
    font-size: var(--e-taille);
}

.message.succes[b-7sisvnrjt1] { border: 1px solid var(--e-succes); background-color: var(--e-succes-fond); color: var(--e-succes); }
.message.erreur[b-7sisvnrjt1] { border: 1px solid var(--e-erreur); background-color: var(--e-erreur-fond); color: var(--e-erreur); }

.visuellement-cache[b-7sisvnrjt1] {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}
/* /Components/Pages/Connexion.razor.rz.scp.css */
/* ===========================================================================
   Géométrie de PAGE_Login, reprise au pixel depuis le bloc « properties » de
   PAGE_Login.wwh. Les positions WEBDEV sont absolues dans un plan de 782x592 ;
   le plan est mis à l'échelle plutôt que redécoupé, pour que la page reste
   comparable à l'original pendant la recette.

   Couleurs : WEBDEV les stocke en BGR. 6052956 -> #5C5C5C, 5658198 -> #565656,
   8388608 -> #000080. Elles concordent avec PAGE_Login_style.css déployé —
   c'est le relevé de l'ORIGINE.

   Charte Porcelaine (16 août 2026) : les couleurs viennent des jetons --e-*
   de wwwroot/app.css. Les deux visuels d'origine (logo, bouton identifier)
   restent tels quels.
   =========================================================================== */

.page-login[b-mq4d71inu1] {
    position: relative;
    width: 782px;
    height: 592px;
    margin: 0 auto;
    background-color: var(--e-panneau);   /* l'origine : 14737632 -> #E0E0E0 */
    font-family: var(--e-police);
    font-size: var(--e-taille);
}

/* ZTR_Gestion_du_patrimoine_d_Affichage_Publicitaire : 50,177 672x40 */
.ztr-titre[b-mq4d71inu1] {
    position: absolute;
    left: 50px;
    top: 177px;
    width: 672px;
    height: 40px;
    color: var(--e-texte);
    text-align: center;
    font-size: 14pt;
    line-height: 40px;
}

/* IMG_Kelpano_323x61 : 224,82 323x60 */
.img-logo[b-mq4d71inu1] {
    position: absolute;
    left: 224px;
    top: 82px;
}

/* Les trois champs de saisie : largeur totale 462, dont 289 de zone de saisie.
   Les 173 px restants sont la gouttière de libellé réservée par WEBDEV. */
.champ[b-mq4d71inu1] {
    position: absolute;
    left: 155px;
    width: 462px;
    display: flex;
    align-items: center;
    gap: 0;
}

.champ label[b-mq4d71inu1] {
    width: 173px;
    padding-right: 10px;
    /* À gauche, comme l'original — relevé en production le 24 août 2026 ;
       ils étaient calés à droite tant qu'on croyait la gouttière vide. */
    text-align: left;
    color: var(--e-texte);
}

.champ input[b-mq4d71inu1] {
    width: 289px;
    box-sizing: border-box;
    color: var(--e-texte);
    background-color: var(--e-champ-fond);
    border: 1px solid var(--e-champ-bord);
    border-radius: var(--e-champ-rayon);
    font-family: inherit;
    font-size: inherit;
    padding: 0 4px;
}

.champ-login[b-mq4d71inu1]  { top: 261px; height: 23px; }
.champ-mdp[b-mq4d71inu1]    { top: 290px; height: 25px; }
.champ-etab[b-mq4d71inu1]   { top: 321px; height: 25px; }

.champ-login input[b-mq4d71inu1] { height: 22px; }
.champ-mdp   input[b-mq4d71inu1] { height: 24px; }
.champ-etab  input[b-mq4d71inu1] { height: 24px; }

/* btnValider : 552,367 64x64, bouton image \Img\identifier.png */
.btn-valider[b-mq4d71inu1] {
    position: absolute;
    left: 552px;
    top: 367px;
    width: 64px;
    height: 64px;
    padding: 0;
    border: 0;
    cursor: pointer;
    background: url('img/identifier.png') no-repeat center / 64px 64px;
}

.btn-valider:hover[b-mq4d71inu1],
.btn-valider:focus-visible[b-mq4d71inu1] {
    background-image: url('img/identifier_S.png');
}

/* LIB_Copyright_SAS_SABAUR : 1,537 769x43 — blanc sur #000080 dans l'original,
   le bandeau porte désormais le bleu d'action de la charte. */
.lib-copyright[b-mq4d71inu1] {
    position: absolute;
    left: 1px;
    top: 537px;
    width: 769px;
    height: 43px;
    box-sizing: border-box;
    background-color: var(--e-prim-fond);
    color: var(--e-prim-texte);
    font-family: var(--e-police);
    font-weight: bold;
    text-align: right;
    padding: 5px 10px 0 0;
}

/* Messages — sans équivalent WEBDEV : l'original ouvrait une boîte de dialogue
   modale (Erreur), remplacée ici par un bloc dans le flux de la page. */
.erreur[b-mq4d71inu1] {
    position: absolute;
    left: 155px;
    top: 440px;
    width: 462px;
    padding: 8px 10px;
    background-color: var(--e-erreur-fond);
    border: 1px solid var(--e-erreur);
    color: var(--e-erreur);
    border-radius: var(--e-btn-rayon);
}

.erreur strong[b-mq4d71inu1] { display: block; }

.messages-validation[b-mq4d71inu1] {
    position: absolute;
    left: 155px;
    top: 380px;
    width: 380px;
    color: var(--e-erreur);
}

.messages-validation ul[b-mq4d71inu1] { margin: 0; padding-left: 18px; }

.visuellement-cache[b-mq4d71inu1] {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}
/* /Components/Pages/Factures.razor.rz.scp.css */
/* ===========================================================================
   Géométrie de PAGE_Gestion_des_Factures, générée depuis ihm/champs-sources.tsv par
   tools/ihm/gen-css.sh. Ne pas retoucher a la main : regenerer.

   Coordonnées relatives à Zone_Zone_de_Travail, comme dans les sources.

   Deux blocs, générés par les commandes suivantes et concaténés :

     tools/ihm/gen-css.sh    PAGE_Gestion_des_Factures page-factures 854
     tools/ihm/gen-css.sh -f PAGE_Gestion_des_Factures cell-facture  CELL_Facture
   =========================================================================== */

.page-factures[b-g15n3v58bk] {
    position: relative;
    height: 854px;
}

.page-factures > *[b-g15n3v58bk] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#CELL_Facture[b-g15n3v58bk] { left: 8px; top: 1px; width: 1164px; height: 852px; }

/* --- Zone_Zone_de_Travail > CELL_Facture -------------------------------------------------- */

.cell-facture[b-g15n3v58bk] {
    /* Positionne par le « > * » du bloc parent : ne pas y redeclarer
       « position », cela l'ecraserait — meme specificite, et cette regle
       vient apres. Voir tools/ihm/gen-css.sh. */
}

.cell-facture > *[b-g15n3v58bk] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#TABLE_ListeFacture[b-g15n3v58bk] { left: 3px; top: 57px; width: 1161px; height: 787px; }
/* ÉLARGIS le 13 août 2026, en recette. Ces trois-là sont des boutons IMAGE de
   48 × 48 dans l'original ; faute des visuels, ils portent un intitulé — et
   « Imprimer » ne tenait pas dans 48 px. Ils passent à 72, en gardant leur bord
   droit d'origine (1158) : ce sont eux qui se décalent vers la gauche, dans
   l'espace vide, et non le reste de la barre. */
#BTN_NvFacture[b-g15n3v58bk] { left: 930px; top: 8px; width: 72px; height: 48px; }
#BTN_ModifFacture[b-g15n3v58bk] { left: 1008px; top: 8px; width: 72px; height: 48px; }
#BTN_ImprimeFacture[b-g15n3v58bk] { left: 1086px; top: 8px; width: 72px; height: 48px; }
#BTN_Actualiser[b-g15n3v58bk] { left: 397px; top: 9px; width: 46px; height: 46px; }
#LIB_Gestion_des_Factures[b-g15n3v58bk] { left: 6px; top: 21px; width: 229px; height: 23px; }
#CMOD_Facture[b-g15n3v58bk] { left: 31px; top: 5px; width: 1102px; height: 823px; }
#SAI_Année[b-g15n3v58bk] { left: 258px; top: 21px; width: 125px; height: 23px; }
#BTN_Stat[b-g15n3v58bk] { left: 793px; top: 9px; width: 46px; height: 46px; }


/* ---------------------------------------------------------------------------
   Habillage. Écrit à la main : seules les positions ci-dessus sont générées.
   Charte Porcelaine (16 août 2026) : les couleurs viennent des jetons --e-*
   de wwwroot/app.css — plus aucune valeur en dur ici.

   CELL_Facture porte deux plans : 1 la liste, 2 la fiche (CMOD_Facture,
   instance de MDLC_Facture). Un seul est rendu à la fois, comme le faisait
   « CELL_Facture..Plan = 2 ». La règle #CMOD_Facture ci-dessus ne fixe que le
   cadre du composant enfant, qui porte sa propre géométrie.
   --------------------------------------------------------------------------- */

#LIB_Gestion_des_Factures[b-g15n3v58bk] {
    display: flex;
    align-items: center;
    color: var(--e-titre);
    font-size: 12pt;
    font-weight: var(--e-titre-graisse);
}

#SAI_Année[b-g15n3v58bk] {
    padding: 2px 4px;
    border: 1px solid var(--e-champ-bord);
    background-color: var(--e-champ-fond);
    border-radius: var(--e-champ-rayon);
    color: var(--e-texte);
    font-family: inherit;
    font-size: inherit;
}

/* TABLE_ListeFacture : neuf colonnes, triables. */
#TABLE_ListeFacture[b-g15n3v58bk] {
    overflow: auto;
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-travail);
}

#TABLE_ListeFacture table[b-g15n3v58bk] {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--e-taille);
}

#TABLE_ListeFacture thead th[b-g15n3v58bk] {
    position: sticky;
    top: 0;
    z-index: 1;
    padding: var(--e-th-pad);
    background-color: var(--e-th-fond);
    color: var(--e-th-texte);
    /* Filet appuyé sous l'en-tête : box-shadow interne — une bordure basse
       disparaît au défilement sous un th sticky avec « border-collapse ». */
    box-shadow: inset 0 -2px 0 var(--e-th-filet);
    text-align: left;
    white-space: nowrap;
    cursor: pointer;
    user-select: none;
}

#TABLE_ListeFacture thead th:hover[b-g15n3v58bk] { background-color: var(--e-th-hover); }

#TABLE_ListeFacture tbody td[b-g15n3v58bk] {
    padding: var(--e-cellule-pad);
    border-bottom: 1px solid var(--e-ligne);
    color: var(--e-texte);
}

/* Le numéro de facture ne se coupe jamais. La largeur de colonne n'est qu'une
   indication — le tableau occupe 100 % et le navigateur redistribue —, donc
   sans cette règle « 07-0061-2026 » repasse à la ligne dès que les colonnes
   voisines s'allongent. Demandé en recette le 13 août 2026. */
#TABLE_ListeFacture tbody td:first-child[b-g15n3v58bk],
#TABLE_ListeFacture thead th:first-child[b-g15n3v58bk] { white-space: nowrap; }

#TABLE_ListeFacture tbody tr[b-g15n3v58bk] { cursor: pointer; }

/* Un double-clic selectionne le mot sous le pointeur : sans cela, ouvrir une
   ligne laisse du texte en surbrillance derriere soi. */
#TABLE_ListeFacture tbody tr[b-g15n3v58bk] { user-select: none; }
#TABLE_ListeFacture tbody tr:hover[b-g15n3v58bk] { background-color: var(--e-sel); }
#TABLE_ListeFacture tbody tr.selectionnee[b-g15n3v58bk] { background-color: var(--e-sel); font-weight: bold; }

.page-factures .montant[b-g15n3v58bk] { text-align: right; white-space: nowrap; }
.page-factures .vide[b-g15n3v58bk] { padding: 12px; color: var(--e-sourd); font-style: italic; }

/* Boutons image dans l'original. Faute des visuels, ils portent un intitulé. */
/* Le lien du duplicata partage l'habillage des boutons : c'est un lien parce
   qu'il ouvre un document — clic du milieu, nouvel onglet, aucun JavaScript —
   mais il occupe un emplacement de bouton et doit s'y ressembler. */
.page-factures button[b-g15n3v58bk],
.page-factures a.bouton[b-g15n3v58bk] {
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--e-btn-bord);
    background-color: var(--e-btn-fond);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-family: inherit;
    font-size: var(--e-btn-taille);
    text-align: center;
    text-decoration: none;
    cursor: pointer;
}

.page-factures button:hover:not(:disabled)[b-g15n3v58bk],
.page-factures a.bouton:hover[b-g15n3v58bk] { background-color: var(--e-sel); }

/* Le lien d'édition du rapport, dans son titre. Sans équivalent WEBDEV :
   l'original n'offrait que l'impression, jamais l'affichage. */
.page-factures #LIEN_RapportCaPdf[b-g15n3v58bk] {
    margin-left: 12px;
    padding: 1px 6px;
    border: 1px solid var(--e-btn-bord);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-size: var(--e-btn-taille);
    text-decoration: none;
    vertical-align: middle;
}

.page-factures #LIEN_RapportCaPdf:hover[b-g15n3v58bk] { background-color: var(--e-sel); }

.page-factures button:disabled[b-g15n3v58bk] {
    border-color: var(--e-inactif-bord);
    color: var(--e-inactif-texte);
    cursor: not-allowed;
}

#BTN_NvFacture[b-g15n3v58bk] {
    background-color: var(--e-prim-fond);
    border-color: var(--e-prim-fond);
    color: var(--e-prim-texte);
}
#BTN_NvFacture:hover:not(:disabled)[b-g15n3v58bk] { background-color: var(--e-prim-hover); }
#BTN_NvFacture:disabled[b-g15n3v58bk] { background-color: var(--e-btn-fond); color: var(--e-inactif-texte); }

/* --- Factur-X ----------------------------------------------------------------
   Sans équivalent WEBDEV : lot 8, sous-lot E (17 septembre 2026). Positions
   ÉCRITES À LA MAIN, faute de source à régénérer — le bouton prend la place
   libre à gauche de BTN_NvFacture, au même pas de 78 px que ses trois voisins.
   Le panneau se pose sur la liste, sous la barre, aligné à droite.
   --------------------------------------------------------------------------- */

#BTN_FacturX[b-g15n3v58bk] { left: 852px; top: 8px; width: 72px; height: 48px; }

#CONSTAT_FacturX[b-g15n3v58bk] {
    left: 558px;
    top: 62px;
    width: 600px;
    max-height: 560px;
    overflow: auto;
    /* Au-dessus de l'en-tête collant de la liste (z-index 1). */
    z-index: 5;
    padding: 12px 14px;
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-travail);
    border-radius: var(--e-btn-rayon);
    box-shadow: 0 4px 16px rgb(0 0 0 / 18%);
    color: var(--e-texte);
    font-size: var(--e-taille);
}

#CONSTAT_FacturX h2[b-g15n3v58bk] {
    margin: 0 0 8px;
    color: var(--e-titre);
    font-size: 11pt;
}

#CONSTAT_FacturX p[b-g15n3v58bk] { margin: 0 0 6px; }
#CONSTAT_FacturX .verdict[b-g15n3v58bk] { padding: 4px 8px; font-weight: bold; }
#CONSTAT_FacturX .verdict.succes[b-g15n3v58bk] { border: 1px solid var(--e-succes); background-color: var(--e-succes-fond); color: var(--e-succes); }
#CONSTAT_FacturX .verdict.erreur[b-g15n3v58bk] { border: 1px solid var(--e-erreur); background-color: var(--e-erreur-fond); color: var(--e-erreur); }
#CONSTAT_FacturX .recommande[b-g15n3v58bk] { margin-top: 10px; color: var(--e-sourd); }

#CONSTAT_FacturX ul[b-g15n3v58bk] {
    margin: 0 0 6px;
    padding-left: 18px;
}

#CONSTAT_FacturX li[b-g15n3v58bk] { margin-bottom: 4px; }

#CONSTAT_FacturX .actions[b-g15n3v58bk] {
    display: flex;
    justify-content: flex-end;
    gap: 6px;
    margin-top: 10px;
}

#CONSTAT_FacturX .actions button[b-g15n3v58bk],
#CONSTAT_FacturX .actions a.bouton[b-g15n3v58bk] {
    height: 30px;
    padding: 0 12px;
}

#LIEN_FacturX[b-g15n3v58bk] {
    background-color: var(--e-prim-fond);
    border-color: var(--e-prim-fond);
    color: var(--e-prim-texte);
}
#LIEN_FacturX:hover[b-g15n3v58bk] { background-color: var(--e-prim-hover); }

/* --- Rapport de chiffre d'affaires ------------------------------------------
   Sans équivalent WEBDEV à l'écran : BTN_Stat produisait directement un PDF.
   Le calcul est transposé, l'édition relève du lot 6.
   --------------------------------------------------------------------------- */

#RAPPORT_CA[b-g15n3v58bk] {
    left: 3px;
    top: 57px;
    width: 1161px;
    height: 787px;
    overflow: auto;
    padding: 12px;
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-travail);
}

#RAPPORT_CA h2[b-g15n3v58bk] {
    margin: 0 0 10px;
    color: var(--e-titre);
    font-size: 11pt;
}

#RAPPORT_CA table[b-g15n3v58bk] {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--e-taille);
}

#RAPPORT_CA th[b-g15n3v58bk] {
    padding: var(--e-th-pad);
    background-color: var(--e-th-fond);
    color: var(--e-th-texte);
    box-shadow: inset 0 -2px 0 var(--e-th-filet);
    text-align: right;
    white-space: nowrap;
}

#RAPPORT_CA th:first-child[b-g15n3v58bk] { text-align: left; }

#RAPPORT_CA td[b-g15n3v58bk] {
    padding: var(--e-cellule-pad);
    border-bottom: 1px solid var(--e-ligne);
    color: var(--e-texte);
    text-align: right;
    white-space: nowrap;
}

#RAPPORT_CA td:first-child[b-g15n3v58bk] { text-align: left; }

#RAPPORT_CA tfoot td[b-g15n3v58bk] {
    /* La ligne des totaux garde son poids par le trait et la graisse, pas par
       la couleur d'action — l'accent est réservé à ce qui se clique. */
    border-top: 2px solid var(--e-th-filet);
    border-bottom: 0;
    color: var(--e-titre);
    font-weight: bold;
}

/* --- Messages ---------------------------------------------------------------- */

.message[b-g15n3v58bk] {
    left: 3px;
    top: 848px;
    width: 1161px;
    height: auto;
    padding: 4px 8px;
    font-size: var(--e-taille);
}

.message.succes[b-g15n3v58bk] { border: 1px solid var(--e-succes); background-color: var(--e-succes-fond); color: var(--e-succes); }
.message.erreur[b-g15n3v58bk] { border: 1px solid var(--e-erreur); background-color: var(--e-erreur-fond); color: var(--e-erreur); }

.visuellement-cache[b-g15n3v58bk] {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}
/* /Components/Pages/FicheBdc.razor.rz.scp.css */
/* ===========================================================================
   Géométrie de MDLC_BDC, générée depuis ihm/champs-sources.tsv par
   tools/ihm/gen-css.sh. Ne pas retoucher a la main : regenerer.

   Commandes qui l'ont produite :
     tools/ihm/gen-css.sh    MDLC_BDC fiche-bdc    803
     tools/ihm/gen-css.sh -f MDLC_BDC cell-entete  CELL_Entete
     tools/ihm/gen-css.sh -f MDLC_BDC cell-lignes  CELL_LigneBDC
     tools/ihm/gen-css.sh -f MDLC_BDC cell-bas     CELL_BasDeBDC

   Coordonnées relatives à MDLC_BDC, comme dans les sources.
   =========================================================================== */

.fiche-bdc[b-uc55dunti7] {
    position: relative;
    height: 803px;
}

.fiche-bdc > *[b-uc55dunti7] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#CELL_Entete[b-uc55dunti7] { left: 9px; top: 12px; width: 1085px; height: 286px; }
#CELL_BasDeBDC[b-uc55dunti7] { left: 9px; top: 750px; width: 1083px; height: 43px; }
#CELL_LigneBDC[b-uc55dunti7] { left: 9px; top: 304px; width: 1088px; height: 439px; }
#POPUP_RechTiers[b-uc55dunti7] { width: 700px; height: 500px; }
#POPUP_SelFicXLS[b-uc55dunti7] { width: 945px; height: 796px; }

/* --- MDLC_BDC > CELL_Entete -------------------------------------------------- */

.cell-entete[b-uc55dunti7] {
    /* Positionne par le « > * » du bloc parent : ne pas y redeclarer
       « position », cela l'ecraserait — meme specificite, et cette regle
       vient apres. Voir tools/ihm/gen-css.sh. */
}

.cell-entete > *[b-uc55dunti7] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#SEL_Mandataire_Payeur[b-uc55dunti7] { left: 808px; top: 123px; width: 123px; height: 34px; }
#SAI_Annonceur[b-uc55dunti7] { left: 3px; top: 45px; width: 291px; height: 23px; }
#SAI_Mandataire[b-uc55dunti7] { left: 2px; top: 129px; width: 292px; height: 23px; }
#LIGNE_Ligne1[b-uc55dunti7] { top: 218px; width: 1083px; height: 1px; }
#LIGNE_Ligne2[b-uc55dunti7] { top: 177px; width: 1083px; height: 1px; }
#SAI_NumBDC[b-uc55dunti7] { left: 4px; top: 187px; width: 241px; height: 23px; }
#SAI_REFERENCE_CLIENT[b-uc55dunti7] { left: 4px; top: 226px; width: 344px; height: 23px; }
#COMBO_Type_de_Vente[b-uc55dunti7] { left: 4px; top: 255px; width: 344px; height: 24px; }
#SAI_Commentaires[b-uc55dunti7] { left: 354px; top: 225px; width: 729px; height: 51px; }
#BTN_RechTiers[b-uc55dunti7] { left: 300px; top: 32px; width: 48px; height: 48px; }
#BTN_RechMandat[b-uc55dunti7] { left: 300px; top: 116px; width: 48px; height: 48px; }
#COMBO_ActeurBDC[b-uc55dunti7] { left: 533px; top: 186px; width: 374px; height: 24px; }
#SAI_AdrBDC[b-uc55dunti7] { left: 357px; top: 29px; width: 292px; height: 55px; }
#SAI_AdrMan[b-uc55dunti7] { left: 357px; top: 113px; width: 373px; height: 55px; }
#SAI_AdrFact[b-uc55dunti7] { left: 715px; top: 29px; width: 292px; height: 55px; }
#SAI_Date_BDC[b-uc55dunti7] { left: 292px; top: 186px; width: 204px; height: 24px; }
#BTN_AnnulerFicheBDC[b-uc55dunti7] { left: 1019px; top: 122px; width: 47px; height: 49px; }
#BTN_ValiderFicheBDC[b-uc55dunti7] { left: 966px; top: 123px; width: 47px; height: 48px; }
#LIB_Adresse_BDC[b-uc55dunti7] { left: 365px; top: 5px; width: 100px; height: 20px; }
#LIB_Adresse_Facturation[b-uc55dunti7] { left: 726px; top: 5px; width: 152px; height: 20px; }
#BTN_RechTiers1[b-uc55dunti7] { left: 661px; top: 32px; width: 48px; height: 48px; }
#LIB_Adresse_Facturation1[b-uc55dunti7] { left: 365px; top: 92px; width: 152px; height: 20px; }

/* --- MDLC_BDC > CELL_LigneBDC -------------------------------------------------- */

.cell-lignes[b-uc55dunti7] {
    /* Positionne par le « > * » du bloc parent : ne pas y redeclarer
       « position », cela l'ecraserait — meme specificite, et cette regle
       vient apres. Voir tools/ihm/gen-css.sh. */
}

.cell-lignes > *[b-uc55dunti7] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#BTN_AjLig3[b-uc55dunti7] { left: 4px; top: 401px; width: 30px; height: 30px; }
#BTN_SupLig3[b-uc55dunti7] { left: 42px; top: 401px; width: 30px; height: 30px; }
#BTN_MontLig2[b-uc55dunti7] { left: 118px; top: 401px; width: 30px; height: 30px; }
#BTN_DescLig2[b-uc55dunti7] { left: 156px; top: 401px; width: 30px; height: 30px; }
#LIB_Sous_Total2[b-uc55dunti7] { left: 825px; top: 382px; width: 69px; height: 14px; }
#LIB_TVA2[b-uc55dunti7] { left: 825px; top: 399px; width: 27px; height: 14px; }
#LIB_TOTAL2[b-uc55dunti7] { left: 825px; top: 416px; width: 48px; height: 14px; }
#LIB_ValTVA2[b-uc55dunti7] { left: 981px; top: 399px; width: 89px; height: 14px; }
#LIB_TotTTC2[b-uc55dunti7] { left: 963px; top: 416px; width: 107px; height: 14px; }
#LIB_ST_HT4[b-uc55dunti7] { left: 981px; top: 382px; width: 89px; height: 14px; }
#BTN_ImportBDC[b-uc55dunti7] { left: 208px; top: 401px; width: 30px; height: 30px; }
#ZR_LigneBDC[b-uc55dunti7] { left: 6px; top: 19px; width: 1066px; height: 51px; }
#SAI_sLC_Code[b-uc55dunti7] { left: 8px; top: 50px; width: 96px; height: 22px; }
#SAI_sLC_Libellé[b-uc55dunti7] { left: 108px; top: 50px; width: 349px; height: 56px; }
#SAI_MoLC_Loyer[b-uc55dunti7] { left: 616px; top: 202px; width: 107px; height: 22px; }
#SAI_MoLC_TauxTVA[b-uc55dunti7] { left: 752px; top: 247px; width: 68px; height: 22px; }
#SAI_MoLC_TTC[b-uc55dunti7] { left: 844px; top: 247px; width: 107px; height: 22px; }
#BTN_AjoutLigne[b-uc55dunti7] { left: 901px; top: 405px; width: 80px; height: 24px; }
#BTN_AnnulerSaisieLigne[b-uc55dunti7] { left: 987px; top: 405px; width: 80px; height: 24px; }
#BTN_EditLigne[b-uc55dunti7] { left: 80px; top: 401px; width: 30px; height: 30px; }
#LIB_Code[b-uc55dunti7] { left: 74px; top: 4px; width: 29px; height: 11px; }
#LIB_Libellé_Complément[b-uc55dunti7] { left: 251px; top: 4px; width: 104px; height: 11px; }
#LIB_Qté[b-uc55dunti7] { left: 514px; top: 4px; width: 20px; height: 11px; }
#LIB_Prix_unit[b-uc55dunti7] { left: 592px; top: 4px; width: 50px; height: 11px; }
#LIB_Remise[b-uc55dunti7] { left: 691px; top: 4px; width: 40px; height: 11px; }
#LIB_Total_Ligne_HT[b-uc55dunti7] { left: 775px; top: 4px; width: 78px; height: 11px; }
#LIB_Taux_TVA[b-uc55dunti7] { left: 877px; top: 4px; width: 54px; height: 11px; }
#LIB_Mnt_TVA[b-uc55dunti7] { left: 970px; top: 4px; width: 48px; height: 11px; }
#LIB_Code1[b-uc55dunti7] { left: 42px; top: 23px; width: 29px; height: 11px; }
#LIB_Libellé[b-uc55dunti7] { left: 264px; top: 23px; width: 37px; height: 11px; }
#LIB_Ville[b-uc55dunti7] { left: 523px; top: 23px; width: 26px; height: 11px; }
#LIB_Date_de_Départ[b-uc55dunti7] { left: 630px; top: 95px; width: 79px; height: 11px; }
#LIB_Date_de_Fin[b-uc55dunti7] { left: 639px; top: 143px; width: 60px; height: 11px; }
#LIB_Durée[b-uc55dunti7] { left: 769px; top: 143px; width: 34px; height: 11px; }
#LIB_Taux_TVA1[b-uc55dunti7] { left: 759px; top: 234px; width: 54px; height: 11px; }
#LIB_Total_TTC[b-uc55dunti7] { left: 870px; top: 234px; width: 54px; height: 11px; }
#LIB_Code2[b-uc55dunti7] { left: 45px; top: 26px; width: 29px; height: 11px; }
#LIB_Réseau[b-uc55dunti7] { left: 246px; top: 26px; width: 40px; height: 11px; }
#SAI_sAT_Code[b-uc55dunti7] { left: 8px; top: 38px; width: 96px; height: 22px; }
#LIB_Code3[b-uc55dunti7] { left: 34px; top: 85px; width: 29px; height: 11px; }
#LIB_Libellé_Complément3[b-uc55dunti7] { left: 222px; top: 85px; width: 104px; height: 11px; }
#LIB_Qté3[b-uc55dunti7] { left: 487px; top: 85px; width: 20px; height: 11px; }
#LIB_Prix_unit3[b-uc55dunti7] { left: 567px; top: 85px; width: 50px; height: 11px; }
#LIB_Remise3[b-uc55dunti7] { left: 674px; top: 85px; width: 40px; height: 11px; }
#LIB_Total_Ligne_HT3[b-uc55dunti7] { left: 773px; top: 85px; width: 78px; height: 11px; }
#LIB_Taux_TVA3[b-uc55dunti7] { left: 885px; top: 85px; width: 54px; height: 11px; }
#LIB_Mnt_TVA3[b-uc55dunti7] { left: 979px; top: 85px; width: 48px; height: 11px; }
#SAI_SLIgneFacture_Code2[b-uc55dunti7] { top: 112px; width: 96px; height: 22px; }
#SAI_SLIgneFacture_Libellé2[b-uc55dunti7] { left: 100px; top: 112px; width: 349px; height: 22px; }
#SAI_XLIgneFacture_Qte2[b-uc55dunti7] { left: 453px; top: 112px; width: 89px; height: 22px; }
#SAI_MoLIgneFacture_PUnitaire2[b-uc55dunti7] { left: 546px; top: 112px; width: 93px; height: 22px; }
#SAI_XLIgneFacture_Remise2[b-uc55dunti7] { left: 643px; top: 112px; width: 103px; height: 22px; }
#SAI_MoLIgneFacture_TotLigne2[b-uc55dunti7] { left: 750px; top: 112px; width: 124px; height: 22px; }
#SAI_MoLIgneFacture_TauxTVA2[b-uc55dunti7] { left: 878px; top: 112px; width: 68px; height: 22px; }
#SAI_MoLIgneFacture_MntTVA2[b-uc55dunti7] { left: 950px; top: 112px; width: 107px; height: 22px; }
#SAI_SLIgneFacture_Complément2[b-uc55dunti7] { left: 100px; top: 132px; width: 349px; height: 62px; }
#SAI_sAT_Libellé[b-uc55dunti7] { left: 108px; top: 38px; width: 317px; height: 22px; }
#BTN_AjoutLigneAT[b-uc55dunti7] { left: 910px; top: 403px; width: 80px; height: 24px; }
#BTN_AnnulerSaisieLigneAT[b-uc55dunti7] { left: 996px; top: 403px; width: 80px; height: 24px; }
#LIB_Formulaire_LC[b-uc55dunti7] { left: 935px; top: 365px; width: 100px; height: 20px; }
#LIB_Formulaire_AT[b-uc55dunti7] { left: 10px; top: 397px; width: 100px; height: 20px; }
#LIB_Formulaire_Régie[b-uc55dunti7] { left: 697px; top: 389px; width: 100px; height: 20px; }
#SAI_sLC_Ville[b-uc55dunti7] { left: 463px; top: 50px; width: 147px; height: 22px; }
#LIB_Loyer[b-uc55dunti7] { left: 652px; top: 190px; width: 34px; height: 11px; }
#LIB_TLPE[b-uc55dunti7] { left: 769px; top: 190px; width: 34px; height: 11px; }
#LIB_Tech[b-uc55dunti7] { left: 880px; top: 190px; width: 34px; height: 11px; }
#INT_ALaPose[b-uc55dunti7] { left: 763px; top: 110px; width: 47px; height: 26px; }
#SAI_dLC_Depart[b-uc55dunti7] { left: 621px; top: 110px; width: 96px; height: 22px; }
#SAI_dLC_Fin[b-uc55dunti7] { left: 621px; top: 155px; width: 96px; height: 22px; }
#SAI_sLC_Durée[b-uc55dunti7] { left: 724px; top: 155px; width: 124px; height: 22px; }
#SAI_MoLC_TLPE[b-uc55dunti7] { left: 733px; top: 202px; width: 107px; height: 22px; }
#SAI_MoLC_Tech[b-uc55dunti7] { left: 844px; top: 202px; width: 107px; height: 22px; }
#LIB_Total_HT[b-uc55dunti7] { left: 645px; top: 234px; width: 48px; height: 11px; }
#SAI_MoLC_TotHT[b-uc55dunti7] { left: 616px; top: 247px; width: 107px; height: 22px; }
#BTN_AffecteLC[b-uc55dunti7] { left: 89px; top: 264px; width: 80px; height: 24px; }
#BTN_CalcDurée[b-uc55dunti7] { left: 854px; top: 153px; width: 26px; height: 26px; }
#LIB_Format[b-uc55dunti7] { left: 658px; top: 23px; width: 40px; height: 11px; }
#SAI_sLC_Format[b-uc55dunti7] { left: 616px; top: 50px; width: 124px; height: 22px; }
#LIB_Ville1[b-uc55dunti7] { left: 507px; top: 26px; width: 26px; height: 11px; }
#LIB_Format1[b-uc55dunti7] { left: 658px; top: 26px; width: 40px; height: 11px; }
#SAI_sAT_Ville[b-uc55dunti7] { left: 431px; top: 38px; width: 179px; height: 22px; }
#SAI_sAT_Format[b-uc55dunti7] { left: 616px; top: 38px; width: 124px; height: 22px; }
#LIB_Date_de_Départ1[b-uc55dunti7] { left: 440px; top: 64px; width: 79px; height: 11px; }
#SAI_dAT_Départ[b-uc55dunti7] { left: 431px; top: 76px; width: 96px; height: 22px; }
#LIB_Durée1[b-uc55dunti7] { left: 680px; top: 64px; width: 34px; height: 11px; }
#SAI_sAT_Durée[b-uc55dunti7] { left: 635px; top: 76px; width: 124px; height: 22px; }
#LIB_Tarif_Brut[b-uc55dunti7] { left: 457px; top: 104px; width: 54px; height: 11px; }
#LIB_Tarif_Net[b-uc55dunti7] { left: 573px; top: 104px; width: 49px; height: 11px; }
#SAI_moAT_TarifBrut[b-uc55dunti7] { left: 431px; top: 116px; width: 107px; height: 22px; }
#SAI_MoAT_Tarif_Net[b-uc55dunti7] { left: 544px; top: 116px; width: 107px; height: 22px; }
#LIB_Taux_TVA2[b-uc55dunti7] { left: 764px; top: 104px; width: 54px; height: 11px; }
#LIB_Total_TTC1[b-uc55dunti7] { left: 857px; top: 104px; width: 54px; height: 11px; }
#SAI_MoAT_TauxTVA[b-uc55dunti7] { left: 757px; top: 116px; width: 68px; height: 22px; }
#SAI_MoAT_TTC[b-uc55dunti7] { left: 831px; top: 116px; width: 107px; height: 22px; }
#LIB_Nb_de_Faces[b-uc55dunti7] { left: 761px; top: 26px; width: 63px; height: 11px; }
#SAI_nAT_Faces[b-uc55dunti7] { left: 746px; top: 38px; width: 92px; height: 22px; }
#LIB_Frais[b-uc55dunti7] { left: 690px; top: 104px; width: 29px; height: 11px; }
#SAI_MoAT_Frais[b-uc55dunti7] { left: 657px; top: 116px; width: 94px; height: 22px; }
#BTN_AffecteAT[b-uc55dunti7] { left: 27px; top: 298px; width: 80px; height: 24px; }
#LIB_Code4[b-uc55dunti7] { left: 43px; top: 86px; width: 29px; height: 11px; }
#LIB_Libellé_Complément4[b-uc55dunti7] { left: 231px; top: 86px; width: 104px; height: 11px; }
#LIB_Qté4[b-uc55dunti7] { left: 496px; top: 86px; width: 20px; height: 11px; }
#LIB_Prix_unit4[b-uc55dunti7] { left: 576px; top: 86px; width: 50px; height: 11px; }
#LIB_Remise4[b-uc55dunti7] { left: 683px; top: 86px; width: 40px; height: 11px; }
#LIB_Total_Ligne_HT4[b-uc55dunti7] { left: 782px; top: 86px; width: 78px; height: 11px; }
#LIB_Taux_TVA4[b-uc55dunti7] { left: 894px; top: 86px; width: 54px; height: 11px; }
#LIB_Mnt_TVA4[b-uc55dunti7] { left: 988px; top: 86px; width: 48px; height: 11px; }
#SAI_sAutre_Code[b-uc55dunti7] { left: 9px; top: 113px; width: 96px; height: 22px; }
#SAI_sAutre_Libellé[b-uc55dunti7] { left: 109px; top: 113px; width: 349px; height: 22px; }
#SAI_moAutre_Quantité[b-uc55dunti7] { left: 462px; top: 113px; width: 89px; height: 22px; }
#SAI_moAutre_PU[b-uc55dunti7] { left: 555px; top: 113px; width: 93px; height: 22px; }
#SAI_moAutre_Remise[b-uc55dunti7] { left: 652px; top: 113px; width: 103px; height: 22px; }
#SAI_moAutre_MntHT[b-uc55dunti7] { left: 759px; top: 113px; width: 124px; height: 22px; }
#SAI_moAutre_TauxTVA[b-uc55dunti7] { left: 887px; top: 113px; width: 68px; height: 22px; }
#SAI_moAutreMntTVA[b-uc55dunti7] { left: 959px; top: 113px; width: 107px; height: 22px; }
#SAI_sAutre_Complément[b-uc55dunti7] { left: 109px; top: 135px; width: 349px; height: 62px; }
#BTN_AffecteAutre[b-uc55dunti7] { left: 101px; top: 262px; width: 80px; height: 24px; }
#LIB_Formulaire_Autre[b-uc55dunti7] { left: 800px; top: 383px; width: 100px; height: 20px; }
#BTN_AjoutLigneAutre[b-uc55dunti7] { left: 913px; top: 403px; width: 80px; height: 24px; }
#BTN_AnnulerSaisieLigneAutre[b-uc55dunti7] { left: 999px; top: 403px; width: 80px; height: 24px; }
#LIB_Date_de_Fin1[b-uc55dunti7] { left: 542px; top: 64px; width: 79px; height: 11px; }
#SAI_dAT_Fin[b-uc55dunti7] { left: 533px; top: 76px; width: 96px; height: 22px; }
#BTN_FactureBDC[b-uc55dunti7] { left: 717px; top: 401px; width: 30px; height: 30px; }
#BTN_CopierBDC[b-uc55dunti7] { left: 755px; top: 401px; width: 30px; height: 30px; }

/* --- MDLC_BDC > CELL_BasDeBDC -------------------------------------------------- */

.cell-bas[b-uc55dunti7] {
    /* Positionne par le « > * » du bloc parent : ne pas y redeclarer
       « position », cela l'ecraserait — meme specificite, et cette regle
       vient apres. Voir tools/ihm/gen-css.sh. */
}

.cell-bas > *[b-uc55dunti7] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#COMBO_Mentions[b-uc55dunti7] { left: 349px; top: 8px; width: 309px; height: 24px; }
#COMBO_Statut[b-uc55dunti7] { left: 664px; top: 8px; width: 201px; height: 24px; }
#SAI_NumFact[b-uc55dunti7] { left: 871px; top: 9px; width: 199px; height: 23px; }
#COMBO_Paiement[b-uc55dunti7] { left: 10px; top: 8px; width: 333px; height: 24px; }


/* ---------------------------------------------------------------------------
   Habillage. Écrit à la main : seules les positions ci-dessus sont générées.
   Charte Porcelaine (16 août 2026) : les couleurs viennent des jetons --e-*
   de wwwroot/app.css — plus aucune valeur en dur ici.

   IL N'Y EN AVAIT AUCUN. Le fichier s'arrêtait à la ligne ci-dessus : les
   coordonnées, et rien d'autre. La fiche s'affichait sans cadre, sans cellules
   distinctes, sans défilement de la zone répétée, les saisies dans la police
   par défaut du navigateur, et les en-têtes de table réservés aux lecteurs
   d'écran EN CLAIR, faute de la règle .visuellement-cache. Constaté le 12 août
   2026, sur les données réelles. La feuille jumelle, FicheFacture.razor.css,
   en portait 180 lignes ; celle-ci, zéro.

   Règles générées mais sans emploi, et qui le disent :

     #POPUP_SelFicXLS — l'import d'un classeur Excel, abandonné le 11 août.
     #LIGNE_Ligne1, #LIGNE_Ligne2 — deux filets de séparation de l'en-tête,
       rendus par une bordure plutôt que par deux éléments vides.
   --------------------------------------------------------------------------- */

#POPUP_SelFicXLS[b-uc55dunti7],
#LIGNE_Ligne1[b-uc55dunti7],
#LIGNE_Ligne2[b-uc55dunti7] { display: none; }

/* --- Saisies et libellés ---------------------------------------------------- */

.fiche-bdc input[b-uc55dunti7],
.fiche-bdc select[b-uc55dunti7],
.fiche-bdc textarea[b-uc55dunti7] {
    width: 100%;
    height: 100%;
    padding: 2px 4px;
    border: 1px solid var(--e-champ-bord);
    background-color: var(--e-champ-fond);
    border-radius: var(--e-champ-rayon);
    color: var(--e-texte);
    font-family: inherit;
    font-size: var(--e-taille);
}

.fiche-bdc textarea[b-uc55dunti7] { resize: none; }
.fiche-bdc label[b-uc55dunti7] { color: var(--e-texte); }

.fiche-bdc input:disabled[b-uc55dunti7],
.fiche-bdc select:disabled[b-uc55dunti7],
.fiche-bdc textarea:disabled[b-uc55dunti7] {
    background-color: var(--e-lecture-fond);
    color: var(--e-sourd);
}

.fiche-bdc input[readonly][b-uc55dunti7],
.fiche-bdc textarea[readonly][b-uc55dunti7] { background-color: var(--e-lecture-fond); }

/* Les LIB_* sont des zones de texte statiques : intitulés de colonne et totaux. */
.fiche-bdc span[id^="LIB_"][b-uc55dunti7] {
    display: flex;
    align-items: center;
    /* Ces champs font 11 a 14 px de haut, soit UNE ligne : un intitule trop
       long y repasse a la ligne et la seconde est coupee. « Nb de Faces » et
       « Date de Depart » etaient dans ce cas. Le depassement sort desormais a
       droite, dans le vide, ou il se voit. */
    white-space: nowrap;
    color: var(--e-texte);
    font-size: var(--e-btn-taille);
}

/* --- Les trois cellules ------------------------------------------------------ */

#CELL_Entete[b-uc55dunti7] {
    padding: 0;
    border: 1px solid var(--e-table-bord);
    border-bottom: 2px solid var(--e-th-filet);
    background-color: var(--e-panneau);
}

#CELL_LigneBDC[b-uc55dunti7] {
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-travail);
}

#CELL_BasDeBDC[b-uc55dunti7] {
    border: 1px solid var(--e-table-bord);
    border-top: 2px solid var(--e-th-filet);
    background-color: var(--e-panneau);
}

/* SAI_NumBDC : attribué par NumBDC(), jamais saisi. */
#SAI_NumBDC[b-uc55dunti7] { font-weight: bold; }

/* SEL_Mandataire_Payeur : sélecteur à deux options, rendu en fieldset. */
#SEL_Mandataire_Payeur[b-uc55dunti7] {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 2px;
    padding: 0;
    border: 0;
    min-width: 0;
}

#SEL_Mandataire_Payeur label[b-uc55dunti7] { display: flex; align-items: center; gap: 6px; font-size: var(--e-btn-taille); }
#SEL_Mandataire_Payeur input[b-uc55dunti7] { width: auto; height: auto; }

/* INT_ALaPose : interrupteur propre au bon de commande. */
#INT_ALaPose[b-uc55dunti7] { display: flex; align-items: center; gap: 4px; font-size: var(--e-btn-taille); }
#INT_ALaPose input[b-uc55dunti7] { width: auto; height: auto; }

/* --- Le formulaire de saisie de ligne ----------------------------------------

   C'EST LE NIVEAU QUI ROMPAIT TOUT. Les champs de saisie d'une ligne sont, dans
   les sources, enfants directs de CELL_LigneBDC : leurs coordonnées sont
   relatives à cette cellule, et c'est bien ce que gen-css.sh a produit. La
   transposition les a regroupés dans un conteneur — les trois formulaires, LC,
   AT et Autre, s'excluent l'un l'autre — et ce conteneur n'avait aucune règle.

   Les 40 champs restaient donc DANS LE FLUX : « left » et « top » sans effet,
   libellés et saisies empilés en colonne, débordant la cellule.

   La correction n'est pas de déplacer les champs mais de RELAYER le repère :
   le conteneur se cale sur l'origine de la cellule et redistribue le
   positionnement absolu. Les coordonnées générées restent justes, telles
   quelles. C'est ce que fait .plan-ligne sur la fiche facture, dont les huit
   plans partagent le même repère — la fiche BDC n'en avait que l'équivalent
   sans les règles.

   Contrôlable désormais : tools/ihm/controle-niveaux.sh
   --------------------------------------------------------------------------- */

/* Fond opaque : c'est un PLAN, il masque la liste au lieu de flotter dessus.
   Le bon de commande rend sa zone répétée en permanence, contrairement à la
   facture qui bascule de vue ; sans fond, le formulaire de saisie se
   superposait aux lignes déjà posées. */
.formulaire-ligne[b-uc55dunti7] { position: absolute; inset: 0; background-color: var(--e-travail); }

.formulaire-ligne > *[b-uc55dunti7] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#LIB_Formulaire_LC[b-uc55dunti7],
#LIB_Formulaire_AT[b-uc55dunti7],
#LIB_Formulaire_Autre[b-uc55dunti7] {
    color: var(--e-titre);
    font-size: var(--e-taille);
    font-weight: var(--e-titre-graisse);
}

/* --- Zone répétée des lignes -------------------------------------------------- */

/* Hauteur : voir la note de FicheFacture.razor.css. Les sources donnent 51 px,
   soit le gabarit d'UNE occurrence, que WEBDEV répète à l'exécution. Le champ
   prend ici la place réelle — de 19 à 378, le premier champ en dessous,
   LIB_Sous_Total2, étant à 382. La valeur d'origine reste au bloc généré. */
#ZR_LigneBDC[b-uc55dunti7] {
    height: 359px;
    overflow: auto;
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-travail);
}

.fiche-bdc table[b-uc55dunti7] {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--e-taille);
}

.fiche-bdc thead th[b-uc55dunti7] {
    position: sticky;
    top: 0;
    z-index: 1;
    padding: var(--e-th-pad);
    background-color: var(--e-th-fond);
    color: var(--e-th-texte);
    box-shadow: inset 0 -2px 0 var(--e-th-filet);
    text-align: left;
    white-space: nowrap;
}

.fiche-bdc tbody td[b-uc55dunti7] {
    padding: var(--e-cellule-pad);
    border-bottom: 1px solid var(--e-ligne);
    color: var(--e-texte);
    vertical-align: top;
}

.fiche-bdc tbody tr[b-uc55dunti7] { cursor: pointer; }

/* Un double-clic selectionne le mot sous le pointeur : sans cela, ouvrir une
   ligne laisse du texte en surbrillance derriere soi. */
.fiche-bdc tbody tr[b-uc55dunti7] { user-select: none; }
.fiche-bdc tbody tr:hover[b-uc55dunti7] { background-color: var(--e-sel); }
.fiche-bdc tbody tr.selectionnee[b-uc55dunti7] { background-color: var(--e-sel); font-weight: bold; }

.fiche-bdc .montant[b-uc55dunti7] { text-align: right; white-space: nowrap; }
.fiche-bdc .complement[b-uc55dunti7] { color: var(--e-sourd); font-size: var(--e-btn-taille); white-space: pre-line; }
.fiche-bdc .vide[b-uc55dunti7] { padding: 12px; color: var(--e-sourd); font-style: italic; }

/* --- Totaux ------------------------------------------------------------------ */

/* Intitulés à gauche, montants à droite — même raison que sur la fiche facture :
   les trois champs partent du même x et n'ont pas la même largeur (69, 27, 48),
   les aligner à droite les fait finir en escalier. Et « white-space: nowrap »
   parce que ces boîtes font 14 px de haut, soit une ligne : un intitulé trop
   long y repasserait à la ligne et déborderait sur le champ du dessous. */
#LIB_Sous_Total2[b-uc55dunti7],
#LIB_TVA2[b-uc55dunti7],
#LIB_TOTAL2[b-uc55dunti7] {
    justify-content: flex-start;
    font-weight: bold;
    white-space: nowrap;
}

#LIB_ST_HT4[b-uc55dunti7],
#LIB_ValTVA2[b-uc55dunti7],
#LIB_TotTTC2[b-uc55dunti7] {
    justify-content: flex-end;
    font-weight: bold;
    white-space: nowrap;
    /* Les totaux pèsent par la graisse et l'encre sombre, pas par la couleur
       d'action — l'accent est réservé à ce qui se clique. */
    color: var(--e-titre);
}

/* --- Boutons ----------------------------------------------------------------- */

.fiche-bdc button[b-uc55dunti7] {
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--e-btn-bord);
    background-color: var(--e-btn-fond);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-family: inherit;
    font-size: var(--e-btn-taille);
    text-align: center;
    cursor: pointer;
}

.fiche-bdc button:hover:not(:disabled)[b-uc55dunti7] { background-color: var(--e-sel); }

.fiche-bdc button:disabled[b-uc55dunti7] {
    border-color: var(--e-inactif-bord);
    color: var(--e-inactif-texte);
    cursor: not-allowed;
}

#BTN_ValiderFicheBDC[b-uc55dunti7],
#BTN_AjoutLigne[b-uc55dunti7] {
    background-color: var(--e-prim-fond);
    border-color: var(--e-prim-fond);
    color: var(--e-prim-texte);
}

#BTN_ValiderFicheBDC:hover:not(:disabled)[b-uc55dunti7],
#BTN_AjoutLigne:hover:not(:disabled)[b-uc55dunti7] { background-color: var(--e-prim-hover); }

#BTN_ValiderFicheBDC:disabled[b-uc55dunti7] { background-color: var(--e-btn-fond); color: var(--e-inactif-texte); }

/* --- POPUP_RechTiers ---------------------------------------------------------- */

/* La hauteur vient des sources et ne vaut QUE pour le contenu : le bandeau de
   titre — « Choix de l'annonceur » — n'a pas d'original, WEBDEV dessinant
   lui-meme celui de ses popups. Les 500 px etaient donc 23 px trop courts et le
   pied du panneau, avec ses trois boutons, sortait du cadre. « height: auto »
   laisse la boite epouser son contenu ; la largeur, elle, reste celle des
   sources. Centre horizontalement, comme WEBDEV centre ses popups.
   Vu le 12 aout 2026. */
#POPUP_RechTiers[b-uc55dunti7] {
    height: auto;
    left: 50%;
    transform: translateX(-50%);
}

/* Z-INDEX : une popup doit passer AU-DESSUS des en-tetes de tableau.
   Ceux-ci sont en « position: sticky » avec « z-index: 1 » pour rester
   visibles au defilement — ce qui suffit a les faire peindre par-dessus un
   <dialog open>, qui ne cree aucun contexte d empilement de lui-meme. La
   ligne d en-tete du tableau des lignes de facture traversait ainsi la
   fenetre de recherche. Vu le 12 aout 2026. */
.fiche-bdc dialog[b-uc55dunti7] {
    z-index: 10;
    padding: 0;
    border: 1px solid var(--e-cadre);
    border-radius: var(--e-rayon);
    /* Coupe le bandeau de titre aux coins arrondis. */
    overflow: hidden;
    box-shadow: var(--e-ombre);
    background-color: var(--e-travail);
    color: var(--e-texte);
    font-family: inherit;
    font-size: var(--e-taille);
}

.fiche-bdc dialog[b-uc55dunti7]::backdrop { background-color: rgba(0, 0, 0, 0.35); }

.fiche-bdc dialog h2[b-uc55dunti7] {
    margin: 0;
    padding: 4px 10px;
    background-color: var(--e-panneau);
    color: var(--e-titre);
    box-shadow: inset 0 -1px 0 var(--e-th-filet);
    font-size: var(--e-taille);
}

/* --- Messages ----------------------------------------------------------------- */

/* Ancré au bas de la fiche : sa hauteur dépend du texte. CELL_BasDeBDC finit à
   793, la fiche à 803. */
.message[b-uc55dunti7] {
    left: 9px;
    bottom: 2px;
    width: 1085px;
    height: auto;
    padding: 4px 8px;
    font-size: var(--e-taille);
}

.message.succes[b-uc55dunti7] { border: 1px solid var(--e-succes); background-color: var(--e-succes-fond); color: var(--e-succes); }
.message.erreur[b-uc55dunti7] { border: 1px solid var(--e-erreur); background-color: var(--e-erreur-fond); color: var(--e-erreur); }

.visuellement-cache[b-uc55dunti7] {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}

/* /Components/Pages/FicheFacture.razor.rz.scp.css */
/* ===========================================================================
   Géométrie de MDLC_Facture, générée depuis ihm/champs-sources.tsv par
   tools/ihm/gen-css.sh. Ne pas retoucher a la main : regenerer.

   Coordonnées relatives à MDLC_Facture, comme dans les sources.

   Quatre blocs, générés par les commandes suivantes et concaténés :

     tools/ihm/gen-css.sh    MDLC_Facture fiche-facture 791
     tools/ihm/gen-css.sh -f MDLC_Facture cell-entete  CELL_Entete
     tools/ihm/gen-css.sh -f MDLC_Facture cell-lignes  CELL_LigneFacture
     tools/ihm/gen-css.sh -f MDLC_Facture cell-bas     CELL_BasDeFacture
   =========================================================================== */

.fiche-facture[b-khizmrbu8q] {
    position: relative;
    height: 791px;
}

.fiche-facture > *[b-khizmrbu8q] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#CELL_Entete[b-khizmrbu8q] { left: 9px; top: 6px; width: 1085px; height: 246px; }
#CELL_BasDeFacture[b-khizmrbu8q] { left: 9px; top: 674px; width: 1085px; height: 111px; }
#CELL_LigneFacture[b-khizmrbu8q] { left: 9px; top: 258px; width: 1085px; height: 410px; }
#POPUP_RechTiers[b-khizmrbu8q] { width: 700px; height: 500px; }
#POPUP_SelFicXLS[b-khizmrbu8q] { width: 945px; height: 780px; }

/* --- MDLC_Facture > CELL_Entete -------------------------------------------------- */

.cell-entete[b-khizmrbu8q] {
    /* Positionne par le « > * » du bloc parent : ne pas y redeclarer
       « position », cela l'ecraserait — meme specificite, et cette regle
       vient apres. Voir tools/ihm/gen-css.sh. */
}

.cell-entete > *[b-khizmrbu8q] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#SEL_Mandataire_Payeur[b-khizmrbu8q] { left: 808px; top: 83px; width: 123px; height: 34px; }
#SAI_Annonceur[b-khizmrbu8q] { left: 3px; top: 25px; width: 291px; height: 23px; }
#SAI_Mandataire[b-khizmrbu8q] { left: 2px; top: 89px; width: 292px; height: 23px; }
#LIGNE_Ligne1[b-khizmrbu8q] { top: 178px; width: 1083px; height: 1px; }
#LIGNE_Ligne2[b-khizmrbu8q] { top: 137px; width: 1083px; height: 1px; }
#SAI_NumFacture[b-khizmrbu8q] { left: 4px; top: 147px; width: 241px; height: 23px; }
#SAI_REFERENCE_CLIENT[b-khizmrbu8q] { left: 4px; top: 186px; width: 344px; height: 23px; }
#COMBO_Type_de_Vente[b-khizmrbu8q] { left: 4px; top: 215px; width: 344px; height: 24px; }
#SAI_Commentaires[b-khizmrbu8q] { left: 354px; top: 185px; width: 729px; height: 51px; }
#BTN_RechTiers[b-khizmrbu8q] { left: 300px; top: 12px; width: 48px; height: 48px; }
#BTN_RechMandat[b-khizmrbu8q] { left: 300px; top: 76px; width: 48px; height: 48px; }
#COMBO_ActeurFacture[b-khizmrbu8q] { left: 533px; top: 146px; width: 374px; height: 24px; }
#SAI_AdrFact[b-khizmrbu8q] { left: 357px; top: 9px; width: 292px; height: 55px; }
#SAI_AdrMan[b-khizmrbu8q] { left: 357px; top: 73px; width: 373px; height: 55px; }
#SAI_Date_Facture[b-khizmrbu8q] { left: 292px; top: 146px; width: 204px; height: 24px; }
#BTN_AnnulerFicheFacture[b-khizmrbu8q] { left: 1023px; top: 11px; width: 47px; height: 49px; }
#BTN_ValiderFicheFacture[b-khizmrbu8q] { left: 1023px; top: 82px; width: 47px; height: 48px; }
#BTN_Genere_Duplicatas[b-khizmrbu8q] { left: 832px; top: 19px; width: 120px; height: 24px; }
#SAI_Rep[b-khizmrbu8q] { left: 804px; top: 44px; width: 140px; height: 23px; }

/* --- MDLC_Facture > CELL_LigneFacture -------------------------------------------------- */

.cell-lignes[b-khizmrbu8q] {
    /* Positionne par le « > * » du bloc parent : ne pas y redeclarer
       « position », cela l'ecraserait — meme specificite, et cette regle
       vient apres. Voir tools/ihm/gen-css.sh. */
}

.cell-lignes > *[b-khizmrbu8q] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#BTN_AjLig3[b-khizmrbu8q] { left: 4px; top: 366px; width: 30px; height: 30px; }
#BTN_MontLig2[b-khizmrbu8q] { left: 78px; top: 366px; width: 30px; height: 30px; }
#BTN_DescLig2[b-khizmrbu8q] { left: 116px; top: 366px; width: 30px; height: 30px; }
#LIB_Sous_Total2[b-khizmrbu8q] { left: 825px; top: 359px; width: 69px; height: 14px; }
#LIB_TVA2[b-khizmrbu8q] { left: 825px; top: 374px; width: 27px; height: 14px; }
#LIB_TOTAL_TTC2[b-khizmrbu8q] { left: 825px; top: 389px; width: 81px; height: 14px; }
#LIB_ValTVA2[b-khizmrbu8q] { left: 981px; top: 374px; width: 89px; height: 14px; }
#LIB_TotTTC2[b-khizmrbu8q] { left: 963px; top: 389px; width: 107px; height: 14px; }
#LIB_ST_HT4[b-khizmrbu8q] { left: 981px; top: 359px; width: 89px; height: 14px; }
#BTN_ImportAT1[b-khizmrbu8q] { left: 168px; top: 366px; width: 30px; height: 30px; }
#ZR_LigneFacture[b-khizmrbu8q] { left: 6px; top: 19px; width: 1066px; height: 53px; }
#SAI_sLC_Code[b-khizmrbu8q] { left: 8px; top: 50px; width: 96px; height: 22px; }
#SAI_sLC_Libellé[b-khizmrbu8q] { left: 108px; top: 50px; width: 349px; height: 56px; }
#SAI_MoLC_Loyer[b-khizmrbu8q] { left: 616px; top: 202px; width: 107px; height: 22px; }
#SAI_MoLC_TauxTVA[b-khizmrbu8q] { left: 752px; top: 247px; width: 68px; height: 22px; }
#SAI_MoLC_TTC[b-khizmrbu8q] { left: 844px; top: 247px; width: 107px; height: 22px; }
#BTN_AnnulerSaisieLigne[b-khizmrbu8q] { left: 901px; top: 370px; width: 80px; height: 24px; }
#BTN_EditLigne[b-khizmrbu8q] { left: 40px; top: 366px; width: 30px; height: 30px; }
#LIB_Code[b-khizmrbu8q] { left: 74px; top: 4px; width: 29px; height: 11px; }
#LIB_Libellé_Complément[b-khizmrbu8q] { left: 251px; top: 4px; width: 104px; height: 11px; }
#LIB_Qté[b-khizmrbu8q] { left: 514px; top: 4px; width: 20px; height: 11px; }
#LIB_Prix_unit[b-khizmrbu8q] { left: 592px; top: 4px; width: 50px; height: 11px; }
#LIB_Remise[b-khizmrbu8q] { left: 691px; top: 4px; width: 40px; height: 11px; }
#LIB_Total_Ligne_HT[b-khizmrbu8q] { left: 775px; top: 4px; width: 78px; height: 11px; }
#LIB_Taux_TVA[b-khizmrbu8q] { left: 877px; top: 4px; width: 54px; height: 11px; }
#LIB_Mnt_TVA[b-khizmrbu8q] { left: 970px; top: 4px; width: 48px; height: 11px; }
#LIB_Code1[b-khizmrbu8q] { left: 42px; top: 23px; width: 29px; height: 11px; }
#LIB_Libellé[b-khizmrbu8q] { left: 264px; top: 23px; width: 37px; height: 11px; }
#LIB_Ville[b-khizmrbu8q] { left: 523px; top: 23px; width: 26px; height: 11px; }
#LIB_Date_de_Départ[b-khizmrbu8q] { left: 630px; top: 95px; width: 79px; height: 11px; }
#LIB_Date_de_Fin[b-khizmrbu8q] { left: 639px; top: 143px; width: 60px; height: 11px; }
#LIB_Durée[b-khizmrbu8q] { left: 769px; top: 143px; width: 34px; height: 11px; }
#LIB_Taux_TVA1[b-khizmrbu8q] { left: 759px; top: 234px; width: 54px; height: 11px; }
#LIB_Total_TTC[b-khizmrbu8q] { left: 870px; top: 234px; width: 54px; height: 11px; }
#LIB_Code2[b-khizmrbu8q] { left: 45px; top: 26px; width: 29px; height: 11px; }
#LIB_Réseau[b-khizmrbu8q] { left: 246px; top: 26px; width: 40px; height: 11px; }
#SAI_sAT_Code[b-khizmrbu8q] { left: 8px; top: 38px; width: 96px; height: 22px; }
#LIB_Code3[b-khizmrbu8q] { left: 34px; top: 85px; width: 29px; height: 11px; }
#LIB_Libellé_Complément3[b-khizmrbu8q] { left: 222px; top: 85px; width: 104px; height: 11px; }
#LIB_Qté3[b-khizmrbu8q] { left: 487px; top: 85px; width: 20px; height: 11px; }
#LIB_Prix_unit3[b-khizmrbu8q] { left: 567px; top: 85px; width: 50px; height: 11px; }
#LIB_Remise3[b-khizmrbu8q] { left: 674px; top: 85px; width: 40px; height: 11px; }
#LIB_Total_Ligne_HT3[b-khizmrbu8q] { left: 773px; top: 85px; width: 78px; height: 11px; }
#LIB_Taux_TVA3[b-khizmrbu8q] { left: 885px; top: 85px; width: 54px; height: 11px; }
#LIB_Mnt_TVA3[b-khizmrbu8q] { left: 979px; top: 85px; width: 48px; height: 11px; }
#SAI_sAT_Libellé[b-khizmrbu8q] { left: 108px; top: 38px; width: 317px; height: 22px; }
#BTN_AjoutLigneAT[b-khizmrbu8q] { left: 815px; top: 370px; width: 80px; height: 24px; }
#LIB_Formulaire_LC[b-khizmrbu8q] { left: 528px; top: 354px; width: 100px; height: 20px; }
#LIB_Formulaire_AT[b-khizmrbu8q] { left: 551px; top: 330px; width: 100px; height: 20px; }
#LIB_Formulaire_Régie[b-khizmrbu8q] { left: 418px; top: 311px; width: 100px; height: 20px; }
#SAI_sLC_Ville[b-khizmrbu8q] { left: 463px; top: 50px; width: 147px; height: 22px; }
#LIB_Loyer[b-khizmrbu8q] { left: 652px; top: 190px; width: 34px; height: 11px; }
#LIB_TLPE[b-khizmrbu8q] { left: 769px; top: 190px; width: 34px; height: 11px; }
#LIB_Tech[b-khizmrbu8q] { left: 880px; top: 190px; width: 34px; height: 11px; }
#SAI_dLC_Depart[b-khizmrbu8q] { left: 621px; top: 110px; width: 96px; height: 22px; }
#SAI_dLC_Fin[b-khizmrbu8q] { left: 621px; top: 155px; width: 96px; height: 22px; }
#SAI_sLC_Durée[b-khizmrbu8q] { left: 724px; top: 155px; width: 124px; height: 22px; }
#SAI_MoLC_TLPE[b-khizmrbu8q] { left: 733px; top: 202px; width: 107px; height: 22px; }
#SAI_MoLC_Tech[b-khizmrbu8q] { left: 844px; top: 202px; width: 107px; height: 22px; }
#LIB_Total_HT[b-khizmrbu8q] { left: 645px; top: 234px; width: 48px; height: 11px; }
#SAI_MoLC_TotHT[b-khizmrbu8q] { left: 616px; top: 247px; width: 107px; height: 22px; }
#BTN_AffecteLC[b-khizmrbu8q] { left: 89px; top: 264px; width: 80px; height: 24px; }
#BTN_CalcDurée[b-khizmrbu8q] { left: 854px; top: 153px; width: 26px; height: 26px; }
#LIB_Format[b-khizmrbu8q] { left: 658px; top: 23px; width: 40px; height: 11px; }
#SAI_sLC_Format[b-khizmrbu8q] { left: 616px; top: 50px; width: 124px; height: 22px; }
#LIB_Ville1[b-khizmrbu8q] { left: 507px; top: 26px; width: 26px; height: 11px; }
#LIB_Format1[b-khizmrbu8q] { left: 658px; top: 26px; width: 40px; height: 11px; }
#SAI_sAT_Ville[b-khizmrbu8q] { left: 431px; top: 38px; width: 179px; height: 22px; }
#SAI_sAT_Format[b-khizmrbu8q] { left: 616px; top: 38px; width: 124px; height: 22px; }
#LIB_Date_de_Départ1[b-khizmrbu8q] { left: 440px; top: 66px; width: 79px; height: 11px; }
#SAI_dAT_Départ[b-khizmrbu8q] { left: 431px; top: 78px; width: 96px; height: 22px; }
#LIB_Durée1[b-khizmrbu8q] { left: 680px; top: 66px; width: 34px; height: 11px; }
#SAI_sAT_Durée[b-khizmrbu8q] { left: 635px; top: 78px; width: 124px; height: 22px; }
#LIB_Tarif_Brut[b-khizmrbu8q] { left: 457px; top: 106px; width: 54px; height: 11px; }
#LIB_Tarif_Net[b-khizmrbu8q] { left: 573px; top: 106px; width: 49px; height: 11px; }
#SAI_moAT_TarifBrut[b-khizmrbu8q] { left: 431px; top: 118px; width: 107px; height: 22px; }
#SAI_MoAT_Tarif_Net[b-khizmrbu8q] { left: 544px; top: 118px; width: 107px; height: 22px; }
#LIB_Taux_TVA2[b-khizmrbu8q] { left: 764px; top: 106px; width: 54px; height: 11px; }
#LIB_Total_TTC1[b-khizmrbu8q] { left: 857px; top: 106px; width: 54px; height: 11px; }
#SAI_MoAT_TauxTVA[b-khizmrbu8q] { left: 757px; top: 118px; width: 68px; height: 22px; }
#SAI_MoAT_TTC[b-khizmrbu8q] { left: 831px; top: 118px; width: 107px; height: 22px; }
#LIB_Nb_de_Faces[b-khizmrbu8q] { left: 761px; top: 26px; width: 63px; height: 11px; }
#SAI_nAT_Faces[b-khizmrbu8q] { left: 746px; top: 38px; width: 92px; height: 22px; }
#LIB_Frais[b-khizmrbu8q] { left: 690px; top: 106px; width: 29px; height: 11px; }
#SAI_MoAT_Frais[b-khizmrbu8q] { left: 657px; top: 118px; width: 94px; height: 22px; }
#BTN_AffecteAT[b-khizmrbu8q] { left: 27px; top: 328px; width: 80px; height: 24px; }
#LIB_Code4[b-khizmrbu8q] { left: 43px; top: 86px; width: 29px; height: 11px; }
#LIB_Libellé_Complément4[b-khizmrbu8q] { left: 231px; top: 86px; width: 104px; height: 11px; }
#LIB_Qté4[b-khizmrbu8q] { left: 496px; top: 86px; width: 20px; height: 11px; }
#LIB_Prix_unit4[b-khizmrbu8q] { left: 576px; top: 86px; width: 50px; height: 11px; }
#LIB_Remise4[b-khizmrbu8q] { left: 683px; top: 86px; width: 40px; height: 11px; }
#LIB_Total_Ligne_HT4[b-khizmrbu8q] { left: 782px; top: 86px; width: 78px; height: 11px; }
#LIB_Taux_TVA4[b-khizmrbu8q] { left: 894px; top: 86px; width: 54px; height: 11px; }
#LIB_Mnt_TVA4[b-khizmrbu8q] { left: 988px; top: 86px; width: 48px; height: 11px; }
#SAI_sAutre_Code[b-khizmrbu8q] { left: 9px; top: 113px; width: 96px; height: 22px; }
#SAI_sAutre_Libellé[b-khizmrbu8q] { left: 109px; top: 113px; width: 349px; height: 22px; }
#SAI_moAutre_Quantité[b-khizmrbu8q] { left: 462px; top: 113px; width: 89px; height: 22px; }
#SAI_moAutre_PU[b-khizmrbu8q] { left: 555px; top: 113px; width: 93px; height: 22px; }
#SAI_moAutre_Remise[b-khizmrbu8q] { left: 652px; top: 113px; width: 103px; height: 22px; }
#SAI_moAutre_MntHT[b-khizmrbu8q] { left: 759px; top: 113px; width: 124px; height: 22px; }
#SAI_moAutre_TauxTVA[b-khizmrbu8q] { left: 887px; top: 113px; width: 68px; height: 22px; }
#SAI_moAutreMntTVA[b-khizmrbu8q] { left: 959px; top: 113px; width: 107px; height: 22px; }
#SAI_sAutre_Complément[b-khizmrbu8q] { left: 109px; top: 135px; width: 349px; height: 62px; }
#BTN_AffecteAutre[b-khizmrbu8q] { left: 101px; top: 262px; width: 80px; height: 24px; }
#LIB_Formulaire_Autre[b-khizmrbu8q] { left: 344px; top: 292px; width: 100px; height: 20px; }

/* --- Plan 4 : Régie, les champs qui manquaient -------------------------------

   Les huit libellés — LIB_Code3 à LIB_Mnt_TVA3 — sont dans le bloc GÉNÉRÉ plus
   haut : ils existent bien dans les sources. Ce sont les CHAMPS qui n'y sont
   pas. Le formulaire de régie de WEBDEV est une rangée d'intitulés au-dessus du
   vide : une ligne de régie ne pouvait pas être saisie.

   Ajoutés le 13 août 2026, en recette, et calés sur les colonnes du formulaire
   « Autre » — qui porte exactement les mêmes huit — plutôt qu'inventés. Les deux
   types partagent d'ailleurs leur encodage : Encoder() range la régie par son
   cas par défaut, celui d'« Autre ».

   ÉCRIT À LA MAIN, contrairement au bloc du dessus : une régénération par
   gen-css.sh ne les produira pas, faute de contrôles dans les sources. */

#SAI_sRegie_Code[b-khizmrbu8q] { left: 9px; top: 113px; width: 96px; height: 22px; }
#SAI_sRegie_Libellé[b-khizmrbu8q] { left: 109px; top: 113px; width: 349px; height: 22px; }
#SAI_moRegie_Quantité[b-khizmrbu8q] { left: 462px; top: 113px; width: 89px; height: 22px; }
#SAI_moRegie_PU[b-khizmrbu8q] { left: 555px; top: 113px; width: 93px; height: 22px; }
#SAI_moRegie_Remise[b-khizmrbu8q] { left: 652px; top: 113px; width: 103px; height: 22px; }
#SAI_moRegie_MntHT[b-khizmrbu8q] { left: 759px; top: 113px; width: 124px; height: 22px; }
#SAI_moRegie_TauxTVA[b-khizmrbu8q] { left: 887px; top: 113px; width: 68px; height: 22px; }
#SAI_moRegieMntTVA[b-khizmrbu8q] { left: 959px; top: 113px; width: 107px; height: 22px; }
#SAI_sRegie_Complément[b-khizmrbu8q] { left: 109px; top: 135px; width: 349px; height: 62px; }

#BTN_AffecteRegie[b-khizmrbu8q] { left: 101px; top: 262px; width: 80px; height: 24px; }
#BTN_AjoutLigneRegie[b-khizmrbu8q] { left: 815px; top: 370px; width: 80px; height: 24px; }
#BTN_AjoutLigneAutre[b-khizmrbu8q] { left: 815px; top: 370px; width: 80px; height: 24px; }
#LIB_Date_de_fin1[b-khizmrbu8q] { left: 542px; top: 66px; width: 79px; height: 11px; }
#SAI_dAT_Fin[b-khizmrbu8q] { left: 533px; top: 78px; width: 96px; height: 22px; }
#BTN_CopierFacture[b-khizmrbu8q] { left: 228px; top: 366px; width: 30px; height: 30px; }
#BTN_Switch[b-khizmrbu8q] { left: 789px; top: 364px; width: 30px; height: 30px; }
#BTN_SuppLigne[b-khizmrbu8q] { left: 987px; top: 370px; width: 80px; height: 24px; }
#BTN_AnnulerSuppLigneFact[b-khizmrbu8q] { left: 458px; top: 179px; width: 80px; height: 24px; }
#BTN_SuppLigneFact[b-khizmrbu8q] { left: 544px; top: 179px; width: 80px; height: 24px; }
#BTN_AjoutLigneLC[b-khizmrbu8q] { left: 815px; top: 370px; width: 80px; height: 24px; }
#TABLE_LigneFactures[b-khizmrbu8q] { left: 18px; top: 4px; width: 1047px; height: 349px; }
#ZTR_Confirmez_vous_la_suppression_de[b-khizmrbu8q] { left: 339px; top: 77px; width: 405px; height: 58px; }

/* --- MDLC_Facture > CELL_BasDeFacture -------------------------------------------------- */

.cell-bas[b-khizmrbu8q] {
    /* Positionne par le « > * » du bloc parent : ne pas y redeclarer
       « position », cela l'ecraserait — meme specificite, et cette regle
       vient apres. Voir tools/ihm/gen-css.sh. */
}

.cell-bas > *[b-khizmrbu8q] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#COMBO_Mentions[b-khizmrbu8q] { left: 769px; top: 8px; width: 309px; height: 24px; }
#BTN_AjLig1[b-khizmrbu8q] { left: 715px; top: 5px; width: 30px; height: 30px; }
#TABLE_Echeance[b-khizmrbu8q] { left: 464px; top: 5px; width: 221px; height: 99px; }
#COMBO_Paiement[b-khizmrbu8q] { left: 9px; top: 11px; width: 439px; height: 24px; }
#BTN_EnvoyerPaie[b-khizmrbu8q] { left: 418px; top: 39px; width: 30px; height: 30px; }
#LIB_Cliquez_directement_sur_le[b-khizmrbu8q] { left: 9px; top: 41px; width: 364px; height: 14px; }
#BTN_SupLig1[b-khizmrbu8q] { left: 715px; top: 41px; width: 30px; height: 30px; }
#LIB_SansNom1[b-khizmrbu8q] { left: 9px; top: 87px; width: 100px; height: 20px; }


/* ---------------------------------------------------------------------------
   Habillage. Écrit à la main : seules les positions ci-dessus sont générées.
   Charte Porcelaine (16 août 2026) : les couleurs viennent des jetons --e-*
   de wwwroot/app.css — plus aucune valeur en dur ici.

   Règles générées mais sans emploi, et qui le disent :

     #POPUP_SelFicXLS — l'import d'un classeur Excel. .NET n'a pas de lecteur
       xlsx intégré et les bibliothèques candidates engagent une licence : même
       nature de décision que QuestPDF pour les éditions PDF, laissée ouverte.
       Les ~20 champs de la popup ne sont pas transposés.
     #LIGNE_Ligne1, #LIGNE_Ligne2 — deux filets de séparation de l'en-tête,
       rendus par une bordure plutôt que par deux éléments vides.
   --------------------------------------------------------------------------- */

#POPUP_SelFicXLS[b-khizmrbu8q],
#LIGNE_Ligne1[b-khizmrbu8q],
#LIGNE_Ligne2[b-khizmrbu8q] { display: none; }

/* --- Saisies et libellés ---------------------------------------------------- */

.fiche-facture input[b-khizmrbu8q],
.fiche-facture select[b-khizmrbu8q],
.fiche-facture textarea[b-khizmrbu8q] {
    width: 100%;
    height: 100%;
    padding: 2px 4px;
    border: 1px solid var(--e-champ-bord);
    background-color: var(--e-champ-fond);
    border-radius: var(--e-champ-rayon);
    color: var(--e-texte);
    font-family: inherit;
    font-size: var(--e-taille);
}

.fiche-facture textarea[b-khizmrbu8q] { resize: none; }
.fiche-facture label[b-khizmrbu8q] { color: var(--e-texte); }

.fiche-facture input:disabled[b-khizmrbu8q],
.fiche-facture select:disabled[b-khizmrbu8q],
.fiche-facture textarea:disabled[b-khizmrbu8q] {
    background-color: var(--e-lecture-fond);
    color: var(--e-sourd);
}

.fiche-facture input[readonly][b-khizmrbu8q] { background-color: var(--e-lecture-fond); }

/* Les LIB_* sont des zones de texte statiques : intitulés de colonne et totaux. */
.fiche-facture span[id^="LIB_"][b-khizmrbu8q],
.fiche-facture span[id^="ZTR_"][b-khizmrbu8q] {
    display: flex;
    align-items: center;
    white-space: nowrap;
    color: var(--e-texte);
    font-size: var(--e-btn-taille);
}

/* --- Les trois cellules ------------------------------------------------------ */

#CELL_Entete[b-khizmrbu8q] {
    padding: 0;
    border: 1px solid var(--e-table-bord);
    border-bottom: 2px solid var(--e-th-filet);
    background-color: var(--e-panneau);
}

#CELL_LigneFacture[b-khizmrbu8q] {
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-travail);
}

#CELL_BasDeFacture[b-khizmrbu8q] {
    border: 1px solid var(--e-table-bord);
    border-top: 2px solid var(--e-th-filet);
    background-color: var(--e-panneau);
}

/* SAI_NumFacture : attribué par NumFacture(), jamais saisi. */
#SAI_NumFacture[b-khizmrbu8q] { font-weight: bold; }

/* SEL_Mandataire_Payeur : sélecteur à deux options. */
#SEL_Mandataire_Payeur[b-khizmrbu8q] {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 2px;
}

/* « Mandataire non payeur » (17 septembre 2026) est plus long que le « Payeur
   direct » d'origine et que les 123 px de la boîte : il ne doit pas se replier
   sur deux lignes dans 34 px de haut. Il déborde à droite, dans le vide qui
   précède BTN_Valider. */
#SEL_Mandataire_Payeur label[b-khizmrbu8q] { display: flex; align-items: center; gap: 6px; font-size: var(--e-btn-taille); white-space: nowrap; }
#SEL_Mandataire_Payeur input[b-khizmrbu8q] { width: auto; height: auto; }

/* --- Les sous-formulaires de ligne ------------------------------------------ */

/* CELL_LigneFacture portait huit plans : 1 la zone répétée, 2 à 6 les
   formulaires par type de vente, 7 la table, 8 la confirmation de suppression.
   Un seul est rendu à la fois, et tous partagent le même repère. */
.plan-ligne[b-khizmrbu8q] { position: absolute; inset: 0; }

.plan-ligne > *[b-khizmrbu8q] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

/* Les libellés de formulaire — LIB_Formulaire_LC et ses homologues. */
#LIB_Formulaire_LC[b-khizmrbu8q],
#LIB_Formulaire_AT[b-khizmrbu8q],
#LIB_Formulaire_Régie[b-khizmrbu8q],
#LIB_Formulaire_Autre[b-khizmrbu8q] {
    color: var(--e-titre);
    font-size: var(--e-taille);
    font-weight: var(--e-titre-graisse);
}

/* --- Tables et zone répétée -------------------------------------------------- */

#TABLE_LigneFactures[b-khizmrbu8q],
#ZR_LigneFacture[b-khizmrbu8q],
#TABLE_Echeance[b-khizmrbu8q] {
    overflow: auto;
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-travail);
}

/* LA HAUTEUR D'UNE ZONE RÉPÉTÉE N'EST PAS CELLE DU CHAMP.

   Les sources donnent 53 px à ZR_LigneFacture. Ce n'est pas une erreur : dans
   WEBDEV, une zone répétée déclare le gabarit d'UNE occurrence — ici une ligne
   de facture, libellé et complément — et le moteur la répète à l'exécution,
   le champ occupant la place disponible. Reprise telle quelle en CSS, cette
   valeur enferme TOUTE la liste dans la hauteur d'une seule ligne : les lignes
   s'entassaient derrière un ascenseur de 53 px, avec 300 px de vide dessous.
   Signalé le 12 août 2026 sur la facture 07-0061-2026, qui en compte plusieurs.

   Elle prend donc la place réelle : de 19, son « top », à 355 — le premier
   champ en dessous, LIB_Sous_Total2, est à 360. La valeur d'origine reste
   lisible dans le bloc généré, au-dessus, pour que l'écart se voie. */
#ZR_LigneFacture[b-khizmrbu8q] { height: 336px; }

.fiche-facture table[b-khizmrbu8q] {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--e-taille);
}

.fiche-facture thead th[b-khizmrbu8q] {
    position: sticky;
    top: 0;
    z-index: 1;
    padding: var(--e-th-pad);
    background-color: var(--e-th-fond);
    color: var(--e-th-texte);
    box-shadow: inset 0 -2px 0 var(--e-th-filet);
    text-align: left;
    white-space: nowrap;
}

.fiche-facture tbody td[b-khizmrbu8q] {
    padding: var(--e-cellule-pad);
    border-bottom: 1px solid var(--e-ligne);
    color: var(--e-texte);
    vertical-align: top;
}

.fiche-facture tbody tr[b-khizmrbu8q] { cursor: pointer; }

/* Un double-clic selectionne le mot sous le pointeur : sans cela, ouvrir une
   ligne laisse du texte en surbrillance derriere soi. */
.fiche-facture tbody tr[b-khizmrbu8q] { user-select: none; }
.fiche-facture tbody tr:hover[b-khizmrbu8q] { background-color: var(--e-sel); }
.fiche-facture tbody tr.selectionnee[b-khizmrbu8q] { background-color: var(--e-sel); font-weight: bold; }

.fiche-facture .montant[b-khizmrbu8q] { text-align: right; white-space: nowrap; }
.fiche-facture .complement[b-khizmrbu8q] { color: var(--e-sourd); font-size: var(--e-btn-taille); white-space: pre-line; }
.fiche-facture .vide[b-khizmrbu8q] { padding: 12px; color: var(--e-sourd); font-style: italic; }

/* --- Totaux ------------------------------------------------------------------ */

/* « white-space: nowrap » n'est pas une précaution de style : ces boîtes font
   14 px de haut, soit UNE ligne. Un intitulé trop long y repasse à la ligne et
   déborde sur le champ du dessous, quinze pixels plus bas. Le garde-fou rend le
   dépassement visible — le texte sort à gauche, dans le vide — au lieu de
   maquiller la ligne suivante. */
/* LES TROIS INTITULÉS SONT CALÉS À GAUCHE, LES MONTANTS À DROITE.

   Ils étaient tous en « flex-end ». Or leurs champs partent du même x (825) et
   n'ont pas la même largeur — 69, 27 et 81 px, taillés chacun sur son texte.
   Aligner à droite les faisait donc finir à 894, 852 et 906 : trois fins de
   ligne différentes, un escalier, « TOTAL TTC » débordant à droite de
   « Sous-Total » et « TVA » ramené en retrait. Aucune des trois lignes ne se
   lisait comme appartenant à la même colonne.

   À gauche, elles partent toutes de 825 et forment une colonne franche. C'est
   aussi ce que fait l'imprimé, où le libellé est à gauche du montant.

   Les montants, eux, restent à droite : leurs champs finissent tous à 1070, et
   c'est l'alignement des chiffres qui compte. */
#LIB_Sous_Total2[b-khizmrbu8q],
#LIB_TVA2[b-khizmrbu8q],
#LIB_TOTAL_TTC2[b-khizmrbu8q] {
    justify-content: flex-start;
    font-weight: bold;
    white-space: nowrap;
}

#LIB_ST_HT4[b-khizmrbu8q],
#LIB_ValTVA2[b-khizmrbu8q],
#LIB_TotTTC2[b-khizmrbu8q] {
    justify-content: flex-end;
    font-weight: bold;
    white-space: nowrap;
    /* Les totaux pèsent par la graisse et l'encre sombre, pas par la couleur
       d'action — l'accent est réservé à ce qui se clique. */
    color: var(--e-titre);
}

/* --- BTN_SuppLigne : le seul champ déplacé de la fiche -----------------------

   Les sources le posent à 987,370 — exactement sur la colonne des montants,
   LIB_ValTVA2 étant à 981,374. Ce n'est pas une erreur de leur part : dans
   WEBDEV les deux ne coexistent JAMAIS. Relevé des plans de CELL_LigneFacture :

     LIB_Sous_Total2, LIB_TVA2, LIB_TOTAL_TTC2, LIB_ValTVA2 …… plans 1 et 7
     BTN_SuppLigne ………………………………………………………………………………… plans 2, 3, 4 et 6

   La transposition ramène les huit plans à trois états, et le bouton se
   retrouve affiché avec les totaux : il recouvrait le montant de TVA.

   Déplacé dans la bande restée libre — rien entre 262 et 800 sur cette ligne —
   à la suite des autres boutons de ligne, dont il partage l'objet : ils
   agissent tous sur la ligne choisie. La valeur d'origine reste lisible dans le
   bloc généré, au-dessus, pour que l'écart se voie.
   --------------------------------------------------------------------------- */

#BTN_SuppLigne[b-khizmrbu8q] { left: 280px; top: 370px; }

/* --- Boutons ----------------------------------------------------------------- */

.fiche-facture button[b-khizmrbu8q] {
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--e-btn-bord);
    background-color: var(--e-btn-fond);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-family: inherit;
    font-size: var(--e-btn-taille);
    text-align: center;
    cursor: pointer;
}

.fiche-facture button:hover:not(:disabled)[b-khizmrbu8q] { background-color: var(--e-sel); }

.fiche-facture button:disabled[b-khizmrbu8q] {
    border-color: var(--e-inactif-bord);
    color: var(--e-inactif-texte);
    cursor: not-allowed;
}

#BTN_ValiderFicheFacture[b-khizmrbu8q],
#BTN_AffecteLC[b-khizmrbu8q],
#BTN_AffecteAT[b-khizmrbu8q],
#BTN_AffecteRegie[b-khizmrbu8q],
#BTN_AjoutLigneRegie[b-khizmrbu8q],
#BTN_AffecteAutre[b-khizmrbu8q],
#BTN_AjoutLigneLC[b-khizmrbu8q],
#BTN_AjoutLigneAT[b-khizmrbu8q],
#BTN_AjoutLigneAutre[b-khizmrbu8q],
#BTN_SuppLigneFact[b-khizmrbu8q] {
    background-color: var(--e-prim-fond);
    border-color: var(--e-prim-fond);
    color: var(--e-prim-texte);
}

#BTN_ValiderFicheFacture:hover:not(:disabled)[b-khizmrbu8q],
#BTN_AffecteLC:hover:not(:disabled)[b-khizmrbu8q],
#BTN_AffecteAT:hover:not(:disabled)[b-khizmrbu8q],
#BTN_AffecteAutre:hover:not(:disabled)[b-khizmrbu8q],
#BTN_AjoutLigneLC:hover:not(:disabled)[b-khizmrbu8q],
#BTN_AjoutLigneAT:hover:not(:disabled)[b-khizmrbu8q],
#BTN_AjoutLigneAutre:hover:not(:disabled)[b-khizmrbu8q],
#BTN_SuppLigneFact:hover:not(:disabled)[b-khizmrbu8q] { background-color: var(--e-prim-hover); }

#BTN_ValiderFicheFacture:disabled[b-khizmrbu8q] { background-color: var(--e-btn-fond); color: var(--e-inactif-texte); }

/* --- POPUP_RechTiers ---------------------------------------------------------- */

/* La hauteur vient des sources et ne vaut QUE pour le contenu : le bandeau de
   titre — « Choix de l'annonceur » — n'a pas d'original, WEBDEV dessinant
   lui-meme celui de ses popups. Les 500 px etaient donc 23 px trop courts et le
   pied du panneau, avec ses trois boutons, sortait du cadre. « height: auto »
   laisse la boite epouser son contenu ; la largeur, elle, reste celle des
   sources. Centre horizontalement, comme WEBDEV centre ses popups.
   Vu le 12 aout 2026. */
#POPUP_RechTiers[b-khizmrbu8q] {
    height: auto;
    left: 50%;
    transform: translateX(-50%);
}

/* Z-INDEX : une popup doit passer AU-DESSUS des en-tetes de tableau.
   Ceux-ci sont en « position: sticky » avec « z-index: 1 » pour rester
   visibles au defilement — ce qui suffit a les faire peindre par-dessus un
   <dialog open>, qui ne cree aucun contexte d empilement de lui-meme. La
   ligne d en-tete du tableau des lignes de facture traversait ainsi la
   fenetre de recherche. Vu le 12 aout 2026. */
.fiche-facture dialog[b-khizmrbu8q] {
    z-index: 10;
    padding: 0;
    border: 1px solid var(--e-cadre);
    border-radius: var(--e-rayon);
    /* Coupe le bandeau de titre aux coins arrondis. */
    overflow: hidden;
    box-shadow: var(--e-ombre);
    background-color: var(--e-travail);
    color: var(--e-texte);
    font-family: inherit;
    font-size: var(--e-taille);
}

.fiche-facture dialog[b-khizmrbu8q]::backdrop { background-color: rgba(0, 0, 0, 0.35); }

.fiche-facture dialog h2[b-khizmrbu8q] {
    margin: 0;
    padding: 4px 10px;
    background-color: var(--e-panneau);
    color: var(--e-titre);
    box-shadow: inset 0 -1px 0 var(--e-th-filet);
    font-size: var(--e-taille);
}

/* --- Confirmation de suppression : le plan 8 --------------------------------- */

#ZTR_Confirmez_vous_la_suppression_de[b-khizmrbu8q] {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 8px;
    border: 1px solid var(--e-erreur);
    background-color: var(--e-erreur-fond);
    color: var(--e-erreur);
    border-radius: var(--e-btn-rayon);
    text-align: center;
    font-size: var(--e-taille);
}

/* --- Messages ----------------------------------------------------------------- */

.message[b-khizmrbu8q] {
    left: 9px;
    top: 788px;
    width: 1085px;
    height: auto;
    padding: 4px 8px;
    font-size: var(--e-taille);
}

.message.succes[b-khizmrbu8q] { border: 1px solid var(--e-succes); background-color: var(--e-succes-fond); color: var(--e-succes); }
.message.erreur[b-khizmrbu8q] { border: 1px solid var(--e-erreur); background-color: var(--e-erreur-fond); color: var(--e-erreur); }

.visuellement-cache[b-khizmrbu8q] {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}

/* ===========================================================================
   LIBELLÉS D'EN-TÊTE — ajoutés le 13 août 2026, en recette.

   ÉCRIT À LA MAIN, et volontairement placé APRÈS le bloc généré : une
   régénération par gen-css.sh réécrira les valeurs du dessus, pas celles-ci.

   WEBDEV n'a aucun libellé sur l'en-tête de facture — vérifié dans l'export de
   la documentation technique, où SAI_NumFacture et ses voisins n'ont ni
   « Libellé FR », ni indication, ni bulle. Un champ rempli ne disait donc plus
   ce qu'il était, le placeholder disparaissant avec la valeur.

   Chaque bande descend de 14 px pour loger son libellé. La cellule d'en-tête
   gagne 74 px, et les deux cellules du dessous suivent : c'est le prix de la
   lisibilité, et il a été accepté.
   =========================================================================== */

.cell-entete .etiquette[b-khizmrbu8q] {
    position: absolute;
    font-size: 7pt;
    color: var(--e-th-texte);
    white-space: nowrap;
}

/* Bande 1 — annonceur et son adresse */
#ETQ_AdrFact[b-khizmrbu8q] { left: 357px; top: 10px; }
#SAI_AdrFact[b-khizmrbu8q] { top: 23px; }
#ETQ_Annonceur[b-khizmrbu8q] { left: 3px; top: 26px; }
#SAI_Annonceur[b-khizmrbu8q] { top: 39px; }
#BTN_RechTiers[b-khizmrbu8q] { top: 26px; }

/* Bande 2 — mandataire, son adresse et sa qualité de payeur */
#ETQ_AdrMan[b-khizmrbu8q] { left: 357px; top: 88px; }
#SAI_AdrMan[b-khizmrbu8q] { top: 101px; }
#ETQ_Mandataire[b-khizmrbu8q] { left: 2px; top: 104px; }
#SAI_Mandataire[b-khizmrbu8q] { top: 117px; }
#BTN_RechMandat[b-khizmrbu8q] { top: 104px; }
#SEL_Mandataire_Payeur[b-khizmrbu8q] { top: 111px; }
#LIGNE_Ligne2[b-khizmrbu8q] { top: 170px; }

/* Les deux notes de pays (17 septembre 2026) — sans équivalent WEBDEV, donc
   sans source à régénérer : positions écrites à la main.
   Celle de l'annonceur occupe le vide à droite de SAI_AdrFact (649 → 1023, où
   commence BTN_Annuler), sur la hauteur du bloc. Celle du mandataire tient sur
   une ligne dans les 14 px qui séparent SAI_AdrMan (fin à 156) de LIGNE_Ligne2
   (170) : à droite de ce bloc-là, SEL_Mandataire_Payeur prend la place. */
.cell-entete .note-pays[b-khizmrbu8q] {
    position: absolute;
    box-sizing: border-box;
    overflow: hidden;
    border-radius: var(--e-btn-rayon);
}

/* Depuis le 18 septembre 2026, le haut du vide à droite de SAI_AdrFact porte
   l'adresse électronique copiée (étiquette à 10, champ 23-46) ; la note de pays
   descend dans la bande 50-78 qu'elle partage avec NOTE_AdrElectronique — l'une
   ou l'autre, jamais les deux. D'où 7 pt gras sur deux lignes, comme la note du
   mandataire, au lieu de la taille des boutons sur trois. */
#ETQ_AdrElecFact[b-khizmrbu8q] { left: 657px; top: 10px; }
#SAI_AdrElecFact[b-khizmrbu8q] { left: 657px; top: 23px; width: 358px; height: 23px; }

#NOTE_PaysAnnonceur[b-khizmrbu8q],
#NOTE_AdrElectronique[b-khizmrbu8q] {
    left: 657px;
    top: 50px;
    width: 358px;
    height: 28px;
    padding: 1px 6px;
    font-size: 7pt;
    font-weight: bold;
    line-height: 12px;
}

#NOTE_PaysAnnonceur[b-khizmrbu8q] {
    border: 1px solid var(--e-erreur);
    background-color: var(--e-erreur-fond);
    color: var(--e-erreur);
}

/* Ambre : elle n'empêche rien. Les jetons --e-avert* sont ceux de
   l'avertissement de la fiche tiers (17 septembre 2026). */
#NOTE_AdrElectronique[b-khizmrbu8q] {
    border: 1px solid var(--e-avert);
    background-color: var(--e-avert-fond);
    color: var(--e-avert);
}

/* Habillée depuis qu'elle a été vue à l'écran : en brun sombre sur le fond de
   la fiche, à 7 pt, elle se lisait comme un libellé de plus. D'abord en ambre,
   quand elle n'empêchait rien ; en rouge depuis que le pays du mandataire fait
   refuser l'enregistrement comme celui de l'annonceur. */
#NOTE_PaysMandataire[b-khizmrbu8q] {
    left: 357px;
    top: 157px;
    width: auto;
    max-width: 660px;
    height: 13px;
    padding: 0 6px;
    border: 1px solid var(--e-erreur);
    background-color: var(--e-erreur-fond);
    color: var(--e-erreur);
    font-size: 7pt;
    font-weight: bold;
    line-height: 11px;
    white-space: nowrap;
    text-overflow: ellipsis;
}

/* Bande 3 — numéro, date, gestionnaire */
#ETQ_NumFacture[b-khizmrbu8q] { left: 4px; top: 176px; }
#SAI_NumFacture[b-khizmrbu8q] { top: 189px; }
#ETQ_DateFacture[b-khizmrbu8q] { left: 292px; top: 175px; }
#SAI_Date_Facture[b-khizmrbu8q] { top: 188px; }
#ETQ_Acteur[b-khizmrbu8q] { left: 533px; top: 175px; }
#COMBO_ActeurFacture[b-khizmrbu8q] { top: 188px; }
#LIGNE_Ligne1[b-khizmrbu8q] { top: 220px; }

/* Bande 4 — référence client et commentaire */
#ETQ_RefClient[b-khizmrbu8q] { left: 4px; top: 229px; }
#SAI_REFERENCE_CLIENT[b-khizmrbu8q] { top: 242px; }
#ETQ_Commentaires[b-khizmrbu8q] { left: 354px; top: 228px; }
#SAI_Commentaires[b-khizmrbu8q] { top: 241px; }

/* Bande 5 — type de vente */
#ETQ_TypeVente[b-khizmrbu8q] { left: 4px; top: 272px; }
#COMBO_Type_de_Vente[b-khizmrbu8q] { top: 285px; }

/* Les deux boutons suivent leur bande. */
#BTN_AnnulerFicheFacture[b-khizmrbu8q] { top: 25px; }
#BTN_ValiderFicheFacture[b-khizmrbu8q] { top: 110px; }

/* L'en-tête grandit de 74 px, et tout ce qui est dessous descend d'autant. */
#CELL_Entete[b-khizmrbu8q] { height: 320px; }
#CELL_LigneFacture[b-khizmrbu8q] { top: 332px; }
#CELL_BasDeFacture[b-khizmrbu8q] { top: 748px; }
.fiche-facture[b-khizmrbu8q] { height: 865px; }
/* /Components/Pages/FicheTiers.razor.rz.scp.css */
/* ===========================================================================
   Géométrie de MDLC_Tiers, générée depuis ihm/champs-sources.tsv par
   tools/ihm/gen-css.sh. Ne pas retoucher a la main : regenerer.

   Coordonnées relatives à MDLC_Tiers, comme dans les sources.

   Six blocs, générés par les commandes suivantes et concaténés dans cet ordre :

     tools/ihm/gen-css.sh    MDLC_Tiers   fiche-tiers 636
     tools/ihm/gen-css.sh -f MDLC_Tiers   onglet-tiers    OngletTiers
     tools/ihm/gen-css.sh -f MDLC_Tiers   cell-btn-fiche  CELL_BtnCreaFicheTiers
     tools/ihm/gen-css.sh -f MDLC_Tiers   popup-adresse   POPUP_Adresse
     tools/ihm/gen-css.sh -f MDLC_Tiers   popup-contact   POPUP_TiersContact
     tools/ihm/gen-css.sh -f MDLC_Secteur mdl-secteur     CELL_SansNom1
   =========================================================================== */

.fiche-tiers[b-et97d9d10n] {
    position: relative;
    height: 636px;
}

.fiche-tiers > *[b-et97d9d10n] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#SAI_CodeTiers[b-et97d9d10n] { left: 6px; top: 6px; width: 236px; height: 25px; }
#SAI_Raison_Sociale_Tiers[b-et97d9d10n] { left: 248px; top: 6px; width: 394px; height: 25px; }
#OngletTiers[b-et97d9d10n] { left: 4px; top: 37px; width: 1148px; height: 539px; }
#IMG_Cadenas_Fermé[b-et97d9d10n] { left: 648px; top: 4px; width: 32px; height: 32px; }
#IMG_Cadenas_Ouvert[b-et97d9d10n] { left: 687px; top: 4px; width: 32px; height: 32px; }
#CELL_BtnCreaFicheTiers[b-et97d9d10n] { left: 1048px; top: 582px; width: 102px; height: 48px; }
#POPUP_SectEtab[b-et97d9d10n] { width: 614px; height: 221px; }
#POPUP_Adresse[b-et97d9d10n] { width: 563px; height: 471px; }
#POPUP_Facture[b-et97d9d10n] { width: 1126px; height: 863px; }
#POPUP_TiersContact[b-et97d9d10n] { width: 540px; height: 411px; }

/* --- MDLC_Tiers > OngletTiers -------------------------------------------------- */

.onglet-tiers[b-et97d9d10n] {
    position: relative;
}

.onglet-tiers > *[b-et97d9d10n] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#COMBO_REQ_EnsTiers[b-et97d9d10n] { left: 7px; top: 13px; width: 355px; height: 24px; }
#COMBO_REQ_SecteurTiers[b-et97d9d10n] { left: 7px; top: 44px; width: 325px; height: 24px; }
#SAI_Latitude_Tiers[b-et97d9d10n] { left: 622px; top: 315px; width: 219px; height: 23px; }
#SAI_Longitude_Tiers[b-et97d9d10n] { left: 622px; top: 344px; width: 219px; height: 23px; }
#CELL_Upload[b-et97d9d10n] { left: 925px; top: 219px; width: 216px; height: 119px; }
#INT_Role[b-et97d9d10n] { left: 373px; top: 13px; width: 164px; height: 115px; }
#IMG_Logo_Tiers[b-et97d9d10n] { left: 933px; top: 13px; width: 200px; height: 200px; }
#UPL_Upload[b-et97d9d10n] { left: 1001px; top: 344px; width: 80px; height: 24px; }
#CARTE_PosTiers[b-et97d9d10n] { left: 543px; top: 13px; width: 376px; height: 296px; }
#SEL_Tiers_Mand_Payeur[b-et97d9d10n] { left: 7px; top: 224px; width: 118px; height: 34px; }
#COMBO_Mandataire[b-et97d9d10n] { left: 7px; top: 194px; width: 460px; height: 24px; }
#COMBO_CondReg[b-et97d9d10n] { left: 7px; top: 276px; width: 460px; height: 24px; }
#SEL_AssujTVA[b-et97d9d10n] { left: 218px; top: 310px; width: 100px; height: 20px; }
#ZTR_AssujettiTVA[b-et97d9d10n] { left: 7px; top: 314px; width: 205px; height: 16px; }
#SAI_N_TVA[b-et97d9d10n] { left: 7px; top: 336px; width: 460px; height: 23px; }
#COMBO_Acteur[b-et97d9d10n] { left: 7px; top: 476px; width: 460px; height: 24px; }
#SAI_Code_Comptable[b-et97d9d10n] { left: 7px; top: 365px; width: 460px; height: 23px; }
#IMG_AjSecteur[b-et97d9d10n] { left: 338px; top: 43px; width: 24px; height: 24px; }
#BTN_Zoom[b-et97d9d10n] { left: 847px; top: 315px; width: 56px; height: 52px; }
#INT_Modif[b-et97d9d10n] { left: 59px; top: 96px; width: 100px; height: 50px; }
#ImageVerrou[b-et97d9d10n] { left: 1109px; top: 479px; width: 32px; height: 32px; }
#SAI_BIC[b-et97d9d10n] { left: 7px; top: 394px; width: 460px; height: 23px; }
#SAI_IBAN[b-et97d9d10n] { left: 7px; top: 423px; width: 460px; height: 23px; }
#LIB_Date_de_modification[b-et97d9d10n] { left: 7px; top: 452px; width: 311px; height: 15px; }
#BTN_SansNom1[b-et97d9d10n] { left: 937px; top: 483px; width: 120px; height: 24px; }
#TABLE_Adresses[b-et97d9d10n] { left: 7px; top: 8px; width: 1068px; height: 503px; }
#Btn_AjouterAdresse[b-et97d9d10n] { left: 1091px; top: 8px; width: 50px; height: 50px; }
#Btn_ModifierAdresse[b-et97d9d10n] { left: 1091px; top: 64px; width: 50px; height: 50px; }
#TABLE_TiersContact[b-et97d9d10n] { left: 7px; top: 8px; width: 857px; height: 503px; }
#Btn_AjouterContact[b-et97d9d10n] { left: 1091px; top: 8px; width: 50px; height: 50px; }
#Btn_ModifierContact[b-et97d9d10n] { left: 1091px; top: 64px; width: 50px; height: 50px; }
#Btn_MailContact[b-et97d9d10n] { left: 1091px; top: 120px; width: 50px; height: 50px; }
#TABLE_TiersFactures[b-et97d9d10n] { left: 7px; top: 8px; width: 875px; height: 503px; }
#Btn_Ajouter[b-et97d9d10n] { left: 1091px; top: 8px; width: 50px; height: 50px; }
#Btn_TiersModifierFacture[b-et97d9d10n] { left: 1091px; top: 64px; width: 50px; height: 50px; }
#BTN_ImprimeFacture[b-et97d9d10n] { left: 1091px; top: 120px; width: 48px; height: 48px; }

/* --- MDLC_Tiers > CELL_BtnCreaFicheTiers -------------------------------------------------- */

.cell-btn-fiche[b-et97d9d10n] {
    /* Positionne par le « > * » du bloc parent : ne pas y redeclarer
       « position », cela l'ecraserait — meme specificite, et cette regle
       vient apres. Voir tools/ihm/gen-css.sh. */
}

.cell-btn-fiche > *[b-et97d9d10n] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#BTN_ValiderTiers[b-et97d9d10n] { width: 48px; height: 48px; }
#BTN_AnnulerTiers[b-et97d9d10n] { left: 54px; width: 48px; height: 48px; }

/* --- MDLC_Tiers > POPUP_Adresse -------------------------------------------------- */

.popup-adresse[b-et97d9d10n] {
    position: relative;
}

.popup-adresse > *[b-et97d9d10n] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#SAI_Intitulé[b-et97d9d10n] { left: 19px; top: 15px; width: 500px; height: 23px; }
#SAI_AdrLig1[b-et97d9d10n] { left: 19px; top: 54px; width: 500px; height: 23px; }
#SAI_AdrLig2[b-et97d9d10n] { left: 19px; top: 83px; width: 500px; height: 23px; }
#SAI_AdrLig3[b-et97d9d10n] { left: 19px; top: 112px; width: 500px; height: 23px; }
#SAI_AdrLig4[b-et97d9d10n] { left: 19px; top: 141px; width: 500px; height: 23px; }
#SAI_CP[b-et97d9d10n] { left: 119px; top: 170px; width: 94px; height: 23px; }
#SAI_Ville[b-et97d9d10n] { left: 219px; top: 170px; width: 299px; height: 23px; }
#SAI_Pays[b-et97d9d10n] { left: 19px; top: 199px; width: 500px; height: 23px; }
#INT_Facturation[b-et97d9d10n] { left: 19px; top: 228px; width: 228px; height: 44px; }
#INT_Principale[b-et97d9d10n] { left: 253px; top: 278px; width: 130px; height: 44px; }
#INT_Physique[b-et97d9d10n] { left: 389px; top: 278px; width: 130px; height: 44px; }
#INT_Obsoléte[b-et97d9d10n] { left: 253px; top: 228px; width: 130px; height: 44px; }
#SAI_Commentaire[b-et97d9d10n] { left: 19px; top: 328px; width: 500px; height: 57px; }
#BTN_ValiderFicheAdresse[b-et97d9d10n] { left: 418px; top: 391px; width: 48px; height: 48px; }
#BTN_AnnulerFicheAdresse[b-et97d9d10n] { left: 472px; top: 391px; width: 47px; height: 49px; }

/* --- MDLC_Tiers > POPUP_TiersContact -------------------------------------------------- */

.popup-contact[b-et97d9d10n] {
    position: relative;
}

.popup-contact > *[b-et97d9d10n] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#SAI_ContNom[b-et97d9d10n] { left: 8px; top: 19px; width: 500px; height: 23px; }
#SAI_ContPrenom[b-et97d9d10n] { left: 8px; top: 48px; width: 500px; height: 23px; }
#INT_ContObsoléte[b-et97d9d10n] { left: 242px; top: 338px; width: 130px; height: 44px; }
#SAI_ContCommentaire[b-et97d9d10n] { left: 8px; top: 201px; width: 500px; height: 125px; }
#BTN_ValiderFicheAdresse1[b-et97d9d10n] { left: 407px; top: 338px; width: 48px; height: 48px; }
#BTN_AnnulerFicheAdresse1[b-et97d9d10n] { left: 461px; top: 338px; width: 47px; height: 49px; }
#COMBO_Civ[b-et97d9d10n] { left: 8px; top: 77px; width: 158px; height: 24px; }
#SAI_ContFonction[b-et97d9d10n] { left: 173px; top: 77px; width: 335px; height: 23px; }
#SAI_ContMail[b-et97d9d10n] { left: 8px; top: 107px; width: 500px; height: 23px; }
#SAI_ContGSM[b-et97d9d10n] { left: 8px; top: 136px; width: 500px; height: 23px; }
#SAI_ContFixe[b-et97d9d10n] { left: 8px; top: 165px; width: 500px; height: 23px; }
#LIB_DATE3[b-et97d9d10n] { left: 8px; top: 354px; width: 78px; height: 16px; }

/* --- MDLC_Secteur > CELL_SansNom1 -------------------------------------------------- */

.mdl-secteur[b-et97d9d10n] {
    /* Positionne par le « > * » du bloc parent : ne pas y redeclarer
       « position », cela l'ecraserait — meme specificite, et cette regle
       vient apres. Voir tools/ihm/gen-css.sh. */
}

.mdl-secteur > *[b-et97d9d10n] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#SAI_LibSect[b-et97d9d10n] { left: 22px; top: 43px; width: 523px; height: 22px; }
#CELL_BtnMDLSecteur[b-et97d9d10n] { left: 217px; top: 85px; width: 132px; height: 49px; }

/* ---------------------------------------------------------------------------
   Habillage. Écrit à la main : seules les positions ci-dessus sont générées.
   Charte Porcelaine (16 août 2026) : les couleurs viennent des jetons --e-*
   de wwwroot/app.css — plus aucune valeur en dur ici.

   Quatre règles générées ci-dessus restent sans emploi et le disent :

     #IMG_Cadenas_Fermé, #IMG_Cadenas_Ouvert — « Visible = Non » dans l'export
       PDF : deux champs image servant de banque de visuels à ImageVerrou, dont
       le code faisait « ImageVerrou..Image = IMG_Cadenas_Fermé ». Le verrou
       transposé est un seul bouton, #ImageVerrou.
     #INT_Modif — « Visible = Non » également : un interrupteur détourné en
       drapeau « la fiche a été modifiée ». C'est un champ d'état, pas un widget.
   --------------------------------------------------------------------------- */

#IMG_Cadenas_Fermé[b-et97d9d10n],
#IMG_Cadenas_Ouvert[b-et97d9d10n],
#INT_Modif[b-et97d9d10n] { display: none; }

/* POPUP_Facture : la fiche facture, instance de MDLC_Facture. Le composant
   enfant porte sa propre géométrie (FicheFacture.razor.css) ; la règle générée
   ne fixe que le cadre de la popup, qui déborderait la fiche tiers sans marge. */
#POPUP_Facture[b-et97d9d10n] { max-width: 96vw; max-height: 92vh; overflow: auto; }

/* --- Saisies et libellés ---------------------------------------------------- */

.fiche-tiers input[b-et97d9d10n],
.fiche-tiers select[b-et97d9d10n],
.fiche-tiers textarea[b-et97d9d10n] {
    width: 100%;
    height: 100%;
    padding: 2px 4px;
    border: 1px solid var(--e-champ-bord);
    background-color: var(--e-champ-fond);
    border-radius: var(--e-champ-rayon);
    color: var(--e-texte);
    font-family: inherit;
    font-size: inherit;
}

.fiche-tiers textarea[b-et97d9d10n] { resize: none; }
.fiche-tiers label[b-et97d9d10n] { color: var(--e-texte); }

/* Champs désactivés par le cadenas — « GR_ChampsInfoTiers..Etat = Inactif ». */
.fiche-tiers input:disabled[b-et97d9d10n],
.fiche-tiers select:disabled[b-et97d9d10n],
.fiche-tiers textarea:disabled[b-et97d9d10n] {
    background-color: var(--e-lecture-fond);
    color: var(--e-sourd);
}

/* SAI_CodeTiers : attribué par CréCode(), jamais saisi. */
#SAI_CodeTiers[b-et97d9d10n] { font-weight: bold; }
#SAI_Raison_Sociale_Tiers[b-et97d9d10n] { font-weight: bold; }

/* ZTR_AssujettiTVA, LIB_Date_de_modification : zones de texte statiques. */
#ZTR_AssujettiTVA[b-et97d9d10n],
#LIB_Date_de_modification[b-et97d9d10n] {
    display: flex;
    align-items: center;
    color: var(--e-texte);
    font-size: var(--e-btn-taille);
}

/* --- OngletTiers ------------------------------------------------------------ */

/* Les quatre volets partagent le même repère : dans les sources, leurs champs
   sont tous enfants directs d'OngletTiers. Un seul volet étant rendu à la fois,
   les coordonnées ne se marchent pas dessus. */
#OngletTiers[b-et97d9d10n] { border: 1px solid var(--e-table-bord); background-color: var(--e-travail); }

/* La barre d'onglets n'a pas d'original : WEBDEV dessine lui-même les languettes
   de son champ Onglet, et les sources ne lui donnent aucune géométrie. Elle est
   posée au-dessus du corps des volets, dans la bande libre à DROITE.

   Elle était calée à gauche (« left: 0 »), donc à cheval sur SAI_CodeTiers
   (6..242) et SAI_Raison_Sociale_Tiers (248..642), qui occupent la même bande
   verticale — les languettes recouvraient les deux champs. Constaté le 12 août
   2026 à la relecture de l'écran.

   Ancrée à droite plutôt qu'à un « left » calculé : la barre s'étend vers la
   gauche depuis le bord d'OngletTiers, et sa largeur dépend des libellés. Les
   quatre languettes tiennent en ~265 px, la bande est libre à partir de 642. */
.onglets[b-et97d9d10n] {
    position: absolute;
    right: 0;
    top: -27px;
    display: flex;
    gap: 2px;
}

/* Préfixées par « .fiche-tiers » — et pas par élégance. Sans ce préfixe, ces
   règles ont la même spécificité que « .fiche-tiers button » de l'habillage
   commun, qui vient après et gagne : les quatre languettes prenaient toutes le
   même bleu marine sur blanc, et LA LANGUETTE COURANTE NE SE DISTINGUAIT PLUS,
   au bold près. Vu le 12 août 2026. */
.fiche-tiers .onglets button[b-et97d9d10n] {
    padding: 3px 14px;
    border: 1px solid var(--e-table-bord);
    border-bottom: 0;
    border-radius: var(--e-champ-rayon) var(--e-champ-rayon) 0 0;
    background-color: var(--e-panneau);
    color: var(--e-texte);
    font-family: inherit;
    font-size: var(--e-btn-taille);
    cursor: pointer;
}

.fiche-tiers .onglets button:hover:not(:disabled)[b-et97d9d10n] { background-color: var(--e-sel); }

.fiche-tiers .onglets button[aria-selected="true"][b-et97d9d10n] {
    background-color: var(--e-travail);
    color: var(--e-accent);
    font-weight: bold;
}

.fiche-tiers .onglets button:disabled[b-et97d9d10n] { color: var(--e-inactif-texte); cursor: not-allowed; }

.onglet-tiers[b-et97d9d10n] { height: 100%; }

/* --- INT_Role : cinq interrupteurs cumulables ------------------------------- */

#INT_Role[b-et97d9d10n],
#SEL_Tiers_Mand_Payeur[b-et97d9d10n],
#SEL_AssujTVA[b-et97d9d10n] {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 2px;
}

#INT_Role label[b-et97d9d10n],
#SEL_Tiers_Mand_Payeur label[b-et97d9d10n],
#SEL_AssujTVA label[b-et97d9d10n] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: var(--e-btn-taille);
}

#INT_Role input[b-et97d9d10n],
#SEL_Tiers_Mand_Payeur input[b-et97d9d10n],
#SEL_AssujTVA input[b-et97d9d10n] { width: auto; height: auto; }

#SEL_AssujTVA[b-et97d9d10n] { flex-direction: row; gap: 10px; }

/* --- Logo et envoi ---------------------------------------------------------- */

#IMG_Logo_Tiers[b-et97d9d10n] {
    object-fit: contain;
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-champ-fond);
}

/* Faute de logo, le cadre reste — c'est aussi la cible de dépôt — mais vide et
   silencieux, au lieu de l'icône d'image cassée du navigateur. */
#IMG_Logo_Tiers.sans-logo[b-et97d9d10n] {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--e-inactif-texte);
    font-size: var(--e-btn-taille);
    font-style: italic;
}

/* CELL_Upload et UPL_Upload. La zone répétée ZR_Fichiers de l'original et ses
   neuf champs — nom, poids, jauge, couleur, suppression — servaient un envoi
   multiple. Le champ ne reçoit qu'un logo : un envoi unique les rend sans objet,
   comme sur PAGE_Societe. */
#CELL_Upload[b-et97d9d10n] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 8px;
    border: 1px dashed var(--e-champ-bord);
    background-color: var(--e-lecture-fond);
    border-radius: var(--e-champ-rayon);
    text-align: center;
    font-size: var(--e-btn-taille);
}

#CELL_Upload input[b-et97d9d10n] { width: 100%; height: auto; border: 0; background: none; font-size: var(--e-btn-taille); }
#CELL_Upload.masque[b-et97d9d10n] { display: none; }

/* --- Coordonnées : CARTE_PosTiers remplacée --------------------------------- */

/* La carte supposait un fournisseur cartographique, dont la clé du projet est
   compromise. À sa place, les deux coordonnées saisies et un lien vers un plan
   externe : SAI_Latitude_Tiers et SAI_Longitude_Tiers restent les champs
   d'origine, BTN_Zoom ouvre le plan au lieu de recentrer la carte. */
#CARTE_PosTiers[b-et97d9d10n] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 12px;
    border: 1px dashed var(--e-champ-bord);
    background-color: var(--e-lecture-fond);
    border-radius: var(--e-champ-rayon);
    color: var(--e-texte);
    text-align: center;
    font-size: var(--e-btn-taille);
}

#BTN_Zoom[b-et97d9d10n] {
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--e-btn-bord);
    background-color: var(--e-btn-fond);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-family: inherit;
    font-size: var(--e-btn-taille);
    text-align: center;
    text-decoration: none;
    cursor: pointer;
}

#BTN_Zoom[aria-disabled="true"][b-et97d9d10n] { border-color: var(--e-inactif-bord); color: var(--e-inactif-texte); cursor: not-allowed; }

/* BTN_SansNom1 : 120x24, visible dans l'export PDF mais sans libellé et sans
   traitement identifiable dans les sources. Rendu inerte, à identifier dans
   WEBDEV avant de lui donner un rôle. */
#BTN_SansNom1[b-et97d9d10n] { visibility: hidden; }

/* --- Verrou : ImageVerrou ---------------------------------------------------

   IL ÉTAIT INVISIBLE, ET C'EST LE SEUL MOYEN DE DÉVERROUILLER LA FICHE : sans
   lui, elle ne s'ouvre qu'en lecture et rien ne peut être modifié. Deux causes
   cumulées, aucune des deux ne produisant d'erreur :

   1. ORDRE DE PEINTURE. Les sources le posent dans OngletTiers ; la
      transposition en fait un frère de l'onglet, écrit AVANT lui. Tous deux
      sont en « position: absolute » sans z-index, donc c'est l'ordre du
      balisage qui tranche — et OngletTiers, avec son fond blanc opaque, le
      recouvrait entièrement. Vérifié par « elementFromPoint » au centre du
      bouton : il rend « onglet-tiers », pas le bouton.

   2. REPÈRE. Sa règle générée est dans le bloc d'OngletTiers, donc ses
      coordonnées sont relatives à OngletTiers — qui est lui-même à 4,37.
      Appliquées telles quelles à un frère, elles le décalaient d'autant.

   Il reste hors de l'onglet, à dessein : il verrouille la FICHE, pas un volet,
   et doit rester atteignable sur les quatre. D'où le z-index et le report des
   4,37. Vu le 12 août 2026.
   --------------------------------------------------------------------------- */

#ImageVerrou[b-et97d9d10n] {
    left: 1113px;
    top: 516px;
    z-index: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--e-btn-bord);
    border-radius: var(--e-btn-rayon);
    background-color: var(--e-btn-fond);
    font-size: 14pt;
    line-height: 1;
    cursor: pointer;
}

#ImageVerrou:hover[b-et97d9d10n] { background-color: var(--e-sel); }
#ImageVerrou.ouvert[b-et97d9d10n] { background-color: var(--e-prim-fond); border-color: var(--e-prim-fond); }

/* --- Tables : TABLE_Adresses, TABLE_TiersContact, TABLE_TiersFactures -------- */

#TABLE_Adresses[b-et97d9d10n],
#TABLE_TiersContact[b-et97d9d10n],
#TABLE_TiersFactures[b-et97d9d10n] {
    overflow: auto;
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-travail);
}

.fiche-tiers table[b-et97d9d10n] {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--e-taille);
}

.fiche-tiers thead th[b-et97d9d10n] {
    position: sticky;
    top: 0;
    z-index: 1;
    padding: var(--e-th-pad);
    background-color: var(--e-th-fond);
    color: var(--e-th-texte);
    box-shadow: inset 0 -2px 0 var(--e-th-filet);
    text-align: left;
    white-space: nowrap;
}

.fiche-tiers tbody td[b-et97d9d10n] {
    padding: var(--e-cellule-pad);
    border-bottom: 1px solid var(--e-ligne);
    color: var(--e-texte);
}

.fiche-tiers tbody tr[b-et97d9d10n] { cursor: pointer; }

/* Un double-clic selectionne le mot sous le pointeur : sans cela, ouvrir une
   ligne laisse du texte en surbrillance derriere soi. */
.fiche-tiers tbody tr[b-et97d9d10n] { user-select: none; }
.fiche-tiers tbody tr:hover[b-et97d9d10n] { background-color: var(--e-sel); }
.fiche-tiers tbody tr.selectionnee[b-et97d9d10n] { background-color: var(--e-sel); font-weight: bold; }

/* « si herit = Vrai alors TABLE_Adresses[IndiceEnCours()]..Couleur = RougeClair » :
   les adresses venues de l'enseigne, affichées mais non modifiables. */
.fiche-tiers tbody tr.heritee[b-et97d9d10n] { color: var(--e-erreur); cursor: default; }
.fiche-tiers tbody tr.heritee:hover[b-et97d9d10n] { background-color: var(--e-erreur-fond); }

.fiche-tiers .coche[b-et97d9d10n] { width: 60px; text-align: center; }
.fiche-tiers .coche input[b-et97d9d10n] { width: auto; height: auto; pointer-events: none; }
.fiche-tiers .montant[b-et97d9d10n] { text-align: right; white-space: nowrap; }
.fiche-tiers .vide[b-et97d9d10n] { padding: 12px; color: var(--e-sourd); font-style: italic; }

/* --- Boutons ---------------------------------------------------------------- */

/* Le lien du duplicata partage l'habillage des boutons : c'est un lien parce
   qu'il ouvre un document, mais il occupe un emplacement de bouton. */
.fiche-tiers button[b-et97d9d10n],
.fiche-tiers a.bouton[b-et97d9d10n] {
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--e-btn-bord);
    background-color: var(--e-btn-fond);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-family: inherit;
    font-size: var(--e-btn-taille);
    text-align: center;
    text-decoration: none;
    cursor: pointer;
}

.fiche-tiers button:hover:not(:disabled)[b-et97d9d10n],
.fiche-tiers a.bouton:hover[b-et97d9d10n] { background-color: var(--e-sel); }

.fiche-tiers button:disabled[b-et97d9d10n] {
    border-color: var(--e-inactif-bord);
    color: var(--e-inactif-texte);
    cursor: not-allowed;
}

#BTN_ValiderTiers[b-et97d9d10n],
#BTN_ValiderFicheAdresse[b-et97d9d10n],
#BTN_ValiderFicheAdresse1[b-et97d9d10n],
#BTN_ValiderFicheSecteur[b-et97d9d10n] {
    background-color: var(--e-prim-fond);
    border-color: var(--e-prim-fond);
    color: var(--e-prim-texte);
}

#BTN_ValiderTiers:hover:not(:disabled)[b-et97d9d10n],
#BTN_ValiderFicheAdresse:hover:not(:disabled)[b-et97d9d10n],
#BTN_ValiderFicheAdresse1:hover:not(:disabled)[b-et97d9d10n],
#BTN_ValiderFicheSecteur:hover:not(:disabled)[b-et97d9d10n] { background-color: var(--e-prim-hover); }

#BTN_ValiderTiers:disabled[b-et97d9d10n],
#BTN_ValiderFicheAdresse:disabled[b-et97d9d10n],
#BTN_ValiderFicheAdresse1:disabled[b-et97d9d10n],
#BTN_ValiderFicheSecteur:disabled[b-et97d9d10n] { background-color: var(--e-btn-fond); color: var(--e-inactif-texte); }

/* IMG_AjSecteur : ouvrait POPUP_SectEtab. Un bouton, faute du visuel d'origine. */
#IMG_AjSecteur[b-et97d9d10n] { font-size: 12pt; line-height: 1; }

/* Btn_MailContact ouvrait le client de messagerie — « LanceAppliAssociée
   ("mailto:" + ContMail) ». Un lien le fait nativement ; il porte donc
   l'habillage des boutons. */
a#Btn_MailContact[b-et97d9d10n] {
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--e-btn-bord);
    background-color: var(--e-btn-fond);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-size: var(--e-btn-taille);
    text-align: center;
    text-decoration: none;
}

a#Btn_MailContact:hover[b-et97d9d10n] { background-color: var(--e-sel); }

/* --- Popups : POPUP_Adresse, POPUP_TiersContact, POPUP_SectEtab -------------- */

/* PopupAffiche() posait un voile modal ; <dialog> le fait nativement, avec le
   piège de focus et la fermeture au clavier que l'original n'avait pas. */
/* Z-INDEX : une popup doit passer AU-DESSUS des en-tetes de tableau.
   Ceux-ci sont en « position: sticky » avec « z-index: 1 » pour rester
   visibles au defilement — ce qui suffit a les faire peindre par-dessus un
   <dialog open>, qui ne cree aucun contexte d empilement de lui-meme. La
   ligne d en-tete du tableau des lignes de facture traversait ainsi la
   fenetre de recherche. Vu le 12 aout 2026. */
.fiche-tiers dialog[b-et97d9d10n] {
    z-index: 10;
    padding: 0;
    border: 1px solid var(--e-cadre);
    border-radius: var(--e-rayon);
    /* Coupe le bandeau de titre aux coins arrondis. */
    overflow: hidden;
    box-shadow: var(--e-ombre);
    background-color: var(--e-travail);
    color: var(--e-texte);
    font-family: inherit;
    font-size: var(--e-taille);
}

.fiche-tiers dialog[b-et97d9d10n]::backdrop { background-color: rgba(0, 0, 0, 0.35); }

.fiche-tiers dialog h2[b-et97d9d10n] {
    margin: 0;
    padding: 4px 10px;
    background-color: var(--e-panneau);
    color: var(--e-titre);
    box-shadow: inset 0 -1px 0 var(--e-th-filet);
    font-size: var(--e-taille);
}

.popup-adresse[b-et97d9d10n],
.popup-contact[b-et97d9d10n] { display: block; }

#POPUP_SectEtab[b-et97d9d10n] { padding: 0; }
#CMOD_Secteur[b-et97d9d10n] { position: relative; left: 20px; top: 16px; width: 579px; height: 189px; }
#CELL_SansNom1[b-et97d9d10n] { position: absolute; left: 6px; top: 5px; width: 566px; height: 179px; }
#CELL_BtnMDLSecteur[b-et97d9d10n] { display: flex; gap: 6px; }
#CELL_BtnMDLSecteur button[b-et97d9d10n] { width: 48px; height: 48px; position: static; }

#CELL_BtnMDLSecteur[b-et97d9d10n],
#CELL_BtnCreaFicheTiers[b-et97d9d10n] { background: none; border: 0; }

/* INT_Facturation, INT_Obsoléte, INT_ContObsoléte : interrupteurs à une case. */
#INT_Facturation[b-et97d9d10n],
#INT_Obsoléte[b-et97d9d10n],
#INT_Principale[b-et97d9d10n],
#INT_Physique[b-et97d9d10n],
#INT_ContObsoléte[b-et97d9d10n] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: var(--e-btn-taille);
}

#INT_Facturation input[b-et97d9d10n],
#INT_Obsoléte input[b-et97d9d10n],
#INT_Principale input[b-et97d9d10n],
#INT_Physique input[b-et97d9d10n],
#INT_ContObsoléte input[b-et97d9d10n] { width: auto; height: auto; }

/* INT_Principale et INT_Physique n'ont pas de colonne dans « adresse » et le
   code de POPUP_Adresse ne les lisait pas : deux interrupteurs sans effet. */
#INT_Principale[b-et97d9d10n],
#INT_Physique[b-et97d9d10n] { display: none; }

#LIB_DATE3[b-et97d9d10n] { display: flex; align-items: center; font-size: var(--e-btn-taille); }

/* --- Messages --------------------------------------------------------------- */

/* L'original ouvrait une boîte modale : Erreur(clerreur.FormateMessage()).

   ANCRÉ PAR LE BAS depuis le 17 septembre 2026, et non plus « top: 606px ».
   Vu à l'écran ce jour-là : un message de deux lignes descendait à 646 px dans
   un cadre (#modTiers) qui en fait 640 — une barre de défilement verticale
   apparaissait, rognait la largeur, et en faisait naître une horizontale. Un
   message d'une ligne tombait juste, c'est pourquoi rien ne l'avait montré.
   Par le bas, il grandit vers le haut, dans les 30 px libres sous OngletTiers
   (qui finit à 576) : une ligne garde sa place d'avant, deux tiennent. */
.message[b-et97d9d10n] {
    left: 6px;
    top: auto;
    bottom: 4px;
    width: 1000px;
    height: auto;
    padding: 4px 8px;
    font-size: var(--e-taille);
}

.message.succes[b-et97d9d10n] { border: 1px solid var(--e-succes); background-color: var(--e-succes-fond); color: var(--e-succes); }
.message.erreur[b-et97d9d10n] { border: 1px solid var(--e-erreur); background-color: var(--e-erreur-fond); color: var(--e-erreur); }
.message.avertissement[b-et97d9d10n] { border: 1px solid var(--e-avert); background-color: var(--e-avert-fond); color: var(--e-avert); }

.messages-validation[b-et97d9d10n] { color: var(--e-erreur); font-size: var(--e-btn-taille); }
.messages-validation ul[b-et97d9d10n] { margin: 0; padding-left: 18px; }

.visuellement-cache[b-et97d9d10n] {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}


/* ===========================================================================
   LIBELLÉS DU VOLET SOCIÉTÉ — relevés le 13 août 2026 sur le site d'origine.

   ÉCRIT À LA MAIN, et placé APRÈS le bloc généré : une régénération par
   gen-css.sh réécrira les valeurs du dessus, pas celles-ci.

   D'OÙ ILS VIENNENT. Cette fiche n'a que DEUX libellés dans l'export PDF —
   LIB_Date_de_modification et UPL_Upload — et REPRISE.md portait depuis le
   8 août le point « libellés de MDLC_Tiers déduits, à confirmer ». Le client a
   ouvert le site en production sur le même tiers : ils y sont de vrais éléments
   <label>, relevés au caractère près. La coquille d'origine, « Conditions de
   réglement » sans accent grave, a été reprise telle quelle jusqu'au
   10 septembre 2026, puis corrigée par décision de séance (C3) — même
   longueur, la géométrie ne bouge pas.

   POURQUOI IL Y A DE LA PLACE. Nous avions absorbé la gouttière des libellés
   dans la largeur des champs : ceux de l'original s'arrêtent exactement où les
   nôtres s'arrêtent. Chaque champ recule donc de sa gouttière — 112 px pour les
   deux combos du haut et l'en-tête, 161 pour la colonne principale, 76 pour les
   coordonnées — et le libellé occupe la place rendue. Rien n'est agrandi.
   =========================================================================== */

.fiche-tiers .etiq-tiers[b-et97d9d10n],
.onglet-tiers .etiq-tiers[b-et97d9d10n] {
    position: absolute;
    font-size: var(--e-taille);
    color: var(--e-texte);
    line-height: 25px;
    white-space: nowrap;
}

/* --- En-tête : gouttière de 112 --- */
#ETQ_Code[b-et97d9d10n] { left: 6px; top: 6px; }
#SAI_CodeTiers[b-et97d9d10n] { left: 118px; width: 124px; }
#ETQ_Raison[b-et97d9d10n] { left: 248px; top: 6px; }
#SAI_Raison_Sociale_Tiers[b-et97d9d10n] { left: 360px; width: 282px; }

/* --- Volet Société, colonne gauche --- */
#ETQ_Enseigne[b-et97d9d10n] { left: 7px; top: 13px; }
#COMBO_REQ_EnsTiers[b-et97d9d10n] { left: 119px; width: 243px; }

#ETQ_Secteur[b-et97d9d10n] { left: 7px; top: 44px; }
#COMBO_REQ_SecteurTiers[b-et97d9d10n] { left: 119px; width: 213px; }

#ETQ_Mandataire[b-et97d9d10n] { left: 7px; top: 194px; }
#COMBO_Mandataire[b-et97d9d10n] { left: 168px; width: 299px; }

#ETQ_MandPayeur[b-et97d9d10n] { left: 7px; top: 219px; }
#SEL_Tiers_Mand_Payeur[b-et97d9d10n] { top: 244px; }

#ETQ_CondReg[b-et97d9d10n] { left: 7px; top: 276px; }
#COMBO_CondReg[b-et97d9d10n] { left: 168px; width: 299px; }

#ETQ_NumTva[b-et97d9d10n] { left: 7px; top: 336px; }
#SAI_N_TVA[b-et97d9d10n] { left: 168px; width: 299px; }

#ETQ_CodeCompta[b-et97d9d10n] { left: 7px; top: 365px; }
#SAI_Code_Comptable[b-et97d9d10n] { left: 168px; width: 299px; }

#ETQ_Bic[b-et97d9d10n] { left: 7px; top: 394px; }
#SAI_BIC[b-et97d9d10n] { left: 168px; width: 299px; }

#ETQ_Iban[b-et97d9d10n] { left: 7px; top: 423px; }
#SAI_IBAN[b-et97d9d10n] { left: 168px; width: 299px; }

#ETQ_Acteur[b-et97d9d10n] { left: 7px; top: 476px; }
#COMBO_Acteur[b-et97d9d10n] { left: 168px; width: 299px; }

/* Adresse électronique de facturation : AJOUTÉE le 24 août 2026 sous
   COMBO_Acteur, passée le 18 septembre dans POPUP_Adresse (elle dépend de
   l'agence, donc de l'adresse). Dans la popup, elle prend la bande libre
   entre les interrupteurs (bas à 272) et SAI_Commentaire (haut à 328) :
   272 + 19 = 291, bas à 314. Même colonne et même largeur que les lignes. */
/* Demande de l'utilisateur du 18/09, vue à l'écran : une zone remplie ne dit
   plus ce qu'elle est — d'où une étiquette AU-DESSUS du champ. La bande tient
   les deux : étiquette 276-290, champ 292-315, commentaire à 328. */
#ETQ_AdrElectronique[b-et97d9d10n] {
    left: 19px; top: 276px; height: 14px;
    line-height: 14px;
    font-size: var(--e-btn-taille);
    color: var(--e-texte);
    white-space: nowrap;
}
#SAI_AdrElectronique[b-et97d9d10n] { left: 19px; top: 292px; width: 500px; height: 23px; }

/* CP et ville alignés sur les lignes d'adresse (bord gauche à 19), demande de
   l'utilisateur du 18/09. L'original les décalait de 100 px (CP à 119) ; la
   ville garde son bord droit à 518 et prend la largeur rendue. Surcharge des
   positions générées, qui ne se retouchent pas. */
#SAI_CP[b-et97d9d10n] { left: 19px; }
#SAI_Ville[b-et97d9d10n] { left: 119px; width: 399px; }

/* La colonne de boutons du volet Adresses, demande de l'utilisateur du 18/09 :
   plus grands, et collés au tableau — celui-ci finit à 1075 (7 + 1068), les
   boutons commençaient à 1091, 16 px de blanc. Désormais 60 × 60 à partir de
   1081 : même bord droit qu'avant (1141), pas de 66. Btn_DupliquerAdresse,
   AJOUTÉ le 18/09, prend le troisième rang à la même taille que les autres.
   « Dupliquer » mesure 50 px à la taille des boutons : marges intérieures
   horizontales réduites à 2 px pour les trois, il tient dans les 56 restants. */
#Btn_AjouterAdresse[b-et97d9d10n] { left: 1081px; top: 8px; width: 60px; height: 60px; }
#Btn_ModifierAdresse[b-et97d9d10n] { left: 1081px; top: 74px; width: 60px; height: 60px; }
#Btn_DupliquerAdresse[b-et97d9d10n] { left: 1081px; top: 140px; width: 60px; height: 60px; }

.fiche-tiers #Btn_AjouterAdresse[b-et97d9d10n],
.fiche-tiers #Btn_ModifierAdresse[b-et97d9d10n],
.fiche-tiers #Btn_DupliquerAdresse[b-et97d9d10n] {
    padding-left: 2px;
    padding-right: 2px;
}

/* Le titre du groupe de rôles, au-dessus de ses cinq cases. */
#ETQ_Role[b-et97d9d10n] { left: 373px; top: 0; line-height: 14px; font-weight: bold; }
#INT_Role[b-et97d9d10n] { top: 17px; }

/* --- Coordonnées : gouttière de 76 --- */
#ETQ_Latitude[b-et97d9d10n] { left: 622px; top: 315px; line-height: 23px; }
#SAI_Latitude_Tiers[b-et97d9d10n] { left: 698px; width: 143px; }
#ETQ_Longitude[b-et97d9d10n] { left: 622px; top: 344px; line-height: 23px; }
#SAI_Longitude_Tiers[b-et97d9d10n] { left: 698px; width: 143px; }
/* /Components/Pages/RechercheTiers.razor.rz.scp.css */
/* ===========================================================================
   Géométrie de MDLC_RechTiers, générée depuis ihm/champs-sources.tsv par
   tools/ihm/gen-css.sh. Ne pas retoucher a la main : regenerer.

   Coordonnées relatives à MDLC_RechTiers, comme dans les sources.

   Trois blocs, générés par les commandes suivantes et concaténés :

     tools/ihm/gen-css.sh    MDLC_RechTiers recherche-tiers 500
     tools/ihm/gen-css.sh -f MDLC_RechTiers cell-rech        CELL_SansNom2
     tools/ihm/gen-css.sh -f MDLC_RechTiers cell-type-liste  CELL_SansNom2.CELL_TypeListe
   =========================================================================== */

.recherche-tiers[b-v9q98eyrom] {
    position: relative;
    height: 500px;
}

.recherche-tiers > *[b-v9q98eyrom] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#CELL_SansNom2[b-v9q98eyrom] { width: 700px; height: 500px; }

/* --- MDLC_RechTiers > CELL_SansNom2 -------------------------------------------------- */

.cell-rech[b-v9q98eyrom] {
    position: relative;
}

.cell-rech > *[b-v9q98eyrom] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#SAI_Valeur_recherchée[b-v9q98eyrom] { left: 111px; top: 54px; width: 408px; height: 23px; }
#ZTR_Recherche_d_un_Tiers[b-v9q98eyrom] { left: 196px; top: 15px; width: 300px; height: 20px; }
#BTN_RechercheTiers[b-v9q98eyrom] { left: 534px; top: 41px; width: 48px; height: 48px; }
#BTN_ValidChoixTiers[b-v9q98eyrom] { left: 262px; top: 432px; width: 48px; height: 48px; }
#BTN_AnnuleChoixTiers[b-v9q98eyrom] { left: 383px; top: 432px; width: 48px; height: 48px; }
#BTN_FermePopup[b-v9q98eyrom] { left: 35px; top: 432px; width: 80px; height: 24px; }
#CELL_TypeListe[b-v9q98eyrom] { left: 8px; top: 96px; width: 676px; height: 323px; }
#SAI_IDSel[b-v9q98eyrom] { left: 494px; top: 445px; width: 189px; height: 23px; }

/* --- MDLC_RechTiers > CELL_SansNom2.CELL_TypeListe -------------------------------------------------- */

.cell-type-liste[b-v9q98eyrom] {
    /* Positionne par le « > * » du bloc parent : ne pas y redeclarer
       « position », cela l'ecraserait — meme specificite, et cette regle
       vient apres. Voir tools/ihm/gen-css.sh. */
}

.cell-type-liste > *[b-v9q98eyrom] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#TABLEH_Tiers[b-v9q98eyrom] { width: 674px; height: 321px; }
#TABLE_Tiers[b-v9q98eyrom] { width: 674px; height: 321px; }

/* ---------------------------------------------------------------------------
   Habillage. Écrit à la main : seules les positions ci-dessus sont générées.

   SAI_IDSel est généré mais sans emploi : un champ de saisie détourné en
   variable, où le code rangeait l'identifiant choisi avant de fermer la popup.
   C'est un état, pas un widget.
   --------------------------------------------------------------------------- */

#SAI_IDSel[b-v9q98eyrom] { display: none; }

#ZTR_Recherche_d_un_Tiers[b-v9q98eyrom] {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--e-titre);
    font-size: 10pt;
    font-weight: var(--e-titre-graisse);
}

#SAI_Valeur_recherchée[b-v9q98eyrom] {
    padding: 2px 4px;
    border: 1px solid var(--e-champ-bord);
    background-color: var(--e-champ-fond);
    border-radius: var(--e-champ-rayon);
    color: var(--e-texte);
    font-family: inherit;
    font-size: inherit;
}

#TABLEH_Tiers[b-v9q98eyrom],
#TABLE_Tiers[b-v9q98eyrom] {
    overflow: auto;
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-travail);
}

.recherche-tiers table[b-v9q98eyrom] {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--e-taille);
}

.recherche-tiers thead th[b-v9q98eyrom] {
    position: sticky;
    top: 0;
    z-index: 1;
    padding: var(--e-th-pad);
    background-color: var(--e-th-fond);
    color: var(--e-th-texte);
    box-shadow: inset 0 -2px 0 var(--e-th-filet);
    text-align: left;
    white-space: nowrap;
}

.recherche-tiers tbody td[b-v9q98eyrom] {
    padding: var(--e-cellule-pad);
    border-bottom: 1px solid var(--e-ligne);
    color: var(--e-texte);
}

.recherche-tiers tbody tr[b-v9q98eyrom] { cursor: pointer; }

/* Un double-clic selectionne le mot sous le pointeur : sans cela, ouvrir une
   ligne laisse du texte en surbrillance derriere soi. */
.recherche-tiers tbody tr[b-v9q98eyrom] { user-select: none; }
.recherche-tiers tbody tr:hover[b-v9q98eyrom] { background-color: var(--e-sel); }
.recherche-tiers tbody tr.selectionnee[b-v9q98eyrom] { background-color: var(--e-sel); font-weight: bold; }

.recherche-tiers .coche[b-v9q98eyrom] { width: 70px; text-align: center; }
.recherche-tiers .coche input[b-v9q98eyrom] { pointer-events: none; }
.recherche-tiers .vide[b-v9q98eyrom] { padding: 12px; color: var(--e-sourd); font-style: italic; }

.recherche-tiers button[b-v9q98eyrom] {
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--e-btn-bord);
    background-color: var(--e-btn-fond);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-family: inherit;
    font-size: var(--e-btn-taille);
    text-align: center;
    cursor: pointer;
}

.recherche-tiers button:hover:not(:disabled)[b-v9q98eyrom] { background-color: var(--e-sel); }

.recherche-tiers button:disabled[b-v9q98eyrom] {
    border-color: var(--e-inactif-bord);
    color: var(--e-inactif-texte);
    cursor: not-allowed;
}

#BTN_RechercheTiers[b-v9q98eyrom],
#BTN_ValidChoixTiers[b-v9q98eyrom] {
    background-color: var(--e-prim-fond);
    border-color: var(--e-prim-fond);
    color: var(--e-prim-texte);
}

#BTN_RechercheTiers:hover:not(:disabled)[b-v9q98eyrom],
#BTN_ValidChoixTiers:hover:not(:disabled)[b-v9q98eyrom] { background-color: var(--e-prim-hover); }

#BTN_ValidChoixTiers:disabled[b-v9q98eyrom] { background-color: var(--e-btn-fond); color: var(--e-inactif-texte); }

/* DÉPLACÉ le 17 septembre 2026. Il était à (8, 424) sur 500 px de large, et
   les trois boutons commencent à 432 : il passait DESSOUS, illisible. Personne
   ne l'avait vu — son seul texte d'alors, « Veuillez sélectionner une
   adresse », ne sort que si l'on valide sans choix, ce que le bouton désactivé
   empêche. L'avertissement de pays, lui, sort à chaque clic sur une ligne
   fautive. Il prend la place libre à droite de BTN_AnnuleChoixTiers (fin à
   431) : 244 px jusqu'au bord de la liste, sur la hauteur des boutons. */
.message[b-v9q98eyrom] {
    left: 440px;
    top: 426px;
    width: 244px;
    height: auto;
    line-height: 1.25;
    padding: 4px 8px;
    border: 1px solid var(--e-erreur);
    background-color: var(--e-erreur-fond);
    color: var(--e-erreur);
    border-radius: var(--e-btn-rayon);
    font-size: var(--e-btn-taille);
}

.visuellement-cache[b-v9q98eyrom] {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}

/* /Components/Pages/Societe.razor.rz.scp.css */
/* ===========================================================================
   Géométrie de PAGE_Societe, générée depuis ihm/champs-sources.tsv par
   tools/ihm/gen-css.sh. Ne pas retoucher a la main : regenerer.

   Coordonnées relatives à Zone_Zone_de_Travail, comme dans les sources.
   =========================================================================== */

.page-societe[b-zsn0b0r3uj] {
    position: relative;
    height: 718px;
}

.page-societe > *[b-zsn0b0r3uj] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

/* RELAIS DU REPÈRE À TRAVERS LE <form>.

   « EditForm » rend un <form>, que les sources ne connaissent pas : la page
   WEBDEV n'a pas de formulaire, elle a des champs et un bouton. Ce niveau
   supplémentaire coupait « .page-societe > * » de tous les champs, qui
   retombaient dans le flux — 48 champs empilés en haut à gauche, le titre
   par-dessus la première ligne, les intitulés sur leurs saisies.

   Le formulaire se cale donc sur la page et redistribue le positionnement
   absolu, comme .plan-ligne sur la fiche facture. « inset: 0 » plutôt qu'une
   position statique : il ne dépend ainsi ni de l'ordre ni de la présence de ses
   frères — le bandeau de message, lui aussi enfant de la page, apparaît et
   disparaît. Constaté le 12 août 2026. */
.plan-societe[b-zsn0b0r3uj] { position: absolute; inset: 0; }

.plan-societe > *[b-zsn0b0r3uj] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#LIB_Paramètre_de_la_Société[b-zsn0b0r3uj] { left: 10px; top: 6px; width: 279px; height: 23px; }
#SAI_Raison_Sociale[b-zsn0b0r3uj] { left: 10px; top: 37px; width: 389px; height: 25px; }
#SAI_ParamLig1[b-zsn0b0r3uj] { left: 112px; top: 71px; width: 665px; height: 22px; }
#IMG_Logo[b-zsn0b0r3uj] { left: 853px; top: 71px; width: 300px; height: 300px; }
#ZTR_Adresse[b-zsn0b0r3uj] { left: 32px; top: 75px; width: 74px; height: 15px; }
#SAI_ParamLig2[b-zsn0b0r3uj] { left: 112px; top: 98px; width: 665px; height: 23px; }
#SAI_ParamLig3[b-zsn0b0r3uj] { left: 112px; top: 125px; width: 665px; height: 23px; }
#SAI_ParamCp[b-zsn0b0r3uj] { left: 112px; top: 152px; width: 79px; height: 23px; }
#SAI_ParamVille[b-zsn0b0r3uj] { left: 197px; top: 152px; width: 580px; height: 23px; }
#SAI_ParamTel[b-zsn0b0r3uj] { left: 112px; top: 179px; width: 196px; height: 23px; }
#SAI_ParamEmail[b-zsn0b0r3uj] { left: 416px; top: 179px; width: 361px; height: 23px; }
#ZTR_Tel[b-zsn0b0r3uj] { left: 32px; top: 183px; width: 74px; height: 15px; }
#ZTR_Mail[b-zsn0b0r3uj] { left: 369px; top: 183px; width: 41px; height: 15px; }
#SAI_ParamSiret[b-zsn0b0r3uj] { left: 32px; top: 206px; width: 416px; height: 25px; }
#SAI_Capital[b-zsn0b0r3uj] { left: 465px; top: 206px; width: 312px; height: 25px; }
#SAI_ParamNumTVA[b-zsn0b0r3uj] { left: 32px; top: 235px; width: 416px; height: 25px; }
#SAI_Forme_Juridique[b-zsn0b0r3uj] { left: 466px; top: 235px; width: 311px; height: 26px; }
#LIB_Factures[b-zsn0b0r3uj] { left: 10px; top: 267px; width: 100px; height: 20px; }
#SAI_FacEscompte[b-zsn0b0r3uj] { left: 134px; top: 293px; width: 643px; height: 26px; }
#ZTR_Texte_Escompte[b-zsn0b0r3uj] { left: 32px; top: 299px; width: 92px; height: 15px; }
#SAI_FacLeg[b-zsn0b0r3uj] { left: 134px; top: 324px; width: 643px; height: 54px; }
#ZTR_Texte_Legal[b-zsn0b0r3uj] { left: 32px; top: 331px; width: 74px; height: 15px; }
#SAI_ParamLibRIB[b-zsn0b0r3uj] { left: 134px; top: 383px; width: 643px; height: 26px; }
#ZTR_RIB[b-zsn0b0r3uj] { left: 32px; top: 389px; width: 39px; height: 15px; }
#SAI_SAI_ParamLibBIC[b-zsn0b0r3uj] { left: 134px; top: 413px; width: 155px; height: 28px; }
#SAI_SAI_ParamLibIBAN[b-zsn0b0r3uj] { left: 295px; top: 415px; width: 362px; height: 26px; }
#SAI_ParamTauxTVA[b-zsn0b0r3uj] { left: 133px; top: 450px; width: 73px; height: 26px; }
#COMBO_NumFact[b-zsn0b0r3uj] { left: 394px; top: 451px; width: 385px; height: 24px; }
#ZTR_Taux_de_TVA[b-zsn0b0r3uj] { left: 32px; top: 456px; width: 80px; height: 15px; }
#SAI_FacSiège[b-zsn0b0r3uj] { left: 134px; top: 481px; width: 645px; height: 27px; }
#ZTR_Texte_Siège[b-zsn0b0r3uj] { left: 30px; top: 487px; width: 92px; height: 15px; }
#LIB_Bons_de_Commande[b-zsn0b0r3uj] { left: 10px; top: 549px; width: 174px; height: 20px; }
#SAI_CGV[b-zsn0b0r3uj] { left: 116px; top: 584px; width: 468px; height: 71px; }
#ZTR_Texte_CGV[b-zsn0b0r3uj] { left: 30px; top: 584px; width: 80px; height: 15px; }
#LIB_Relance[b-zsn0b0r3uj] { left: 605px; top: 548px; width: 174px; height: 20px; }
#SAI_RelFact[b-zsn0b0r3uj] { left: 692px; top: 584px; width: 468px; height: 71px; }
#ZTR_Texte_bas[b-zsn0b0r3uj] { left: 613px; top: 583px; width: 73px; height: 15px; }
#LIB_Autres[b-zsn0b0r3uj] { left: 14px; top: 661px; width: 174px; height: 20px; }
#BTN_SocValider[b-zsn0b0r3uj] { left: 1048px; top: 664px; width: 48px; height: 48px; }
#BTN_SocAnnuler[b-zsn0b0r3uj] { left: 1118px; top: 664px; width: 48px; height: 48px; }
#SAI_NBVisu[b-zsn0b0r3uj] { left: 243px; top: 682px; width: 53px; height: 26px; }
#ZTR_Nb_de_visuels_par[b-zsn0b0r3uj] { left: 32px; top: 687px; width: 205px; height: 17px; }
#CELL_Upload1[b-zsn0b0r3uj] { left: 895px; top: 380px; width: 216px; height: 162px; }
#UPL_Upload1[b-zsn0b0r3uj] { left: 971px; top: 548px; width: 80px; height: 24px; }
#SEL_TVA[b-zsn0b0r3uj] { left: 314px; top: 666px; width: 145px; height: 43px; }
#SAI_Texte_TVA[b-zsn0b0r3uj] { left: 465px; top: 683px; width: 424px; height: 25px; }
#SAI_ExoTVA[b-zsn0b0r3uj] { left: 136px; top: 513px; width: 643px; height: 26px; }
#ZTR_Texte_Exo_TVA[b-zsn0b0r3uj] { left: 34px; top: 519px; width: 92px; height: 30px; }

/* ---------------------------------------------------------------------------
   Habillage. Écrit à la main : seules les positions ci-dessus sont générées.
   Charte Porcelaine (16 août 2026) : les couleurs viennent des jetons --e-*
   de wwwroot/app.css — plus aucune valeur en dur ici.
   --------------------------------------------------------------------------- */

.page-societe input[b-zsn0b0r3uj],
.page-societe select[b-zsn0b0r3uj],
.page-societe textarea[b-zsn0b0r3uj] {
    width: 100%;
    height: 100%;
    padding: 2px 4px;
    border: 1px solid var(--e-champ-bord);
    background-color: var(--e-champ-fond);
    border-radius: var(--e-champ-rayon);
    color: var(--e-texte);
    font-family: inherit;
    font-size: inherit;
}

.page-societe textarea[b-zsn0b0r3uj] { resize: none; }

/* Libellés : les ZTR_* de l'original, des zones de texte statiques. */
.page-societe label[b-zsn0b0r3uj] { color: var(--e-texte); }

/* LIB_* : les intertitres de section. */
#LIB_Paramètre_de_la_Société[b-zsn0b0r3uj] { font-size: 12pt; font-weight: var(--e-titre-graisse); color: var(--e-titre); }

#LIB_Factures[b-zsn0b0r3uj],
#LIB_Bons_de_Commande[b-zsn0b0r3uj],
#LIB_Relance[b-zsn0b0r3uj],
#LIB_Autres[b-zsn0b0r3uj],
#LIB_Facturation_Electronique[b-zsn0b0r3uj] {
    font-size: 10pt;
    font-weight: var(--e-titre-graisse);
    color: var(--e-titre);
    border-bottom: 1px solid var(--e-th-filet);
}

/* ---------------------------------------------------------------------------
   Facturation électronique — section AJOUTÉE le 24 août 2026 (lot 8,
   sous-lot A), sans équivalent WEBDEV. Elle vit SOUS la page d'origine :
   aucune position générée ne bouge, seule la hauteur de page s'étend — et le
   résumé de validation descend avec elle (il vivait à 712, dans la zone
   annexée). Une régénération de la géométrie ne touche pas ce bloc, les
   identifiants n'existant pas dans les sources.
   --------------------------------------------------------------------------- */
.page-societe[b-zsn0b0r3uj] { height: 830px; }

#LIB_Facturation_Electronique[b-zsn0b0r3uj] { left: 14px; top: 728px; width: 274px; height: 20px; }
#ZTR_Indemnite_Recouvrement[b-zsn0b0r3uj] { left: 32px; top: 768px; width: 205px; height: 17px; }
#SAI_FacRec[b-zsn0b0r3uj] { left: 243px; top: 762px; width: 534px; height: 26px; }

#IMG_Logo[b-zsn0b0r3uj] { object-fit: contain; border: 1px solid var(--e-table-bord); background-color: var(--e-champ-fond); }

/* BTN_SocValider / BTN_SocAnnuler : boutons image dans l'original. Faute des
   deux visuels d'origine, ils portent ici un intitulé lisible. */
.page-societe .btn-soc[b-zsn0b0r3uj] {
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--e-btn-bord);
    background-color: var(--e-btn-fond);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-family: inherit;
    font-size: var(--e-btn-taille);
    cursor: pointer;
}

.page-societe .btn-soc:hover[b-zsn0b0r3uj] { background-color: var(--e-sel); }

#BTN_SocValider[b-zsn0b0r3uj] {
    background-color: var(--e-prim-fond);
    border-color: var(--e-prim-fond);
    color: var(--e-prim-texte);
}
#BTN_SocValider:hover[b-zsn0b0r3uj] { background-color: var(--e-prim-hover); }

/* SEL_TVA : sélecteur à deux options. */
#SEL_TVA[b-zsn0b0r3uj] { display: flex; flex-direction: column; justify-content: center; gap: 2px; }
#SEL_TVA label[b-zsn0b0r3uj] { display: flex; align-items: center; gap: 6px; }
#SEL_TVA input[b-zsn0b0r3uj] { width: auto; height: auto; }

/* SAI_Texte_TVA n'apparaît que hors assujettissement — « si SEL_TVA = 2 ». */
#SAI_Texte_TVA.masque[b-zsn0b0r3uj] { display: none; }

/* CELL_Upload1 et UPL_Upload1. Les 12 champs de la zone répétée d'origine
   (jauge de progression, taille, suppression) n'ont pas d'équivalent utile :
   un envoi unique remplace l'upload multiple. */
#CELL_Upload1[b-zsn0b0r3uj] {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 8px;
    border: 1px dashed var(--e-champ-bord);
    background-color: var(--e-lecture-fond);
    border-radius: var(--e-champ-rayon);
    text-align: center;
}

#CELL_Upload1 input[b-zsn0b0r3uj] { width: 100%; height: auto; border: 0; background: none; font-size: var(--e-btn-taille); }

#UPL_Upload1[b-zsn0b0r3uj] {
    border: 1px solid var(--e-btn-bord);
    background-color: var(--e-btn-fond);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-family: inherit;
    font-size: var(--e-btn-taille);
    cursor: pointer;
}

#UPL_Upload1:hover[b-zsn0b0r3uj] { background-color: var(--e-sel); }
#UPL_Upload1:disabled[b-zsn0b0r3uj] { border-color: var(--e-inactif-bord); color: var(--e-inactif-texte); cursor: default; }

/* Messages — sans équivalent WEBDEV, qui ouvrait une boîte modale. */
.message[b-zsn0b0r3uj] {
    left: 10px;
    top: 30px;
    width: 780px;
    height: auto;
    padding: 4px 8px;
}

.message.succes[b-zsn0b0r3uj] { border: 1px solid var(--e-succes); background-color: var(--e-succes-fond); color: var(--e-succes); }
.message.erreur[b-zsn0b0r3uj] { border: 1px solid var(--e-erreur); background-color: var(--e-erreur-fond); color: var(--e-erreur); }

/* Descendu de 712 à 806 le 24 août : la section « Facturation électronique »
   occupe désormais la bande 728-788. */
.messages-validation[b-zsn0b0r3uj] { left: 10px; top: 806px; width: 780px; height: auto; color: var(--e-erreur); }
.messages-validation ul[b-zsn0b0r3uj] { margin: 0; padding-left: 18px; }

.visuellement-cache[b-zsn0b0r3uj] {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}
/* /Components/Pages/Tiers.razor.rz.scp.css */
/* ===========================================================================
   Géométrie de Page_Liste_Tiers, générée depuis ihm/champs-sources.tsv par
   tools/ihm/gen-css.sh. Ne pas retoucher a la main : regenerer.

   Coordonnées relatives à Zone_Zone_de_Travail > Cell_Tiers, comme dans les sources.
   =========================================================================== */

.page-liste-tiers[b-be16kkfvw4] {
    position: relative;
    height: 648px;
}

.page-liste-tiers > *[b-be16kkfvw4] {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
}

#Table_ListeTiers[b-be16kkfvw4] { left: 27px; top: 46px; width: 1075px; height: 592px; }
#SAI_TiersChercher[b-be16kkfvw4] { left: 812px; top: 15px; width: 260px; height: 25px; }
#modTiers[b-be16kkfvw4] { left: 10px; top: 4px; width: 1160px; height: 640px; }
#Btn_Modifier[b-be16kkfvw4] { left: 1113px; top: 102px; width: 50px; height: 50px; }
#Btn_Ajouter[b-be16kkfvw4] { left: 1113px; top: 46px; width: 50px; height: 50px; }
#Btn_TiersChercher[b-be16kkfvw4] { left: 1078px; top: 14px; width: 26px; height: 26px; }

/* ---------------------------------------------------------------------------
   Habillage. Écrit à la main : seules les positions ci-dessus sont générées.
   Charte Porcelaine (16 août 2026) : les couleurs viennent des jetons --e-*
   de wwwroot/app.css — plus aucune valeur en dur ici.
   --------------------------------------------------------------------------- */

/* modTiers : le plan 2, instance du modèle MDLC_Tiers. Le composant enfant
   porte sa propre géométrie (FicheTiers.razor.css) ; cette règle ne fixe que
   son cadre dans Cell_Tiers. Les styles isolés du parent ne l'atteignent pas. */
#modTiers[b-be16kkfvw4] { overflow: auto; }

/* Table_ListeTiers : 27,46 1075x592, colonnes triables. */
#Table_ListeTiers[b-be16kkfvw4] {
    overflow: auto;
    border: 1px solid var(--e-table-bord);
    background-color: var(--e-travail);
}

#Table_ListeTiers table[b-be16kkfvw4] {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--e-taille);
}

#Table_ListeTiers thead th[b-be16kkfvw4] {
    position: sticky;
    top: 0;
    z-index: 1;
    padding: var(--e-th-pad);
    background-color: var(--e-th-fond);
    color: var(--e-th-texte);
    box-shadow: inset 0 -2px 0 var(--e-th-filet);
    text-align: left;
    white-space: nowrap;
    cursor: pointer;
    user-select: none;
}

#Table_ListeTiers thead th:hover[b-be16kkfvw4] { background-color: var(--e-th-hover); }

#Table_ListeTiers tbody td[b-be16kkfvw4] {
    padding: var(--e-cellule-pad);
    border-bottom: 1px solid var(--e-ligne);
    color: var(--e-texte);
}

#Table_ListeTiers tbody tr[b-be16kkfvw4] { cursor: pointer; }

/* Un double-clic selectionne le mot sous le pointeur : sans cela, ouvrir une
   ligne laisse du texte en surbrillance derriere soi. */
#Table_ListeTiers tbody tr[b-be16kkfvw4] { user-select: none; }
#Table_ListeTiers tbody tr:hover[b-be16kkfvw4] { background-color: var(--e-sel); }
#Table_ListeTiers tbody tr.selectionnee[b-be16kkfvw4] { background-color: var(--e-sel); font-weight: bold; }

/* Les cinq colonnes de rôle : 50 px, cases à cocher en lecture seule. */
#Table_ListeTiers .role[b-be16kkfvw4] { width: 50px; text-align: center; }
#Table_ListeTiers .role input[b-be16kkfvw4] { pointer-events: none; }

#Table_ListeTiers .vide[b-be16kkfvw4] { padding: 12px; color: var(--e-sourd); font-style: italic; }

/* SAI_TiersChercher : 812,15 260x25 */
#SAI_TiersChercher[b-be16kkfvw4] {
    padding: 2px 4px;
    border: 1px solid var(--e-champ-bord);
    background-color: var(--e-champ-fond);
    border-radius: var(--e-champ-rayon);
    color: var(--e-texte);
    font-family: inherit;
    font-size: inherit;
}

/* Btn_TiersChercher, Btn_Ajouter, Btn_Modifier : boutons image dans l'original.
   Faute des visuels d'origine, ils portent un intitulé lisible. */
.page-liste-tiers button[b-be16kkfvw4] {
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--e-btn-bord);
    background-color: var(--e-btn-fond);
    color: var(--e-btn-texte);
    border-radius: var(--e-btn-rayon);
    font-family: inherit;
    font-size: var(--e-btn-taille);
    cursor: pointer;
}

.page-liste-tiers button:hover:not(:disabled)[b-be16kkfvw4] { background-color: var(--e-sel); }

.page-liste-tiers button:disabled[b-be16kkfvw4] {
    border-color: var(--e-inactif-bord);
    color: var(--e-inactif-texte);
    cursor: not-allowed;
}

#Btn_TiersChercher[b-be16kkfvw4] {
    background-color: var(--e-prim-fond);
    border-color: var(--e-prim-fond);
    color: var(--e-prim-texte);
}
#Btn_TiersChercher:hover[b-be16kkfvw4] { background-color: var(--e-prim-hover); }

.visuellement-cache[b-be16kkfvw4] {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}
