h1:focus {
    outline: none;
}

.valid.modified:not([type=checkbox]) {
    outline: 1px solid #26b050;
}

.invalid {
    outline: 1px solid #e50000;
}

.validation-message {
    color: #e50000;
}

.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "An error has occurred."
    }

.darker-border-checkbox.form-check-input {
    border-color: #929292;
}

.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder {
    color: var(--bs-secondary-color);
    text-align: end;
}

.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder {
    text-align: start;
}
.erreur-base {
    color: #b32121;
    font-weight: 600;
}

/* ---- Connexion et mot de passe (pages en rendu statique, sans composants DevExpress) ---- */
.page-connexion {
    position: relative;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    background: #eef2f7;
}

/* Logo de l'éditeur, discret, en bas à droite de la page de connexion */
.logo-editeur {
    position: absolute;
    right: 1.25rem;
    bottom: 1rem;
    width: 90px;
    height: auto;
    opacity: 0.85;
}

@media (max-width: 480px), (max-height: 560px) {
    .logo-editeur {
        position: static;
        margin: 0 0 1rem;
        width: 70px;
    }
}

.carte-connexion {
    width: calc(100% - 2rem);
    box-sizing: border-box;
    max-width: 380px;
    margin: 1rem;
    padding: 2rem;
    background: #fff;
    border-radius: 8px;
    box-shadow: 0 4px 18px rgba(0, 0, 0, 0.12);
}

.titre-connexion {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 1.5rem;
}

.logo-connexion {
    width: 220px;
    height: auto;
}

.titre-connexion .nom-appli {
    font-size: 1.6rem;
    font-weight: 700;
    color: #1b4f8a;
}

.titre-connexion .version,
.aide-connexion {
    font-size: 0.85rem;
    color: #6b7280;
}

.titre-formulaire {
    font-size: 1.2rem;
    margin: 0 0 1rem;
}

.formulaire-connexion {
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
}

.formulaire-connexion input {
    padding: 0.55rem 0.7rem;
    border: 1px solid #c3cad5;
    border-radius: 4px;
    font-size: 1rem;
    margin-bottom: 0.6rem;
}

.formulaire-connexion input:focus {
    outline: 2px solid #1b4f8a;
    border-color: #1b4f8a;
}

.bouton-principal {
    margin-top: 0.5rem;
    padding: 0.6rem;
    border: none;
    border-radius: 4px;
    background: #1b4f8a;
    color: #fff;
    font-size: 1rem;
    cursor: pointer;
}

.bouton-principal:hover {
    background: #163f6e;
}

.lien-secondaire {
    text-align: center;
    margin-top: 0.5rem;
}

.message-erreur {
    color: #b32121;
    font-weight: 600;
    margin: 0.2rem 0;
}

.information {
    color: #1b4f8a;
}

/* ---- Bandeau : utilisateur connecté et déconnexion ---- */
.utilisateur {
    display: inline-flex;
    align-items: center;
    gap: 0.8rem;
    margin-left: 1rem;
}

.form-deconnexion {
    display: inline;
    margin: 0;
}

.bouton-lien {
    background: none;
    border: none;
    padding: 0;
    color: inherit;
    text-decoration: underline;
    cursor: pointer;
    font: inherit;
}

/* ==== Lot 1.3b : accueil, cadre des modules, menus (icônes Fluent UI, wwwroot/icones) ==== */
:root {
    --aerociel-bleu: #1b4f8a;
    --aerociel-bleu-clair: #eef4fb;
    --aerociel-gris: #4b5563;
    --aerociel-bordure: #e5e7eb;
}

#blazor-error-ui {
    color-scheme: light only;
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

#blazor-error-ui .dismiss {
    cursor: pointer;
    position: absolute;
    right: 0.75rem;
    top: 0.5rem;
}

/* Icône : SVG utilisé comme masque, peint dans la couleur du texte. */
.icone {
    display: inline-block;
    flex: none;
    width: 22px;
    height: 22px;
    background-color: currentColor;
    -webkit-mask: var(--icone) center / contain no-repeat;
    mask: var(--icone) center / contain no-repeat;
}

.icone-petite { width: 16px; height: 16px; }
.icone-grande { width: 28px; height: 28px; }
.icone-geante { width: 64px; height: 64px; color: #9aa9bb; }

.grise {
    color: #9ca3af !important;
    cursor: default;
}

/* ---- Barre du haut (accueil et modules) ---- */
.barre-haut {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    height: 56px;
    padding: 0 0.9rem;
    background: #fff;
    border-bottom: 1px solid var(--aerociel-bordure);
    position: relative;
    z-index: 20;
}

.barre-logo {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    text-decoration: none;
    color: inherit;
}

.barre-logo img { height: 36px; width: auto; }
.barre-logo .barre-logo-aerociel { height: 34px; }
.barre-module { font-weight: 600; font-size: 1.05rem; color: #1f2937; }
.barre-titre { font-weight: 600; font-size: 1.1rem; color: #1f2937; margin-left: 0.8rem; }
.barre-espace { flex: 1; }
.barre-version { color: #6b7280; font-size: 0.85rem; }

/* ---- Navigation (0.59.0) : bouton Retour et fil d'Ariane ---- */
.bouton-retour {
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    padding: 0.3rem 0.65rem;
    border: 1px solid var(--aerociel-bordure);
    border-radius: 6px;
    color: #1f2937;
    font-size: 0.9rem;
    text-decoration: none;
    white-space: nowrap;
}
.bouton-retour:hover { background: var(--aerociel-bleu-clair); color: var(--aerociel-bleu); border-color: var(--aerociel-bleu); }
.bouton-retour .icone { width: 18px; height: 18px; }

.fil-ariane {
    /* Flèches pleines collées (choix du 13/11/2026) : du plus foncé (accueil) au plus clair (écran affiché). Les
       couleurs sont des variables pour un futur thème sombre. */
    --fil-1: #1b4f8a; --fil-2: #2e66a6; --fil-3: #4f82bd; --fil-4: #6f9bd0;
    --fil-actuel: #9bbbe0; --fil-texte: #fff; --fil-texte-actuel: #10345e; --fil-pointe: 14px;
    padding: 0.45rem 1.25rem;
    background: #fff;
    border-bottom: 1px solid var(--aerociel-bordure);
}
.fil-ariane ol { display: flex; flex-wrap: wrap; align-items: center; row-gap: 4px; margin: 0; padding: 0; list-style: none; }
.fil-ariane li { display: flex; min-width: 0; margin-left: calc(-1 * var(--fil-pointe)); }
.fil-ariane li:first-child { margin-left: 0; }
.fil-ariane li > a, .fil-ariane li > span {
    display: flex;
    align-items: center;
    height: 32px;
    padding: 0 18px 0 calc(var(--fil-pointe) + 12px);
    background: var(--fil-4);
    color: var(--fil-texte);
    font-size: 0.78rem;
    font-weight: 600;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    text-decoration: none;
    white-space: nowrap;
    clip-path: polygon(0 0, calc(100% - var(--fil-pointe)) 0, 100% 50%, calc(100% - var(--fil-pointe)) 100%, 0 100%, var(--fil-pointe) 50%);
}
.fil-ariane li:first-child > a, .fil-ariane li:first-child > span {
    padding-left: 14px;
    border-radius: 4px 0 0 4px;
    clip-path: polygon(0 0, calc(100% - var(--fil-pointe)) 0, 100% 50%, calc(100% - var(--fil-pointe)) 100%, 0 100%);
}
.fil-ariane li:nth-child(1) > * { background: var(--fil-1); }
.fil-ariane li:nth-child(2) > * { background: var(--fil-2); }
.fil-ariane li:nth-child(3) > * { background: var(--fil-3); }
.fil-ariane li:last-child > * { background: var(--fil-actuel); color: var(--fil-texte-actuel); }
.fil-ariane a:hover { filter: brightness(1.12); }
.fil-ariane a:focus-visible { outline: 2px solid #e46a1b; outline-offset: -2px; }
.fil-ariane [aria-current="page"] { max-width: 48ch; overflow: hidden; text-overflow: ellipsis; display: block; line-height: 32px; }

@media (max-width: 640px) {
    .bouton-retour { padding: 0.3rem 0.45rem; }
    .bouton-retour-texte { display: none; }
    /* Petit écran : seulement le niveau parent et l'écran affiché. */
    .fil-ariane { padding: 0.35rem 0.9rem; }
    .fil-ariane li { display: none; }
    .fil-ariane li.fil-parent, .fil-ariane li:last-child { display: flex; }
    .fil-ariane li.fil-parent { margin-left: 0; }
    .fil-ariane li.fil-parent > a { padding-left: 14px; border-radius: 4px 0 0 4px;
        clip-path: polygon(0 0, calc(100% - var(--fil-pointe)) 0, 100% 50%, calc(100% - var(--fil-pointe)) 100%, 0 100%); }
    .fil-ariane [aria-current="page"] { max-width: 22ch; }
}

.bouton-icone {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.25rem;
    min-width: 36px;
    height: 36px;
    padding: 0 0.4rem;
    border: none;
    border-radius: 8px;
    background: transparent;
    color: var(--aerociel-bleu);
    text-decoration: none;
    cursor: pointer;
    font: inherit;
    font-size: 0.8rem;
    font-weight: 600;
}

.bouton-icone:hover:not(.grise) { background: var(--aerociel-bleu-clair); }
.bouton-menu { background: #eef2f7; }
.bouton-menu.actif { background: #dbe7f3; }

.barre-utilisateur { display: inline-flex; align-items: center; gap: 0.3rem; }

/* Icônes du module dans le bandeau (0.6.1) et nom de l'utilisateur connecté. */
.bandeau-icone { color: var(--aerociel-gris); }
.bandeau-icone.grise { color: #c4c9d2; cursor: default; }
.bouton-utilisateur { padding: 0 0.6rem; }
.nom-utilisateur { max-width: 14rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.9rem; color: #1f2937; }
.menu-utilisateur-icones { display: none; border-bottom: 1px solid var(--aerociel-bordure); margin-bottom: 0.3rem; padding-bottom: 0.3rem; }
.menu-utilisateur-grise { display: flex; align-items: center; gap: 0.5rem; padding: 0.45rem 1rem; color: #9ca3af; }

/* Menu de l'utilisateur (details/summary : fonctionne sans script). */
.menu-utilisateur { position: relative; }
.menu-utilisateur > summary { list-style: none; }
.menu-utilisateur > summary::-webkit-details-marker { display: none; }

.menu-utilisateur-contenu {
    position: absolute;
    right: 0;
    top: 42px;
    min-width: 260px;
    padding: 0.4rem 0;
    background: #fff;
    border: 1px solid var(--aerociel-bordure);
    border-radius: 10px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
    z-index: 40;
}

.menu-utilisateur-nom {
    padding: 0.5rem 1rem;
    font-weight: 600;
    border-bottom: 1px solid var(--aerociel-bordure);
    margin-bottom: 0.3rem;
}

.menu-utilisateur-contenu a,
.menu-utilisateur-contenu .bouton-lien {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    width: 100%;
    padding: 0.45rem 1rem;
    color: #1f2937;
    text-decoration: none;
    text-align: left;
}

.menu-utilisateur-contenu a:hover,
.menu-utilisateur-contenu .bouton-lien:hover { background: var(--aerociel-bleu-clair); }
.menu-utilisateur-contenu form { margin: 0; }

/* Liste des logiciels de « Changer de logiciel » (0.34.1). */
.menu-logiciels { position: relative; display: inline-flex; }
.menu-logiciels > .bandeau-icone.actif { background: #dbe7f3; }
.menu-logiciels-contenu {
    position: absolute;
    right: 0;
    top: 42px;
    min-width: 300px;
    max-width: min(380px, 92vw);
    padding: 0.4rem 0;
    background: #fff;
    border: 1px solid var(--aerociel-bordure);
    border-radius: 10px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
    z-index: 40;
}
.menu-logiciels-titre { padding: 0.4rem 1rem 0.5rem; font-weight: 600; border-bottom: 1px solid var(--aerociel-bordure); margin-bottom: 0.3rem; }
.menu-logiciel,
.menu-logiciels-accueil {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0.5rem 1rem;
    color: #1f2937;
    text-decoration: none;
}
.menu-logiciel:hover,
.menu-logiciels-accueil:hover { background: var(--aerociel-bleu-clair); }
.menu-logiciel.actif { background: #eef4fa; }
.menu-logiciel img { width: 32px; height: 32px; object-fit: contain; flex: none; }
.menu-logiciel-texte { display: flex; flex-direction: column; min-width: 0; flex: 1; }
.menu-logiciel-nom { font-weight: 600; }
.menu-logiciel-description { font-size: 0.8rem; color: var(--aerociel-gris); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.menu-logiciel-coche { color: var(--aerociel-bleu, #1565c0); flex: none; }
.menu-logiciels-accueil { border-top: 1px solid var(--aerociel-bordure); margin-top: 0.3rem; padding-top: 0.6rem; }
.menu-utilisateur-intertitre { display: flex; align-items: center; gap: 0.5rem; padding: 0.45rem 1rem 0.2rem; font-size: 0.8rem; font-weight: 600; color: var(--aerociel-gris); }
.menu-utilisateur-contenu a.menu-utilisateur-logiciel { padding-left: 1.6rem; }
.menu-utilisateur-logiciel img { width: 20px; height: 20px; object-fit: contain; }
.menu-utilisateur-logiciel.actif { font-weight: 600; }

/* ---- Menu principal d'un module (bouton ⋮) ---- */
.menu-voile {
    position: fixed;
    inset: 0;
    z-index: 25;
}

.menu-module {
    position: absolute;
    left: 0.6rem;
    top: 60px;
    z-index: 30;
    min-width: 250px;
    padding: 0.3rem 0;
    background: #fff;
    border: 1px solid var(--aerociel-bordure);
    border-radius: 12px;
    box-shadow: 0 10px 28px rgba(0, 0, 0, 0.14);
}

.menu-liste {
    list-style: none;
    margin: 0;
    padding: 0.2rem 0;
}

.menu-liste li { position: relative; }

.menu-element {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    width: 100%;
    box-sizing: border-box;
    padding: 0.45rem 1rem;
    border: none;
    background: none;
    color: #1f2937;
    font: inherit;
    font-size: 0.92rem;
    text-align: left;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
}

.menu-element:hover:not(.grise),
.menu-sous:hover > .menu-element,
.menu-sous:focus-within > .menu-element { background: var(--aerociel-bleu-clair); }

.menu-texte { flex: 1; }
.menu-fleche { color: #9ca3af; }
.menu-externe { color: #9ca3af; }
.menu-formulaire { margin: 0; }

.menu-separateur {
    height: 1px;
    margin: 0.3rem 0;
    background: var(--aerociel-bordure);
}

/* Sous-menu : à droite de l'entrée, ouvert au survol ou au focus. */
.menu-sous > .menu-liste {
    display: none;
    position: absolute;
    left: 100%;
    top: -0.3rem;
    min-width: 240px;
    background: #fff;
    border: 1px solid var(--aerociel-bordure);
    border-radius: 10px;
    box-shadow: 0 10px 28px rgba(0, 0, 0, 0.14);
}

.menu-sous:hover > .menu-liste,
.menu-sous:focus-within > .menu-liste { display: block; }

/* ---- Cadre d'un module ---- */
.cadre {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    background: #f5f7fa;
}

.cadre-corps { display: flex; flex: 1; }

.barre-onglets {
    display: flex;
    flex-direction: column;
    width: 82px;
    padding-top: 0.4rem;
    background: #fff;
    border-right: 1px solid var(--aerociel-bordure);
}

.onglet {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.15rem;
    padding: 0.55rem 0.2rem 0.45rem;
    border-left: 3px solid transparent;
    color: var(--aerociel-gris);
    font-size: 0.72rem;
    text-align: center;
    text-decoration: none;
}

.onglet:hover { background: #f3f6fa; }

.onglet.actif {
    border-left-color: var(--aerociel-bleu);
    background: var(--aerociel-bleu-clair);
    color: var(--aerociel-bleu);
    font-weight: 600;
}

.cadre-contenu {
    flex: 1;
    min-width: 0;
    padding: 1rem 1.25rem;
}

.sous-onglets {
    display: flex;
    gap: 0.2rem;
    border-bottom: 1px solid var(--aerociel-bordure);
    margin-bottom: 1rem;
}

.sous-onglet {
    padding: 0.5rem 0.9rem;
    border-bottom: 2px solid transparent;
    color: var(--aerociel-gris);
    text-decoration: none;
}

.sous-onglet.actif {
    border-bottom-color: var(--aerociel-bleu);
    color: var(--aerociel-bleu);
    font-weight: 600;
}

.a-venir {
    max-width: 560px;
    margin: 3rem auto;
    text-align: center;
    color: #4b5563;
}

.a-venir h1 { font-size: 1.4rem; color: #1f2937; margin: 0.8rem 0 0.5rem; }
.a-venir-aide { font-size: 0.85rem; color: #9ca3af; }

.page-simple { max-width: 560px; margin: 4rem auto; text-align: center; }

/* ---- Accueil : tuiles des modules (FEN_Menu) ---- */
.accueil-titre { font-size: 1.4rem; margin: 0.5rem 0 1.25rem; color: #1f2937; }

.tuiles {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 1rem;
    max-width: 960px;
}

.tuile {
    display: flex;
    align-items: center;
    gap: 1rem;
    padding: 1rem 1.1rem;
    background: #fff;
    border: 1px solid var(--aerociel-bordure);
    border-radius: 12px;
    color: inherit;
    text-decoration: none;
    transition: box-shadow 0.15s, border-color 0.15s;
}

.tuile:hover { border-color: #c7d6e8; box-shadow: 0 6px 18px rgba(27, 79, 138, 0.12); }
.tuile img { width: 56px; height: 56px; }
.tuile-texte { display: flex; flex-direction: column; flex: 1; }
.tuile-nom { font-weight: 700; font-size: 1.1rem; color: #1f2937; }
.tuile-description { font-size: 0.85rem; color: #6b7280; }
.tuile-fleche { color: #9ca3af; }
.accueil-vide { color: #6b7280; }
.accueil-admin { margin-top: 2rem; font-size: 0.9rem; }

/* ---- À propos (FEN_Version) ---- */
.apropos { max-width: 560px; margin: 1rem auto; }
.apropos-logo { width: 240px; height: auto; }
.apropos dl { display: grid; grid-template-columns: max-content 1fr; gap: 0.4rem 1.2rem; }
.apropos dt { color: #6b7280; }
.apropos dd { margin: 0; }
.apropos-icones { font-size: 0.8rem; color: #9ca3af; margin-top: 1.5rem; }
.apropos-editeur { width: 90px; height: auto; }

@media (max-width: 640px) {
    .barre-titre, .barre-module, .barre-version { display: none; }
    .barre-onglets { width: 64px; }
    .onglet span { display: none; }
}

/* ---- Accueil et pages hors module (MainLayout) ---- */
body { margin: 0; }

.coque {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    background: #f5f7fa;
}

.contenu {
    flex: 1;
    padding: 1.5rem 1.25rem;
}

.pied {
    display: flex;
    justify-content: flex-end;
    padding: 0.5rem 1.25rem 0.75rem;
}

.logo-editeur-pied {
    width: 70px;
    height: auto;
    opacity: 0.8;
}

/* ---- Accueil, présentation de FEN_Menu (remplace la grille de tuiles ci-dessus) ---- */
.accueil {
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    align-items: center;
    margin: -1.5rem -1.25rem;
    padding: 2rem 1.25rem 7rem;
    min-height: calc(100vh - 57px);
    box-sizing: border-box;
    background: linear-gradient(120deg, #f7e9df 0%, #eef2ef 55%, #e3f1f1 100%);
}

.accueil-logo { width: 72px; height: auto; }

.accueil-presentation {
    max-width: 660px;
    margin: 1.2rem 0 1.6rem;
    font-size: 1.15rem;
    font-weight: 400;
    line-height: 1.55;
    text-align: center;
    color: #374151;
}

.accueil .tuiles {
    display: flex;
    flex-direction: column;
    gap: 1.1rem;
    width: 100%;
    max-width: 340px;
    position: relative;
    z-index: 1;
}

.accueil .tuile {
    border: none;
    border-radius: 16px;
    padding: 1.1rem 1rem 1.1rem 0.9rem;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
}

.accueil .tuile img { width: 62px; height: 62px; }
.accueil .tuile-nom { font-size: 1.05rem; color: #374151; }
.accueil .tuile-description { font-size: 0.78rem; color: #4b5563; margin-top: 0.3rem; }
.accueil .tuile-fleche { color: #3b82f6; }
.accueil .accueil-admin { position: relative; z-index: 1; }

.accueil-pied {
    position: absolute;
    left: 1.25rem;
    bottom: 1rem;
    z-index: 1;
}

.accueil-editeur { width: 76px; height: auto; }

/* Version en filigrane (le « 8.1 » de WinDev). */
.accueil-version {
    position: absolute;
    right: 1.5rem;
    bottom: -2.5rem;
    font-size: 15rem;
    font-weight: 800;
    line-height: 1;
    color: #ffffff;
    opacity: 0.55;
    pointer-events: none;
    user-select: none;
}

@media (max-width: 640px) {
    .accueil-version { font-size: 8rem; }
}

/* ---- Accueil : tout tient sur un écran (retour de Cédric du 18/10) ---- */
.accueil {
    justify-content: center;
    padding: 1rem 1.25rem 4.5rem;
    min-height: calc(100vh - 57px);
}

.accueil-logo { width: 60px; }

.accueil-presentation {
    margin: 0.7rem 0 1.1rem;
    font-size: 1.05rem;
    line-height: 1.45;
}

.accueil .tuiles { gap: 0.75rem; }
.accueil .tuile { padding: 0.75rem 1rem 0.75rem 0.9rem; }
.accueil .tuile img { width: 54px; height: 54px; }
.accueil .tuile-description { margin-top: 0.15rem; line-height: 1.35; }
.accueil .accueil-admin { margin: 0.9rem 0 0; }

/* Logo de l'éditeur et version : toujours visibles, en bas de la fenêtre. */
.accueil-pied { position: fixed; left: 1.25rem; bottom: 0.8rem; }

.accueil-version {
    position: fixed;
    right: 1.5rem;
    bottom: -1.6rem;
    font-size: 11rem;
}

/* Petits écrans en hauteur : version plus discrète, tuiles plus serrées. */
@media (max-height: 760px) {
    .accueil-logo { width: 44px; }
    .accueil-presentation { font-size: 0.95rem; margin: 0.4rem 0 0.8rem; }
    .accueil .tuiles { gap: 0.5rem; }
    .accueil .tuile { padding: 0.5rem 0.9rem; }
    .accueil .tuile img { width: 44px; height: 44px; }
    .accueil-version { font-size: 7rem; bottom: -1rem; }
}

/* ---- Accueil : tuiles à leur taille d'origine quand la hauteur le permet, version remontée ---- */
.accueil-version { bottom: -0.4rem; }

@media (min-height: 900px) {
    .accueil-logo { width: 68px; }
    .accueil-presentation { font-size: 1.12rem; margin: 0.9rem 0 1.3rem; }
    .accueil .tuiles { gap: 1rem; }
    .accueil .tuile { padding: 1rem 1rem 1rem 0.9rem; }
    .accueil .tuile img { width: 62px; height: 62px; }
    .accueil .tuile-description { margin-top: 0.3rem; }
}

/* ==== Écrans étroits (téléphone, tablette en portrait) ==== */
@media (max-width: 640px) {
    /* Accueil : pied et version dans le flux, sous les tuiles. */
    .accueil { justify-content: flex-start; padding: 1rem 1rem 1.5rem; }
    .accueil-presentation { font-size: 0.95rem; }
    .accueil-presentation br { display: none; }
    .accueil .tuiles { max-width: none; }
    .accueil-pied { position: static; margin-top: 1.5rem; }
    .accueil-version { display: none; }

    /* Barre du haut : l'essentiel seulement. */
    .barre-haut { gap: 0.3rem; padding: 0 0.5rem; }
    /* Icônes du module : dans le menu de l'utilisateur ; nom de l'utilisateur raccourci. */
    .bandeau-icone { display: none; }
    .menu-utilisateur-icones { display: block; }
    .nom-utilisateur { max-width: 6.5rem; }
    .barre-logo .barre-logo-aerociel { height: 28px; }

    /* Cadre d'un module : onglets en bandeau horizontal défilant, sous la barre du haut. */
    .cadre-corps { flex-direction: column; }

    .barre-onglets {
        flex-direction: row;
        width: auto;
        padding-top: 0;
        overflow-x: auto;
        border-right: none;
        border-bottom: 1px solid var(--aerociel-bordure);
        scrollbar-width: none;
    }

    .onglet {
        flex: none;
        min-width: 64px;
        padding: 0.45rem 0.3rem;
        border-left: none;
        border-bottom: 3px solid transparent;
        font-size: 0.66rem;
    }

    .onglet span { display: inline; }
    .onglet.actif { border-bottom-color: var(--aerociel-bleu); }
    .cadre-contenu { padding: 0.75rem; }
    .sous-onglets { overflow-x: auto; white-space: nowrap; scrollbar-width: none; }
    .sous-onglet { flex: none; }
    .a-venir { margin: 1.5rem auto; }

    /* Menu ⋮ : pleine largeur, sous-menus dépliés en dessous (pas de survol au doigt). */
    .menu-module {
        left: 0.4rem;
        right: 0.4rem;
        min-width: 0;
        max-height: calc(100vh - 70px);
        overflow-y: auto;
    }

    .menu-element { white-space: normal; padding: 0.6rem 1rem; }

    .menu-sous > .menu-liste {
        position: static;
        min-width: 0;
        border: none;
        border-radius: 0;
        box-shadow: none;
        padding-left: 0.9rem;
        background: #f8fafc;
    }

    .menu-sous:hover > .menu-liste { display: none; }
    .menu-sous:focus-within > .menu-liste { display: block; }
    .menu-sous:focus-within > .menu-element .menu-fleche { transform: rotate(90deg); }
}

/* ---- Lot 1.4 : licence ---- */
.bandeau-licence {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    flex-wrap: wrap;
    padding: 0.35rem 1rem;
    background: #fff4ce;
    color: #6b4a00;
    border-bottom: 1px solid #f2d27a;
    font-size: 0.9rem;
}
.bandeau-licence a { margin-left: auto; color: inherit; font-weight: 600; }

.page-licence { max-width: 720px; margin: 1rem auto; padding: 0 1rem; }
.licence-etat { border-radius: 6px; padding: 0.6rem 1rem; border: 1px solid; margin-bottom: 1rem; }
.licence-etat p { margin: 0.3rem 0; }
.licence-etat-titre { display: flex; align-items: center; gap: 0.5rem; font-weight: 600; font-size: 1.1rem; }
.licence-ok { background: #eaf6ec; border-color: #9fd3aa; color: #1d5e2a; }
.licence-attention { background: #fff4ce; border-color: #f2d27a; color: #6b4a00; }
.licence-ko { background: #fde7e7; border-color: #f0a8a8; color: #8a1c1c; }
.licence-detail { display: grid; grid-template-columns: max-content 1fr; gap: 0.3rem 1.2rem; }
.licence-detail dt { color: #6b7280; }
.licence-detail dd { margin: 0; }
.licence-modules { border-collapse: collapse; min-width: 320px; }
.licence-modules th, .licence-modules td { text-align: left; padding: 0.25rem 1rem 0.25rem 0; border-bottom: 1px solid #e5e7eb; }
.licence-formulaire { display: grid; gap: 0.4rem; max-width: 420px; }
.licence-actions { margin: 1.5rem 0; }

@media (max-width: 640px) {
    .licence-detail { grid-template-columns: 1fr; gap: 0.1rem; }
    .licence-detail dd { margin-bottom: 0.4rem; }
    .licence-modules { min-width: 0; width: 100%; }
    .bandeau-licence a { margin-left: 0; }
}

/* ---- Lot 1.5 : utilisateurs et droits (listes et fiches en pages) ---- */
/* Largeur : tout l'écran jusqu'à 1920 px (lot 4.1a, demande de Cédric : écrans le plus responsives possible). */
.page-liste, .page-fiche { max-width: 1920px; margin: 1rem auto; padding: 0 clamp(0.75rem, 2vw, 2rem); }
.page-entete { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; margin-bottom: 0.8rem; }
.page-entete h1 { margin: 0; font-size: 1.5rem; flex: 1 1 auto; }
.lien-retour { display: inline-flex; align-items: center; gap: 0.2rem; color: var(--aerociel-bleu); text-decoration: none; flex-basis: 100%; }
.icone.retour { transform: rotate(180deg); }
.pastilles { display: inline-flex; flex-wrap: wrap; gap: 0.25rem; }
.pastille { background: var(--aerociel-bleu-clair); color: var(--aerociel-bleu); border-radius: 999px; padding: 0.05rem 0.55rem; font-size: 0.8rem; }
.liste-utilisateurs .dxbl-grid-table > tbody > tr { cursor: pointer; }
.fiche-bloc { border: 1px solid var(--aerociel-bordure); border-radius: 8px; padding: 0.8rem 1rem 1rem; margin-bottom: 1rem; background: #fff; }
.fiche-bloc h2 { font-size: 1.05rem; margin: 0.8rem 0 0.5rem; color: var(--aerociel-bleu); }
.fiche-bloc h2:first-child { margin-top: 0; }
.fiche-grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 0.6rem 1rem; }
.champ { display: flex; flex-direction: column; gap: 0.2rem; }
.champ > span:first-child { color: var(--aerociel-gris); font-size: 0.85rem; }
.champ .valeur { display: flex; align-items: center; gap: 0.6rem; min-height: 2rem; }
.fiche-cases { display: flex; flex-wrap: wrap; gap: 0.4rem 1.5rem; margin-top: 0.7rem; }
.fiche-applications { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 0.4rem 1rem; margin-bottom: 0.8rem; }
.droits-colonnes { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.6rem 1.2rem; padding-top: 0.8rem; }
.droits-colonne { display: flex; flex-direction: column; gap: 0.6rem; }
.fiche-boutons { display: flex; gap: 0.6rem; flex-wrap: wrap; justify-content: flex-end; margin: 1rem 0 2rem; }
.onglet.grise { opacity: 0.45; cursor: not-allowed; }
.coche { color: #1d5e2a; }

@media (max-width: 640px) {
    .droits-colonnes { grid-template-columns: 1fr; }
    .fiche-boutons { justify-content: stretch; }
    .fiche-boutons > * { flex: 1 1 auto; }
}

/* ---- Fiche société (lot 1.6) ---- */
.champ-large { grid-column: span 2; }
.champ-en-erreur { outline: 2px solid #b32121; border-radius: 4px; }
.champ-message-erreur { color: #b32121; font-size: 0.8rem; }
.societe-logo { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }
.societe-logo img { max-width: 240px; max-height: 120px; border: 1px solid var(--aerociel-bordure); border-radius: 4px; padding: 0.3rem; background: #fff; }
.societe-logo-actions { display: flex; gap: 0.6rem; flex-wrap: wrap; align-items: center; }
.bouton-fichier { position: relative; display: inline-flex; align-items: center; padding: 0.35rem 0.9rem; border: 1px solid var(--aerociel-bleu); border-radius: 4px; color: var(--aerociel-bleu); cursor: pointer; }
.bouton-fichier:hover { background: var(--aerociel-bleu-clair); }
.bouton-fichier input[type=file] { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
.societe-tva { align-self: center; }

@media (max-width: 640px) {
    .champ-large { grid-column: auto; }
}

/* ---- Préférences (lot 1.7) ---- */
.preferences { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 1rem; align-items: start; }
.preferences-sections { display: flex; flex-direction: column; gap: 0.2rem; }
.preferences-section { display: flex; align-items: center; gap: 0.6rem; padding: 0.55rem 0.8rem; border-radius: 8px; color: #1f2937; text-decoration: none; }
.preferences-section:hover:not(.grise) { background: var(--aerociel-bleu-clair); }
.preferences-section.actif { background: var(--aerociel-bleu-clair); color: var(--aerociel-bleu); font-weight: 600; box-shadow: inset 3px 0 0 var(--aerociel-bleu); }
.preferences-section.grise { color: #9ca3af; cursor: default; }

@media (max-width: 640px) {
    .preferences { grid-template-columns: minmax(0, 1fr); }
    .preferences-sections { flex-direction: row; overflow-x: auto; }
    .preferences-section { white-space: nowrap; }
    .preferences-section.actif { box-shadow: inset 0 -3px 0 var(--aerociel-bleu); }
}

/* ---- Diagnostic : impression et e-mail (lot 1.8) ---- */
.diagnostic-actions { display: flex; flex-wrap: wrap; gap: 0.6rem; margin: 0.8rem 0; }

/* Référentiels (phase 2) : liste + fiche modale */
.referentiel-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 0.8rem; }
.grille-referentiel .dxbl-grid-table > tbody > tr { cursor: pointer; }
.grille-referentiel tr.ligne-defaut > td { background-color: rgb(224, 230, 78) !important; }
.referentiel-compteur { margin-top: 0.4rem; font-size: 0.85rem; }
.referentiel-fiche { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
.valeur-alerte { display: inline-block; min-width: 2rem; padding: 0 0.4rem; border-radius: 4px; background: rgb(252, 128, 118); color: #fff; }
.renommage-valeurs { font-weight: 600; overflow-wrap: anywhere; }
.liste-impacts { margin: 0.25rem 0 0.75rem 1.25rem; padding: 0; font-weight: 600; }
.coche-liste { display: inline-block; min-width: 1rem; font-weight: 600; color: var(--aerociel-bleu); }
.dxbl-grid-focused-row .coche-liste { color: inherit; }
.fiche-cases-colonne { flex-direction: column; align-items: flex-start; }

/* ---- Clients, adresses, contacts (lot 2.3) ---- */
.champ-pleine-largeur { grid-column: 1 / -1; }
.segments { display: inline-flex; border: 1px solid var(--aerociel-bordure); border-radius: 6px; overflow: hidden; align-self: flex-start; }
.segment { border: 0; background: #fff; padding: 0.4rem 1.4rem; font: inherit; font-size: 0.9rem; cursor: pointer; color: #1f2937; }
.segment + .segment { border-left: 1px solid var(--aerociel-bordure); }
.segment.actif { background: var(--aerociel-bleu-clair); color: var(--aerociel-bleu); font-weight: 600; }
.saisie-ville { position: relative; display: grid; grid-template-columns: minmax(90px, 1fr) minmax(0, 3fr); gap: 0.6rem; }
.saisie-ville-propositions { position: absolute; top: 100%; left: 0; right: 0; z-index: 20; margin: 0.2rem 0 0; padding: 0.2rem 0; list-style: none;
    background: #fff; border: 1px solid var(--aerociel-bordure); border-radius: 6px; box-shadow: 0 6px 18px rgba(0, 0, 0, 0.12); max-height: 16rem; overflow-y: auto; }
.saisie-ville-propositions li { padding: 0.35rem 0.7rem; cursor: pointer; }
.saisie-ville-propositions li:hover { background: var(--aerociel-bleu-clair); }
.pays-option { display: inline-flex; align-items: center; gap: 0.45rem; }
.drapeau { width: 1.35rem; height: 1rem; object-fit: cover; border: 1px solid var(--aerociel-bordure); border-radius: 2px; }
.fiche-sous-titre { font-size: 0.95rem; color: var(--aerociel-bleu); margin: 1rem 0 0.4rem; }
.fiche-repliable > summary { cursor: pointer; font-weight: 600; color: var(--aerociel-bleu); }
.fiche-repliable[open] > summary { margin-bottom: 0.6rem; }
.valeur-calculee { padding: 0 0.6rem; border-radius: 4px; background: #f3f4f6; justify-content: flex-end; }
.ligne-ecart td { color: #c2410c; }
.dxbl-grid-focused-row.ligne-ecart td { color: inherit; }
.liste-combo { min-width: 0; }
.document-produit { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem 0.9rem; padding: 0.5rem 0.8rem; border-radius: 6px; background: var(--aerociel-bleu-clair); }
.liste-choix { list-style: none; margin: 0; padding: 0; max-height: 50vh; overflow-y: auto; }
.liste-choix li + li { border-top: 1px solid var(--aerociel-bordure); }
.lien-bouton { border: 0; background: none; padding: 0.45rem 0.2rem; width: 100%; text-align: left; font: inherit; color: var(--aerociel-bleu); cursor: pointer; }
.lien-bouton:hover { background: var(--aerociel-bleu-clair); }
.onglet-actions { margin-top: 0.8rem; }

/* ---- Techniciens et ateliers (lot 2.5) ---- */
.ligne-inactive td { text-decoration: line-through; color: #6b7280; }
.dxbl-grid-focused-row.ligne-inactive td { color: inherit; }
td.echeance-proche { background-color: rgb(224, 230, 78) !important; }
td.echeance-depassee { background-color: rgb(252, 128, 118) !important; }
.case-liste { align-self: center; margin-left: 0.4rem; }
.valeur-gauche { justify-content: flex-start; }
.onglet-migre { padding: 0.8rem 1rem; }

@media (max-width: 640px) {
    .saisie-ville { grid-template-columns: 1fr; }
    .segment { padding: 0.4rem 1rem; }
}

/* ---- Aéronefs (lot 3.1) ---- */
.grille-aeronefs td.dossier-lance { background: rgb(224, 230, 78) !important; font-weight: 600; }
.grille-aeronefs td.suivi-decimal { background: rgb(66, 167, 249) !important; }
.saisie-duree { display: inline-flex; align-items: center; gap: 0.25rem; }
.saisie-duree .saisie-duree-heures { width: 7rem; }
.saisie-duree .saisie-duree-minutes { width: 3.6rem; }
.saisie-duree .saisie-duree-heures input, .saisie-duree .saisie-duree-minutes input { text-align: right; }
.saisie-duree.champ-en-erreur .dxbl-text-edit { border-color: #b91c1c; }
.prochaine-visite input { color: #c00000 !important; font-weight: 600; }
.heures-reelles input, td.heures-reelles { font-weight: 600; }
.valeur-droite { text-align: right; }
.lien-ajout { margin-left: 0.3rem; font-weight: 700; text-decoration: none; color: var(--aerociel-bleu); }
.fiche-avion-photo img { max-width: 220px; max-height: 150px; border: 1px solid var(--aerociel-bordure); border-radius: 4px; object-fit: contain; }
.fiche-avion-photo-actions { display: flex; gap: 0.5rem; align-items: center; margin-top: 0.3rem; flex-wrap: wrap; }
.table-cycles, .table-organes { border-collapse: collapse; width: 100%; }
.table-cycles th, .table-cycles td, .table-organes th, .table-organes td { border-bottom: 1px solid var(--aerociel-bordure); padding: 0.25rem 0.5rem; text-align: left; }
.table-organes th[scope=row] { white-space: nowrap; }
.table-organes td.valeur-droite, .table-cycles td.valeur-droite { text-align: right; white-space: nowrap; }
.table-defilante { overflow-x: auto; }
.onglets-aeronef { margin-top: 1rem; }
.onglet-prochainement { padding: 1rem 0; color: var(--aerociel-gris); }
.titre-graphique { font-size: 1.05rem; margin: 0.8rem 0; }
.graphique-utilisation { margin-bottom: 1rem; }
.choix-heures { margin-bottom: 0.5rem; }
.grille-referentiel tr.ligne-archivee td { background: rgb(224, 230, 78) !important; }
.grille-referentiel tr.ligne-bloquee td { color: var(--aerociel-gris); }
.fiche-aeronef-entete .immatriculation input { font-weight: 700; }

@media (max-width: 640px) {
    .saisie-duree .saisie-duree-heures { width: 5.5rem; }
    .fiche-avion-photo img { max-width: 100%; }
}

/* ---- Kardex (lot 4.1a) ---- */
.kardex-filtres { display: flex; flex-wrap: wrap; gap: 0.35rem; margin: 0.6rem 0; }
.kardex-base { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 1.2rem; margin: 0.5rem 0; }
.kardex-heures { font-weight: 600; }
.lien-action { align-self: center; color: var(--aerociel-bleu); }
.alerte-vert { background-color: rgb(198, 239, 206) !important; }
.alerte-jaune { background-color: rgb(224, 230, 78) !important; }
.alerte-orange { background-color: rgb(248, 178, 106) !important; }
.alerte-rouge { background-color: rgb(252, 128, 118) !important; }
.dxbl-text-edit.alerte-vert input, .dxbl-text-edit.alerte-jaune input, .dxbl-text-edit.alerte-orange input, .dxbl-text-edit.alerte-rouge input { background: transparent; }
.liste-recapitulatif { margin: 0.4rem 0 0.6rem 1.2rem; padding: 0; }
.kardex-cases { grid-column: 1 / -1; display: flex; flex-direction: row; flex-wrap: wrap; justify-content: flex-start; gap: 0.4rem 1.5rem; align-items: center; }
.kardex-cases > * { flex: 0 0 auto; }
.choix-ata { margin-top: 0.3rem; }
.zones-heures { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 0 1rem; }
.table-documents-kardex, .table-calcul-kardex, .table-cycles-kardex { border-collapse: collapse; width: 100%; }
.table-documents-kardex th, .table-documents-kardex td, .table-calcul-kardex th, .table-calcul-kardex td, .table-cycles-kardex th, .table-cycles-kardex td {
    border-bottom: 1px solid var(--aerociel-bordure); padding: 0.3rem 0.5rem; text-align: left; vertical-align: middle;
}
.table-documents-kardex th[scope=row], .table-cycles-kardex th[scope=row], .table-calcul-kardex th[scope=row] { white-space: nowrap; font-weight: 600; }
.table-calcul-kardex td, .table-cycles-kardex td.valeur-droite { text-align: right; white-space: nowrap; }
.table-calcul-kardex { max-width: 520px; margin-top: 0.6rem; }
.table-cycles-kardex .dxbl-spin-edit { min-width: 5.5rem; }
.actions-document { display: flex; flex-wrap: wrap; gap: 0.4rem; align-items: center; justify-content: flex-end; }
.onglets-element { margin-top: 1rem; }
/* Tableaux longs : hauteur de l'écran, en-tête de colonnes et barre de défilement horizontale toujours visibles. */
.grille-hauteur-ecran { height: calc(100dvh - 9rem); min-height: 22rem; }
.bascule-entete { display: flex; justify-content: flex-end; margin: -0.4rem 0 0.2rem; }
.fiche-aeronef-entete.masque { display: none; }
.fiche-aeronef-resume { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.3rem 1.5rem; padding: 0.6rem 1rem; }
.fiche-aeronef-resume .immatriculation { font-size: 1.15rem; }
.prochaine-visite-resume { color: #c00000; font-weight: 600; }
.resume-bascule { margin-left: auto; }
.preferences-cases { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 0.5rem 1rem; }

@media (max-width: 640px) {
    .kardex-filtres .dxbl-btn { flex: 1 1 45%; }
    .grille-hauteur-ecran { height: calc(100dvh - 6rem); min-height: 18rem; }
    .actions-document { justify-content: flex-start; }
    .table-documents-kardex tr { display: grid; grid-template-columns: 1fr; }
}

/* ---- Kardex types et recopie (lot 4.1b) ---- */
.grille-recapitulatif { height: min(50vh, 26rem); }
.recopie-cases { display: flex; flex-wrap: wrap; gap: 0.4rem 1.5rem; }

/* ---- CN / AD (lot 4.2) ---- */
.filtres-referentiel-cn { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 0.4rem 0.8rem; align-items: end; margin-bottom: 0.6rem; }
.grille-selecteur-cn { height: min(55vh, 32rem); }
.grille-referentiel tr.ligne-presente td { color: var(--aerociel-gris); }
.cn-cases { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 0.4rem 1.5rem; align-items: center; }
.grille-statuts-cn { height: min(60vh, 34rem); }

/* ---- Imports, Suivi des CN (lot 4.2, 0.18.3) ---- */
.import-cn { margin-bottom: 0.4rem; }
.grille-apercu-import { height: min(42vh, 22rem); margin-bottom: 0.5rem; }
.grille-referentiel tr.ligne-erreur-import td { color: #b42318; }
.grille-referentiel tr.ligne-ecart-import td { color: #b54708; }
.suivi-cn-grilles { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 1rem; }
.suivi-cn-grilles h2 { font-size: 1rem; margin: 0.4rem 0; }
.grille-suivi-cn { height: calc(100vh - 22rem); min-height: 18rem; }
@media (max-width: 1100px) {
    .suivi-cn-grilles { grid-template-columns: minmax(0, 1fr); }
    .grille-suivi-cn { height: min(55vh, 30rem); }
}

/* Programmes d'entretien (lot 4.3) */
.grille-hauteur-ecran-reduite { height: calc(100dvh - 22rem); min-height: 18rem; }
.parametre-programme { margin-top: 1.2rem; max-width: 46rem; }
.parametre-programme h2 { font-size: 1.05rem; color: var(--aerociel-bleu); margin: 0 0 0.4rem; }
.choix-parametre-programme { max-width: 30rem; }
.grille-programme { max-height: 22rem; }
.aide-programme { margin: 0 0 1rem; }
.aide-programme summary { cursor: pointer; color: var(--aerociel-bleu); }
.aide-programme ul { margin: 0.4rem 0 0; padding-left: 1.2rem; }
.liste-avions-programme { margin: 0.4rem 0; padding-left: 1.2rem; max-height: 14rem; overflow-y: auto; }
.texte-alerte { color: rgb(192, 57, 43); }
.message-avertissement { color: rgb(160, 90, 0); }
@media (max-width: 700px) {
    .grille-hauteur-ecran-reduite { height: min(60vh, 28rem); }
}

/* Onglet Suivi entretien (lot 4.3, 0.19.1) */
.titre-suivi { font-size: 1.05rem; color: var(--aerociel-bleu); margin: 1rem 0 0.4rem; }
.grille-suivi { max-height: 26rem; }
.grille-suivi .ligne-modifiee:not(.dxbl-grid-focused-row) td { background-color: rgb(255, 243, 205) !important; }
.grille-suivi .ligne-modifiee.dxbl-grid-focused-row td:first-child { box-shadow: inset 4px 0 0 rgb(255, 193, 7); }

/* Butées (lot 4.4, 0.20.0) */
.butees-entete { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 0.6rem 1.5rem; margin: 0.5rem 0; }
.butees-commandes { display: flex; flex-direction: column; gap: 0.4rem; }
.seuils-butees { display: flex; flex-wrap: wrap; gap: 0.4rem 0.8rem; border: 1px solid var(--bordure, #d0d7de); border-radius: 6px; padding: 0.3rem 0.8rem 0.6rem; margin: 0; }
.seuils-butees legend { font-size: 0.85rem; padding: 0 0.3rem; color: var(--aerociel-bleu); }
.seuils-butees .champ { width: 8.5rem; }
.butees-avion { margin: 0.4rem 0; }
.butees-cycles { margin-left: 1.2rem; }
.grille-butees .dxbl-grid-table td { white-space: nowrap; }
.grille-butees th.dxbl-grid-header, .grille-butees .dxbl-grid-header-content, .grille-butees .dxbl-grid-header-content span { white-space: normal !important; text-overflow: clip !important; overflow: visible !important; line-height: 1.15; }
.butees-recherche { display: grid; grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr)); gap: 1rem; align-items: start; }
.butees-familles { display: flex; gap: 0.4rem; align-items: center; }
.butees-familles .dxbl-combobox { flex: 1; }
.butees-familles-retenues { list-style: none; padding: 0; margin: 0.5rem 0 0; }
.butees-familles-retenues li { display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid #eef1f4; }
.butees-avions { max-height: 16rem; overflow-y: auto; display: flex; flex-direction: column; gap: 0.15rem; margin-top: 0.4rem; }
.tableau-seuils { border-collapse: collapse; }
.tableau-seuils th, .tableau-seuils td { padding: 0.3rem 0.6rem; text-align: left; }
.tableau-seuils td { width: 9rem; }
.pastille { display: inline-block; width: 0.8rem; height: 0.8rem; border-radius: 50%; vertical-align: middle; margin-right: 0.3rem; }

/* Lot 4.5 : impression de la fiche aéronef, statuts, simulation. */
.impression-fiche { display: flex; flex-direction: column; gap: 0.6rem; }
.impression-colonnes { display: grid; grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr)); gap: 0.6rem 1rem; }
.impression-groupe { display: flex; flex-direction: column; gap: 0.2rem; border: 1px solid var(--bordure, #d0d7de); border-radius: 6px; padding: 0.3rem 0.8rem 0.5rem; margin: 0; }
.impression-groupe legend { font-size: 0.85rem; padding: 0 0.3rem; color: var(--aerociel-bleu); }
.butees-simulation { margin: 0.4rem 0; padding: 0.3rem 0.6rem; border-left: 4px solid #c2410c; background: #fff4e6; font-weight: 600; }

/* Lot 3.2 : carnet de route, saisie des heures, cycles de l'avion. */
.carnet-entete { display: flex; flex-wrap: wrap; gap: 0.4rem 1.4rem; align-items: baseline; margin: 0.3rem 0 0.6rem; }
.carnet-unite { font-weight: 700; color: var(--aerociel-bleu); }
.carnet-outils { align-items: center; }
.carnet-outils > .grise { min-width: 6.5rem; }
.grille-carnet .carnet-incoherente td { background: #fdd8d4 !important; }
.grille-carnet .carnet-changement-moteur td:first-child { border-left: 4px solid #c2410c; }
.carnet-observation { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; white-space: normal; }
.carnet-saisie-entete { display: flex; flex-wrap: wrap; gap: 0.4rem 1.2rem; align-items: baseline; margin-bottom: 0.5rem; }
.carnet-mode { display: flex; flex-wrap: wrap; gap: 0.4rem 1.2rem; align-items: center; margin-bottom: 0.5rem; }
.carnet-avertissement { margin: 0.4rem 0; padding: 0.3rem 0.6rem; border-left: 4px solid #c2410c; background: #fff4e6; }
.carnet-groupe { border: 1px solid var(--bordure, #d0d7de); border-radius: 6px; padding: 0.3rem 0.8rem 0.6rem; margin: 0.6rem 0; }
.carnet-groupe legend { font-size: 0.85rem; padding: 0 0.3rem; color: var(--aerociel-bleu); }
.cycles-avion { display: grid; grid-template-columns: 1fr auto 1fr; gap: 0.8rem; align-items: start; }
.cycles-boutons { display: flex; flex-direction: column; gap: 0.4rem; margin-top: 1.4rem; }
.cycles-liste { min-height: 12rem; }
.saisie-cycle { max-width: 9rem; margin-left: auto; }
.champ-bouton { justify-content: flex-end; }
.preferences-codes-ata { display: flex; gap: 0.4rem; align-items: center; max-width: 24rem; margin-top: 0.6rem; }
.liste-choix li { margin-bottom: 0.3rem; }
@media (max-width: 640px) { .cycles-avion { grid-template-columns: 1fr; } .cycles-boutons { flex-direction: row; margin-top: 0; } }

/* Lot 3.3 : import d'heures (aperçu). */
.import-heures { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
.grille-import-heures { max-height: 55vh; }

/* Lot 3.4 : gestion des fiches avion. */
.gestion-fiches-menu { display: flex; flex-direction: column; gap: 0.5rem; }
.gestion-fiches-menu .dxbl-btn { justify-content: flex-start; }
.gestion-fiches-options { display: flex; flex-direction: column; gap: 0.4rem; margin: 0.5rem 0; }
.gestion-fiches-comptes { columns: 2; margin: 0.5rem 0; padding-left: 1.2rem; }
.gestion-fiches-choix { max-width: 360px; }
.grille-sauvegardes { max-height: 45vh; }

/* Lot 5.1 : dossiers de travail (suivi d'activité, saisie, agenda). */
.grille-dossiers tr.dossier-clos td { color: #6b7280; }
.dossiers-tous { margin-left: auto; align-self: center; }
.visite-prochaine { background: rgb(224, 230, 78); padding: 0 0.3rem; font-weight: 600; }
.dossier-infos { margin-top: 0.6rem; padding: 0.4rem 0.7rem; border-left: 4px solid var(--aerociel-bleu); background: #f1f6fb; }
.dossier-infos p { margin: 0.15rem 0; }
.dossier-infos .message-attention { color: #b45309; font-weight: 600; }
.dossier-question { display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center; margin-top: 0.6rem; padding: 0.4rem 0.7rem; border-left: 4px solid #c2410c; background: #fff4e6; }
.dossier-question p { flex: 1 1 100%; margin: 0; }
.grille-heures-dossier { max-height: 50vh; }
.heures-dossier-totaux { display: flex; flex-wrap: wrap; gap: 0.3rem 1.2rem; margin-top: 0.6rem; font-size: 0.9rem; }
.agenda-atelier { height: calc(100vh - 12rem); min-height: 28rem; }
.agenda-scheduler { height: 100%; }
@media (max-width: 640px) { .dossiers-tous { margin-left: 0; } .agenda-atelier { height: auto; } }

/* Lot 5.2a : lancement (heures, travaux, récapitulatif). */
.lancement-entete-grille { display: grid; grid-template-columns: minmax(0, 2.2fr) minmax(10rem, 0.8fr) minmax(0, 2.2fr) auto; gap: 0.8rem 1.2rem; align-items: start; }
.lancement-entete .fiche-grille { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.lancement-heures { text-align: center; }
.lancement-heures p { margin: 0.2rem 0; }
.lancement-unite { font-weight: 700; font-size: 1.1rem; color: var(--aerociel-bleu); }
.lancement-heures-valeurs { display: flex; gap: 0.6rem; justify-content: center; font-size: 1.05rem; font-weight: 600; font-variant-numeric: tabular-nums; }
.lancement-visites { display: flex; flex-direction: column; gap: 0.5rem; }
.lancement-visite { display: grid; grid-template-columns: minmax(7rem, 1.2fr) minmax(6rem, 1fr) minmax(6rem, 1fr) auto auto; gap: 0.4rem 0.6rem; align-items: end; }
.lancement-actions { display: flex; flex-direction: column; gap: 0.4rem; }
.lancement-etapes { margin-bottom: 0.6rem; }
.lancement-etapes .sous-onglet, .lancement-onglets .sous-onglet { border: none; background: none; cursor: pointer; font: inherit; }
.lancement-onglets { margin-top: 0.4rem; }
.lancement-titre-recap { margin: 0 !important; align-self: center; }
.colonne-actions { white-space: nowrap; }
.colonne-actions .dxbl-btn { padding-left: 0.3rem; padding-right: 0.3rem; }
.lancement-total { font-weight: 600; font-variant-numeric: tabular-nums; align-self: center; }
.lancement-butees { margin: 0.4rem 0 0.6rem 1.2rem; padding: 0; max-height: 45vh; overflow-y: auto; }
.lancement-butees li { margin-bottom: 0.2rem; }
.lancement-saisie-titre { font-weight: 600; margin: 0 0 0.6rem; }
.lancement-nouveau-libelle { flex: 1 1 24rem; max-width: 40rem; }
.grille-lancement { max-height: 42vh; }
.grille-kardex-lancement, .grille-cn-lancement { max-height: 52vh; }
.grille-produits-lancement { max-height: 55vh; }
.grille-lignes-auto { max-height: 40vh; }
.bouton-retirer { color: #b91c1c !important; }
.texte-multiligne { white-space: pre-line; }
@media (max-width: 1280px) { .lancement-entete-grille { grid-template-columns: 1fr 1fr; } }
@media (max-width: 640px) {
    .lancement-entete-grille { grid-template-columns: 1fr; }
    .lancement-visite { grid-template-columns: 1fr 1fr; }
    .lancement-actions { flex-direction: row; flex-wrap: wrap; }
}

/* ---- Lot 5.2b : mises en page du bon de lancement, impressions du lancement ---- */
.bon-lancement-zones { display: grid; grid-template-columns: minmax(14rem, 18rem) minmax(26rem, 1fr) minmax(22rem, 1fr); gap: 1rem; align-items: start; }
.bon-lancement-zones > .fiche-bloc { margin: 0; }
.liste-choix-element { border: 0; background: none; padding: 0.45rem 0.4rem; width: 100%; text-align: left; font: inherit; color: var(--aerociel-texte, inherit); cursor: pointer; border-radius: 4px; }
.liste-choix-element:hover { background: var(--aerociel-bleu-clair); }
.liste-choix-element.actif { background: var(--aerociel-bleu-clair); color: var(--aerociel-bleu); font-weight: 600; }
.bon-lancement-reglages details { border-top: 1px solid var(--aerociel-bordure); padding: 0.5rem 0; }
.bon-lancement-reglages summary { cursor: pointer; font-weight: 600; color: var(--aerociel-bleu); margin-bottom: 0.4rem; }
.cases-options { display: flex; flex-wrap: wrap; gap: 0.3rem 1.2rem; margin: 0.4rem 0; }
.liste-briques { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.4rem; }
.brique { border: 1px solid var(--aerociel-bordure); border-radius: 6px; padding: 0.4rem 0.6rem; }
.brique-entete { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; }
.ajout-brique { display: flex; gap: 0.5rem; align-items: center; margin: 0.5rem 0; }
.ajout-brique .dxbl-combobox { flex: 1 1 auto; max-width: 22rem; }
.sous-titre-reglages { margin: 0.6rem 0 0.2rem; font-weight: 600; }
.tableau-simple { width: 100%; border-collapse: collapse; margin: 0.3rem 0; }
.tableau-simple th, .tableau-simple td { border-bottom: 1px solid var(--aerociel-bordure); padding: 0.3rem 0.4rem; text-align: left; vertical-align: middle; }
.tableau-simple th { font-weight: 600; background: var(--aerociel-bleu-clair); }
.tableau-simple tr.selection td { background: var(--aerociel-bleu-clair); }
.tableau-simple tbody tr { cursor: default; }
.saisie-largeur { max-width: 6.5rem; }
.apercu-pdf { width: 100%; height: 78vh; border: 1px solid var(--aerociel-bordure); border-radius: 4px; margin-top: 0.5rem; background: #fff; }
.composition-liste { list-style: none; margin: 0.3rem 0; padding: 0; }
.composition-ligne { display: flex; justify-content: space-between; align-items: center; gap: 0.5rem; padding: 0.15rem 0.2rem; border-bottom: 1px solid var(--aerociel-bordure); }
.composition-ligne:not(.coche) { color: #6b7280; }
.composition-ordre { white-space: nowrap; }
.composition-ordre .dxbl-btn { padding-left: 0.3rem; padding-right: 0.3rem; }
.impressions-lancement-contenu { padding-top: 0.6rem; max-height: 65vh; overflow-y: auto; }
@media (max-width: 1280px) { .bon-lancement-zones { grid-template-columns: minmax(13rem, 16rem) 1fr; } .bon-lancement-apercu { grid-column: 1 / -1; } }
@media (max-width: 760px) {
    .bon-lancement-zones { grid-template-columns: 1fr; }
    .apercu-pdf { height: 60vh; }
    .ajout-brique { flex-wrap: wrap; }
}
.bon-lancement-liste .liste-choix { max-height: 70vh; }

/* Lot 5.3 : sorties de pièces (sortie par dossier, sortie Atelier, annulation, liste des pièces sorties). */
.valeur-lecture { margin: 0.2rem 0; min-height: 1.6rem; }
.information-discrete { color: #6b7280; font-size: 0.9rem; margin: 0.2rem 0; }
.champ-avec-bouton { display: flex; gap: 0.4rem; align-items: center; }
.champ-avec-bouton .dxbl-textbox { flex: 1 1 auto; }
.champ-case { display: flex; align-items: flex-end; padding-bottom: 0.3rem; }
.champ-quantite-lot { max-width: 10rem; margin-top: 0.6rem; }
.selection-produit { grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); }
.grille-sortie-dossier tr.sortie-sur-bl:not(.dxbl-grid-focused-row) td, .legende-sorties .sortie-sur-bl { color: #1d4ed8; }
.grille-sortie-dossier tr.sortie-hors-bl:not(.dxbl-grid-focused-row) td, .legende-sorties .sortie-hors-bl { color: #b91c1c; }
.grille-sortie-dossier tr.sortie-nouvelle:not(.dxbl-grid-focused-row) td, .legende-sorties .sortie-nouvelle { color: #1d4ed8; }
.grille-sortie-dossier tr.sortie-nouvelle td, .legende-sorties .sortie-nouvelle { font-style: italic; }
.sortie-dossier-aide { margin: 0.6rem 0; }
.legende-sorties { display: flex; flex-wrap: wrap; gap: 0.4rem 1.4rem; align-items: center; margin: 0.4rem 0 1rem; }
.legende-titre { font-weight: 600; color: var(--aerociel-bleu); }
.grille-annulation-sortie .sortie-annulation td { color: #6b7280; font-style: italic; }
.grille-annulation-sortie .sortie-annulee td { color: #9ca3af; text-decoration: line-through; }
.grille-pieces-sorties tr.piece-outillage:not(.dxbl-grid-focused-row) td { background: #dfe9e3; }
.grille-pieces-sorties tr.piece-outillage:not(.dxbl-grid-focused-row) td.colonne-libelle-piece { background: rgb(135, 167, 148); color: #fff; }
.legende-outillage { background: rgb(135, 167, 148); color: #fff; border-radius: 4px; padding: 0.2rem 0.6rem; font-size: 0.85rem; }
.popup-pieces-sorties .dxbl-modal-body { max-height: 75vh; overflow-y: auto; }

/* Purge des documents (0.27.1) */
.purge-types { list-style: none; margin: 0; padding: 0; }
.purge-type { padding: 0.4rem 0; border-bottom: 1px solid var(--aerociel-bordure); }
.purge-type:last-child { border-bottom: none; }
.purge-type p { margin: 0.2rem 0 0 1.8rem; }
.purge-type-reglage { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.4rem 1rem; }
.purge-duree { display: flex; align-items: center; gap: 0.4rem; }
.tableau-defilant { overflow-x: auto; }
.tableau-purge td.nombre, .tableau-purge th.nombre { text-align: right; white-space: nowrap; }

/* ---- Lot 5.4 : exploitation d'un dossier (APRS / CRS) ---- */
.exploitation-actions { position: sticky; top: 0; z-index: 5; background: var(--aerociel-fond, #fff); padding: 0.3rem 0; }
.exploitation-signature { margin-top: 0.6rem; }
.exploitation-compte-rendu summary { cursor: pointer; font-weight: 600; color: var(--aerociel-bleu); }
.exploitation-compte-rendu ul { margin: 0.4rem 0 0 1.2rem; padding: 0; max-height: 30vh; overflow-y: auto; }
.grille-exploitation { max-height: 50vh; }
.grille-exploitation .ligne-anomalie td { background: #f8d7da; }
.lien-cellule { border: none; background: none; padding: 0; color: var(--aerociel-bleu); cursor: pointer; font: inherit; text-align: left; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tableau-compressions { border-collapse: collapse; }
.tableau-compressions th, .tableau-compressions td { padding: 0.2rem 0.4rem; text-align: center; }
.tableau-compressions td { min-width: 4.5rem; }
.impressions-form1 { margin-top: 0.6rem; border-top: 1px solid var(--aerociel-bordure); padding-top: 0.4rem; }
.impressions-form1 summary { cursor: pointer; font-weight: 600; color: var(--aerociel-bleu); margin-bottom: 0.4rem; }
@media (max-width: 760px) {
    .exploitation-actions { position: static; }
    .grille-exploitation { max-height: none; }
}

/* ---- 0.28.2 : pages d'erreur ---- */
.page-erreur h1 { font-size: 1.3rem; margin: 0 0 0.6rem; }
.page-erreur p { line-height: 1.5; }
.liens-erreur { display: flex; flex-wrap: wrap; gap: 0.8rem; align-items: center; margin-top: 1rem; }
.liens-erreur .bouton-principal { text-decoration: none; display: inline-block; }

/* Saisie manuelle d'une CRS (0.28.6) : lignes de zones espacées, moteurs et hélices sur quatre colonnes (deux sur téléphone). */
.page-crs-manuelle .fiche-bloc { display: flex; flex-direction: column; gap: 0.7rem; }
.page-crs-manuelle .crs-organes { grid-template-columns: 2fr 1fr 2fr 1fr; }
@media (max-width: 700px) {
    .page-crs-manuelle .crs-organes { grid-template-columns: 2fr 1fr; }
}

/* Aeronote, temps des techniciens (0.29.0) : date et technicien en tête, grille du jour, total ; saisie d'une tâche et saisie
   multiple (rôles en cases, une ligne par technicien, repliée sur téléphone). */
.journal-temps-entete { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.6rem 1.2rem; margin-bottom: 0.8rem; }
.journal-temps-date { display: flex; align-items: center; gap: 0.4rem; }
.journal-temps-date .journal-temps-jour { width: 9.5rem; }
.journal-temps-nomjour { color: var(--aerociel-gris); min-width: 5.5rem; }
.journal-temps-technicien { display: flex; align-items: center; gap: 0.8rem; flex-wrap: wrap; }
.journal-temps-technicien .journal-temps-choix { width: 16rem; }
.grille-journal-temps th, .grille-journal-temps td { padding-left: 0.3rem; padding-right: 0.3rem; }
.journal-temps-nom { font-size: 1.05rem; }
.journal-temps-total { display: flex; justify-content: space-between; gap: 1rem; margin-top: 0.5rem; }
.grille-journal-temps td { vertical-align: middle; overflow-wrap: anywhere; }
.temps-technicien { margin: 0 0 0.6rem; }
.temps-tache { display: flex; gap: 0.5rem; align-items: flex-start; }
.temps-tache > :first-child { flex: 1 1 auto; }
.temps-roles { display: flex; flex-wrap: wrap; gap: 0.3rem 1rem; }
.temps-roles-compact { gap: 0.2rem 0.6rem; }
.temps-sous-titre { font-size: 1rem; margin: 1rem 0 0.4rem; }
.temps-techniciens { display: flex; flex-direction: column; gap: 0.4rem; align-items: flex-start; }
.temps-technicien-ligne { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem 0.8rem; padding: 0.3rem 0; border-bottom: 1px solid #e5e7eb; width: 100%; }
.temps-technicien-ligne .temps-technicien-nom { width: 13rem; }
.temps-technicien-ligne .saisie-duree .saisie-duree-heures { width: 4.5rem; }
@media (max-width: 640px) {
    .journal-temps-date { width: 100%; }
    .journal-temps-technicien, .journal-temps-technicien .journal-temps-choix { width: 100%; }
    .temps-technicien-ligne .temps-technicien-nom { width: 100%; }
}

/* Aerotech, carnet des techniciens (0.29.1) : période en ligne, ventilation (choix à gauche, critère à droite), regroupement des classes. */
.aerotech-bloc { display: flex; flex-direction: column; gap: 0.7rem; margin-bottom: 1rem; }
.aerotech-bloc h2, .aerotech-titre { font-size: 1.05rem; margin: 0; }
.aerotech-titre { margin-bottom: 0.6rem; }
.aerotech-actions { align-items: center; }
.choix-periode { display: flex; flex-wrap: wrap; gap: 0.6rem 1.5rem; align-items: flex-end; }
.choix-periode-date { display: flex; align-items: center; gap: 0.35rem; }
.choix-periode-date .choix-periode-saisie { width: 9.5rem; }
.aerotech-ventilation { display: flex; flex-wrap: wrap; gap: 1rem 3rem; align-items: flex-start; }
.aerotech-critere { display: flex; flex-direction: column; gap: 0.8rem; min-width: 16rem; }
.grille-carnet-aerotech td { overflow-wrap: anywhere; vertical-align: middle; }
.table-regroupement { border-collapse: collapse; margin: 0.6rem 0; }
.table-regroupement th, .table-regroupement td { border-bottom: 1px solid #e5e7eb; padding: 0.3rem 0.8rem; text-align: left; }
.table-regroupement td:last-child { width: 8rem; }
@media (max-width: 640px) {
    .aerotech-critere { min-width: 100%; }
    .choix-periode-date { flex-wrap: wrap; }
}

/* Codes-barres et douchette (0.30.0) : messages des lectures (toasts), pièce lue, pointages, test de la douchette. */
.codebarre-toasts { position: fixed; left: 50%; bottom: 1.2rem; transform: translateX(-50%); z-index: 3000; display: flex; flex-direction: column; gap: 0.4rem; width: min(36rem, calc(100vw - 2rem)); pointer-events: none; }
.codebarre-toast { display: flex; align-items: flex-start; gap: 0.6rem; padding: 0.6rem 0.8rem; border-radius: 0.4rem; background: #1f4e79; color: #fff; box-shadow: 0 4px 14px rgba(0, 0, 0, 0.25); font-size: 0.95rem; pointer-events: auto; }
.codebarre-toast.erreur { background: #b42318; }
.codebarre-toast span { flex: 1; overflow-wrap: anywhere; }
.codebarre-toast-fermer { background: none; border: none; color: inherit; font-size: 1.2rem; line-height: 1; cursor: pointer; padding: 0 0.2rem; }
.sortie-codebarre-piece { margin: 0.6rem 0 0; }
.grille-sortie-codebarre td { vertical-align: middle; }
.liste-retours { margin: 0.4rem 0; padding-left: 1.2rem; }
.temps-pointages ul { margin: 0.2rem 0; padding-left: 1.2rem; }
.douchette-test { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem 0.8rem; margin-top: 0.8rem; padding: 0.6rem 0.8rem; border: 1px dashed #9ca3af; border-radius: 0.4rem; }
.douchette-test code { overflow-wrap: anywhere; }
.douchette-interrupteur { margin: 0.5rem 0; }

/* Étiquettes à codes-barres (lot 5.6, 0.30.1) */
.page-etiquettes .fiche-grille { grid-template-columns: repeat(auto-fill, minmax(220px, 340px)); }
.page-etiquettes .fiche-bloc .impression-etiquettes { margin-top: 0.6rem; }
.impression-etiquettes .fiche-boutons { justify-content: flex-start; margin: 0.6rem 0 0.4rem; }
.page-etiquettes .referentiel-actions { align-items: center; }

/* Produits (lot 6.1, 0.31.0) : liste (référence gris foncé si archivé, orange sous le stock d'alerte), fiche (photo,
   boutons à droite, onglets), tarifs HT/TTC sur deux colonnes, galerie d'images. */
.produits-filtres { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 1.2rem; }
.produits-filtres .champ { min-width: 16rem; flex: 1 1 18rem; max-width: 30rem; }
.grille-produits td.produit-archive { background: #4b5563 !important; color: #fff !important; }
.grille-produits td.produit-alerte { background: #f59e0b !important; color: #1f2937 !important; font-weight: 600; }
.fiche-produit-haut { display: grid; grid-template-columns: 1fr auto; gap: 0.8rem; align-items: start; }
.fiche-produit-entete { display: grid; grid-template-columns: 180px 1fr; gap: 1rem; align-items: start; }
.fiche-produit-photo { display: flex; flex-direction: column; align-items: center; gap: 0.4rem; min-height: 150px; padding: 0.4rem; border: 1px solid #d1d5db; border-radius: 0.4rem; background: #f9fafb; text-align: center; }
.fiche-produit-photo img { max-width: 100%; max-height: 160px; object-fit: contain; }
.fiche-produit-boutons { display: flex; flex-direction: column; gap: 0.4rem; min-width: 9rem; }
.onglets-produit { margin-top: 0.8rem; }
.onglet-produit { margin: 0.8rem 0; }
.grille-tarifs-produit { display: grid; grid-template-columns: repeat(2, minmax(160px, 260px)); gap: 0.6rem 1rem; margin: 0.8rem 0; }
.champ-avec-bouton > :first-child { flex: 1; min-width: 0; }
.galerie-produit { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 0.6rem; margin-top: 0.6rem; }
.galerie-produit-vignette { display: flex; flex-direction: column; align-items: center; gap: 0.3rem; padding: 0.4rem; border: 2px solid #e5e7eb; border-radius: 0.4rem; background: #fff; cursor: pointer; }
.galerie-produit-vignette.actif { border-color: #1f4e79; }
.galerie-produit-vignette img { width: 100%; height: 110px; object-fit: contain; }
.galerie-produit-vignette span { font-size: 0.85rem; overflow-wrap: anywhere; }
.grille-maj-rapide td { vertical-align: middle; }
@media (max-width: 900px) {
    .fiche-produit-haut { grid-template-columns: 1fr; }
    .fiche-produit-boutons { flex-direction: row; flex-wrap: wrap; }
}
@media (max-width: 640px) {
    .fiche-produit-entete { grid-template-columns: 1fr; }
    .grille-tarifs-produit { grid-template-columns: 1fr 1fr; }
    .produits-filtres .champ { min-width: 100%; }
}

/* Produits 0.31.1 : grille de marge tarifaire, mises à jour de masse, Excel, codes-barres produit. */
.grille-tarifaire-defilement, .tableau-defilement { overflow-x: auto; max-width: 100%; }
.grille-tarifaire { border-collapse: collapse; margin: 0.4rem 0 0.8rem; }
.grille-tarifaire th, .grille-tarifaire td { border-bottom: 1px solid #e5e7eb; padding: 0.25rem 0.4rem; text-align: left; vertical-align: middle; }
.grille-tarifaire thead th { background: #f3f4f6; font-weight: 600; white-space: nowrap; }
.grille-tarifaire td { min-width: 7rem; }
.grille-tarifaire tbody th { width: 3.5rem; text-align: center; }
.grille-tarifaire tr.tranche-inatteignable td, .grille-tarifaire tr.tranche-inatteignable th { background: #fff4e5; }
.grille-essai .champ strong { font-size: 1.1rem; }
.liste-motifs { margin: 0.3rem 0 0.6rem; padding-left: 1.2rem; }
.tableau-avant-apres { border-collapse: collapse; width: 100%; font-size: 0.92rem; }
.tableau-avant-apres th, .tableau-avant-apres td { border-bottom: 1px solid #e5e7eb; padding: 0.25rem 0.5rem; text-align: left; white-space: nowrap; }
.tableau-avant-apres thead th { background: #f3f4f6; }
.tableau-avant-apres .nombre { text-align: right; }
.tableau-avant-apres tr.ligne-avertissement td { background: #fff7e6; }
.tableau-non-suivis td { vertical-align: middle; }
.tableau-avant-apres td.change strong { color: #1f4e79; }
.tableau-colonnes-excel { border-collapse: collapse; }
.tableau-colonnes-excel th, .tableau-colonnes-excel td { border-bottom: 1px solid #e5e7eb; padding: 0.2rem 0.6rem; text-align: left; }
.grille-import td { vertical-align: top; }
.action-import { font-weight: 600; }
.action-import.action-creation { color: #166534; }
.action-import.action-miseajour { color: #1f4e79; }
.action-import.action-inchange { color: #6b7280; }
.action-import.action-erreur { color: #b42318; }
.filtre-import { max-width: 16rem; }
.etiquette-produit .impression-etiquettes .fiche-boutons { justify-content: flex-start; }
@media (max-width: 640px) {
    .grille-tarifaire td { min-width: 5.5rem; }
    .filtre-import { max-width: 100%; }
}

/* Stock 0.32.0 : onglets Stock / Historique / Pièces usagées, fiche lot, historique d'une référence, emplacements. */
.grille-lots td.produit-alerte { background: #f59e0b !important; color: #1f2937 !important; font-weight: 600; }
.grille-lots td.alerte-rouge { color: #fff !important; }
.grille-lots td.lot-produit-inconnu { background: #e5e7eb !important; color: #7f1d1d !important; font-style: italic; }
.lots-filtres .cases-options { display: flex; flex-wrap: wrap; gap: 0.4rem 1.2rem; }
.actions-secondaires { gap: 0.4rem 0.9rem; align-items: center; font-size: 0.92rem; }
.heures-minutes { display: flex; align-items: center; gap: 0.3rem; }
.heures-minutes .dxbl-spin-edit { max-width: 6.5rem; }
.tableau-documents { border-collapse: collapse; margin-bottom: 0.5rem; }
.tableau-documents th, .tableau-documents td { padding: 0.3rem 0.8rem 0.3rem 0; text-align: left; vertical-align: middle; }
tr.ligne-annulation td { color: #6b7280; font-style: italic; }
@media (max-width: 640px) {
    .heures-minutes .dxbl-spin-edit { max-width: 5rem; }
    .actions-secondaires { font-size: 0.88rem; }
}

/* ---- Inventaires (lot 6.5, 0.35.0) ---- */
.grille-inventaire tr.ligne-saisie:not(.dxbl-grid-focused-row) td { color: var(--couleur-saisie, #00cc66); }
.grille-inventaire tr.ligne-saisie.ligne-inventaire-ecart td { font-weight: 600; }
.page-inventaires tr.ligne-grise:not(.dxbl-grid-focused-row) td { color: #8a93a0; }
.liste-cases { display: flex; flex-direction: column; gap: 0.2rem; max-height: 260px; overflow-y: auto; border: 1px solid var(--aerociel-bordure); border-radius: 6px; padding: 0.4rem 0.6rem; margin: 0.4rem 0; }
.legende-inventaire { display: inline-flex; align-items: center; gap: 0.4rem; color: var(--couleur-saisie, #00cc66); margin-left: 1rem; }
.pastille-saisie { display: inline-block; width: 0.8rem; height: 0.8rem; border-radius: 50%; background: var(--couleur-saisie, #00cc66); }

/* ---- Valorisations et contrôles du stock (lot 6.5, 0.35.1) ---- */
tr.ligne-valorisation-signalee:not(.dxbl-grid-focused-row) td { background-color: rgb(252, 214, 210) !important; }
.liste-cases-colonnes { flex-direction: row; flex-wrap: wrap; gap: 0.3rem 1.2rem; max-height: 180px; }
.tableau-totaux { border-collapse: collapse; margin: 0.8rem 0; min-width: min(560px, 100%); }
.tableau-totaux th, .tableau-totaux td { border: 1px solid var(--aerociel-bordure); padding: 0.3rem 0.7rem; text-align: right; }
.tableau-totaux th:first-child, .tableau-totaux td:first-child { text-align: left; }
.tableau-totaux tr.total-general td { font-weight: 700; background: var(--aerociel-bleu-clair); }

/* ---- Outillage (lot 6.6, 0.36.0) ---- */
.grille-outillage td.cellule-butee-outil.alerte-rouge { color: #fff !important; }
.grille-outillage tr.ligne-outil-hs:not(.dxbl-grid-focused-row) td { color: #8a93a0; background-color: #f1f3f5 !important; }
.legende-butees-outils .element-legende { display: inline-flex; align-items: center; gap: 0.35rem; white-space: nowrap; }
.legende-butees-outils { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 0.3rem 0.5rem; color: var(--aerociel-gris); font-size: 0.88rem; }
.pastille-legende { display: inline-block; width: 0.85rem; height: 0.85rem; border-radius: 3px; margin-left: 0.6rem; border: 1px solid rgba(0, 0, 0, 0.15); flex: 0 0 auto; }
.pastille-legende.pastille-hs { background: #f1f3f5; }
.fiche-outil { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
.fiche-outil .valeur .dxbl-date-edit { flex: 1 1 auto; }
.information-outil p { margin: 0; }
.tri-outillage { display: flex; gap: 0.8rem; align-items: stretch; }
.tri-outillage .grille-tri-outillage { flex: 1 1 auto; height: min(60vh, 32rem); }
.tri-outillage-boutons { display: flex; flex-direction: column; gap: 0.5rem; justify-content: center; }
.grille-import-outillage { height: min(50vh, 26rem); margin-top: 0.6rem; }
tr.ligne-import-ignoree:not(.dxbl-grid-focused-row) td { color: #8a93a0; font-style: italic; }
@media (max-width: 640px) {
    .tri-outillage { flex-direction: column; }
    .tri-outillage-boutons { flex-direction: row; flex-wrap: wrap; }
    .pastille-legende { margin-left: 0.2rem; }
}

/* ---- Péremptions (lot 6.6, 0.36.1) ---- */
.grille-peremption td.cellule-peremption.alerte-rouge, .grille-alerte-peremption td.cellule-peremption.alerte-rouge { color: #fff !important; }
.grille-alerte-peremption { height: min(50vh, 24rem); margin-top: 0.5rem; }
.pastille-peremption { position: fixed; right: 1rem; bottom: 1rem; z-index: 1040; display: flex; align-items: center; gap: 0.3rem; background: rgb(224, 230, 78);
    color: #1f2937; border-radius: 999px; padding: 0.35rem 0.5rem 0.35rem 0.9rem; box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18); font-size: 0.9rem; font-weight: 600; }
.pastille-peremption a { color: inherit; text-decoration: none; display: inline-flex; align-items: center; gap: 0.4rem; }
.pastille-peremption a:hover { text-decoration: underline; }
.pastille-peremption-depassee { background: rgb(252, 128, 118); color: #fff; }
.pastille-fermer { border: none; background: transparent; color: inherit; font-size: 1.1rem; line-height: 1; cursor: pointer; padding: 0 0.3rem; opacity: 0.8; }
.pastille-fermer:hover { opacity: 1; }
@media (max-width: 640px) {
    .pastille-peremption { right: 0.6rem; bottom: 0.6rem; font-size: 0.85rem; }
}

/* ---- Icône jaune d'Aerociel (lot 6.6, 0.36.2) ---- */
.bouton-icone.icone-echeances { position: relative; color: #a68f00; }
.bouton-icone.icone-echeances-depassees { color: #dc2626; }
.icone-echeances .pastille-nombre { position: absolute; top: 0; right: -0.15rem; min-width: 1.05rem; height: 1.05rem; padding: 0 0.2rem; border-radius: 999px;
    background: rgb(224, 230, 78); color: #1f2937; font-size: 0.68rem; font-weight: 700; line-height: 1.05rem; text-align: center; }
.icone-echeances-depassees .pastille-nombre { background: rgb(252, 128, 118); color: #fff; }
.grille-echeances { height: min(50vh, 24rem); margin-top: 0.5rem; }
.grille-echeances td.cellule-echeance.alerte-rouge { color: #fff !important; }


/* ---- Bons de livraison (lot 7.3, 0.37.0) ---- */
.grille-bl { height: min(55vh, 32rem); }
.grille-lignes-bl { height: min(32vh, 18rem); }
.grille-bl tr.bl-facture:not(.dxbl-grid-focused-row) td, .legende-bl .bl-facture { color: #7c3aed; }
.grille-bl tr.bl-annule:not(.dxbl-grid-focused-row) td, .legende-bl .bl-annule { color: #dc2626; }
.grille-bl tr.bl-cloture:not(.dxbl-grid-focused-row) td, .legende-bl .bl-cloture { color: #1d4ed8; }
.pied-liste-bl { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 0.3rem 1rem; }
.legende-bl, .legende-stock-bl { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 0.3rem 1rem; font-size: 0.88rem; color: var(--aerociel-gris); }
.legende-bl .element-legende, .legende-stock-bl .element-legende { display: inline-flex; align-items: center; gap: 0.35rem; white-space: nowrap; }
.legende-stock-bl { margin: 0.5rem 0; }
.pastille-stock { display: inline-block; width: 0.75rem; height: 0.75rem; border-radius: 50%; vertical-align: middle; }
.pastille-stock.stock-non-faite { background: #dc2626; }
.pastille-stock.stock-partielle { background: #f5b82e; }
.pastille-stock.stock-complete { background: #22a03a; }
.pastille-stock.stock-non-suivi { background: #3b6fb6; }
.grille-lignes-bl tr.ligne-commentaire-bl td, .grille-saisie-bl tr.ligne-commentaire-bl td { font-style: italic; color: var(--aerociel-gris); }
/* Éco-participation (0.41.0) : ligne automatique sous le produit, non modifiable. */
.grille-saisie-bl tr.ligne-eco-bl:not(.dxbl-grid-focused-row) td { color: #067647; background: #f3fbf6; font-style: italic; }
.page-bl .page-entete { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 1.5rem; }
.zones-visibles { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 0.4rem 1rem; margin-left: auto; }
.grille-entete-bl { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.grille-entete-bl .champ-client-bl, .grille-entete-bl .champ-titre-bl { grid-column: span 2; }
.grille-entete-bl .champ-adresse-bl .valeur-lecture { min-height: 2.6rem; margin: 0; }
.tarif-bl { display: inline-flex; align-items: center; justify-content: center; min-width: 2rem; border-radius: 4px; font-weight: 600; color: #fff; }
.tarif-bl.tarif-1 { background: rgb(135, 167, 148); }
.tarif-bl.tarif-2 { background: rgb(66, 167, 249); }
.tarif-bl.tarif-3 { background: rgb(224, 230, 78); color: #1f2937; }
.tarif-bl.tarif-4 { background: rgb(252, 128, 118); }
.grille-saisie-bl { max-height: 26rem; }
.grille-totaux-bl { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.grille-totaux-bl .montant { text-align: right; font-variant-numeric: tabular-nums; margin: 0; padding: 0.35rem 0.6rem; background: #f1f3f5; border-radius: 6px; }
.grille-totaux-bl .total-ttc-bl { font-weight: 700; }
@media (max-width: 900px) {
    .grille-entete-bl { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
    .grille-entete-bl { grid-template-columns: minmax(0, 1fr); }
    .grille-entete-bl .champ-client-bl, .grille-entete-bl .champ-titre-bl { grid-column: auto; }
    .zones-visibles { margin-left: 0; }
    .grille-bl { height: min(50vh, 26rem); }
}

/* ---- Récup du time report et taux de main-d'œuvre (lot 7.3, 0.37.1) ---- */
.grille-recup-carnet { height: min(32vh, 16rem); }
.grille-recup-lignes { max-height: 22rem; }
.totaux-recup { display: flex; flex-wrap: wrap; gap: 0.3rem 1.2rem; margin: 0.4rem 0 0.8rem; color: var(--aerociel-gris); font-size: 0.9rem; }
.code-execution { align-items: flex-end; margin-bottom: 0.5rem; max-width: 34rem; }
.code-execution .champ { flex: 1; }
.produit-modifie input { font-weight: 600; color: #1d4ed8; }
.avertissement-recup { color: #b45309; white-space: normal; }
.grille-repartition { grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); }

/* Onglet Facture (lot 7.4, 0.38.0) : clôturée en vert (RVB 135, 167, 148), n° d'un proforma sur gris foncé, n° d'un avoir sur gris clair en bleu. */
.grille-factures tr.facture-cloturee:not(.dxbl-grid-focused-row) td, .legende-bl .facture-cloturee { color: rgb(70, 120, 90); }
.grille-factures td.numero-proforma, .legende-bl .numero-proforma { background: #4b5563; color: #fff; }
.grille-factures td.numero-avoir, .legende-bl .numero-avoir { background: #e5e7eb; color: rgb(66, 167, 249); }
.legende-bl .numero-proforma, .legende-bl .numero-avoir { padding: 0 0.35rem; border-radius: 3px; }

/* ---- Avoirs et analyse client (lot 7.4, 0.38.3) ---- */
.ligne-choix {
    display: flex;
    align-items: center;
    gap: .5rem;
    flex-wrap: wrap;
}

.choix-avoir {
    display: flex;
    flex-wrap: wrap;
    gap: 1.5rem;
    margin-bottom: .75rem;
}

.grille-avoir .quantite-avoir {
    max-width: 110px;
}

/* Règlements (lot 7.5, 0.39.0) : fenêtre des règlements d'une facture et liste du menu Clients › Règlements. */
.synthese-reglements { margin-bottom: 0.75rem; }
.synthese-reglements .montant { font-size: 1.1rem; font-variant-numeric: tabular-nums; }
.grille-reglements { max-height: 16rem; }
.page-reglements .grille-reglements { max-height: none; }
.grille-reglements tr.reglement-annule:not(.dxbl-grid-focused-row) td { color: #8a8f98; text-decoration: line-through; }
.bloc-saisie-reglement, .bloc-imputation, .bloc-annulation { margin-top: 0.75rem; }
.bloc-saisie-reglement h3, .bloc-imputation h3, .bloc-annulation h3 { margin: 0 0 0.5rem; font-size: 1rem; }
@media (max-width: 640px) {
    .synthese-reglements { grid-template-columns: 1fr 1fr; }
}

/* Suivi des règlements (lot 7.5, 0.39.1) : journal, impayés, relevé, encours. */
.totaux-modes { display: flex; flex-wrap: wrap; gap: 0.4rem 1.25rem; margin: 0.5rem 0; }
.totaux-modes .element-total { font-variant-numeric: tabular-nums; }
.grille-encours tr.encours-depasse:not(.dxbl-grid-focused-row) td { color: #b42318; font-weight: 600; }
.page-impayes .lots-filtres .fiche-grille { grid-template-columns: minmax(0, 260px); }

/* Clôtures NF525 (lot 7.6, 0.40.0) : rappel de l'onglet Facture, détail d'une clôture. */
.rappel-cloture { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; align-items: center; margin: 0 0 0.6rem; padding: 0.45rem 0.75rem;
    border-left: 4px solid #c2410c; background: #fff4e6; }
.rappel-cloture a { font-weight: 600; }
.champ-rappel-cloture { max-width: 22rem; }
.detail-cloture { display: grid; grid-template-columns: minmax(0, 15rem) minmax(0, 1fr); gap: 0.3rem 1rem; margin: 0 0 0.9rem; }
.detail-cloture dt { color: var(--aerociel-gris); }
.detail-cloture dd { margin: 0; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
@media (max-width: 700px) {
    .detail-cloture { grid-template-columns: 1fr; }
    .detail-cloture dd { margin-bottom: 0.3rem; }
}

/* Conformité NF525 (lot 7.6, 0.40.1). */
.conformite-resume { display: flex; flex-wrap: wrap; gap: 0.4rem 1.5rem; align-items: center; margin: 0.6rem 0; }
.resultat-sequences .grille-ruptures { max-height: 16rem; }

/* Conformité NF525, présentation (0.40.3) : cartes de synthèse, pastilles d'état, signature. */
.page-conformite { --conf-vert: #067647; --conf-vert-fond: #ecfdf3; --conf-rouge: #b42318; --conf-rouge-fond: #fef3f2;
    --conf-orange: #b54708; --conf-orange-fond: #fffaeb; --conf-gris: #475467; --conf-gris-fond: #f2f4f7; --conf-bleu: #175cd3; --conf-bleu-fond: #eff8ff; }
.conformite-cartes { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.75rem; margin: 0.9rem 0 0.6rem; }
.carte-conformite { display: flex; flex-direction: column; gap: 0.35rem; text-align: left; padding: 0.7rem 0.9rem; border: 1px solid #e4e7ec;
    border-left: 5px solid var(--conf-gris); border-radius: 8px; background: #fff; cursor: pointer; font: inherit; color: inherit;
    transition: box-shadow 0.15s, transform 0.15s; }
.carte-conformite:hover { box-shadow: 0 2px 8px rgba(16, 24, 40, 0.10); }
.carte-conformite.active { box-shadow: 0 0 0 2px var(--aerociel-bleu, #1f5fa8) inset, 0 2px 8px rgba(16, 24, 40, 0.10); }
.carte-conformite.carte-ok { border-left-color: var(--conf-vert); }
.carte-conformite.carte-ko { border-left-color: var(--conf-rouge); background: var(--conf-rouge-fond); }
.carte-conformite.carte-attention { border-left-color: var(--conf-orange); }
.carte-conformite.carte-vide { border-left-color: #d0d5dd; color: #667085; }
.carte-entete { display: flex; align-items: center; gap: 0.4rem; font-weight: 600; }
.carte-ok .carte-entete { color: var(--conf-vert); }
.carte-ko .carte-entete { color: var(--conf-rouge); }
.carte-attention .carte-entete { color: var(--conf-orange); }
.carte-total { font-size: 1.6rem; font-weight: 700; line-height: 1.1; font-variant-numeric: tabular-nums; }
.carte-compteurs { display: flex; flex-wrap: wrap; gap: 0.3rem; }
.pastille-etat { display: inline-block; padding: 0.08rem 0.55rem; border-radius: 999px; font-size: 0.8rem; font-weight: 600; line-height: 1.5; white-space: nowrap; }
.pastille-etat.etat-valide { color: var(--conf-vert); background: var(--conf-vert-fond); }
.pastille-etat.etat-invalide { color: var(--conf-rouge); background: #fee4e2; }
.pastille-etat.etat-non-signee { color: var(--conf-gris); background: var(--conf-gris-fond); }
.pastille-etat.etat-non-verifiee { color: var(--conf-orange); background: var(--conf-orange-fond); }
.pastille-etat.etat-vide { color: #667085; background: var(--conf-gris-fond); font-weight: 400; }
.etiquette-version { display: inline-block; padding: 0 0.45rem; border-radius: 4px; font-size: 0.78rem; font-weight: 600; letter-spacing: 0.02em; }
.etiquette-version.version-aerociel { color: var(--conf-bleu); background: var(--conf-bleu-fond); }
.etiquette-version.version-windev { color: var(--conf-gris); background: var(--conf-gris-fond); }
.signature-chaine { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: Consolas, "Cascadia Mono", monospace; font-size: 0.78rem; color: #667085; }
.conformite-resume .conformite-onglet { font-weight: 700; font-size: 1.05rem; }
.grille-conformite tr.conformite-anomalie:not(.dxbl-grid-focused-row) td { color: var(--conf-rouge); background: var(--conf-rouge-fond); font-weight: 400; }
.conformite-avertissement { display: flex; align-items: center; gap: 0.4rem; padding: 0.5rem 0.8rem; border-radius: 6px; color: var(--conf-orange); background: var(--conf-orange-fond); }
.resultat-sequences { border-left: 5px solid var(--conf-gris); }
.resultat-sequences.sequences-ok { border-left-color: var(--conf-vert); background: var(--conf-vert-fond); }
.resultat-sequences.sequences-ko { border-left-color: var(--conf-rouge); background: var(--conf-rouge-fond); }
.sequences-titre { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.4rem; }
.sequences-ok .sequences-titre { color: var(--conf-vert); }
.sequences-ko .sequences-titre { color: var(--conf-rouge); }
.sequences-info { display: flex; align-items: center; gap: 0.4rem; margin: 0.6rem 0 0.4rem; color: var(--conf-bleu); }
@media (max-width: 900px) {
    .conformite-cartes { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Lot 7.1 (0.42.0) : devis (onglet Devis, listes du menu Clients › Devis). Transformé en vert (couleur de WinDev),
   accepté en bleu, refusé en gris barré, périmé (validité dépassée) en orange, n° d'un proforma sur gris foncé. */
.grille-devis tr.devis-transforme:not(.dxbl-grid-focused-row) td, .legende-bl .devis-transforme { color: rgb(70, 120, 90); }
.grille-devis tr.devis-accepte:not(.dxbl-grid-focused-row) td, .legende-bl .devis-accepte { color: #1d4ed8; font-weight: 600; }
.grille-devis tr.devis-refuse:not(.dxbl-grid-focused-row) td, .legende-bl .devis-refuse { color: #8a8f98; text-decoration: line-through; }
.grille-devis tr.devis-perime:not(.dxbl-grid-focused-row) td, .legende-bl .devis-perime { color: #b45309; }
.numero-proforma { background: #4b5563; color: #fff; border-radius: 4px; padding: 1px 6px; }
/* Lot 7.1 (0.42.1) : déduction d'un acompte sur une facture de solde. */
.grille-saisie-bl tr.ligne-deduction-bl:not(.dxbl-grid-focused-row) td { color: #92400e; background: #fffbeb; font-style: italic; }
.facturer-devis .acomptes-devis { margin: 0.5rem 0; }

/* Lot 7.2 (0.43.0) : commandes clients (onglet Com.Cli, fiche, encours, non livrées). Transformée ou livrée en vert (WinDev),
   partiellement livrée en orange foncé ; livraison souhaitée en retard sur rouge, à moins de 15 jours sur jaune, prévue en
   vert ; quantité livrée : jaune complète, orange partielle (TABLE_DetailCommandeClient). */
.grille-commandes tr.commande-traitee:not(.dxbl-grid-focused-row) td, .legende-bl .commande-traitee { color: rgb(70, 120, 90); }
.grille-commandes tr.commande-partielle:not(.dxbl-grid-focused-row) td, .legende-bl .commande-partielle { color: #9a3412; }
.livraison-retard { background: #fee2e2; color: #991b1b; border-radius: 4px; padding: 1px 6px; font-weight: 600; }
.livraison-proche { background: #fef3c7; color: #92400e; border-radius: 4px; padding: 1px 6px; }
.livraison-prevue { color: rgb(70, 120, 90); }
.livraison-complete { background: #fef08a; color: #713f12; border-radius: 4px; padding: 1px 6px; }
.livraison-partielle { background: #fed7aa; color: #9a3412; border-radius: 4px; padding: 1px 6px; }
.stock-insuffisant { color: #b91c1c; font-weight: 600; }
.grille-encours tr.encours-premiere:not(.dxbl-grid-focused-row) td { border-top: 2px solid #94a3b8; }
.grille-encours tr:not(.encours-premiere):not(.dxbl-grid-focused-row) td:nth-child(-n+4) { color: #8a8f98; }
.dxbl-grid-focused-row .livraison-prevue { color: inherit; }

/* Lot 7.8 (0.44.0) : pièces comptables. */
.choix-pieces { display: flex; flex-wrap: wrap; gap: 1rem 2.5rem; align-items: flex-start; }
.totaux-pieces { display: flex; flex-wrap: wrap; gap: 0.5rem 1.5rem; align-items: center; margin: 0.25rem 0 0.5rem; }
.pieces-equilibre { color: rgb(70, 120, 90); font-weight: 600; }
.pieces-desequilibre { color: #b91c1c; font-weight: 600; }
.controle-pieces { margin: 0.5rem 0; padding: 0.5rem 0.75rem; border: 1px solid #fcd34d; background: #fffbeb; border-radius: 6px; }
.controle-pieces summary { cursor: pointer; font-weight: 600; color: #92400e; }
.controle-pieces ul { margin: 0.4rem 0 0; padding-left: 1.2rem; }
.grille-pieces tr.debut-ecriture:not(.dxbl-grid-focused-row) td { border-top: 2px solid #94a3b8; }
.champ-en-ligne { display: inline-flex; flex-direction: row; align-items: center; gap: 0.5rem; }
/* État des ventes (0.44.1) */
.etat-ventes-nombre { align-self: center; color: #475569; }
.cumul-ventes { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 0.75rem; max-width: 900px; margin: 0.5rem 0; }
.cumul-ventes > div { display: flex; flex-direction: column; gap: 0.25rem; padding: 0.75rem 1rem; border: 1px solid #cbd5e1; border-radius: 6px; background: #f8fafc; }
.cumul-ventes span { color: #475569; font-size: 0.9rem; }
.cumul-ventes strong { font-size: 1.2rem; text-align: right; }
/* Statistiques des ventes et coût de revient (0.44.2) */
.aide-champ { color: #475569; }
.choix-avion { min-width: 180px; }
/* Statistique dynamique CA (0.44.3) */
.tableau-ca { height: calc(100vh - 330px); min-height: 420px; }
/* Tableau de bord d'Aerofact (0.44.4) */
.cartes-tableau-bord { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 0.75rem; margin: 0.5rem 0 1rem; }
.carte-tableau-bord { display: flex; flex-direction: column; gap: 0.2rem; padding: 0.75rem 1rem; border: 1px solid #cbd5e1; border-radius: 6px; background: #f8fafc; color: inherit; text-decoration: none; }
.carte-tableau-bord:hover { border-color: rgb(70, 120, 90); background: #f1f5f2; }
.carte-tableau-bord .titre-carte { color: #475569; font-size: 0.9rem; }
.carte-tableau-bord strong { font-size: 1.35rem; }
.carte-tableau-bord span { font-size: 0.85rem; }
.tendance-hausse { color: rgb(70, 120, 90); }
.tendance-baisse { color: #b91c1c; }
.bloc-tableau-bord { margin-bottom: 1rem; }
.grille-tableau-bord { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1rem; }
.table-classement { width: 100%; border-collapse: collapse; font-size: 0.9rem; table-layout: fixed; }
.table-classement th, .table-classement td { padding: 0.3rem 0.4rem; border-bottom: 1px solid #e2e8f0; }
.table-classement th:first-child { width: 45%; }
.table-classement .nombre { text-align: right; white-space: nowrap; }
.libelle-classement { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ligne-repartition { display: grid; grid-template-columns: 110px 1fr auto; gap: 0.5rem; align-items: center; margin: 0.4rem 0; font-size: 0.9rem; }
.barre-repartition { height: 12px; background: #e2e8f0; border-radius: 6px; overflow: hidden; }
.barre-repartition > span { display: block; height: 100%; }
.part-pieces { background: rgb(70, 120, 90); }
.part-mo { background: #2563eb; }
.part-autres { background: #94a3b8; }
.montant-repartition { text-align: right; white-space: nowrap; }
.infobulle-graphique { padding: 0.25rem 0.5rem; }
@media (max-width: 600px) {
    .cartes-tableau-bord { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.5rem; }
    .carte-tableau-bord { padding: 0.5rem 0.6rem; }
    .carte-tableau-bord strong { font-size: 1.1rem; }
    .carte-tableau-bord span { font-size: 0.78rem; }
}
/* Mouvements de stock (0.45.0) */
.choix-vue-mouvements { min-width: 320px; }
.choix-famille { min-width: 220px; }
.liste-commandes { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.35rem; }
.puce-commande { display: inline-flex; align-items: center; gap: 0.25rem; padding: 0.1rem 0.5rem; border: 1px solid #cbd5e1; border-radius: 999px; background: #f8fafc; font-size: 0.85rem; }
.puce-commande button { border: none; background: none; cursor: pointer; color: #b91c1c; font-size: 1rem; line-height: 1; }
@media (max-width: 600px) { .choix-vue-mouvements, .choix-famille { min-width: 0; width: 100%; } }
/* Consommation (0.45.1) */
.entete-sorties-reference { display: flex; flex-wrap: wrap; gap: 0.5rem 1.5rem; margin: 0.5rem 0; }
.entete-sorties-reference span { color: #475569; }
.entete-sorties-reference strong { color: #0f172a; margin-left: 0.25rem; }
/* Règlements fournisseurs (0.46.1) */
.tableau-affectations td.cellule-saisie { min-width: 130px; padding: 0.15rem 0.3rem; }
.tableau-affectations tr.ligne-avoir td { color: #9a3412; }
.tableau-affectations td, .tableau-affectations th { white-space: nowrap; }
/* Comptabilité matière douane (0.46.2) */
.grille-compta-matiere tr.ligne-entree-compta td { border-top: 2px solid var(--aerociel-bordure); }
.grille-compta-matiere tr.ligne-suite-compta td { color: #475569; }
/* Modèle des documents de vente (0.47.0) */
.modeles-documents { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 0.8rem; margin: 0.6rem 0 1rem; }
@media (max-width: 600px) { .modeles-documents { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.5rem; } }
.modele-document { position: relative; display: flex; flex-direction: column; gap: 0.3rem; border: 2px solid var(--aerociel-bordure); border-radius: 8px; padding: 0.5rem; cursor: pointer; background: #fff; }
.modele-document input { position: absolute; top: 0.5rem; left: 0.5rem; }
.modele-document img { width: 100%; height: auto; border: 1px solid var(--aerociel-bordure); border-radius: 4px; background: #fff; }
.modele-document strong { font-size: 0.9rem; }
.modele-document .grise { font-size: 0.78rem; line-height: 1.3; }
.modele-document.choisi { border-color: var(--aerociel-bleu); box-shadow: 0 0 0 2px rgba(27, 79, 138, 0.15); }
.modele-document.indisponible { cursor: default; opacity: 0.6; }
.badge-prochainement { position: absolute; top: 0.5rem; right: 0.5rem; background: #fef3c7; color: #92400e; border-radius: 999px; padding: 0.05rem 0.5rem; font-size: 0.72rem; }
/* Préférences d'Aerofact en sous-onglets (0.48.0) */
.onglets-preferences-aerofact .dxbl-tabs-content-panel { padding-top: 0.6rem; }
.reglages-aerofact { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 0.7rem 1.2rem; }
.reglage-aerofact { display: flex; flex-direction: column; gap: 0.2rem; min-width: 0; }
.reglage-aerofact.reglage-large { grid-column: 1 / -1; }
.reglage-aide { font-size: 0.8rem; }
.pied-de-page-reglage { display: flex; flex-direction: column; gap: 0.25rem; margin-bottom: 0.6rem; }
.couleurs-documents { display: flex; flex-wrap: wrap; gap: 1.2rem; align-items: flex-start; }
.couleurs-choix { display: flex; flex-direction: column; gap: 0.5rem; min-width: 260px; }
.champ-couleur { display: flex; align-items: center; gap: 0.6rem; cursor: pointer; }
.champ-couleur input[type=color] { width: 44px; height: 30px; padding: 0; border: 1px solid var(--aerociel-bordure); border-radius: 4px; background: #fff; }
.apercu-couleurs { width: 300px; max-width: 100%; border: 1px solid var(--aerociel-bordure); border-radius: 6px; padding: 0.6rem; background: #fff; font-family: Arial, sans-serif; font-size: 0.78rem; color: #1f2937; }
.apercu-titre { font-weight: 700; font-size: 0.95rem; margin-bottom: 0.4rem; }
.apercu-cadre { padding: 0.4rem 0.5rem; margin-bottom: 0.5rem; line-height: 1.35; }
.apercu-entete { color: #fff; font-weight: 700; padding: 0.2rem 0.4rem; }
.apercu-ligne { padding: 0.2rem 0.4rem; border-bottom: 1px solid #eef0f3; }
.apercu-net { color: #fff; font-weight: 700; padding: 0.3rem 0.5rem; margin-top: 0.5rem; text-align: right; }
.documents-societe { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 1rem; }
.document-societe { display: flex; flex-direction: column; gap: 0.35rem; border: 1px solid var(--aerociel-bordure); border-radius: 6px; padding: 0.7rem; }
.apercu-signature { max-width: 240px; max-height: 90px; object-fit: contain; border: 1px dashed var(--aerociel-bordure); background: #fff; }
@media (max-width: 600px) { .reglages-aerofact { grid-template-columns: minmax(0, 1fr); } }

/* Chorus Pro (0.49.0) : situation d'une facture et anomalies. */
.situation-chorus { display: grid; grid-template-columns: max-content 1fr; gap: 0.25rem 1rem; margin: 0 0 0.8rem; }
.situation-chorus dt { color: var(--aerociel-gris, #64748b); }
.situation-chorus dd { margin: 0; font-weight: 600; overflow-wrap: anywhere; }
.liste-anomalies { margin: 0.2rem 0 0.8rem 1.2rem; padding: 0; }
.liste-anomalies li { margin-bottom: 0.25rem; }

/* Données à corriger (0.49.1) : gravité « Bloquant » en rouge, message « rien à corriger » en vert. */
.page-donnees-corriger .cellule-bloquante { color: #b32121; font-weight: 600; }
.page-donnees-corriger .message-succes { color: #1d6b2f; font-weight: 600; }
.page-donnees-corriger .referentiel-actions { display: flex; flex-wrap: wrap; gap: 0.6rem 1.2rem; align-items: center; }

/* Plateforme agréée (0.49.2) : historique des statuts, n° de flux long. */
.titre-historique { font-size: 1rem; margin: 0.8rem 0 0.3rem; }
.historique-plateforme li { line-height: 1.35; }
.texte-coupable { overflow-wrap: anywhere; }

/* Factures reçues (0.49.3) : une carte par facture, bordure selon l'état. */
.factures-recues { display: flex; flex-direction: column; gap: 0.6rem; margin-top: 0.6rem; }
.facture-recue { border: 1px solid var(--aerociel-bordure); border-left-width: 5px; border-radius: 6px; padding: 0.5rem 0.7rem; }
.facture-recue.etat-vert { border-left-color: rgb(84, 160, 100); }
.facture-recue.etat-jaune { border-left-color: rgb(214, 170, 40); }
.facture-recue.etat-rouge { border-left-color: rgb(190, 60, 60); }
.facture-recue-entete { display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; }
.facture-recue-titre { flex: 1 1 18rem; display: flex; flex-wrap: wrap; gap: 0.2rem 0.5rem; align-items: baseline; }
.facture-recue-montant { margin-left: auto; font-weight: 600; }
.facture-recue .badge-etat { font-size: 0.8rem; padding: 0.1rem 0.5rem; border-radius: 10px; background: var(--aerociel-bleu-clair); }
.facture-recue-message { margin: 0.3rem 0; color: #555; }
.facture-recue-detail summary { cursor: pointer; color: var(--aerociel-bleu, #1b4f8a); margin: 0.3rem 0; }
.facture-recue .nombre { text-align: right; white-space: nowrap; }

/* Abonnements (0.49.4) */
.saisie-avec-bouton { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
.saisie-avec-bouton .valeur-lecture { margin: 0; min-width: 12rem; }
.case-filtre { display: inline-flex; align-items: center; gap: 0.4rem; margin-left: 0.5rem; }
.grille-abonnements .abonnement-arrete td { color: var(--aerociel-gris); }
.grille-abonnements .abonnement-introuvable td { color: #b42318; }
.tableau-abonnements td .dxbl-checkbox { margin: 0; }
.valeur-lecture.champ-en-erreur { color: #b42318; }

/* E-reporting (0.49.6) : pastilles d'état aux couleurs de la conformité, montants alignés à droite (liste et aperçu). */
.page-ereporting, .apercu-ereporting { --conf-vert: #067647; --conf-vert-fond: #ecfdf3; --conf-rouge: #b42318; --conf-orange: #b54708; --conf-orange-fond: #fffaeb;
    --conf-gris: #475467; --conf-gris-fond: #f2f4f7; }
.apercu-ereporting td.nombre, .apercu-ereporting th.nombre { text-align: right; white-space: nowrap; }
.navigation-mois { align-items: center; }
.navigation-mois .mois-courant { min-width: 11rem; text-align: center; text-transform: capitalize; }
.tableau-ereporting td.nombre, .tableau-ereporting th.nombre, .page-ereporting td.nombre, .page-ereporting th.nombre { text-align: right; white-space: nowrap; }
.tableau-ereporting tbody tr { cursor: pointer; }
.tableau-ereporting tbody tr:focus-visible { outline: 2px solid var(--aerociel-bleu, #1b4f8a); outline-offset: -2px; }
@media (max-width: 640px) {
    .tableau-ereporting th:nth-child(n+4):nth-child(-n+7), .tableau-ereporting td:nth-child(n+4):nth-child(-n+7) { display: none; }
}

/* Dossiers moteur (0.50.0) */
.grille-moteurs .dossier-moteur-cloture:not(.dxbl-grid-focused-row) td { color: var(--aerociel-gris); }
.grille-moteurs .dossier-moteur-cloture td { font-style: italic; }
.saisie-heures-minutes { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 0.4rem; }
.cases-travaux { border: none; padding: 0; margin: 0; }
.cases-ligne { display: flex; flex-wrap: wrap; gap: 0.4rem 1.4rem; }
.cases-ligne > * { flex: 0 0 auto; width: auto; }
.cases-travaux legend { padding: 0; margin-bottom: 0.3rem; }
/* Dossiers moteur, 0.50.1 : exploitation (en-tête en lecture), entrée en atelier (photo et observations côte à côte). */
.exploitation-moteur-entete { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 0.4rem 1.2rem; margin: 0 0 0.8rem; }
.exploitation-moteur-entete dt { font-size: 0.8rem; color: var(--aerociel-gris); }
.exploitation-moteur-entete dd { margin: 0; font-weight: 600; min-height: 1.2em; overflow-wrap: anywhere; }
.exploitation-moteur-entete .entete-large { grid-column: 1 / -1; }
.exploitation-moteur .page-entete h2 { margin: 0.2rem 0 0.6rem; }
.entree-moteur-bas { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); gap: 1rem; margin-top: 0.8rem; }
.entree-moteur-photo { display: flex; flex-direction: column; gap: 0.4rem; }
.entree-moteur-photo img { max-width: 100%; max-height: 260px; object-fit: contain; border: 1px solid var(--aerociel-bordure, #d0d5dd); border-radius: 4px; align-self: flex-start; }
.entree-moteur-photo .titre-champ { font-size: 0.85rem; }
.entree-moteur-observations { width: 100%; }
@media (max-width: 640px) { .entree-moteur-bas { grid-template-columns: minmax(0, 1fr); } }
/* Dossiers moteur, 0.50.2 : sélection des impressions. */
.impressions-moteur ul { list-style: none; margin: 0.4rem 0 0.6rem; padding-left: 1.6rem; display: grid; gap: 0.35rem; }
/* Outils Aerociel (0.51.0) : barre de recherche, lignes non annulables, éléments du Kardex. */
.recherche-outil { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 0.6rem 1rem; margin-bottom: 0.8rem; }
.recherche-outil .champ { min-width: 240px; flex: 1 1 260px; max-width: 420px; }
.grille-annulation .ligne-non-annulable:not(.dxbl-grid-focused-row) td { color: var(--aerociel-gris); }
.grille-referentiel .piece-kardex td { font-style: italic; }
/* Documents de la base (0.52.0) : filtres sur une ou plusieurs lignes, liste des usages. */
.filtres-ged .champ-type-ged { flex: 0 1 220px; min-width: 180px; }
.filtres-ged .champ-date-ged { flex: 0 1 150px; min-width: 140px; }
.filtres-ged .champ-periode-ged { flex: 0 1 240px; min-width: 200px; }
.filtres-ged .case-toutes-dates { align-self: center; margin-top: 1.1rem; }
.liste-usages { width: 100%; }
@media (max-width: 640px) { .filtres-ged .champ-type-ged, .filtres-ged .champ-date-ged, .filtres-ged .champ-periode-ged { flex: 1 1 100%; max-width: none; } .filtres-ged .case-toutes-dates { margin-top: 0; } }
/* Équipements et documentation (0.53.0) : titre des documents de la fiche, ligne réformée, renouvellement dépassé lisible. */
.popup-fiche-equipement .titre-section { font-size: 1rem; margin: 1rem 0 0.4rem; }
.grille-equipements tr.ligne-equipement-reforme:not(.dxbl-grid-focused-row) td { background-color: rgb(224, 230, 78) !important; }
.grille-documentation td.cellule-butee-outil.alerte-rouge { color: #fff !important; }
/* Import Qualiflight (0.54.0) : synthèse sur deux colonnes, compte rendu en texte. */
.import-qualiflight-synthese { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); gap: 1rem; align-items: start; margin-top: 0.6rem; }
.import-qualiflight-synthese .tableau-simple { width: 100%; }
.import-qualiflight-rapport { white-space: pre-wrap; font-size: 0.85rem; max-height: 60vh; overflow: auto; margin-top: 0.6rem; padding: 0.6rem; border: 1px solid #d0d7de; background: #f8fafc; }
@media (max-width: 640px) { .import-qualiflight-synthese { grid-template-columns: minmax(0, 1fr); } }
/* Aerotrack, travaux à facturer (0.56.0) : grilles des popups, synthèses de la main-d'œuvre. */
.grille-popup-chiffrage, .grille-popup-pieces, .grille-popup-heures { height: min(55vh, 32rem); margin-top: 0.5rem; }
.grille-popup-mo { height: min(35vh, 20rem); margin-top: 0.5rem; }
.synthese-mo { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); gap: 1rem; align-items: start; margin-top: 0.8rem; }
.synthese-mo .tableau-simple, .synthese-heures { width: 100%; }
.synthese-heures { margin-top: 0.8rem; }
.tableau-simple tr.ligne-total td { font-weight: 600; border-top: 1px solid #c9d3df; }
.separateur-actions { width: 0.6rem; }
@media (max-width: 640px) { .synthese-mo { grid-template-columns: minmax(0, 1fr); } }

/* ---- Mode recette (0.57.0) : bandeau sur toutes les pages, boîte d'envoi ---- */
.bandeau-recette { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem 0.8rem; padding: 0.35rem 0.9rem; background: #b45309; color: #fff; font-size: 0.9rem; position: relative; z-index: 21; }
.bandeau-recette strong { letter-spacing: 0.08em; }
.bandeau-recette a { color: #fff; text-decoration: underline; margin-left: auto; }
.demo-connexion { margin-bottom: 1rem; line-height: 1.5; }
.demo-connexion code { font-weight: 600; }
.boite-recette { display: grid; grid-template-columns: minmax(0, 1fr); gap: 1rem; }
@media (min-width: 1100px) { .boite-recette { grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); } }
.boite-recette tr.choisi td { background: var(--aerociel-bleu-clair); }
.boite-recette tbody tr { cursor: pointer; }
.boite-recette .entetes-message { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 0.2rem 0.8rem; margin-bottom: 0.6rem; overflow-wrap: anywhere; }
.boite-recette .entetes-message dt { font-weight: 600; }
.boite-recette .entetes-message dd { margin: 0; }
.boite-recette iframe.corps-message { width: 100%; min-height: 360px; border: 1px solid var(--aerociel-bordure); border-radius: 6px; background: #fff; }
.boite-recette pre.corps-message { white-space: pre-wrap; overflow-wrap: anywhere; background: #fff; border: 1px solid var(--aerociel-bordure); border-radius: 6px; padding: 0.6rem; }

/* Chaîne de l'achat (0.60.0) : bandeau en haut des fiches cotation, commande, facture d'achat, règlement fournisseur.
   Mêmes flèches collées que le fil d'Ariane ; vert terminé, bleu en cours, gris à venir, rouge en retard. */
.chaine-achat {
    --chaine-pointe: 14px;
    --chaine-terminee: #2f7d4f; --chaine-en-cours: #2e66a6; --chaine-a-venir: #c7cdd6; --chaine-retard: #c0392b;
    --chaine-texte: #fff; --chaine-texte-a-venir: #374151; --chaine-courante: #e46a1b;
    margin: 0 0 0.75rem;
}
.chaine-achat ol { display: flex; flex-wrap: wrap; row-gap: 4px; margin: 0; padding: 0; list-style: none; }
.chaine-achat li { display: flex; min-width: 0; margin-left: calc(-1 * var(--chaine-pointe) + 2px); }
.chaine-achat li:first-child { margin-left: 0; }
.chaine-achat li > a, .chaine-achat li > button, .chaine-achat li > .etape-sans-lien {
    display: flex; flex-direction: column; justify-content: center; gap: 1px;
    min-height: 44px; padding: 2px 20px 2px calc(var(--chaine-pointe) + 12px);
    border: 0; font: inherit; font-size: 0.8rem; text-align: left; text-decoration: none; white-space: nowrap; cursor: pointer;
    background: var(--chaine-en-cours); color: var(--chaine-texte);
    clip-path: polygon(0 0, calc(100% - var(--chaine-pointe)) 0, 100% 50%, calc(100% - var(--chaine-pointe)) 100%, 0 100%, var(--chaine-pointe) 50%);
}
.chaine-achat li > .etape-sans-lien { cursor: default; }
.chaine-achat li:first-child > * {
    padding-left: 14px; border-radius: 4px 0 0 4px;
    clip-path: polygon(0 0, calc(100% - var(--chaine-pointe)) 0, 100% 50%, calc(100% - var(--chaine-pointe)) 100%, 0 100%);
}
.chaine-achat li strong { font-size: 0.85rem; }
.chaine-achat li.etape-terminee > * { background: var(--chaine-terminee); }
.chaine-achat li.etape-en-cours > * { background: var(--chaine-en-cours); }
.chaine-achat li.etape-en-retard > * { background: var(--chaine-retard); }
.chaine-achat li.etape-a-venir > * { background: var(--chaine-a-venir); color: var(--chaine-texte-a-venir); }
.chaine-achat li.etape-courante > * { box-shadow: inset 0 -4px 0 var(--chaine-courante); }
.chaine-achat li > a:hover, .chaine-achat li > button:hover { filter: brightness(1.1); }
.chaine-achat li > a:focus-visible, .chaine-achat li > button:focus-visible { outline: 2px solid var(--chaine-courante); outline-offset: -2px; }
.chaine-achat-liste { margin: 0.4rem 0 0; padding: 0.4rem 0.8rem; list-style: none; background: #fff; border: 1px solid var(--aerociel-bordure); border-radius: 6px; max-width: 520px; }
.chaine-achat-liste li { padding: 0.15rem 0; }

/* Suivi des achats (0.60.0) */
button.carte-tableau-bord { font: inherit; text-align: left; cursor: pointer; }
.carte-tableau-bord.carte-active { border-color: #2e66a6; box-shadow: 0 0 0 2px #2e66a6; background: #fff; }
.carte-tableau-bord.carte-alerte { border-left: 4px solid #c0392b; }
.filtres-suivi-achats { flex-wrap: wrap; align-items: center; gap: 0.5rem 1rem; }
.filtres-suivi-achats .filtre-fournisseur { width: 300px; }
.filtres-suivi-achats .filtre-periode { width: 200px; }
.texte-retard { color: #b91c1c; font-weight: 600; }
/* Relances fournisseurs (0.61.0) */
.relance-fournisseur h3 { margin: 0 0 0.4rem; font-size: 1rem; }
.apercu-relance { max-height: 260px; overflow: auto; padding: 0.5rem 0.75rem; margin: 0.4rem 0 0.6rem; background: #fff; border: 1px solid var(--aerociel-bordure); border-radius: 6px; font-size: 0.85rem; }
.apercu-relance table { border-collapse: collapse; }
.apercu-relance td, .apercu-relance th { padding: 2px 6px; border: 1px solid #cbd5e1; }
.statut-achat { display: inline-block; padding: 0 0.5rem; border-radius: 10px; font-size: 0.78rem; line-height: 1.5; color: #fff; background: #64748b; }
.statut-achat.a-envoyer { background: #94a3b8; }
.statut-achat.envoyee { background: #6f9bd0; }
.statut-achat.confirmee { background: #3b82b6; }
.statut-achat.partielle { background: #2e66a6; }
.statut-achat.recue { background: #7c5cb0; }
.statut-achat.facturee { background: #c27a12; }
.statut-achat.reglee { background: #2f7d4f; }
.statut-achat.terminee { background: #64748b; }
@media (max-width: 640px) {
    .chaine-achat ol { flex-direction: column; row-gap: 3px; }
    .chaine-achat li { margin-left: 0; }
    .chaine-achat li > a, .chaine-achat li > button, .chaine-achat li > .etape-sans-lien,
    .chaine-achat li:first-child > * { width: 100%; min-height: 38px; padding-left: 12px; border-radius: 4px; clip-path: none; }
    .filtres-suivi-achats .filtre-fournisseur { min-width: 0; width: 100%; }
}

/* Cotations comparatives (0.62.0) */
.demande-cotation a { margin-right: 0.4rem; }
.demande-cotation .lien-comparer { font-weight: 600; }
.tout-chez { width: 260px; max-width: 100%; }
.tableau-comparatif-defilement { overflow-x: auto; margin: 0.5rem 0 1rem; border: 1px solid var(--aerociel-bordure); border-radius: 6px; background: #fff; }
.tableau-comparatif { width: 100%; border-collapse: collapse; font-size: 0.85rem; }
.tableau-comparatif th, .tableau-comparatif td { padding: 0.4rem 0.55rem; border-bottom: 1px solid #e2e8f0; border-right: 1px solid #eef2f6; vertical-align: top; text-align: left; }
.tableau-comparatif thead th { background: #f1f5f9; position: sticky; top: 0; min-width: 150px; }
.tableau-comparatif thead th:nth-child(-n+3) { min-width: 0; }
.tableau-comparatif .nombre { text-align: right; white-space: nowrap; }
.tableau-comparatif .offre-detail { display: block; color: #475569; font-size: 0.78rem; font-weight: 400; }
.tableau-comparatif tfoot td { background: #f8fafc; font-weight: 600; }
.cellule-offre { cursor: pointer; text-align: right; white-space: nowrap; }
.cellule-offre:hover { background: #f1f5f9; }
.cellule-offre.non-proposee { cursor: default; color: #94a3b8; text-align: center; background: #f8fafc; }
.cellule-offre.meilleur-prix strong { color: #2f7d4f; }
.cellule-offre.meilleur-prix strong::before { content: "★ "; }
.cellule-offre.meilleur-delai .offre-detail:first-of-type { color: #2f7d4f; font-weight: 600; }
.cellule-offre.cellule-choisie { background: #dbeafe; box-shadow: inset 3px 0 0 #2e66a6; }
.offre-expiree, .offre-expiree strong { text-decoration: line-through; color: #94a3b8; }
.resume-choix { margin: 0.3rem 0 0.6rem 1.1rem; }

/* Réapprovisionnement (0.63.0) */
.filtres-reappro .filtre-reappro { width: 240px; max-width: 100%; }
@media (max-width: 640px) {
    .filtres-reappro .filtre-reappro { width: 100%; }
}
