/* /Components/Account/ConfirmationCourriel.razor.rz.scp.css */
.carte-inscription[b-v9iguc29r6] {
    width: min(420px, 100%);
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-carte);
    box-shadow: var(--shadow-carte);
    padding: 36px;
}

.carte-inscription h2[b-v9iguc29r6] {
    margin: 0 0 4px;
    font-size: 20px;
    font-weight: 600;
}

.sous-titre[b-v9iguc29r6] {
    margin: 0 0 24px;
    font-size: 13px;
    color: var(--text-muted);
}

.champ[b-v9iguc29r6] {
    margin-bottom: 16px;
}

.indice[b-v9iguc29r6] {
    margin: 6px 0 0;
    font-size: 12px;
    color: var(--text-muted);
    line-height: 1.5;
}

.alerte-erreur[b-v9iguc29r6] {
    margin-bottom: 16px;
}

.lien-connexion[b-v9iguc29r6] {
    text-align: center;
    font-size: 13px;
    color: var(--text-muted);
    margin-top: 20px;
}

/* --- Attente de confirmation (section 5.3) --------------------------- */

.confirmation-attendue[b-v9iguc29r6] {
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 16px 18px;
    margin-bottom: 4px;
}

.confirmation-attendue p[b-v9iguc29r6] { margin: 0 0 8px; font-size: 13px; line-height: 1.55; }
.confirmation-attendue p:last-child[b-v9iguc29r6] { margin-bottom: 0; }

.titre-confirmation[b-v9iguc29r6] {
    font-size: 14px;
    font-weight: 600;
    color: var(--text);
}

.destinataire[b-v9iguc29r6] {
    font-weight: 600;
    font-size: 13.5px !important;
}
/* /Components/Account/Login.razor.rz.scp.css */
/* Écran de connexion : une seule colonne étroite, centrée par AuthLayout. Le soin
   passe par l'espacement, la marque et le détail des champs — pas par de la mise en
   scène : la présentation du produit vit sur le site public. */

.ecran-connexion[b-y0fn24a6ac] {
    width: min(420px, 100%);
    display: flex;
    flex-direction: column;
    gap: 22px;
}

/* --- Marque, au-dessus de la carte ------------------------------------- */

.marque[b-y0fn24a6ac] {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.logo[b-y0fn24a6ac] {
    width: 34px;
    height: 34px;
    border-radius: 9px;
    background: linear-gradient(158deg, oklch(38% 0.07 200), oklch(26% 0.05 205));
    color: oklch(97% 0.01 200);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    box-shadow: 0 1px 2px oklch(20% 0.02 210 / 0.25), 0 4px 10px -4px oklch(30% 0.05 205 / 0.45);
}

.marque-nom[b-y0fn24a6ac] {
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.08em;
    color: var(--text);
}

/* --- Carte ------------------------------------------------------------- */

.carte-connexion[b-y0fn24a6ac] {
    position: relative;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-carte);
    box-shadow: var(--shadow-carte);
    padding: 34px 32px 30px;
    overflow: hidden;
}

/* Filet sarcelle sur l'arête haute : la seule touche décorative, atténuée aux
   extrémités pour ne pas se lire comme un bandeau. */
.carte-connexion[b-y0fn24a6ac]::before {
    content: "";
    position: absolute;
    inset: 0 0 auto;
    height: 2px;
    background: linear-gradient(
        90deg,
        transparent,
        var(--accent) 24%,
        oklch(52% 0.085 195) 50%,
        var(--accent) 76%,
        transparent
    );
    opacity: 0.7;
}

.carte-connexion h1[b-y0fn24a6ac] {
    margin: 0 0 5px;
    font-size: 21px;
    font-weight: 600;
    letter-spacing: -0.01em;
}

.sous-titre[b-y0fn24a6ac] {
    margin: 0 0 26px;
    font-size: 13px;
    color: var(--text-muted);
}

/* --- Champs ------------------------------------------------------------- */

.champ[b-y0fn24a6ac] {
    margin-bottom: 16px;
}

/* `InputText` rend son `<input>` depuis un autre composant : sans `::deep`, l'attribut
   de portée du CSS isolé ne l'atteindrait pas. */
.champ[b-y0fn24a6ac]  input {
    border-radius: 8px;
    padding: 11px 13px;
    transition: border-color 0.12s ease, box-shadow 0.12s ease;
}

.champ[b-y0fn24a6ac]  input:hover:not(:focus-visible) {
    border-color: oklch(84% 0.008 90);
}

/* L'anneau de focus global est un `outline` net ; ici on l'adoucit d'un halo
   pour coller au reste de la carte. */
.champ[b-y0fn24a6ac]  input:focus-visible {
    outline: none;
    border-color: var(--accent);
    box-shadow: 0 0 0 3px var(--accent-soft);
}

/* Un champ en faute reste rouge une fois repris : le halo de focus ne doit pas
   effacer le signal d'erreur. */
.champ[b-y0fn24a6ac]  input.invalid:focus-visible {
    border-color: var(--danger);
    box-shadow: 0 0 0 3px var(--danger-soft);
}

.alerte-erreur[b-y0fn24a6ac] {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    margin: 0 0 18px;
    line-height: 1.5;
}

.alerte-erreur svg[b-y0fn24a6ac] {
    flex-shrink: 0;
    margin-top: 1.5px;
}

.btn-connexion[b-y0fn24a6ac] {
    width: 100%;
    justify-content: center;
    margin-top: 8px;
    padding: 12px 16px;
    border-radius: 8px;
    font-size: 13.5px;
    transition: background 0.12s ease, box-shadow 0.12s ease;
}

.btn-connexion:hover[b-y0fn24a6ac] {
    box-shadow: 0 3px 10px oklch(35% 0.06 200 / 0.22);
}

.lien-inscription[b-y0fn24a6ac] {
    text-align: center;
    font-size: 13px;
    color: var(--text-muted);
    margin-top: 24px;
    padding-top: 20px;
    border-top: 1px solid var(--border);
}

.lien-inscription a[b-y0fn24a6ac] {
    font-weight: 500;
}

/* --- Adresse non confirmée (section 5.3) ----------------------------- */

.lien-renvoi[b-y0fn24a6ac] {
    display: inline-block;
    margin-top: 12px;
    font-size: 12.5px;
    color: var(--accent);
}

@media (max-width: 480px) {
    .carte-connexion[b-y0fn24a6ac] { padding: 28px 22px 26px; }
}
/* /Components/Account/RafraichirSession.razor.rz.scp.css */
/* Page de passage : on ne la voit qu'un instant, le temps d'un aller-retour vers l'API.
   Elle a quand même son état visible, parce qu'un échec du rafraîchissement s'y arrête. */
.ecran-transition[b-i9f7esdexm] {
    max-width: 520px;
    margin: 48px auto;
    padding: 0 20px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.attente[b-i9f7esdexm] {
    color: var(--text-muted);
    font-size: 13.5px;
    margin: 0;
}
/* /Components/Account/Register.razor.rz.scp.css */
.carte-inscription[b-y1xpx4j3np] {
    width: min(420px, 100%);
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-carte);
    box-shadow: var(--shadow-carte);
    padding: 36px;
}

.carte-inscription h2[b-y1xpx4j3np] {
    margin: 0 0 4px;
    font-size: 20px;
    font-weight: 600;
}

.sous-titre[b-y1xpx4j3np] {
    margin: 0 0 24px;
    font-size: 13px;
    color: var(--text-muted);
}

.champ[b-y1xpx4j3np] {
    margin-bottom: 16px;
}

.indice[b-y1xpx4j3np] {
    margin: 6px 0 0;
    font-size: 12px;
    color: var(--text-muted);
    line-height: 1.5;
}

.alerte-erreur[b-y1xpx4j3np] {
    margin-bottom: 16px;
}

.lien-connexion[b-y1xpx4j3np] {
    text-align: center;
    font-size: 13px;
    color: var(--text-muted);
    margin-top: 20px;
}

/* --- Attente de confirmation (section 5.3) --------------------------- */

.confirmation-attendue[b-y1xpx4j3np] {
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 16px 18px;
    margin-bottom: 4px;
}

.confirmation-attendue p[b-y1xpx4j3np] { margin: 0 0 8px; font-size: 13px; line-height: 1.55; }
.confirmation-attendue p:last-child[b-y1xpx4j3np] { margin-bottom: 0; }

.titre-confirmation[b-y1xpx4j3np] {
    font-size: 14px;
    font-weight: 600;
    color: var(--text);
}

.destinataire[b-y1xpx4j3np] {
    font-weight: 600;
    font-size: 13.5px !important;
}

/* --- Arrivée par un lien d'invitation (module 15) -------------------- */

.bandeau-invitation[b-y1xpx4j3np] {
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-left: 3px solid var(--accent, #0f766e);
    border-radius: 6px;
    padding: 14px 16px;
    margin-bottom: 20px;
}

.bandeau-invitation p[b-y1xpx4j3np] { margin: 0 0 6px; font-size: 13px; line-height: 1.55; }
.bandeau-invitation p:last-child[b-y1xpx4j3np] { margin-bottom: 0; }

.titre-invitation[b-y1xpx4j3np] {
    font-size: 14px;
    font-weight: 600;
    color: var(--text);
}
/* /Components/Account/RenvoyerConfirmation.razor.rz.scp.css */
.carte-inscription[b-okeu78z6t7] {
    width: min(420px, 100%);
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-carte);
    box-shadow: var(--shadow-carte);
    padding: 36px;
}

.carte-inscription h2[b-okeu78z6t7] {
    margin: 0 0 4px;
    font-size: 20px;
    font-weight: 600;
}

.sous-titre[b-okeu78z6t7] {
    margin: 0 0 24px;
    font-size: 13px;
    color: var(--text-muted);
}

.champ[b-okeu78z6t7] {
    margin-bottom: 16px;
}

.indice[b-okeu78z6t7] {
    margin: 6px 0 0;
    font-size: 12px;
    color: var(--text-muted);
    line-height: 1.5;
}

.alerte-erreur[b-okeu78z6t7] {
    margin-bottom: 16px;
}

.lien-connexion[b-okeu78z6t7] {
    text-align: center;
    font-size: 13px;
    color: var(--text-muted);
    margin-top: 20px;
}

/* --- Attente de confirmation (section 5.3) --------------------------- */

.confirmation-attendue[b-okeu78z6t7] {
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 16px 18px;
    margin-bottom: 4px;
}

.confirmation-attendue p[b-okeu78z6t7] { margin: 0 0 8px; font-size: 13px; line-height: 1.55; }
.confirmation-attendue p:last-child[b-okeu78z6t7] { margin-bottom: 0; }

.titre-confirmation[b-okeu78z6t7] {
    font-size: 14px;
    font-weight: 600;
    color: var(--text);
}

.destinataire[b-okeu78z6t7] {
    font-weight: 600;
    font-size: 13.5px !important;
}
/* /Components/Layout/AuthLayout.razor.rz.scp.css */
/* Fond des écrans hors session (connexion, inscription, confirmation). Deux voiles
   très pâles empêchent la carte de flotter sur un aplat gris, sans rien ajouter de
   visible à la lecture. */

.page-auth[b-5rx6jtwa56] {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 32px 24px;
    background:
        radial-gradient(90% 70% at 50% -10%, oklch(96% 0.014 205), transparent 70%),
        radial-gradient(70% 60% at 100% 100%, oklch(97% 0.01 150), transparent 65%),
        var(--bg);
}
/* /Components/Layout/MainLayout.razor.rz.scp.css */
/* Hauteur ferme et non « au moins » : c'est elle qui permet aux écrans maître-détail de
   se répartir la place restante et de faire défiler leur propre panneau. Avec un simple
   min-height, un contenu trop haut fait grandir la coquille et c'est la page entière qui
   défile, barre latérale comprise. */
.coquille[b-94jmxczaia] {
    display: flex;
    height: 100vh;
    /* dvh suit la barre d'adresse mobile, qui se rétracte au défilement : avec 100vh,
       le bas de l'écran passe sous elle et la dernière ligne d'un tableau devient
       inatteignable. La déclaration précédente reste comme repli. */
    height: 100dvh;
}

.barre-laterale[b-94jmxczaia] {
    width: 280px;
    flex-shrink: 0;
    background: var(--sidebar);
    color: oklch(90% 0.01 250);
    display: flex;
    flex-direction: column;
    padding: 20px 14px;
}

.marque[b-94jmxczaia] {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 6px 8px 24px 8px;
}

.marque .logo[b-94jmxczaia] {
    width: 26px;
    height: 26px;
    border-radius: 6px;
    background: var(--accent);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.marque .nom-application[b-94jmxczaia] {
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: white;
    white-space: nowrap;
}

.nav-items[b-94jmxczaia] {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

/* Pousse la configuration en bas de la barre. C'est ce groupe qui porte
   `margin-top: auto`, et non la carte de profil : celle-ci reste collée sous lui. */
.nav-items-bas[b-94jmxczaia] {
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid oklch(100% 0 0 / 0.09);
}

/* `::deep`, parce que `NavLink` rend son `<a>` depuis un autre composant : sans lui,
   l'attribut de portée n'atteint jamais le lien et aucune de ces règles ne s'applique.
   La barre latérale sortait donc en liens par défaut sur fond sombre. Même raison que les
   champs de `Login` et le bouton de `LogoutForm`. */
.nav-items[b-94jmxczaia]  .nav-item {
    position: relative;
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 9px 10px;
    border-radius: 7px;
    font-size: 13px;
    /* Remonté depuis 78 % : sur ce fond très sombre, l'ancien gris passait sous le
       seuil de contraste confortable, et l'écran est aussi lu sur tablette en usine. */
    color: oklch(83% 0.008 250);
    transition: background-color 120ms ease, color 120ms ease;
}

/* Les icônes ne doivent ni se comprimer ni peser autant que le libellé : elles
   situent, elles ne se lisent pas. */
.nav-items[b-94jmxczaia]  .nav-item svg {
    flex-shrink: 0;
    opacity: 0.8;
}

.nav-items[b-94jmxczaia]  .nav-item:hover {
    background: oklch(100% 0 0 / 0.05);
    color: white;
    text-decoration: none;
}

.nav-items[b-94jmxczaia]  .nav-item:hover svg { opacity: 1; }

.nav-items[b-94jmxczaia]  .nav-item.active {
    background: var(--sidebar-hover);
    color: white;
    font-weight: 500;
}

.nav-items[b-94jmxczaia]  .nav-item.active svg {
    opacity: 1;
    color: var(--accent-soft);
}

/* Repère vertical à gauche de l'entrée courante. En ::before plutôt qu'en bordure :
   une bordure décalerait le contenu de 3 px et ferait sauter la ligne au changement
   de page. */
.nav-items[b-94jmxczaia]  .nav-item.active::before {
    content: "";
    position: absolute;
    left: -14px;
    top: 50%;
    transform: translateY(-50%);
    width: 3px;
    height: 18px;
    border-radius: 0 3px 3px 0;
    background: var(--accent-soft);
}

/* Le focus clavier doit rester visible sur fond sombre, où l'outline par défaut
   du navigateur disparaît. */
.nav-items[b-94jmxczaia]  .nav-item:focus-visible {
    outline: 2px solid var(--accent-soft);
    outline-offset: 1px;
    color: white;
}

.carte-utilisateur[b-94jmxczaia] {
    margin-top: 14px;
}

/* Déclencheur du menu : c'est un vrai bouton, mais il doit se lire comme la carte
   d'identité qu'il remplace. */
.ligne-profil[b-94jmxczaia] {
    width: 100%;
    display: flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
    padding: 10px;
    border: 1px solid transparent;
    border-radius: 8px;
    background: var(--sidebar-hover);
    font-family: inherit;
    text-align: left;
    cursor: pointer;
    transition: background 0.12s ease, border-color 0.12s ease;
}

.ligne-profil:hover[b-94jmxczaia] {
    background: oklch(31% 0.018 250);
    border-color: oklch(100% 0 0 / 0.09);
}

/* L'anneau de focus global est sarcelle foncé : illisible sur la barre sombre. */
.ligne-profil:focus-visible[b-94jmxczaia] {
    outline: 2px solid oklch(74% 0.085 195);
    outline-offset: 2px;
}

.chevrons[b-94jmxczaia] {
    flex-shrink: 0;
    color: oklch(62% 0.01 250);
}

.ligne-profil:hover .chevrons[b-94jmxczaia] {
    color: oklch(82% 0.01 250);
}

/* Le même bloc sert aux initiales et à la photo : `object-fit` n'a d'effet que sur la
   seconde, et le cadrage carré se fait donc ici — le serveur ne recadre pas, il ne fait
   que vérifier ce qu'on lui envoie. */
.avatar[b-94jmxczaia] {
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: var(--accent);
    color: white;
    font-size: 12px;
    font-weight: 600;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    object-fit: cover;
}

/* En `span` plutôt qu'en `div` : le déclencheur est un bouton, dont le contenu doit
   rester du phrasé. D'où la mise en colonne explicite. */
.infos-utilisateur[b-94jmxczaia] {
    min-width: 0;
    flex: 1;
    display: flex;
    flex-direction: column;
}

.infos-utilisateur .nom[b-94jmxczaia] {
    font-size: 12.5px;
    font-weight: 500;
    color: white;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.infos-utilisateur .courriel[b-94jmxczaia] {
    font-size: 11px;
    color: oklch(70% 0.01 250);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* --- Menu du compte ----------------------------------------------------- */

/* Un `popover` vit dans la couche supérieure : il est positionné par rapport à la
   fenêtre, pas à la barre latérale. Les repères sont donc en dur, ce que la
   géométrie fixe de la barre (280 px de large, 20 px 14 px de marge intérieure)
   rend déterministe : 14 px depuis la gauche, et juste au-dessus du déclencheur. */
.menu-utilisateur[b-94jmxczaia] {
    position: fixed;
    inset: auto;
    left: 14px;
    bottom: 78px;
    width: 252px;
    margin: 0;
    padding: 0;
    background: oklch(24% 0.016 250);
    color: oklch(90% 0.01 250);
    border: 1px solid oklch(100% 0 0 / 0.12);
    border-radius: 10px;
    box-shadow: 0 12px 32px -8px oklch(0% 0 0 / 0.55), 0 2px 6px oklch(0% 0 0 / 0.3);
    overflow: hidden;
}

/* Ouverture en fondu montant. `allow-discrete` fait aussi transitionner `display`
   et `overlay`, sinon le panneau apparaîtrait d'un coup ; là où ce n'est pas pris
   en charge, il apparaît simplement sans animation. */
@media (prefers-reduced-motion: no-preference) {
    .menu-utilisateur[b-94jmxczaia] {
        opacity: 0;
        translate: 0 6px;
        transition: opacity 0.13s ease, translate 0.13s ease, display 0.13s allow-discrete, overlay 0.13s allow-discrete;
    }

    .menu-utilisateur:popover-open[b-94jmxczaia] {
        opacity: 1;
        translate: 0 0;
    }

    @starting-style {
        .menu-utilisateur:popover-open[b-94jmxczaia] {
            opacity: 0;
            translate: 0 6px;
        }
    }
}

/* Sans prise en charge de `popover`, l'attribut est ignoré et le panneau resterait
   visible en permanence, superposé au déclencheur. On le replie alors sous la carte
   comme un simple bloc : tout reste atteignable, sans repli sur la fenêtre. */
@supports not selector(:popover-open) {
    .menu-utilisateur[b-94jmxczaia] {
        position: static;
        width: auto;
        margin-top: 8px;
        opacity: 1;
        translate: none;
        box-shadow: none;
    }

    .chevrons[b-94jmxczaia] {
        display: none;
    }
}

.menu-section[b-94jmxczaia] {
    padding: 12px 14px 13px;
    border-bottom: 1px solid oklch(100% 0 0 / 0.08);
}

.menu-titre[b-94jmxczaia] {
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: oklch(58% 0.01 250);
    margin-bottom: 9px;
}

.menu-details[b-94jmxczaia] {
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 7px;
}

.menu-details > div[b-94jmxczaia] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
}

.menu-details dt[b-94jmxczaia] {
    font-size: 11.5px;
    color: oklch(64% 0.01 250);
}

.menu-details dd[b-94jmxczaia] {
    margin: 0;
    font-size: 12px;
    font-weight: 500;
    color: oklch(93% 0.01 250);
    text-align: right;
}

.menu-actions[b-94jmxczaia] {
    padding: 6px;
}

/* Même présentation que la déconnexion : ce sont les deux actions du menu, et rien ne
   justifierait qu'elles se distinguent l'une de l'autre. Le sélecteur les prend ensemble
   plutôt que de recopier le bloc — l'un vit ici, l'autre dans LogoutForm, d'où le ::deep. */
.menu-actions .btn-lien-compte[b-94jmxczaia],
.menu-actions[b-94jmxczaia]  .btn-lien-deconnexion {
    width: 100%;
    background: transparent;
    border: none;
    border-radius: 6px;
    color: oklch(76% 0.01 250);
    padding: 8px 8px;
    margin: 0;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 12.5px;
    font-weight: 500;
    transition: background 0.12s ease, color 0.12s ease;
}

.menu-actions .btn-lien-compte:hover[b-94jmxczaia],
.menu-actions[b-94jmxczaia]  .btn-lien-deconnexion:hover {
    background: oklch(31% 0.018 250);
    color: white;
}

.menu-actions .btn-lien-compte:focus-visible[b-94jmxczaia],
.menu-actions[b-94jmxczaia]  .btn-lien-deconnexion:focus-visible {
    outline: 2px solid oklch(74% 0.085 195);
    outline-offset: -2px;
}

/* Colonne flex : l'en-tête de projet garde sa hauteur naturelle, quel que soit le nombre
   de lignes que prennent ses onglets, et l'écran occupe exactement le reste. */
.contenu[b-94jmxczaia] {
    flex: 1;
    min-width: 0;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: auto;
}

.contenu-pleine-largeur[b-94jmxczaia] {
    display: flex;
    align-items: center;
    justify-content: center;
}

#blazor-error-ui[b-94jmxczaia] {
    background: var(--danger-soft);
    color: oklch(38% 0.15 35);
    bottom: 0;
    box-shadow: var(--shadow);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.85rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
    font-size: 13px;
}

    #blazor-error-ui .dismiss[b-94jmxczaia] {
        cursor: pointer;
        position: absolute;
        right: 1rem;
        top: 0.85rem;
    }

/* --- Repli de la barre latérale ----------------------------------------- */

/* La case porte l'état, les libellés la commandent : ce layout est rendu en statique
   pour que la déconnexion garde son HttpContext, donc rien ici ne peut passer par un
   gestionnaire Blazor. Masquée par découpe et non par `display: none` : elle doit rester
   atteignable au clavier et annoncée par les lecteurs d'écran, qui sont les seuls à voir
   la commande sous ses deux habillages. */
.bascule-nav[b-94jmxczaia] {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    border: 0;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}

.bouton-repli[b-94jmxczaia],
.bouton-menu[b-94jmxczaia] {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 30px;
    height: 30px;
    border-radius: 7px;
    cursor: pointer;
    transition: background-color 120ms ease, color 120ms ease;
}

.bouton-repli[b-94jmxczaia] {
    margin-left: auto;
    color: oklch(70% 0.01 250);
}

.bouton-repli:hover[b-94jmxczaia] {
    background: oklch(100% 0 0 / 0.07);
    color: white;
}

/* L'anneau se pose sur le libellé : la case elle-même est invisible, et sans cela le
   parcours au clavier traverserait la commande sans rien montrer. */
.bascule-nav:focus-visible ~ .barre-laterale .bouton-repli[b-94jmxczaia],
.bascule-nav:focus-visible ~ .barre-compacte .bouton-menu[b-94jmxczaia] {
    outline: 2px solid var(--accent-soft);
    outline-offset: 1px;
}

/* --- Grand écran : la barre se replie en rail d'icônes ------------------- */

@media (min-width: 900px) {
    .barre-compacte[b-94jmxczaia],
    .voile-nav[b-94jmxczaia] {
        display: none;
    }

    .bascule-nav:checked ~ .barre-laterale[b-94jmxczaia] {
        width: 64px;
        padding-left: 10px;
        padding-right: 10px;
    }

    /* Le nom, les libellés et l'identité du compte s'effacent ; les icônes restent,
       centrées. Le titre natif de chaque entrée redonne le mot au survol. */
    .bascule-nav:checked ~ .barre-laterale .nom-application[b-94jmxczaia],
    .bascule-nav:checked ~ .barre-laterale .libelle-nav[b-94jmxczaia],
    .bascule-nav:checked ~ .barre-laterale .infos-utilisateur[b-94jmxczaia],
    .bascule-nav:checked ~ .barre-laterale .chevrons[b-94jmxczaia] {
        display: none;
    }

    .bascule-nav:checked ~ .barre-laterale .marque[b-94jmxczaia],
    .bascule-nav:checked ~ .barre-laterale .nav-items[b-94jmxczaia]  .nav-item,
    .bascule-nav:checked ~ .barre-laterale .ligne-profil[b-94jmxczaia] {
        justify-content: center;
        gap: 0;
    }

    .bascule-nav:checked ~ .barre-laterale .marque[b-94jmxczaia] {
        flex-direction: column;
        gap: 10px;
        padding-bottom: 18px;
    }

    .bascule-nav:checked ~ .barre-laterale .bouton-repli[b-94jmxczaia] {
        margin-left: 0;
        rotate: 180deg;
    }

    /* Le repère de l'entrée courante est calé sur la marge intérieure de la barre, qui
       passe de 14 à 10 px : sans ce rappel, il flotterait hors du rail. */
    .bascule-nav:checked ~ .barre-laterale .nav-items[b-94jmxczaia]  .nav-item.active::before {
        left: -10px;
    }
}

/* --- Petit écran : la barre devient un tiroir --------------------------- */

/* Sous 900 px — tablette en portrait, téléphone — 280 px de navigation permanente sur
   390 px de large ne laissent pas de quoi lire un tableau d'analyse. La barre sort donc
   du flux et vient par-dessus le contenu à la demande. */
@media (max-width: 899.98px) {
    .coquille[b-94jmxczaia] {
        flex-direction: column;
    }

    .barre-compacte[b-94jmxczaia] {
        display: flex;
        align-items: center;
        gap: 10px;
        flex-shrink: 0;
        padding: 8px 12px;
        background: var(--sidebar);
        color: white;
    }

    .barre-compacte .bouton-menu[b-94jmxczaia] {
        color: oklch(85% 0.008 250);
    }

    .barre-compacte .bouton-menu:hover[b-94jmxczaia] {
        background: oklch(100% 0 0 / 0.08);
        color: white;
    }

    .barre-compacte .nom-application[b-94jmxczaia] {
        font-size: 12.5px;
        font-weight: 600;
        letter-spacing: 0.02em;
    }

    .barre-laterale[b-94jmxczaia] {
        position: fixed;
        top: 0;
        bottom: 0;
        left: 0;
        z-index: 40;
        width: 280px;
        max-width: 84vw;
        translate: -100% 0;
        /* Retirée du parcours au clavier tant qu'elle est hors écran : une barre
           seulement décalée laisserait la tabulation partir dans le vide. */
        visibility: hidden;
        box-shadow: 0 0 40px oklch(0% 0 0 / 0.4);
        /* Sur un téléphone court — 640 px de haut, moins la barre du navigateur — la
           navigation dépasse de peu, et c'est la carte du compte, donc la déconnexion,
           qui sortirait de l'écran. Elle défile alors dans son tiroir, sans entraîner
           la page restée derrière. */
        overflow-y: auto;
        overscroll-behavior: contain;
    }

    .bascule-nav:checked ~ .barre-laterale[b-94jmxczaia] {
        translate: 0 0;
        visibility: visible;
    }

    /* Le bouton de repli devient le bouton de fermeture du tiroir : même commande, et
       le chevron pointe déjà vers la gauche, c'est-à-dire vers la sortie. */
    .voile-nav[b-94jmxczaia] {
        display: block;
        position: fixed;
        inset: 0;
        z-index: 30;
        background: oklch(0% 0 0 / 0.45);
        opacity: 0;
        pointer-events: none;
    }

    .bascule-nav:checked ~ .voile-nav[b-94jmxczaia] {
        opacity: 1;
        pointer-events: auto;
    }

    /* Le menu du compte est calé sur la géométrie de la barre (14 px depuis la gauche) :
       il tombe donc juste au-dessus du tiroir ouvert, qui occupe la même bande. */
}

/* Le glissement du tiroir suit la préférence système, comme l'ouverture du menu du
   compte. Sans préférence exprimée, il apparaît d'un coup — jamais en retard. */
@media (max-width: 899.98px) and (prefers-reduced-motion: no-preference) {
    .barre-laterale[b-94jmxczaia] {
        transition: translate 200ms ease, visibility 0s linear 200ms;
    }

    .bascule-nav:checked ~ .barre-laterale[b-94jmxczaia] {
        transition: translate 200ms ease, visibility 0s;
    }

    .voile-nav[b-94jmxczaia] {
        transition: opacity 200ms ease;
    }
}
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-gqhi9737rq],
.components-reconnect-repeated-attempt-visible[b-gqhi9737rq],
.components-reconnect-failed-visible[b-gqhi9737rq],
.components-pause-visible[b-gqhi9737rq],
.components-resume-failed-visible[b-gqhi9737rq],
.components-rejoining-animation[b-gqhi9737rq] {
    display: none;
}

#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible[b-gqhi9737rq],
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation[b-gqhi9737rq],
#components-reconnect-modal.components-reconnect-paused .components-pause-visible[b-gqhi9737rq],
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible[b-gqhi9737rq],
#components-reconnect-modal.components-reconnect-retrying[b-gqhi9737rq],
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible[b-gqhi9737rq],
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation[b-gqhi9737rq],
#components-reconnect-modal.components-reconnect-failed[b-gqhi9737rq],
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible[b-gqhi9737rq] {
    display: block;
}


#components-reconnect-modal[b-gqhi9737rq] {
    background-color: white;
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 0;
    border-radius: 0.5rem;
    box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-gqhi9737rq 0.5s both;
    &[open]

{
    animation: components-reconnect-modal-slideUp-b-gqhi9737rq 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity-b-gqhi9737rq 0.5s ease-in-out 0.3s;
    animation-fill-mode: both;
}

}

#components-reconnect-modal[b-gqhi9737rq]::backdrop {
    background-color: rgba(0, 0, 0, 0.4);
    animation: components-reconnect-modal-fadeInOpacity-b-gqhi9737rq 0.5s ease-in-out;
    opacity: 1;
}

@keyframes components-reconnect-modal-slideUp-b-gqhi9737rq {
    0% {
        transform: translateY(30px) scale(0.95);
    }

    100% {
        transform: translateY(0);
    }
}

@keyframes components-reconnect-modal-fadeInOpacity-b-gqhi9737rq {
    0% {
        opacity: 0;
    }

    100% {
        opacity: 1;
    }
}

@keyframes components-reconnect-modal-fadeOutOpacity-b-gqhi9737rq {
    0% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

.components-reconnect-container[b-gqhi9737rq] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
}

#components-reconnect-modal p[b-gqhi9737rq] {
    margin: 0;
    text-align: center;
}

#components-reconnect-modal button[b-gqhi9737rq] {
    border: 0;
    background-color: #6b9ed2;
    color: white;
    padding: 4px 24px;
    border-radius: 4px;
}

    #components-reconnect-modal button:hover[b-gqhi9737rq] {
        background-color: #3b6ea2;
    }

    #components-reconnect-modal button:active[b-gqhi9737rq] {
        background-color: #6b9ed2;
    }

.components-rejoining-animation[b-gqhi9737rq] {
    position: relative;
    width: 80px;
    height: 80px;
}

    .components-rejoining-animation div[b-gqhi9737rq] {
        position: absolute;
        border: 3px solid #0087ff;
        opacity: 1;
        border-radius: 50%;
        animation: components-rejoining-animation-b-gqhi9737rq 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
    }

        .components-rejoining-animation div:nth-child(2)[b-gqhi9737rq] {
            animation-delay: -0.5s;
        }

@keyframes components-rejoining-animation-b-gqhi9737rq {
    0% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    4.9% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 0;
    }

    5% {
        top: 40px;
        left: 40px;
        width: 0;
        height: 0;
        opacity: 1;
    }

    100% {
        top: 0px;
        left: 0px;
        width: 80px;
        height: 80px;
        opacity: 0;
    }
}
/* /Components/Layout/ReglagesCompte.razor.rz.scp.css */
/* Panneau des réglages du compte. C'est un `popover` natif : le navigateur fournit la
   couche supérieure, la fermeture à Échap et au clic extérieur. Les styles par défaut de
   l'agent utilisateur (bordure massive, inset 0, couleurs système) sont donc à reprendre
   entièrement. */
.panneau-compte[b-1ygge6cpgd] {
    position: fixed;
    inset: 0;
    margin: auto;
    width: min(520px, calc(100vw - 28px));
    max-height: min(660px, calc(100vh - 40px));
    padding: 0;
    overflow: hidden;

    display: flex;
    flex-direction: column;

    background: var(--surface);
    color: var(--text);
    border: 1px solid var(--border);
    border-radius: 12px;
    box-shadow: 0 24px 60px -18px oklch(20% 0.02 250 / 0.42), 0 2px 8px oklch(20% 0 0 / 0.1);
    font-family: inherit;
    font-size: 14px;
}

/* Indispensable, et pas une ceinture de sécurité : un popover fermé est masqué par la
   feuille de l'agent utilisateur, mais **toute** règle `display` d'auteur l'emporte sur
   elle, quelle que soit sa spécificité. Le `display: flex` ci-dessus annulait donc ce
   masquage, et le panneau fermé restait rendu — invisible (`opacity: 0`) mais posé en
   `position: fixed` au milieu de la fenêtre, 512 px sur 650, où il interceptait le clic de
   tout ce qui se trouvait dessous : champs de saisie, listes déroulantes, boutons des
   pièces jointes. Le symptôme se lisait comme une zone cliquable trop petite, à des
   endroits qui changeaient avec la taille de la fenêtre. */
.panneau-compte:not(:popover-open)[b-1ygge6cpgd] {
    display: none;
    /* Ceinture : `display` peut être repris par une valeur animée, jamais
       `pointer-events`. Même si le panneau restait rendu, il laisserait passer le clic. */
    pointer-events: none;
}

.panneau-compte[b-1ygge6cpgd]::backdrop {
    background: oklch(20% 0.014 250 / 0.42);
}

@media (prefers-reduced-motion: no-preference) {
    .panneau-compte[b-1ygge6cpgd] {
        opacity: 0;
        scale: 0.985;
        /* `display` est volontairement absent de cette liste. L'y mettre en
           `allow-discrete` garde le panneau rendu pendant la fermeture — et la valeur
           animée l'emporte alors sur la règle de masquage ci-dessus, ce qui faisait
           réapparaître le rectangle mangeur de clics dès la première ouverture. On perd le
           fondu de sortie ; l'entrée, elle, garde le sien grâce à `@starting-style`. */
        transition:
            opacity 0.14s ease,
            scale 0.14s ease,
            overlay 0.14s allow-discrete;
    }

    .panneau-compte:popover-open[b-1ygge6cpgd] {
        opacity: 1;
        scale: 1;
    }

    @starting-style {
        .panneau-compte:popover-open[b-1ygge6cpgd] {
            opacity: 0;
            scale: 0.985;
        }
    }
}

/* Sans prise en charge de `popover`, l'attribut est ignoré et le panneau resterait posé
   en permanence dans la barre latérale, formulaires compris. Il vaut mieux qu'il
   n'apparaisse pas : la coquille se replie déjà de la même façon pour le menu du compte,
   et aucun navigateur capable de tenir un circuit Blazor n'en est là. */
@supports not selector(:popover-open) {
    .panneau-compte[b-1ygge6cpgd] { display: none; }
}

/* --- En-tête ------------------------------------------------------------- */

.entete-panneau[b-1ygge6cpgd] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    padding: 15px 18px;
    border-bottom: 1px solid var(--border);
    flex-shrink: 0;
}

.titres[b-1ygge6cpgd] { display: flex; flex-direction: column; gap: 2px; min-width: 0; }

.entete-panneau h2[b-1ygge6cpgd] {
    margin: 0;
    font-size: 15.5px;
    font-weight: 600;
    letter-spacing: -0.01em;
}

.courriel-entete[b-1ygge6cpgd] {
    font-family: 'IBM Plex Mono', ui-monospace, monospace;
    font-size: 11px;
    color: var(--text-faint);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.bouton-fermer[b-1ygge6cpgd] {
    background: none;
    border: none;
    padding: 5px;
    border-radius: 5px;
    color: var(--text-faint);
    line-height: 0;
    cursor: pointer;
    flex-shrink: 0;
}

.bouton-fermer:hover[b-1ygge6cpgd] { background: var(--surface-2); color: var(--text); }

/* --- Corps --------------------------------------------------------------- */

.corps-panneau[b-1ygge6cpgd] {
    padding: 0 18px 16px;
    overflow-y: auto;
}

.groupe[b-1ygge6cpgd] {
    padding: 16px 0;
    border-bottom: 1px solid var(--border);
    display: flex;
    flex-direction: column;
    gap: 13px;
}

.groupe:last-child[b-1ygge6cpgd] { border-bottom: none; padding-bottom: 2px; }

.titre-groupe[b-1ygge6cpgd] {
    font-family: 'IBM Plex Mono', ui-monospace, monospace;
    font-size: 10.5px;
    font-weight: 500;
    letter-spacing: 0.11em;
    text-transform: uppercase;
    color: var(--text-faint);
}

.champ[b-1ygge6cpgd] { display: flex; flex-direction: column; gap: 5px; }

.champ label[b-1ygge6cpgd] {
    font-size: 12.5px;
    font-weight: 500;
    color: var(--text-muted);
    margin: 0;
}

.champ input[b-1ygge6cpgd] { font-size: 13.5px; padding: 9px 11px; }
.champ input:disabled[b-1ygge6cpgd] { background: var(--surface-2); color: var(--text-faint); cursor: not-allowed; }

.indice[b-1ygge6cpgd] {
    margin: 0;
    font-size: 11.5px;
    line-height: 1.45;
    color: var(--text-faint);
}

.indice-refus[b-1ygge6cpgd] { color: oklch(38% 0.15 35); }
.indice-ok[b-1ygge6cpgd] { color: oklch(35% 0.1 150); }

.actions-groupe[b-1ygge6cpgd] { display: flex; justify-content: flex-end; }

.btn-sm[b-1ygge6cpgd] { padding: 7px 13px; font-size: 12.5px; }
.btn-primary:disabled[b-1ygge6cpgd] { background: var(--border); color: var(--text-faint); cursor: not-allowed; }

/* --- Photo --------------------------------------------------------------- */

.ligne-photo[b-1ygge6cpgd] { display: flex; align-items: center; gap: 14px; }

.avatar-grand[b-1ygge6cpgd] {
    width: 56px;
    height: 56px;
    border-radius: 50%;
    flex-shrink: 0;
    object-fit: cover;
    background: var(--surface-2);
}

/* L'image est ramenée au carré avant l'envoi mais garde ses proportions : le cadrage
   final est fait ici, et non côté serveur, faute de quoi il faudrait une bibliothèque de
   traitement d'image pour un avatar. */
.avatar-initiales[b-1ygge6cpgd] {
    background: var(--accent);
    color: white;
    display: grid;
    place-items: center;
    font-size: 19px;
    font-weight: 600;
}

.actions-photo[b-1ygge6cpgd] { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.paire-boutons[b-1ygge6cpgd] { display: flex; align-items: center; gap: 4px; }

/* Le champ de fichier natif est masqué et commandé par son étiquette : sa présentation
   par défaut ne se met pas au ton du reste, et son libellé n'est pas traduisible. */
.bouton-fichier[b-1ygge6cpgd] {
    display: inline-flex;
    align-items: center;
    font-size: 12.5px;
    font-weight: 600;
    padding: 7px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--surface);
    color: var(--text);
    cursor: pointer;
    margin: 0;
    /* Indispensable, pas décoratif : le champ masqué ci-dessous est en position absolue,
       et sans ancêtre positionné son bloc conteneur serait la fenêtre — voir le
       commentaire équivalent dans DocumentsJoints.razor.css. */
    position: relative;
    overflow: hidden;
}

.bouton-fichier:hover[b-1ygge6cpgd] { background: var(--surface-2); }
.bouton-fichier.desactive[b-1ygge6cpgd] { color: var(--text-faint); cursor: progress; }

/* `::deep` est obligatoire : l'input est rendu par le composant InputFile, donc il ne
   porte pas l'attribut de portée de ce fichier-ci et un sélecteur ordinaire ne
   l'atteindrait pas — le champ natif resterait visible à côté de son étiquette.
   Masqué en position absolue plutôt qu'en `display: none`, qui le retirerait de l'ordre
   de tabulation et rendrait le choix de photo inatteignable au clavier. */
.bouton-fichier[b-1ygge6cpgd]  input[type="file"] {
    position: absolute;
    width: 1px;
    height: 1px;
    opacity: 0;
    overflow: hidden;
}

.bouton-texte[b-1ygge6cpgd] {
    background: none;
    border: none;
    padding: 7px 8px;
    font-size: 12.5px;
    font-weight: 500;
    color: var(--text-muted);
    cursor: pointer;
    border-radius: 6px;
}

.bouton-texte:hover[b-1ygge6cpgd] { color: oklch(38% 0.15 35); background: var(--danger-soft); }

/* --- Statut professionnel ------------------------------------------------ */

/* Deux cartes plutôt qu'une liste déroulante : ce choix a des conséquences, et elles
   doivent se lire avant le clic — pas après l'ouverture d'un menu. */
.choix-statut[b-1ygge6cpgd] { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; }

.carte-radio[b-1ygge6cpgd] {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 10px 11px;
    border: 1px solid var(--border);
    border-radius: 7px;
    background: var(--surface);
    cursor: pointer;
    margin: 0;
}

.carte-radio:hover[b-1ygge6cpgd] { border-color: var(--border); background: var(--surface-2); }
.carte-radio input[b-1ygge6cpgd] { position: absolute; opacity: 0; pointer-events: none; }

.carte-radio .tete[b-1ygge6cpgd] {
    display: flex;
    align-items: center;
    gap: 7px;
    font-size: 13px;
    font-weight: 600;
    color: var(--text);
}

.carte-radio .puce[b-1ygge6cpgd] {
    width: 13px;
    height: 13px;
    border-radius: 50%;
    border: 1.5px solid var(--text-faint);
    flex-shrink: 0;
}

.carte-radio .detail[b-1ygge6cpgd] { font-size: 11px; color: var(--text-faint); padding-left: 20px; }

.carte-radio:has(input:checked)[b-1ygge6cpgd] { border-color: var(--accent); background: var(--accent-soft); }

.carte-radio:has(input:checked) .puce[b-1ygge6cpgd] {
    border-color: var(--accent);
    background: var(--accent);
    box-shadow: inset 0 0 0 2.5px var(--surface);
}

.carte-radio:has(input:focus-visible)[b-1ygge6cpgd] { outline: 2px solid var(--accent); outline-offset: 1px; }

/* --- Bandeaux ------------------------------------------------------------ */

.bandeau[b-1ygge6cpgd] {
    margin: 0;
    padding: 10px 12px;
    border-radius: 7px;
    font-size: 12.5px;
    line-height: 1.45;
    border: 1px solid transparent;
}

.bandeau.erreur[b-1ygge6cpgd] { background: var(--danger-soft); border-color: oklch(80% 0.08 35); color: oklch(38% 0.15 35); }
.bandeau.avertissement[b-1ygge6cpgd] { background: var(--warning-soft); border-color: oklch(80% 0.09 75); color: oklch(38% 0.09 75); }
.bandeau.succes[b-1ygge6cpgd] { background: var(--success-soft); border-color: oklch(78% 0.08 150); color: oklch(33% 0.1 150); }

@media (max-width: 520px) {
    .choix-statut[b-1ygge6cpgd] { grid-template-columns: 1fr; }
}
/* /Components/Pages/Administration/AdministrationEntete.razor.rz.scp.css */
.entete-admin[b-wry9deihbx] {
    padding: 24px 28px 0;
    border-bottom: 1px solid var(--border);
    background: var(--surface);
}

.titre-admin[b-wry9deihbx] {
    font-size: 20px;
    font-weight: 600;
}

.soustitre-admin[b-wry9deihbx] {
    font-size: 12.5px;
    color: var(--text-muted);
    margin-top: 4px;
    margin-bottom: 16px;
}

/* La sous-navigation vit dans `app.css`, en une seule définition partagée par les quatre
   portails. Elle était recopiée ici, et c'est ainsi qu'elle a divergé. */

/* --- Sélecteur d'entreprise (module 15) -------------------------------- */

.rangee-entete[b-wry9deihbx] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 24px;
    flex-wrap: wrap;
}

.selecteur-cible[b-wry9deihbx] {
    display: flex;
    align-items: center;
    gap: 9px;
    padding-top: 4px;
}

.etiquette-cible[b-wry9deihbx] {
    font-size: 11.5px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
    white-space: nowrap;
}

.selecteur-cible select[b-wry9deihbx] {
    min-width: 220px;
    padding: 6px 9px;
    font-size: 13px;
}

.note-lecture[b-wry9deihbx] {
    margin: 0 0 14px;
    font-size: 12.5px;
    color: var(--text-muted);
    border-left: 2px solid var(--border);
    padding-left: 10px;
    max-width: 80ch;
}
/* /Components/Pages/Administration/EditeurGrapheRapport.razor.rz.scp.css */
/* L'éditeur de graphe : palette, toile, aperçu (module 11).

   La toile est en position absolue et les nœuds y sont posés en pixels : c'est la seule
   disposition où un nœud peut être déplacé par le navigateur sans que Blazor ait à
   redessiner quoi que ce soit. Les fils sont un SVG étendu par-dessus, sous les nœuds. */

/* La toile prend tout ce qui reste. C'est elle qu'on vient regarder, et l'aperçu la
   réduisait à un couloir de deux colonnes de nœuds : il ne s'ouvre donc que sur demande,
   et prend alors une part bornée. */
.editeur[b-7080dixcse] {
    display: grid;
    grid-template-columns: 210px minmax(0, 1fr);
    gap: 14px;
    align-items: start;
}

.editeur.avec-apercu[b-7080dixcse] {
    grid-template-columns: 210px minmax(0, 1.5fr) minmax(300px, 0.8fr);
}

.titre-zone[b-7080dixcse] {
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--text-muted);
    margin-bottom: 8px;
}

.titre-groupe[b-7080dixcse] {
    font-size: 10.5px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--text-faint);
    margin: 12px 0 5px;
}

.indice[b-7080dixcse] { font-size: 11.5px; color: var(--text-faint); line-height: 1.45; }
.sans-marge[b-7080dixcse] { margin: 0; }

/* --- Palette --------------------------------------------------------------- */

.palette[b-7080dixcse], .cote-apercu[b-7080dixcse] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 14px 15px;
}

.jeton[b-7080dixcse] {
    display: block;
    width: 100%;
    text-align: left;
    font-size: 12.5px;
    padding: 7px 9px;
    margin-bottom: 5px;
    border-radius: 6px;
    border: 1px solid var(--border);
    background: var(--surface-2);
    cursor: pointer;
    line-height: 1.35;
}

.jeton:hover:not(:disabled)[b-7080dixcse] { border-color: var(--accent); }
.jeton:disabled[b-7080dixcse] { opacity: 0.5; cursor: default; }

.jeton-condition[b-7080dixcse] { border-left: 3px solid oklch(62% 0.13 75); }

/* --- Barre et anomalies ---------------------------------------------------- */

.centre[b-7080dixcse] { display: flex; flex-direction: column; gap: 10px; }

.barre[b-7080dixcse] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
}

.etat-graphe[b-7080dixcse] { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
/* Enroulés : cinq boutons dans une fenêtre étroite débordaient de leur barre et
   passaient par-dessus l'aperçu, au lieu de passer à la ligne. */
.actions[b-7080dixcse] { display: flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }

.pastille[b-7080dixcse] {
    font-size: 11px;
    font-weight: 600;
    padding: 3px 9px;
    border-radius: 999px;
    white-space: nowrap;
}

.pastille-defaut[b-7080dixcse] { color: var(--text-muted); background: var(--surface-2); }
.pastille-propre[b-7080dixcse] { color: var(--accent); background: var(--accent-soft); }
.non-enregistre[b-7080dixcse] { color: oklch(48% 0.12 75); }

.anomalies[b-7080dixcse] { display: flex; flex-direction: column; gap: 5px; }

.anomalie[b-7080dixcse] {
    display: flex;
    gap: 9px;
    align-items: flex-start;
    padding: 7px 10px;
    border-radius: 6px;
    font-size: 12.5px;
    line-height: 1.45;
}

.anomalie.bloquant[b-7080dixcse] { background: var(--danger-soft); }
.anomalie.avertissement[b-7080dixcse] { background: var(--warning-soft); }

.anomalie .marque[b-7080dixcse] {
    flex: none;
    width: 16px;
    height: 16px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    font-size: 10px;
    font-weight: 700;
    color: #fff;
    margin-top: 1px;
}

.anomalie.bloquant .marque[b-7080dixcse] { background: var(--danger); }
.anomalie.avertissement .marque[b-7080dixcse] { background: oklch(62% 0.13 75); }

/* --- La toile -------------------------------------------------------------- */

/* La toile est une fenêtre fixe ; c'est le monde qui bouge derrière elle. Elle ne défile
   donc pas : un conteneur qui défilerait <em>et</em> un monde transformé donneraient deux
   idées concurrentes de « où l'on regarde », et la position d'un fil dépendrait de
   laquelle on interroge. */
.toile[b-7080dixcse] {
    position: relative;
    height: 680px;
    overflow: hidden;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    cursor: grab;

    /* Une grille discrète : elle donne l'échelle du déplacement et rend l'alignement
       des nœuds visible, ce qu'un fond uni ne fait pas. Son pas et son origine suivent
       la vue — sans cela, le fond resterait immobile sous les nœuds et le déplacement
       n'aurait plus aucun repère. */
    background-image:
        radial-gradient(circle, var(--border) 1px, transparent 1px);
    background-size: 24px 24px;

    /* Le glissement est géré au pointeur : laisser le navigateur interpréter le geste
       comme un défilement tactile le volerait à l'éditeur. */
    touch-action: none;
}

.toile.fil-en-cours[b-7080dixcse] { cursor: crosshair; }
.toile.en-panoramique[b-7080dixcse] { cursor: grabbing; }

/* Le monde n'a pas de dimensions propres : il est un simple repère que la transformation
   déplace. Son origine est le coin haut-gauche de la toile au grossissement 1. */
.monde[b-7080dixcse] {
    position: absolute;
    top: 0;
    left: 0;
    width: 0;
    height: 0;
    transform-origin: 0 0;
}

/* Le SVG déborde volontairement de son cadre nul : `overflow: visible` laisse les fils
   se dessiner partout dans le monde sans qu'on ait à lui donner une taille arbitraire —
   3 000 pixels devenaient une limite au premier graphe plus large. */
.fils[b-7080dixcse] {
    position: absolute;
    top: 0;
    left: 0;
    width: 1px;
    height: 1px;
    pointer-events: none;
    overflow: visible;
}

.fil[b-7080dixcse] {
    fill: none;
    stroke: var(--text-muted);
    stroke-width: 2;
}

.fil-oui[b-7080dixcse] { stroke: var(--success); }
.fil-non[b-7080dixcse] { stroke: var(--danger); }
.fil-corps[b-7080dixcse] { stroke: oklch(62% 0.13 75); stroke-dasharray: 5 4; }

.fil-provisoire[b-7080dixcse] {
    stroke: var(--accent);
    stroke-dasharray: 4 4;
}

/* --- Les nœuds ------------------------------------------------------------- */

.noeud[b-7080dixcse] {
    position: absolute;
    width: 210px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 9px;
    box-shadow: 0 1px 3px rgb(0 0 0 / 0.08);
    cursor: grab;
    user-select: none;
}

.noeud.en-deplacement[b-7080dixcse] { cursor: grabbing; box-shadow: 0 6px 18px rgb(0 0 0 / 0.16); z-index: 5; }
.noeud.selectionne[b-7080dixcse] { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent-soft); z-index: 4; }

.noeud-debut[b-7080dixcse] { border-left: 3px solid var(--accent); }
.noeud-chapitre[b-7080dixcse] { border-left: 3px solid var(--text-muted); }
.noeud-condition[b-7080dixcse] { border-left: 3px solid oklch(62% 0.13 75); }
.noeud-pour-chaque[b-7080dixcse] { border-left: 3px solid var(--success); }

/* La pastille d'entrée : le fil arrive dessus, et elle dit d'un coup d'œil de quel côté
   se lit le document — de haut en bas. */
.entree[b-7080dixcse] {
    position: absolute;
    top: -5px;
    left: 50%;
    transform: translateX(-50%);
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--surface);
    border: 2px solid var(--border);
}

.noeud-debut .entree[b-7080dixcse] { display: none; }

.corps[b-7080dixcse] { padding: 10px 12px 8px; }

.etiquette-type[b-7080dixcse] {
    font-size: 9.5px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--text-faint);
}

.intitule[b-7080dixcse] { font-size: 13px; line-height: 1.35; margin-top: 2px; }

.reglages[b-7080dixcse] { display: flex; flex-direction: column; gap: 5px; margin-top: 8px; }
.reglage-ligne[b-7080dixcse] { display: flex; gap: 5px; }
.reglage[b-7080dixcse] { font-size: 12px; padding: 4px 6px; width: 100%; }
.reglage-ligne .reglage:first-child[b-7080dixcse] { width: 68px; flex: none; }

.reglages .btn-lien-supprimer[b-7080dixcse] { font-size: 11.5px; text-align: left; }

/* --- Les ports ------------------------------------------------------------- */

.ports[b-7080dixcse] {
    display: flex;
    justify-content: space-around;
    gap: 6px;
    padding: 0 10px 9px;
}

.port[b-7080dixcse] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
    cursor: crosshair;
    padding: 2px 6px;
    border-radius: 5px;
}

.port:hover[b-7080dixcse] { background: var(--surface-2); }

/* La pastille elle-même : c'est d'elle que part le fil. Dessinée en ::after pour que la
   zone cliquable reste confortable sans grossir le point. */
.port[b-7080dixcse]::after {
    content: "";
    width: 11px;
    height: 11px;
    border-radius: 50%;
    background: var(--text-muted);
    border: 2px solid var(--surface);
    margin-bottom: -8px;
}

.port-oui[b-7080dixcse]::after { background: var(--success); }
.port-non[b-7080dixcse]::after { background: var(--danger); }
.port-corps[b-7080dixcse]::after { background: oklch(62% 0.13 75); }

.nom-port[b-7080dixcse] {
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--text-faint);
}

/* --- Aperçu ---------------------------------------------------------------- */

.cote-apercu[b-7080dixcse] { display: flex; flex-direction: column; gap: 10px; }

.visionneuse[b-7080dixcse] {
    width: 100%;
    height: 560px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--surface-2);
}

.apercu-vide[b-7080dixcse] {
    border: 1px dashed var(--border);
    border-radius: 6px;
    padding: 24px 18px;
    text-align: center;
}

/* Sous cette largeur, trois colonnes donneraient une toile plus étroite que deux nœuds
   côte à côte : l'aperçu passe dessous plutôt que de la comprimer. */
@media (max-width: 1400px) {
    .editeur.avec-apercu[b-7080dixcse] { grid-template-columns: 190px minmax(0, 1fr); }
    .cote-apercu[b-7080dixcse] { grid-column: 1 / -1; }
    .visionneuse[b-7080dixcse] { height: 520px; }
}

@media (max-width: 900px) {
    .editeur[b-7080dixcse], .editeur.avec-apercu[b-7080dixcse] { grid-template-columns: 1fr; }
    .toile[b-7080dixcse] { height: 540px; }
}

/* --- Les nouveaux nœuds ------------------------------------------------------
   Une couleur de liseré par nature : reconnaître un saut de page d'un coup d'œil
   au milieu de vingt nœuds est ce qui rend un graphe relisible. */

.jeton-titre[b-7080dixcse] { border-left: 3px solid var(--accent); }
.jeton-saut[b-7080dixcse] { border-left: 3px solid var(--text-muted); }
.jeton-boucle[b-7080dixcse] { border-left: 3px solid var(--success); }
.jeton-fiche[b-7080dixcse] { border-left: 3px solid oklch(55% 0.14 300); }

.noeud-titre[b-7080dixcse] { border-left: 3px solid var(--accent); }
.noeud-paragraphe[b-7080dixcse] { border-left: 3px solid var(--accent); }
.noeud-fiche-situation[b-7080dixcse] { border-left: 3px solid oklch(55% 0.14 300); }

/* Le saut de page n'imprime rien de visible : le nœud le dit en étant lui-même
   réduit à une barre, plutôt qu'en occupant la place d'un chapitre. */
.noeud-saut-de-page[b-7080dixcse] {
    border-left: 3px solid var(--text-muted);
    border-style: dashed;
    width: 170px;
}

.noeud-saut-de-page .intitule[b-7080dixcse] { font-size: 12px; color: var(--text-muted); }

.reglages textarea.reglage[b-7080dixcse] {
    resize: vertical;
    font-family: inherit;
    line-height: 1.4;
    min-height: 28px;
}

/* La liste des jetons : repliée d'office, elle doublerait sinon la hauteur du nœud
   et recouvrirait ses voisins. */
.jetons summary[b-7080dixcse] {
    cursor: pointer;
    font-size: 11px;
    color: var(--text-muted);
    padding: 2px 0;
}

.jeton-ligne[b-7080dixcse] {
    display: flex;
    gap: 6px;
    align-items: baseline;
    font-size: 10.5px;
    line-height: 1.4;
    color: var(--text-faint);
}

.jeton-ligne code[b-7080dixcse] {
    font-family: 'IBM Plex Mono', monospace;
    background: var(--surface-2);
    padding: 0 3px;
    border-radius: 3px;
    color: var(--text-muted);
    flex: none;
}

/* --- Retirer ------------------------------------------------------------------
   Toujours offert, et non réservé au nœud choisi : retirer est le geste qu'on
   cherche en premier quand on s'est trompé, et le cacher derrière une sélection
   le rendait introuvable. */

.retirer[b-7080dixcse] {
    position: absolute;
    top: 4px;
    right: 4px;
    width: 20px;
    height: 20px;
    padding: 0;
    line-height: 1;
    font-size: 15px;
    border: none;
    border-radius: 5px;
    background: transparent;
    color: var(--text-faint);
    cursor: pointer;
    opacity: 0;
}

/* Découvert au survol du nœud, pour ne pas semer vingt croix sur la toile — mais
   toujours présent dans l'ordre de tabulation, et visible dès qu'il a le focus. */
.noeud:hover .retirer[b-7080dixcse],
.noeud.selectionne .retirer[b-7080dixcse],
.retirer:focus-visible[b-7080dixcse] { opacity: 1; }

.retirer:hover[b-7080dixcse] { background: var(--danger-soft); color: var(--danger); }

/* Le fil se coupe en cliquant dessus. La zone de clic est un second tracé, épais et
   transparent : un fil de deux pixels ne se vise pas à la souris. Le conteneur SVG
   ignore le pointeur, chaque zone le réclame pour elle seule. */
.fil-zone[b-7080dixcse] {
    fill: none;
    stroke: transparent;
    stroke-width: 16;
    pointer-events: stroke;
    cursor: pointer;
}

.fil-zone:hover[b-7080dixcse] { stroke: var(--danger-soft); }

/* --- Commandes de vue -----------------------------------------------------------
   Flottantes au-dessus du monde et non dedans : elles ne se déplacent pas avec lui,
   et « Ajuster » reste atteignable quand on s'est perdu. */

.commandes-vue[b-7080dixcse] {
    position: absolute;
    right: 12px;
    bottom: 12px;
    display: flex;
    align-items: center;
    gap: 2px;
    padding: 3px;
    border-radius: 8px;
    background: var(--surface);
    border: 1px solid var(--border);
    box-shadow: 0 1px 4px rgb(0 0 0 / 0.1);
}

.commandes-vue button[b-7080dixcse] {
    min-width: 26px;
    height: 26px;
    padding: 0 7px;
    border: none;
    border-radius: 5px;
    background: transparent;
    color: var(--text-muted);
    font-size: 14px;
    line-height: 1;
    cursor: pointer;
}

.commandes-vue button:hover[b-7080dixcse] { background: var(--surface-2); color: var(--accent); }
.commandes-vue .ajuster[b-7080dixcse] { font-size: 11.5px; margin-left: 2px; }

.grossissement[b-7080dixcse] {
    min-width: 46px;
    text-align: center;
    font-size: 11.5px;
    color: var(--text-muted);
    font-variant-numeric: tabular-nums;
}

/* Le rappel des gestes. En bas à gauche, discret : il s'adresse à la première visite,
   et un éditeur de graphe ne dit nulle part de lui-même qu'on peut zoomer. */
.aide-vue[b-7080dixcse] {
    position: absolute;
    left: 12px;
    bottom: 14px;
    font-size: 10.5px;
    color: var(--text-faint);
    background: color-mix(in oklab, var(--surface) 82%, transparent);
    padding: 3px 7px;
    border-radius: 5px;
    pointer-events: none;
}

/* --- Les parties d'un chapitre ---------------------------------------------- */

.titre-reglage[b-7080dixcse] {
    font-size: 10px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--text-faint);
    margin-top: 4px;
}

.section[b-7080dixcse] {
    display: flex;
    align-items: flex-start;
    gap: 6px;
    font-size: 11.5px;
    line-height: 1.35;
    cursor: pointer;
    padding: 1px 0;
}

.section input[type="checkbox"][b-7080dixcse] { width: auto; flex: none; margin-top: 2px; }
/* /Components/Pages/Administration/FonctionsSecurite.razor.rz.scp.css */
.page[b-qph8qc2gvq] {
    padding: 24px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.texte-muet[b-qph8qc2gvq] { color: var(--text-muted); font-size: 13px; }
.intro[b-qph8qc2gvq] { margin: 0; max-width: 760px; }
.note[b-qph8qc2gvq] { margin: 0; max-width: 760px; }
.alerte-erreur[b-qph8qc2gvq] { margin: 0; }

.carte-liste[b-qph8qc2gvq] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

table[b-qph8qc2gvq] { border-collapse: collapse; width: 100%; }

th[b-qph8qc2gvq] {
    text-align: left;
    padding: 9px 20px;
    font-size: 11px;
    font-weight: 500;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    border-bottom: 1px solid var(--border);
}

td[b-qph8qc2gvq] {
    padding: 8px 20px;
    font-size: 13px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
}

tr.ligne-inactive[b-qph8qc2gvq] { opacity: 0.5; }

td input[type="text"][b-qph8qc2gvq], td select[b-qph8qc2gvq] {
    padding: 6px 8px;
    font-size: 13px;
}

.champ-ordre[b-qph8qc2gvq] { width: 56px; }

.colonne-case[b-qph8qc2gvq] { width: 50px; text-align: center; }
.colonne-case input[b-qph8qc2gvq] { width: auto; }

/* Le td doit rester une cellule de tableau. En display:flex il sort de la mise
   en page du tableau : sa bordure basse se peint alors sur la hauteur de son
   contenu au lieu de celle de la rangée, et le trait de séparation se casse à
   cette colonne. La disposition des boutons vit donc sur un conteneur interne. */
.colonne-actions[b-qph8qc2gvq] {
    width: 150px;
    white-space: nowrap;
}

.colonne-actions .actions-cellule[b-qph8qc2gvq] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.btn-xs[b-qph8qc2gvq] {
    padding: 5px 10px;
    font-size: 12px;
}

.btn-lien-supprimer[b-qph8qc2gvq] {
    background: transparent;
    border: none;
    color: var(--text-faint);
    padding: 4px;
    cursor: pointer;
    display: inline-flex;
}

.btn-lien-supprimer:hover[b-qph8qc2gvq] { color: var(--danger); }

.formulaire-ajout[b-qph8qc2gvq] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 14px 20px;
    background: var(--surface-2);
}

.formulaire-ajout input[type="text"][b-qph8qc2gvq] {
    padding: 7px 10px;
    font-size: 13px;
}


.formulaire-ajout select[b-qph8qc2gvq] {
    padding: 7px 10px;
    font-size: 13px;
    width: 130px;
    flex-shrink: 0;
}

.code-sf[b-qph8qc2gvq] {
    font-size: 12px;
    font-weight: 600;
    color: var(--text-muted);
}

.champ-code[b-qph8qc2gvq] { width: 130px; flex-shrink: 0; }

/* Ordre des champs du formulaire d'ajout : code (court et fixe), nom, description. */
.formulaire-ajout .champ-code[b-qph8qc2gvq] { width: 130px; flex-shrink: 0; flex-grow: 0; }
.formulaire-ajout input[type="text"]:not(.champ-code)[b-qph8qc2gvq] { flex: 1; }
/* /Components/Pages/Administration/ListesConfigurables.razor.rz.scp.css */
.page[b-2lgf41pi5d] {
    padding: 24px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.entete h1[b-2lgf41pi5d] {
    margin: 0 0 4px;
    font-size: 20px;
    font-weight: 600;
}

.texte-muet[b-2lgf41pi5d] { color: var(--text-muted); font-size: 13px; }

.alerte-erreur[b-2lgf41pi5d] { margin: 0; }

.carte-liste[b-2lgf41pi5d] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

.entete-liste[b-2lgf41pi5d] {
    padding: 14px 20px;
    border-bottom: 1px solid var(--border);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.titre-liste[b-2lgf41pi5d] {
    font-size: 13.5px;
    font-weight: 600;
}

.soustitre-liste[b-2lgf41pi5d] {
    font-size: 12px;
    color: var(--text-muted);
    margin-top: 1px;
}

.cle[b-2lgf41pi5d] {
    font-size: 11px;
    color: var(--text-faint);
}

table[b-2lgf41pi5d] { border-collapse: collapse; width: 100%; }

th[b-2lgf41pi5d] {
    text-align: left;
    padding: 9px 20px;
    font-size: 11px;
    font-weight: 500;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    border-bottom: 1px solid var(--border);
}

td[b-2lgf41pi5d] {
    padding: 8px 20px;
    font-size: 13px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
}

tr.ligne-inactive[b-2lgf41pi5d] { opacity: 0.5; }

td input[type="text"][b-2lgf41pi5d], td select[b-2lgf41pi5d] {
    padding: 6px 8px;
    font-size: 13px;
}

.champ-ordre[b-2lgf41pi5d] { width: 56px; }

.colonne-case[b-2lgf41pi5d] { width: 50px; text-align: center; }
.colonne-case input[b-2lgf41pi5d] { width: auto; }

/* Le td doit rester une cellule de tableau. En display:flex il sort de la mise
   en page du tableau : sa bordure basse se peint alors sur la hauteur de son
   contenu au lieu de celle de la rangée, et le trait de séparation se casse à
   cette colonne. La disposition des boutons vit donc sur un conteneur interne. */
.colonne-actions[b-2lgf41pi5d] {
    width: 150px;
    white-space: nowrap;
}

.colonne-actions .actions-cellule[b-2lgf41pi5d] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.btn-xs[b-2lgf41pi5d] {
    padding: 5px 10px;
    font-size: 12px;
}

.btn-lien-supprimer[b-2lgf41pi5d] {
    background: transparent;
    border: none;
    color: var(--text-faint);
    padding: 4px;
    cursor: pointer;
    display: inline-flex;
}

.btn-lien-supprimer:hover[b-2lgf41pi5d] { color: var(--danger); }

.formulaire-ajout[b-2lgf41pi5d] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 14px 20px;
    background: var(--surface-2);
}

.formulaire-ajout input[type="text"][b-2lgf41pi5d] {
    padding: 7px 10px;
    font-size: 13px;
}

.formulaire-ajout input[type="text"]:nth-child(1)[b-2lgf41pi5d] { flex: 1; }
.formulaire-ajout input[type="text"]:nth-child(2)[b-2lgf41pi5d] { width: 160px; flex-shrink: 0; }

.formulaire-ajout select[b-2lgf41pi5d] {
    padding: 7px 10px;
    font-size: 13px;
    width: 130px;
    flex-shrink: 0;
}
/* /Components/Pages/Administration/MatriceRisque.razor.rz.scp.css */
.page[b-sqpz9kmj45] {
    padding: 24px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.texte-muet[b-sqpz9kmj45] { color: var(--text-muted); font-size: 13px; }
.intro[b-sqpz9kmj45] { margin: 0; max-width: 760px; }
.note[b-sqpz9kmj45] { margin: 0; max-width: 760px; }
.alerte-erreur[b-sqpz9kmj45] { margin: 0; }

.alerte-succes[b-sqpz9kmj45] {
    margin: 0;
    padding: 12px 14px;
    border-radius: 6px;
    background: var(--success-soft);
    border: 1px solid oklch(80% 0.07 150);
    color: oklch(35% 0.12 150);
    font-size: 13px;
}

.avertissement[b-sqpz9kmj45] {
    padding: 12px 14px;
    border-radius: 6px;
    background: var(--warning-soft);
    border: 1px solid oklch(82% 0.09 75);
    color: oklch(38% 0.12 75);
    font-size: 13px;
    line-height: 1.5;
    max-width: 760px;
}

.carte-liste[b-sqpz9kmj45] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

.entete-liste[b-sqpz9kmj45] {
    padding: 14px 20px;
    border-bottom: 1px solid var(--border);
}

.titre-liste[b-sqpz9kmj45] { font-size: 13.5px; font-weight: 600; }

.soustitre-liste[b-sqpz9kmj45] {
    font-size: 12.5px;
    color: var(--text-muted);
    margin-top: 3px;
}

/* La grille peut dépasser sur petit écran — elle défile dans son propre conteneur
   plutôt que d'élargir la page. */
.zone-grille[b-sqpz9kmj45] {
    overflow-x: auto;
    padding: 18px 20px;
}

.grille[b-sqpz9kmj45] {
    border-collapse: separate;
    border-spacing: 4px;
}

.entete-cote[b-sqpz9kmj45],
.entete-groupe[b-sqpz9kmj45],
.entete-sous[b-sqpz9kmj45],
.entete-ligne[b-sqpz9kmj45] {
    font-size: 11.5px;
    font-weight: 600;
    color: var(--text-muted);
    text-align: center;
    padding: 4px 8px;
    white-space: nowrap;
}

.entete-cote[b-sqpz9kmj45] {
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--text-faint);
}

.entete-groupe[b-sqpz9kmj45] {
    background: var(--surface-2);
    border-radius: 5px;
    color: var(--text);
}

.entete-sous[b-sqpz9kmj45] { font-weight: 500; }

.entete-ligne[b-sqpz9kmj45] {
    background: var(--surface-2);
    border-radius: 5px;
    color: var(--text);
    min-width: 34px;
}

.entete-ligne-secondaire[b-sqpz9kmj45] {
    background: none;
    font-weight: 500;
    color: var(--text-muted);
}

.cellule[b-sqpz9kmj45] { padding: 0; }

.case-indice[b-sqpz9kmj45] {
    width: 52px;
    height: 36px;
    padding: 0;
    text-align: center;
    font-size: 14px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    border: 1px solid transparent;
    border-radius: 5px;
}

/* Retire les flèches natives : la grille se lit comme une matrice, pas comme un formulaire. */
.case-indice[b-sqpz9kmj45]::-webkit-outer-spin-button,
.case-indice[b-sqpz9kmj45]::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

.case-indice[b-sqpz9kmj45] { -moz-appearance: textfield; appearance: textfield; }

.case-indice:focus[b-sqpz9kmj45] {
    outline: 2px solid var(--accent);
    outline-offset: 1px;
}

/* Une valeur encore issue de la formule d'amorçage se distingue d'une valeur
   confirmée par un administrateur. */
.case-indice.provisoire[b-sqpz9kmj45] {
    border-style: dashed;
    border-color: oklch(70% 0.02 90);
    font-weight: 500;
    font-style: italic;
}

.niveau-faible[b-sqpz9kmj45] { background: var(--success-soft); color: oklch(35% 0.12 150); }
.niveau-modere[b-sqpz9kmj45] { background: var(--warning-soft); color: oklch(38% 0.12 75); }
.niveau-eleve[b-sqpz9kmj45] { background: oklch(92% 0.08 45); color: oklch(40% 0.15 45); }
.niveau-critique[b-sqpz9kmj45] { background: var(--danger-soft); color: oklch(38% 0.15 35); }

.barre-actions[b-sqpz9kmj45] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 14px 20px;
    border-top: 1px solid var(--border);
    background: var(--surface-2);
}

.btn-xs[b-sqpz9kmj45] {
    padding: 6px 12px;
    font-size: 12.5px;
}

.btn-xs:disabled[b-sqpz9kmj45] {
    opacity: 0.5;
    cursor: default;
}
/* /Components/Pages/Administration/Normes.razor.rz.scp.css */
/* Reprend la matière des autres écrans d'administration. Le CSS scopé de Blazor étant par
   composant, ces règles sont volontairement redéfinies plutôt que jetées dans app.css. */

.page[b-ull6a4a3kl] {
    padding: 24px 28px 40px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.texte-muet[b-ull6a4a3kl] { color: var(--text-muted); font-size: 13px; }
.intro[b-ull6a4a3kl] { margin: 0; max-width: 82ch; line-height: 1.6; }
.alerte-erreur[b-ull6a4a3kl] { margin: 0; }
.sans-marge[b-ull6a4a3kl] { margin: 0; }
.mono[b-ull6a4a3kl] { font-family: ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 12.5px; }
.forte[b-ull6a4a3kl] { font-weight: 700; }

/* Ce que l'application ne fait pas est ce qu'un administrateur doit lire en premier :
   elle ne livre aucun texte de norme, et n'en livrera pas. */
.avis-licence[b-ull6a4a3kl] {
    padding: 14px 16px;
    border-radius: 8px;
    background: var(--warning-soft);
    border: 1px solid oklch(84% 0.07 75);
    color: oklch(34% 0.08 75);
    font-size: 13px;
    line-height: 1.6;
}

.carte-vide[b-ull6a4a3kl] {
    background: var(--surface);
    border: 1px dashed var(--border);
    border-radius: 8px;
    padding: 26px 24px;
    text-align: center;
}

.carte-vide p[b-ull6a4a3kl] { margin: 0 0 6px; }
.carte-vide p:last-child[b-ull6a4a3kl] { margin-bottom: 0; }

/* --- La liste ---------------------------------------------------------------- */

.liste-normes[b-ull6a4a3kl] { display: flex; flex-direction: column; gap: 12px; }

.carte-norme[b-ull6a4a3kl] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 16px 18px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.entete-norme[b-ull6a4a3kl] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
}

.ligne-reference[b-ull6a4a3kl] { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.reference[b-ull6a4a3kl] { font-size: 14px; font-weight: 600; }
.titre-norme[b-ull6a4a3kl] { font-size: 13px; color: var(--text-muted); margin-top: 3px; line-height: 1.5; }
.actions-norme[b-ull6a4a3kl] { display: flex; align-items: center; gap: 12px; flex-shrink: 0; }

.jeton[b-ull6a4a3kl] {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.02em;
    white-space: nowrap;
}

.jeton-type[b-ull6a4a3kl] { background: var(--accent-soft); color: var(--accent-dark); }
.jeton-inactif[b-ull6a4a3kl] { background: var(--surface-2); color: var(--text-faint); border: 1px solid var(--border); }
.jeton-transcrite[b-ull6a4a3kl] { background: var(--surface-2); color: var(--text); }
.jeton-relue[b-ull6a4a3kl] { background: var(--success-soft); color: oklch(35% 0.1 150); }
.jeton-non-relue[b-ull6a4a3kl] { background: var(--warning-soft); color: oklch(38% 0.09 75); }

/* Une norme citée sans article ne prescrit rien : état légitime, d'où le pointillé. */
.jeton-vide[b-ull6a4a3kl] { background: var(--surface-2); color: var(--text-faint); border: 1px dashed var(--border); }

.etat-transcription[b-ull6a4a3kl] { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.explication[b-ull6a4a3kl] { font-size: 12px; color: var(--text-muted); }

.btn-lien-supprimer[b-ull6a4a3kl], .btn-lien-modifier[b-ull6a4a3kl] {
    background: transparent;
    border: none;
    padding: 2px;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--text-faint);
    cursor: pointer;
}

.btn-lien-supprimer:hover[b-ull6a4a3kl] { color: var(--danger); }
.btn-lien-modifier:hover[b-ull6a4a3kl] { color: var(--accent); }

/* --- Les articles transcrits -------------------------------------------------- */

.bloc-articles[b-ull6a4a3kl] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding-top: 12px;
    border-top: 1px solid var(--border);
}

.bloc-articles table[b-ull6a4a3kl] { width: 100%; border-collapse: collapse; }

.bloc-articles th[b-ull6a4a3kl] {
    text-align: left;
    font-size: 11.5px;
    font-weight: 600;
    color: var(--text-muted);
    padding: 6px 8px;
    border-bottom: 1px solid var(--border);
}

.bloc-articles td[b-ull6a4a3kl] { padding: 8px; font-size: 13px; border-bottom: 1px solid var(--border); vertical-align: top; }
.col-article[b-ull6a4a3kl] { width: 70px; }
.col-genre[b-ull6a4a3kl] { width: 130px; }
.col-niveau[b-ull6a4a3kl] { width: 110px; }

.aide[b-ull6a4a3kl] { font-size: 12px; color: var(--text-faint); line-height: 1.55; }
/* /Components/Pages/Administration/PhenomenesDangereux.razor.rz.scp.css */
.page[b-z4n5oa43ze] {
    padding: 24px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.texte-muet[b-z4n5oa43ze] { color: var(--text-muted); font-size: 13px; }
.intro[b-z4n5oa43ze] { margin: 0; }

.alerte-erreur[b-z4n5oa43ze] { margin: 0; }

.carte-liste[b-z4n5oa43ze] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

.entete-liste[b-z4n5oa43ze] {
    padding: 14px 20px;
    border-bottom: 1px solid var(--border);
    font-size: 13.5px;
    font-weight: 600;
}

table[b-z4n5oa43ze] { border-collapse: collapse; width: 100%; }

th[b-z4n5oa43ze] {
    text-align: left;
    padding: 9px 20px;
    font-size: 11px;
    font-weight: 500;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    border-bottom: 1px solid var(--border);
}

td[b-z4n5oa43ze] {
    padding: 10px 20px;
    font-size: 13px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
}

tr:last-child td[b-z4n5oa43ze] { border-bottom: none; }

.cellule-forte[b-z4n5oa43ze] { font-weight: 500; }

td input[type="text"][b-z4n5oa43ze] {
    padding: 6px 8px;
    font-size: 13px;
}

/* Le td doit rester une cellule de tableau. En display:flex il sort de la mise
   en page du tableau : sa bordure basse se peint alors sur la hauteur de son
   contenu au lieu de celle de la rangée, et le trait de séparation se casse à
   cette colonne. La disposition des boutons vit donc sur un conteneur interne. */
.colonne-actions[b-z4n5oa43ze] {
    width: 150px;
    white-space: nowrap;
}

.colonne-actions .actions-cellule[b-z4n5oa43ze] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.btn-xs[b-z4n5oa43ze] {
    padding: 5px 10px;
    font-size: 12px;
}

.btn-lien-supprimer[b-z4n5oa43ze], .btn-lien-modifier[b-z4n5oa43ze] {
    background: transparent;
    border: none;
    color: var(--text-faint);
    padding: 4px;
    cursor: pointer;
    display: inline-flex;
}

.btn-lien-supprimer:hover[b-z4n5oa43ze] { color: var(--danger); }
.btn-lien-modifier:hover[b-z4n5oa43ze] { color: var(--accent); }

.btn-lien-annuler[b-z4n5oa43ze] {
    background: transparent;
    border: none;
    color: var(--text-muted);
    font-size: 12px;
    font-family: inherit;
    padding: 5px 4px;
    cursor: pointer;
}

.btn-lien-annuler:hover[b-z4n5oa43ze] { color: var(--text); }

.carte-ajout[b-z4n5oa43ze] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

.titre-ajout[b-z4n5oa43ze] {
    padding: 14px 20px;
    border-bottom: 1px solid var(--border);
    font-size: 13.5px;
    font-weight: 600;
}

.formulaire-ajout[b-z4n5oa43ze] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 14px 20px;
    background: var(--surface-2);
}

.formulaire-ajout input[type="text"][b-z4n5oa43ze], .formulaire-ajout select[b-z4n5oa43ze] {
    padding: 7px 10px;
    font-size: 13px;
}

.champ-nom[b-z4n5oa43ze] { width: 200px; flex-shrink: 0; }
.champ-categorie[b-z4n5oa43ze] { width: 160px; flex-shrink: 0; }
.champ-consequences[b-z4n5oa43ze] { flex: 1; }

/* --- Le pictogramme de référence ------------------------------------------

   Une colonne étroite, en tête de ligne : c'est le premier repère quand on
   cherche un phénomène dans une liste de vingt, et il voyage ensuite jusque
   dans le rapport. */

.colonne-image[b-z4n5oa43ze] {
    width: 96px;
    white-space: nowrap;
}

.cellule-image[b-z4n5oa43ze] {
    display: flex;
    align-items: center;
    gap: 6px;
}

/* Bornée par la hauteur et non par la largeur : les pictogrammes arrivent en
   formats disjoints — carrés, paysages, portraits — et seule une hauteur
   commune garde les lignes du tableau régulières. */
.vignette-phenomene[b-z4n5oa43ze] {
    height: 36px;
    width: auto;
    max-width: 52px;
    object-fit: contain;
    border-radius: 3px;
}

.vignette-absente[b-z4n5oa43ze] {
    display: inline-block;
    width: 36px;
    text-align: center;
    color: var(--text-faint);
}

/* Le libellé porte le champ de fichier, qui reste masqué : un `input[type=file]`
   ne se met pas à la forme des autres boutons de la ligne. */
.actions-image label[b-z4n5oa43ze] {
    display: inline-flex;
    cursor: pointer;
}

.actions-image[b-z4n5oa43ze] {
    display: flex;
    align-items: center;
    gap: 4px;
}
/* /Components/Pages/Administration/Rapport.razor.rz.scp.css */
.page[b-egtt5mcq67] { padding: 20px 28px 40px; }

.intro[b-egtt5mcq67] { max-width: 760px; margin: 0 0 18px; line-height: 1.55; }

.avertissement[b-egtt5mcq67] {
    border-left: 2.5px solid var(--warning);
    background: var(--warning-soft);
    padding: 10px 14px;
    border-radius: 0 6px 6px 0;
    font-size: 13px;
    margin-bottom: 16px;
    max-width: 760px;
}

.carte-liste[b-egtt5mcq67] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    margin-bottom: 16px;
    overflow: hidden;
    max-width: 900px;
}

.entete-liste[b-egtt5mcq67] { padding: 12px 18px; border-bottom: 1px solid var(--border); }
.titre-liste[b-egtt5mcq67] { font-size: 13.5px; font-weight: 600; }
.soustitre-liste[b-egtt5mcq67] { font-size: 12px; color: var(--text-muted); margin-top: 2px; }

.corps-carte[b-egtt5mcq67] { padding: 16px 18px; display: flex; flex-direction: column; gap: 14px; }

.grille-champs[b-egtt5mcq67] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: 14px 18px;
}

.champ label[b-egtt5mcq67] { display: block; font-size: 12.5px; font-weight: 500; margin-bottom: 5px; }
.champ .texte-muet[b-egtt5mcq67] { font-size: 11.5px; margin-top: 4px; }
.champ textarea[b-egtt5mcq67] { width: 100%; font-family: inherit; font-size: 13.5px; resize: vertical; }

.champ-case label[b-egtt5mcq67] { display: flex; align-items: center; gap: 8px; font-weight: 400; }
.champ-case input[type="checkbox"][b-egtt5mcq67] { width: auto; }

/* --- Le logo ---------------------------------------------------------- */

.ligne-logo[b-egtt5mcq67] {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    padding: 12px 14px;
    background: var(--surface-2);
    border-radius: 6px;
}

/* Fond sombre : un logo blanc sur fond blanc serait invisible à l'aperçu, alors
   qu'il se posera sur le bandeau coloré de la couverture. */
.apercu-logo[b-egtt5mcq67] {
    min-width: 150px;
    min-height: 54px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 8px 12px;
    background: var(--accent);
    border-radius: 4px;
}

.apercu-logo img[b-egtt5mcq67] { max-height: 38px; max-width: 220px; width: auto; }
.apercu-logo .texte-muet[b-egtt5mcq67] { color: rgba(255, 255, 255, 0.82); font-size: 11.5px; text-align: center; }

.actions-logo[b-egtt5mcq67] { display: flex; flex-direction: column; gap: 6px; font-size: 12px; }
.actions-logo .texte-muet[b-egtt5mcq67] { font-size: 11.5px; }

.btn-lien-supprimer[b-egtt5mcq67] {
    background: none; border: none; padding: 0; cursor: pointer;
    color: var(--danger); font-size: 12px; font-weight: 600; text-align: left;
}

/* --- Les couleurs ------------------------------------------------------ */

.grille-couleurs[b-egtt5mcq67] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
    gap: 14px 20px;
}

.champ-couleur label[b-egtt5mcq67] { display: block; font-size: 12.5px; font-weight: 500; margin-bottom: 5px; }

.saisie-couleur[b-egtt5mcq67] { display: flex; align-items: center; gap: 8px; }

.saisie-couleur input[type="color"][b-egtt5mcq67] {
    width: 34px; height: 30px; padding: 2px;
    border: 1px solid var(--border); border-radius: 5px;
    background: var(--surface); cursor: pointer;
}

.saisie-couleur input[type="text"][b-egtt5mcq67] { flex: 1; min-width: 0; font-size: 12.5px; }

.barre-actions[b-egtt5mcq67] {
    display: flex; align-items: center; gap: 10px;
    max-width: 900px; margin-top: 4px;
}

.btn-xs[b-egtt5mcq67] { padding: 7px 13px; font-size: 12.5px; }

code[b-egtt5mcq67] {
    font-family: 'IBM Plex Mono', monospace;
    background: var(--surface-2);
    padding: 1px 4px;
    border-radius: 3px;
}

/* --- Aperçu sur un dossier réel ---------------------------------------------
   Une couleur d'alerte ne se juge pas sur un carré de démonstration : elle se juge
   sur la ligne d'un risque inacceptable, au milieu des autres. */

.ligne-apercu[b-egtt5mcq67] {
    display: flex;
    align-items: flex-end;
    gap: 12px;
    flex-wrap: wrap;
}

.ligne-apercu .champ[b-egtt5mcq67] { flex: 1; min-width: 220px; margin: 0; }

.visionneuse[b-egtt5mcq67] {
    width: 100%;
    height: 700px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--surface-2);
    margin-top: 12px;
}

.apercu-vide[b-egtt5mcq67] {
    border: 1px dashed var(--border);
    border-radius: 6px;
    padding: 28px 20px;
    text-align: center;
    margin-top: 12px;
}

.apercu-vide p[b-egtt5mcq67] { max-width: 420px; margin-inline: auto; line-height: 1.5; }

.sans-marge[b-egtt5mcq67] { margin: 0; }

/* La carte du graphe échappe au gabarit des autres.
   Les 900 pixels ci-dessus sont une bonne règle pour cet écran : un champ de saisie ou un
   paragraphe étiré sur toute la largeur d'un écran large devient illisible. Une toile est
   l'exact contraire — elle veut chaque pixel, et l'y enfermer laissait le tiers droit de
   l'écran vide pendant qu'on manquait de place pour relier deux nœuds. */
.carte-graphe[b-egtt5mcq67] { max-width: none; }
/* /Components/Pages/Dashboard.razor.rz.scp.css */
.page[b-sfxaf143w9] {
    padding: 28px;
}

.entete[b-sfxaf143w9] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 24px;
}

.entete h1[b-sfxaf143w9] {
    margin: 0;
    font-size: 20px;
    font-weight: 600;
}

.carte-formulaire[b-sfxaf143w9] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 20px;
    margin-bottom: 24px;
}

.ligne-champs[b-sfxaf143w9] {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
}

.champ[b-sfxaf143w9] { margin-bottom: 4px; }

.actions-formulaire[b-sfxaf143w9] {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    margin-top: 16px;
}

.alerte-erreur[b-sfxaf143w9] { margin-bottom: 16px; }

.texte-muet[b-sfxaf143w9] { color: var(--text-muted); font-size: 13px; }

.etat-vide[b-sfxaf143w9] {
    background: var(--surface);
    border: 1px dashed var(--border);
    border-radius: 8px;
    padding: 40px;
    text-align: center;
}

.etat-vide p:first-child[b-sfxaf143w9] {
    margin: 0 0 4px;
    font-weight: 500;
    color: var(--text);
}

.carte-table[b-sfxaf143w9] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

/* L'entête porte désormais les outils de la liste. En rangée qui se replie : sur
   un écran étroit, la recherche passe sous le titre plutôt que de l'écraser. */
.entete-table[b-sfxaf143w9] {
    padding: 16px 20px;
    border-bottom: 1px solid var(--border);
    font-size: 13.5px;
    font-weight: 600;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
}

.outils-liste[b-sfxaf143w9] {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.champ-recherche[b-sfxaf143w9] {
    font-size: 13px;
    font-weight: 400;
    padding: 6px 10px;
    min-width: 220px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--surface);
}

/* Trois boutons collés, un seul actif : la forme dit qu'ils s'excluent, là où
   trois cases à cocher laisseraient croire qu'on peut les combiner. */
.segments-appartenance[b-sfxaf143w9] {
    display: inline-flex;
    border: 1px solid var(--border);
    border-radius: 6px;
    overflow: hidden;
}

.segments-appartenance .segment[b-sfxaf143w9] {
    font-size: 12.5px;
    font-weight: 500;
    padding: 6px 11px;
    border: 0;
    background: var(--surface);
    color: var(--text-muted);
    cursor: pointer;
    white-space: nowrap;
}

.segments-appartenance .segment + .segment[b-sfxaf143w9] { border-left: 1px solid var(--border); }
.segments-appartenance .segment:hover[b-sfxaf143w9] { background: var(--surface-2); }

.segments-appartenance .segment.actif[b-sfxaf143w9] {
    background: var(--accent-soft, var(--surface-2));
    color: var(--text);
    font-weight: 600;
}

/* Le numéro par lequel le dossier se cite à l'extérieur, dans sa propre colonne.
   Chiffres tabulaires et pas de retour à la ligne : on y cherche en balayant
   verticalement, et des chiffres de largeurs inégales cassent ce balayage. */
.colonne-numero[b-sfxaf143w9] {
    width: 13%;
    font-variant-numeric: tabular-nums;
}

/* Un nom d'entreprise ne dit pas si c'est son employeur ou son client. */
.pastille-appartenance[b-sfxaf143w9] {
    display: inline-block;
    margin-left: 8px;
    padding: 1px 7px;
    border-radius: 10px;
    font-size: 10.5px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    white-space: nowrap;
}

.pastille-appartenance.sienne[b-sfxaf143w9] { color: var(--accent); background: var(--accent-soft, var(--surface-2)); }
.pastille-appartenance.integrateur[b-sfxaf143w9] { color: oklch(45% 0.11 265); background: oklch(95% 0.03 265); }

.etat-vide-filtre[b-sfxaf143w9] {
    padding: 36px 20px;
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
}

/* Largeurs figées, et non déduites du contenu.

   En disposition automatique, le navigateur répartit les colonnes selon ce qu'elles
   contiennent : filtrer la liste faisait disparaître la plus longue description, et toutes
   les colonnes se décalaient. On cherchait un dossier, et la table bougeait sous l'œil
   pendant qu'on tapait. Figées, elles tiennent quoi qu'il reste de lignes. */
table[b-sfxaf143w9] { border-collapse: collapse; width: 100%; table-layout: fixed; }

/* Cinq pourcentages qui font cent, et aucune largeur en pixels.

   Mélanger les deux réserve d'abord les pixels et laisse le reste aux pourcentages : sur une
   fenêtre étroite il ne restait rien, et la colonne « Description » tombait à zéro — mesuré.
   En parts du tout, chacune garde sa proportion quelle que soit la largeur.

   Le texte qui dépasse se replie plutôt que d'être coupé : une description tronquée en
   silence vaut moins qu'une ligne un peu plus haute. */
.colonne-projet[b-sfxaf143w9] { width: 26%; }
.colonne-emplacement[b-sfxaf143w9] { width: 22%; }
.colonne-description[b-sfxaf143w9] { width: 25%; }
.colonne-modification[b-sfxaf143w9] { width: 14%; }

td[b-sfxaf143w9] { overflow-wrap: anywhere; }

th[b-sfxaf143w9] {
    text-align: left;
    padding: 10px 20px;
    font-size: 11.5px;
    font-weight: 500;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    border-bottom: 1px solid var(--border);
}

td[b-sfxaf143w9] {
    padding: 14px 20px;
    font-size: 13.5px;
    border-bottom: 1px solid var(--border);
}

tr:last-child td[b-sfxaf143w9] { border-bottom: none; }

.nom-projet[b-sfxaf143w9] { font-weight: 500; }

.ligne-cliquable[b-sfxaf143w9] { cursor: pointer; }
.ligne-cliquable:hover[b-sfxaf143w9] { background: var(--surface-2); }

/* --- Rattachement à l'arborescence (module 12) ----------------------- */

.sous-titre-entreprise[b-sfxaf143w9] {
    margin: 2px 0 0;
    font-size: 13px;
}

.indice[b-sfxaf143w9] {
    margin: 6px 0 0;
    font-size: 12px;
    color: var(--text-muted);
    line-height: 1.5;
}

/* Un lien qui doit peser comme le bouton d'action de la page — l'état vide n'a
   rien d'autre à proposer. */
.lien-bouton[b-sfxaf143w9] {
    display: inline-flex;
    text-decoration: none;
    margin-top: 4px;
}

/* --- Pourquoi aucun dossier ne peut naître ---------------------------- */

/* Une ligne par entreprise atteignable, avec sa raison propre : cinq situations se
   cachaient derrière « votre arborescence est vide », dont trois ne parlaient pas de
   l'arborescence de l'appelant. */
.diagnostic-entreprises[b-sfxaf143w9] {
    display: inline-block;
    margin: 14px 0 4px;
    padding-left: 20px;
    text-align: left;
    font-size: 13px;
    color: var(--text-muted);
}

.diagnostic-entreprises li + li[b-sfxaf143w9] { margin-top: 4px; }

.diagnostic-entreprises strong[b-sfxaf143w9] { color: var(--text); }

/* Le champ « Entreprise » du formulaire : même gabarit que les autres, mais la liste
   n'a pas à occuper toute la largeur d'une colonne de saisie. */
.champ select[b-sfxaf143w9] {
    width: 100%;
}
/* /Components/Pages/Entreprise/Arborescence.razor.rz.scp.css */
.page[b-iqb7d69d53] {
    padding: 24px 28px 40px;
}

.alerte-erreur[b-iqb7d69d53] {
    margin-bottom: 16px;
}

.texte-muet[b-iqb7d69d53] {
    color: var(--text-muted);
    font-size: 13px;
}

/* --- Choix de l'entreprise (module 14) -------------------------------- */

/* Le sélecteur reprend l'idiome du portail de configuration : même place, même forme,
   pour que passer d'un client à l'autre s'apprenne une fois. */
.rangee-entreprises[b-iqb7d69d53] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 14px;
    margin-bottom: 16px;
}

.selecteur-entreprise[b-iqb7d69d53] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0;
}

.etiquette-selecteur[b-iqb7d69d53] {
    font-size: 11.5px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
    font-weight: 600;
    white-space: nowrap;
}

.selecteur-entreprise select[b-iqb7d69d53] {
    width: auto;
    min-width: 260px;
    max-width: 100%;
}

/* Chez un client, l'arbre est volontairement partiel. Le bandeau le dit, sinon un
   parc tronqué passe pour une arborescence mal saisie. */
.bandeau-integrateur[b-iqb7d69d53] {
    background: var(--accent-soft);
    border: 1px solid oklch(86% 0.04 200);
    border-radius: 10px;
    padding: 14px 16px;
    margin-bottom: 18px;
}

.titre-bandeau[b-iqb7d69d53] {
    margin: 0;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--accent-dark);
}

.titres-acces[b-iqb7d69d53] {
    margin: 8px 0 0;
    padding-left: 20px;
    font-size: 13px;
}

.titres-acces li + li[b-iqb7d69d53] { margin-top: 3px; }

/* --- Vue d'ensemble (maquette du module 15) --------------------------- */

.cartouches[b-iqb7d69d53] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 14px;
    margin-bottom: 22px;
}

.cartouche[b-iqb7d69d53] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 16px 18px;
}

.cartouche .valeur[b-iqb7d69d53] {
    font-size: 26px;
    font-weight: 600;
    line-height: 1.1;
}

.cartouche .etiquette[b-iqb7d69d53] {
    margin-top: 4px;
    font-size: 11.5px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
}

/* --- Arbre à gauche, contenu à droite --------------------------------- */

.colonnes-arbre[b-iqb7d69d53] {
    display: grid;
    grid-template-columns: minmax(200px, 260px) 1fr;
    gap: 22px;
    align-items: start;
}

/* Sur écran étroit — la tablette d'un relevé en usine — l'arbre passe au-dessus
   du contenu plutôt que de l'écraser à 200 px. */
@media (max-width: 860px) {
    .colonnes-arbre[b-iqb7d69d53] {
        grid-template-columns: 1fr;
    }
}

.panneau-arbre[b-iqb7d69d53] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 12px;
    position: sticky;
    top: 16px;
    /* Depuis que l'arbre descend jusqu'aux machines, un site bien rempli dépasserait
       l'écran et emporterait le `sticky` avec lui : il défile alors sur lui-même. */
    max-height: calc(100vh - 32px);
    overflow-y: auto;
}

.arbre-racine[b-iqb7d69d53] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    font-weight: 600;
    padding: 4px 8px 10px;
    color: var(--text);
}

.vide-arbre[b-iqb7d69d53] {
    padding: 0 8px 8px;
}

/* `::deep` sur tout ce qui touche aux nœuds : une partie de l'arbre est dessinée par des
   composants enfants — la machine par `NoeudMachine`, la corbeille par
   `BoutonSuppressionNoeud` — et le CSS à portée limitée ne marque que le balisage de
   cette page. Sans lui, ces éléments retombent sur le style global du `<button>` et
   l'arbre se lit comme une pile de pastilles grises au lieu d'une arborescence. */

/* La rangée tient le nœud et sa corbeille : un bouton ne peut pas en contenir un autre,
   et le survol doit allumer la ligne entière, corbeille comprise. */
.panneau-arbre[b-iqb7d69d53]  .rangee-noeud {
    display: flex;
    align-items: center;
    border-radius: 6px;
}

.panneau-arbre[b-iqb7d69d53]  .rangee-noeud:hover {
    background: var(--surface-2);
}

.panneau-arbre[b-iqb7d69d53]  .noeud-arbre {
    display: flex;
    align-items: center;
    gap: 6px;
    flex: 1;
    min-width: 0;
    text-align: left;
    background: none;
    border: 0;
    border-radius: 6px;
    padding: 7px 8px;
    font-size: 13px;
    color: var(--text-muted);
    cursor: pointer;
}

.panneau-arbre[b-iqb7d69d53]  .rangee-noeud:hover .noeud-arbre {
    color: var(--text);
}

.panneau-arbre[b-iqb7d69d53]  .noeud-arbre.niveau-2 {
    padding-left: 22px;
    font-size: 12.5px;
}

/* Les machines. Le retrait vient d'un style calculé, la profondeur de décomposition
   n'ayant pas de plafond utile — une classe par niveau se serait arrêtée au troisième.

   Elles portent un trait plus léger que les sites et les secteurs : sur un site bien
   rempli, les regroupements doivent ressortir de la liste des machines pour qu'on puisse
   parcourir le plan sans lire chaque ligne. La couleur, elle, est déjà celle de tous les
   nœuds — la reposer ici ne ferait que la répéter. */
.panneau-arbre[b-iqb7d69d53]  .noeud-machine {
    font-size: 12.5px;
    font-weight: 500;
}

/* Machine retirée du parc : présente, mais qui ne doit plus attirer l'œil. */
.panneau-arbre[b-iqb7d69d53]  .noeud-inactif { opacity: 0.55; }

/* Le libellé est la seule partie compressible du nœud : l'icône et l'étiquette
   « inactif » gardent leur place, un nom de site trop long se coupe. */
.panneau-arbre[b-iqb7d69d53]  .libelle-noeud {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* L'accent est posé sur la rangée et non sur le bouton : il s'arrêterait sinon avant la
   corbeille, et la ligne sélectionnée se lirait comme deux fonds différents. */
.panneau-arbre[b-iqb7d69d53]  .rangee-noeud:has(.noeud-arbre.actif) {
    background: var(--accent-soft);
}

.panneau-arbre[b-iqb7d69d53]  .noeud-arbre.actif {
    color: var(--accent-dark);
    font-weight: 600;
}

/* La corbeille : au repos elle ne pèse rien. Une par ligne, toutes visibles, feraient
   une colonne d'icônes là où on vient surtout lire le plan du parc. Elle reste dans le
   flux — masquée par l'opacité et non retirée — pour que la ligne ne bouge pas au
   survol, et pour rester atteignable au clavier. */
.panneau-arbre[b-iqb7d69d53]  .btn-noeud-supprimer {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    background: transparent;
    border: 0;
    border-radius: 5px;
    padding: 4px;
    margin-right: 4px;
    color: var(--text-faint);
    cursor: pointer;
    opacity: 0;
}

.panneau-arbre[b-iqb7d69d53]  .rangee-noeud:hover .btn-noeud-supprimer,
.panneau-arbre[b-iqb7d69d53]  .btn-noeud-supprimer:focus-visible {
    opacity: 1;
}

.panneau-arbre[b-iqb7d69d53]  .btn-noeud-supprimer:hover { color: var(--danger); }

/* Sans survol — la tablette d'un relevé en usine — la poignée serait introuvable. */
@media (hover: none) {
    .panneau-arbre[b-iqb7d69d53]  .btn-noeud-supprimer { opacity: 0.55; }
}

.ajout-arbre[b-iqb7d69d53] {
    margin-top: 10px;
    width: 100%;
    justify-content: center;
}

.panneau-contenu[b-iqb7d69d53] {
    min-width: 0;
}

/* --- Fil d'Ariane et sections ----------------------------------------- */

.fil-ariane[b-iqb7d69d53] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    font-size: 12.5px;
    color: var(--text-muted);
    margin-bottom: 10px;
}

.fil-ariane .courant[b-iqb7d69d53] {
    color: var(--text);
    font-weight: 600;
}

.entete-section[b-iqb7d69d53] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 14px;
}

.entete-section h2[b-iqb7d69d53] {
    font-size: 17px;
    font-weight: 600;
    margin: 0;
}

.actions-section[b-iqb7d69d53] {
    display: flex;
    gap: 8px;
}

/* --- Formulaires ------------------------------------------------------- */

.carte-formulaire[b-iqb7d69d53] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 18px 20px;
    margin-bottom: 18px;
}

.carte-formulaire h3[b-iqb7d69d53] {
    margin: 0 0 4px;
    font-size: 14.5px;
    font-weight: 600;
}

.ligne-champs[b-iqb7d69d53] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 14px;
    margin-top: 12px;
}

.champ label[b-iqb7d69d53] {
    display: block;
    font-size: 12.5px;
    font-weight: 500;
    margin-bottom: 5px;
}

.champ input[b-iqb7d69d53],
.champ select[b-iqb7d69d53] {
    width: 100%;
}

.indice[b-iqb7d69d53] {
    margin: 6px 0 0;
    font-size: 12px;
    color: var(--text-muted);
    line-height: 1.5;
}

.actions-formulaire[b-iqb7d69d53] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    margin-top: 16px;
}

/* --- Confirmation d'une suppression ------------------------------------ */

/* Le liseré suffit à changer la nature de la carte : même gabarit que les formulaires,
   mais on n'y crée pas, on y défait. */
.carte-suppression[b-iqb7d69d53] {
    border-color: oklch(80% 0.08 35);
}

.verdict-bloque[b-iqb7d69d53] {
    margin: 6px 0 0;
    font-size: 13px;
    font-weight: 600;
    color: oklch(38% 0.15 35);
}

/* L'inventaire de ce qui pend sous le nœud : des nombres, pas des phrases — c'est ce
   qu'on relit deux fois avant de confirmer. */
.dependances[b-iqb7d69d53] {
    margin: 6px 0 0;
    padding-left: 20px;
    font-size: 13px;
}

.dependances li + li[b-iqb7d69d53] { margin-top: 3px; }

.btn-supprimer[b-iqb7d69d53] {
    background: var(--danger);
    color: white;
}

.btn-supprimer:hover[b-iqb7d69d53] { background: oklch(47% 0.17 35); }
.btn-supprimer:disabled[b-iqb7d69d53] { opacity: 0.55; cursor: default; }

/* --- Tableau des équipements ------------------------------------------ */

.carte-liste[b-iqb7d69d53] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
    margin-bottom: 18px;
}

.entete-table[b-iqb7d69d53] {
    padding: 12px 16px;
    font-size: 13px;
    font-weight: 600;
    border-bottom: 1px solid var(--border);
}

.carte-liste table[b-iqb7d69d53] {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}

.carte-liste th[b-iqb7d69d53] {
    text-align: left;
    font-size: 11.5px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
    font-weight: 600;
    padding: 10px 12px;
    border-bottom: 1px solid var(--border);
}

.carte-liste td[b-iqb7d69d53] {
    padding: 10px 12px;
    border-bottom: 1px solid var(--border);
}

.carte-liste tr:last-child td[b-iqb7d69d53] {
    border-bottom: 0;
}

.ligne-cliquable[b-iqb7d69d53] {
    cursor: pointer;
}

.ligne-cliquable:hover[b-iqb7d69d53] {
    background: var(--surface-2);
}

.ligne-inactive[b-iqb7d69d53] {
    opacity: 0.55;
}

.colonne-actions[b-iqb7d69d53] {
    text-align: right;
    white-space: nowrap;
}

.colonne-actions .btn-xs + .btn-xs[b-iqb7d69d53] { margin-left: 6px; }

.cellule-equipement[b-iqb7d69d53] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}

.lien-equipement[b-iqb7d69d53] {
    color: var(--text);
    text-decoration: none;
    font-weight: 500;
}

.lien-equipement:hover[b-iqb7d69d53] { color: var(--accent); text-decoration: underline; }

.etiquette-inactif[b-iqb7d69d53] {
    display: inline-block;
    margin-left: 6px;
    padding: 1px 6px;
    border-radius: 999px;
    background: var(--surface-2);
    color: var(--text-faint);
    font-size: 10.5px;
    letter-spacing: 0.03em;
    text-transform: uppercase;
}

.etat-vide[b-iqb7d69d53] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 34px 28px;
    text-align: center;
}

/* --- Réordonnancement des machines par glisser-déposer (module 12) --------- */

/* La poignée reste discrète tant que la rangée n'est pas survolée : l'arbre est un outil
   de navigation avant d'être un outil d'édition, et six points par ligne le rendraient
   illisible au repos. */
.panneau-arbre[b-iqb7d69d53]  .poignee-glissement {
    display: flex;
    align-items: center;
    padding: 0 2px 0 4px;
    color: var(--text-faint);
    opacity: 0;
    cursor: grab;
    transition: opacity .12s;
}

.panneau-arbre[b-iqb7d69d53]  .rangee-noeud:hover .poignee-glissement {
    opacity: 1;
}

.panneau-arbre[b-iqb7d69d53]  .rangee-noeud.en-glissement {
    opacity: .4;
}

/* Un trait au-dessus plutôt qu'un fond coloré : il dit *où* la machine tombera, ce qu'un
   surlignage de la cible ne dit pas — devant elle, ou derrière ? */
.panneau-arbre[b-iqb7d69d53]  .rangee-noeud.cible-depot {
    box-shadow: inset 0 2px 0 0 var(--accent);
}
/* /Components/Pages/Entreprise/EntrepriseEntete.razor.rz.scp.css */
/* Même grammaire visuelle que les autres portails, pour qu'on sache toujours qu'on est
   dans un en-tête de section et non dans le contenu. La sous-navigation est désormais
   définie une seule fois dans `app.css` : la recopier ici est précisément ce qui l'avait
   fait diverger. */

.entete-entreprise[b-71cdhuxxos] {
    padding: 24px 28px 0;
    border-bottom: 1px solid var(--border);
    background: var(--surface);
}

.titre-entreprise[b-71cdhuxxos] {
    font-size: 20px;
    font-weight: 600;
}

.soustitre-entreprise[b-71cdhuxxos] {
    font-size: 12.5px;
    color: var(--text-muted);
    margin-top: 4px;
    margin-bottom: 16px;
}

/* /Components/Pages/Entreprise/FicheEquipement.razor.rz.scp.css */
.page[b-6w6d0mbn87] {
    padding: 24px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 18px;
}

.texte-muet[b-6w6d0mbn87] { color: var(--text-muted); font-size: 13px; }

.alerte-erreur[b-6w6d0mbn87] { margin: 0; }

/* --- En-tête ---------------------------------------------------------- */

.entete-fiche[b-6w6d0mbn87] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 18px 22px;
}

.fil-ariane[b-6w6d0mbn87] {
    display: flex;
    align-items: center;
    gap: 7px;
    font-size: 12.5px;
    color: var(--text-muted);
    margin-bottom: 8px;
    flex-wrap: wrap;
}

.fil-ariane a[b-6w6d0mbn87] { color: var(--text-muted); text-decoration: none; }
.fil-ariane a:hover[b-6w6d0mbn87] { color: var(--accent); }
.fil-ariane .courant[b-6w6d0mbn87] { color: var(--text); font-weight: 500; }

.titre-fiche[b-6w6d0mbn87] {
    display: flex;
    align-items: center;
    gap: 9px;
    color: var(--text);
}

.titre-fiche h1[b-6w6d0mbn87] {
    margin: 0;
    font-size: 19px;
    font-weight: 600;
}

/* Discret au repos : le titre est une adresse, pas une barre d'outils. Le crayon
   ne se colore qu'au survol, comme le renommage d'un dossier d'analyse. */
.btn-renommer[b-6w6d0mbn87] {
    background: transparent;
    border: none;
    padding: 2px 4px;
    margin-left: 2px;
    color: var(--text-faint);
    line-height: 0;
    cursor: pointer;
    border-radius: 4px;
}

.btn-renommer:hover[b-6w6d0mbn87] { color: var(--accent); background: var(--surface-2); }

.carte-identite[b-6w6d0mbn87] {
    display: flex;
    flex-direction: column;
    gap: 4px;
    margin-top: 14px;
    padding: 14px 16px;
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 8px;
}

.carte-identite .ligne-champs[b-6w6d0mbn87] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 14px;
    margin-top: 8px;
}

.carte-identite select:disabled[b-6w6d0mbn87] {
    background: var(--surface);
    color: var(--text-muted);
    cursor: not-allowed;
}

.indice[b-6w6d0mbn87] {
    margin: 6px 0 0;
    font-size: 12px;
    color: var(--text-muted);
    line-height: 1.5;
}

.identite-machine[b-6w6d0mbn87] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 22px;
    margin-top: 10px;
    font-size: 13px;
}

.etiquette-champ[b-6w6d0mbn87] {
    color: var(--text-muted);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    margin-right: 6px;
}

.etiquette-inactif[b-6w6d0mbn87] {
    padding: 1px 7px;
    border-radius: 999px;
    background: var(--surface-2);
    color: var(--text-faint);
    font-size: 10.5px;
    letter-spacing: 0.03em;
    text-transform: uppercase;
}

.note-lecture[b-6w6d0mbn87] {
    margin: 12px 0 0;
    font-size: 12.5px;
    color: var(--text-muted);
    border-left: 2px solid var(--border);
    padding-left: 10px;
}

/* --- Sections --------------------------------------------------------- */

.carte-section[b-6w6d0mbn87] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
}

.entete-section[b-6w6d0mbn87] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
    padding: 15px 20px;
    border-bottom: 1px solid var(--border);
}

.titre-section[b-6w6d0mbn87] { font-size: 14px; font-weight: 600; }

.soustitre-section[b-6w6d0mbn87] {
    margin-top: 3px;
    font-size: 12.5px;
    color: var(--text-muted);
}

.sous-entete[b-6w6d0mbn87] {
    padding: 10px 20px 6px;
    font-size: 11.5px;
    font-weight: 600;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.ligne-vide[b-6w6d0mbn87] {
    padding: 22px 20px;
    font-size: 13px;
    color: var(--text-muted);
}

/* --- Formulaires ------------------------------------------------------ */

.formulaire-inline[b-6w6d0mbn87] {
    padding: 16px 20px;
    border-bottom: 1px solid var(--border);
    background: var(--surface-2);
}

.grille-3[b-6w6d0mbn87] {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
}

.champ-large[b-6w6d0mbn87] { grid-column: span 2; }
.champ[b-6w6d0mbn87] { margin-bottom: 4px; }
.champ-case[b-6w6d0mbn87] { margin-top: 12px; }

.etiquette-case[b-6w6d0mbn87] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    font-weight: 400;
    color: var(--text);
    cursor: pointer;
}

.etiquette-case input[b-6w6d0mbn87] { width: auto; }

.etiquette-case-compacte[b-6w6d0mbn87] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    color: var(--text-muted);
    cursor: pointer;
    white-space: nowrap;
}

.etiquette-case-compacte input[b-6w6d0mbn87] { width: auto; }

.actions-formulaire[b-6w6d0mbn87] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    margin-top: 12px;
}

/* --- Tableaux --------------------------------------------------------- */

table[b-6w6d0mbn87] { border-collapse: collapse; width: 100%; }

th[b-6w6d0mbn87] {
    text-align: left;
    padding: 9px 20px;
    font-size: 11px;
    font-weight: 500;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    border-bottom: 1px solid var(--border);
}

td[b-6w6d0mbn87] {
    padding: 11px 20px;
    font-size: 13.5px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
}

tr:last-child td[b-6w6d0mbn87] { border-bottom: none; }

.cellule-forte[b-6w6d0mbn87] { font-weight: 500; }

td select[b-6w6d0mbn87], td input[type="text"][b-6w6d0mbn87] {
    padding: 6px 8px;
    font-size: 13px;
}

.ligne-cliquable[b-6w6d0mbn87] { cursor: pointer; }
.ligne-cliquable:hover td[b-6w6d0mbn87] { background: var(--surface-2); }

/* Le td doit rester une cellule de tableau : en display:flex, sa bordure basse se peint
   sur la hauteur de son contenu et le trait de séparation se casse à cette colonne. La
   disposition des boutons vit donc sur un conteneur interne. */
.colonne-actions[b-6w6d0mbn87] {
    width: 1%;
    white-space: nowrap;
}

.colonne-actions .actions-cellule[b-6w6d0mbn87] {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 6px;
}

.colonne-trombone[b-6w6d0mbn87] {
    width: 44px;
    text-align: center;
}

/* Le panneau se déplie sous la ligne concernée plutôt que dans sa cellule : une pièce
   jointe et sa vignette ne tiennent pas dans la hauteur d'une ligne. */
.ligne-documents td[b-6w6d0mbn87] {
    background: var(--surface-2);
    padding: 12px 20px;
}

/* --- Liste à puces (contraintes) -------------------------------------- */

.liste-puces[b-6w6d0mbn87] {
    list-style: none;
    margin: 0;
    padding: 6px 20px 14px;
}

.liste-puces li[b-6w6d0mbn87] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
    padding: 10px 0;
    border-bottom: 1px solid var(--border);
    font-size: 13px;
    line-height: 1.5;
}

.liste-puces li:last-child[b-6w6d0mbn87] { border-bottom: none; }

.liste-puces li .actions-ligne[b-6w6d0mbn87] {
    display: flex;
    align-items: center;
    gap: 4px;
    flex-shrink: 0;
}

.champ-edition[b-6w6d0mbn87] {
    flex: 1;
    padding: 6px 8px;
    font-size: 13px;
}

/* --- Marqueurs -------------------------------------------------------- */

.tag[b-6w6d0mbn87] {
    font-size: 11.5px;
    padding: 3px 9px;
    border-radius: 100px;
    background: var(--accent-soft);
    color: var(--accent);
}

/* Ce qui vient d'une machine mère se lit ici mais se corrige là-bas. L'étiquette est un
   lien : le geste attendu après avoir lu « héritée de X » est d'aller voir X. */
.etiquette-heritee[b-6w6d0mbn87] {
    display: inline-block;
    margin-left: 8px;
    padding: 1px 7px;
    border-radius: 999px;
    background: var(--surface-2);
    color: var(--text-faint);
    font-size: 10.5px;
    font-weight: 400;
    letter-spacing: 0.02em;
    text-decoration: none;
    flex-shrink: 0;
}

.etiquette-heritee:hover[b-6w6d0mbn87] { color: var(--accent); }

.badge[b-6w6d0mbn87] {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 100px;
    font-size: 11.5px;
    font-weight: 500;
}

.badge-bleu[b-6w6d0mbn87] { background: oklch(93% 0.02 200); color: oklch(40% 0.08 200); }
.badge-violet[b-6w6d0mbn87] { background: oklch(93% 0.03 280); color: oklch(45% 0.1 280); }
.badge-vert[b-6w6d0mbn87] { background: oklch(93% 0.03 145); color: oklch(42% 0.1 145); }
.badge-orange[b-6w6d0mbn87] { background: oklch(93% 0.06 35); color: oklch(45% 0.14 35); }
.badge-rouge[b-6w6d0mbn87] { background: oklch(93% 0.07 25); color: oklch(45% 0.16 25); }
.badge-neutre[b-6w6d0mbn87] { background: oklch(93% 0.006 90); color: var(--text-muted); }

.motif-non-conforme[b-6w6d0mbn87] {
    margin: 6px 0 0;
    font-size: 12.5px;
    font-weight: 400;
    color: oklch(38% 0.15 35);
    line-height: 1.45;
}

.avertissement-residuel[b-6w6d0mbn87] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 12.5px;
    font-weight: 500;
    color: oklch(45% 0.14 75);
}

.btn-lien-supprimer[b-6w6d0mbn87], .btn-lien-modifier[b-6w6d0mbn87] {
    background: transparent;
    border: none;
    color: var(--text-faint);
    padding: 4px;
    cursor: pointer;
    display: inline-flex;
    flex-shrink: 0;
}

.btn-lien-supprimer:hover[b-6w6d0mbn87] { color: var(--danger); }
.btn-lien-modifier:hover[b-6w6d0mbn87] { color: var(--accent); }

.btn-lien-annuler[b-6w6d0mbn87] {
    background: transparent;
    border: none;
    color: var(--text-muted);
    font-size: 12px;
    font-family: inherit;
    padding: 5px 4px;
    cursor: pointer;
    flex-shrink: 0;
}

.btn-lien-annuler:hover[b-6w6d0mbn87] { color: var(--text); }

.btn-xs[b-6w6d0mbn87] { padding: 5px 10px; font-size: 12px; flex-shrink: 0; }
.btn-sm[b-6w6d0mbn87] { padding: 6px 12px; font-size: 12.5px; }

.champ-photos[b-6w6d0mbn87] { margin-top: 14px; }

.libelle-photos[b-6w6d0mbn87] {
    display: block;
    font-size: 12px;
    font-weight: 500;
    color: var(--text-muted);
    margin-bottom: 6px;
}

.bouton-fichier[b-6w6d0mbn87] {
    display: inline-flex;
    align-items: center;
    font-size: 12.5px;
    font-weight: 600;
    padding: 7px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--surface);
    color: var(--text);
    cursor: pointer;
    margin: 0;
    position: relative;
    overflow: hidden;
}

.bouton-fichier:hover[b-6w6d0mbn87] { background: var(--surface-2); }
.bouton-fichier.desactive[b-6w6d0mbn87] { color: var(--text-faint); cursor: progress; }

.bouton-fichier[b-6w6d0mbn87]  input[type="file"] {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
    font-size: 0;
}

.liste-photos-attente[b-6w6d0mbn87] {
    list-style: none;
    margin: 8px 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.liste-photos-attente li[b-6w6d0mbn87] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 12.5px;
}

.nom-photo-attente[b-6w6d0mbn87] {
    max-width: 280px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--text);
}

.etat-vide[b-6w6d0mbn87] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 34px 28px;
    text-align: center;
}
/* /Components/Pages/Entreprise/FormulaireArretUrgence.razor.rz.scp.css */
.grille-3[b-5xvpvth0g9] {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
}

.champ-large[b-5xvpvth0g9] { grid-column: span 2; }
.champ[b-5xvpvth0g9] { margin-bottom: 12px; }

.jugement-implementation[b-5xvpvth0g9] { margin-top: 8px; }

.libelle-jugement[b-5xvpvth0g9] {
    display: block;
    font-size: 12px;
    font-weight: 500;
    color: var(--text-muted);
    margin-bottom: 6px;
}

.choix-evaluation[b-5xvpvth0g9] {
    display: flex;
    gap: 8px;
}

.choix[b-5xvpvth0g9] {
    flex: 1;
    padding: 9px 10px;
    border-radius: 6px;
    border: 1.5px solid var(--border);
    background: var(--surface);
    color: var(--text-muted);
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    font-family: inherit;
}

.choix-neutre-actif[b-5xvpvth0g9] {
    border-color: var(--text-muted);
    background: var(--surface-2);
    color: var(--text);
    font-weight: 600;
}

.choix-oui-actif[b-5xvpvth0g9] {
    border-color: var(--success);
    background: var(--success-soft);
    color: oklch(35% 0.11 150);
    font-weight: 600;
}

.choix-non-actif[b-5xvpvth0g9] {
    border-color: var(--danger);
    background: var(--danger-soft);
    color: oklch(38% 0.15 35);
    font-weight: 600;
}

textarea[b-5xvpvth0g9] {
    min-height: 72px;
    resize: vertical;
}
/* /Components/Pages/Entreprise/IconeArborescence.razor.rz.scp.css */
/* Les nœuds de l'arbre et les cellules du tableau sont des conteneurs flex : sans cela,
   un nom de site long comprimerait l'icône jusqu'à la déformer. */
svg[b-kqom5rhski] {
    flex-shrink: 0;
}
/* /Components/Pages/Entreprise/Integrateurs.razor.rz.scp.css */
/* Reprend les cartes et tableaux des écrans d'administration : trois onglets du même
   portail doivent se ressembler. Le CSS scopé de Blazor étant par composant, ces règles
   sont volontairement dupliquées entre les onglets plutôt que jetées dans app.css, où
   elles s'appliqueraient à toute l'application. */

.page[b-c485i6qvtu] { padding: 24px 28px 40px; }

.intro[b-c485i6qvtu] { max-width: 780px; margin: 0 0 20px; line-height: 1.6; }

.texte-muet[b-c485i6qvtu] { color: var(--text-muted); font-size: 13px; }

.alerte-erreur[b-c485i6qvtu] { margin-bottom: 16px; }

.sous-ligne[b-c485i6qvtu] { font-size: 12px; margin-top: 2px; }

.carte-liste[b-c485i6qvtu] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
    margin-bottom: 18px;
}

.entete-table[b-c485i6qvtu] {
    padding: 12px 16px;
    font-size: 13px;
    font-weight: 600;
    border-bottom: 1px solid var(--border);
}

.carte-liste table[b-c485i6qvtu] { width: 100%; border-collapse: collapse; font-size: 13px; }

.carte-liste th[b-c485i6qvtu] {
    text-align: left;
    font-size: 11.5px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
    font-weight: 600;
    padding: 10px 12px;
    border-bottom: 1px solid var(--border);
}

.carte-liste td[b-c485i6qvtu] { padding: 10px 12px; border-bottom: 1px solid var(--border); vertical-align: top; }
.carte-liste tr:last-child td[b-c485i6qvtu] { border-bottom: 0; }

.ligne-inactive[b-c485i6qvtu] { opacity: 0.55; }

.colonne-actions[b-c485i6qvtu] { text-align: right; white-space: nowrap; }

.carte-formulaire[b-c485i6qvtu] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 18px 20px;
    margin-bottom: 18px;
}

.carte-formulaire h3[b-c485i6qvtu] { margin: 0 0 4px; font-size: 14.5px; font-weight: 600; }

.ligne-champs[b-c485i6qvtu] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 14px;
    margin-top: 12px;
}

.champ label[b-c485i6qvtu] { display: block; font-size: 12.5px; font-weight: 500; margin-bottom: 5px; }
.champ input[b-c485i6qvtu], .champ select[b-c485i6qvtu] { width: 100%; }

.indice[b-c485i6qvtu] { margin: 6px 0 0; font-size: 12px; color: var(--text-muted); line-height: 1.5; }

.actions-formulaire[b-c485i6qvtu] { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; }

.mono[b-c485i6qvtu] { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; }

/* Assignation des sites : une colonne de cases, lisible même à cinq ou six usines. */
.cases-sites[b-c485i6qvtu] { display: flex; flex-direction: column; gap: 4px; }

.case-site[b-c485i6qvtu] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 12.5px;
    color: var(--text-muted);
    white-space: nowrap;
}

.pastille[b-c485i6qvtu] {
    display: inline-block;
    margin-left: 6px;
    padding: 1px 6px;
    border-radius: 999px;
    background: var(--accent-soft);
    color: var(--accent-dark);
    font-size: 10.5px;
    font-weight: 600;
}

/* Droit de configuration des bibliothèques (module 15) : une case sur toute la largeur,
   sous les champs de portée — c'est une décision à part, pas une variante du niveau. */
.champ-large[b-c485i6qvtu] { grid-column: 1 / -1; }

/* `.champ label` l'emporterait sur une classe seule : il faut la même spécificité
   pour reprendre le `display: block` et la marge qu'il impose aux étiquettes. */
.champ label.case-a-cocher[b-c485i6qvtu] {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 0;
    cursor: pointer;
}

.champ label.case-a-cocher input[type="checkbox"][b-c485i6qvtu] {
    width: auto;
    margin: 0;
    flex: none;
}
/* /Components/Pages/Entreprise/JournalAcces.razor.rz.scp.css */
/* Reprend les cartes et tableaux des écrans d'administration : trois onglets du même
   portail doivent se ressembler. Le CSS scopé de Blazor étant par composant, ces règles
   sont volontairement dupliquées entre les onglets plutôt que jetées dans app.css, où
   elles s'appliqueraient à toute l'application. */

.page[b-f2drheyfjg] { padding: 24px 28px 40px; }

.intro[b-f2drheyfjg] { max-width: 780px; margin: 0 0 20px; line-height: 1.6; }

.texte-muet[b-f2drheyfjg] { color: var(--text-muted); font-size: 13px; }

.alerte-erreur[b-f2drheyfjg] { margin-bottom: 16px; }

.sous-ligne[b-f2drheyfjg] { font-size: 12px; margin-top: 2px; }

.carte-liste[b-f2drheyfjg] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
    margin-bottom: 18px;
}

.entete-table[b-f2drheyfjg] {
    padding: 12px 16px;
    font-size: 13px;
    font-weight: 600;
    border-bottom: 1px solid var(--border);
}

.carte-liste table[b-f2drheyfjg] { width: 100%; border-collapse: collapse; font-size: 13px; }

.carte-liste th[b-f2drheyfjg] {
    text-align: left;
    font-size: 11.5px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
    font-weight: 600;
    padding: 10px 12px;
    border-bottom: 1px solid var(--border);
}

.carte-liste td[b-f2drheyfjg] { padding: 10px 12px; border-bottom: 1px solid var(--border); vertical-align: top; }
.carte-liste tr:last-child td[b-f2drheyfjg] { border-bottom: 0; }

.ligne-inactive[b-f2drheyfjg] { opacity: 0.55; }

.colonne-actions[b-f2drheyfjg] { text-align: right; white-space: nowrap; }

.carte-formulaire[b-f2drheyfjg] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 18px 20px;
    margin-bottom: 18px;
}

.carte-formulaire h3[b-f2drheyfjg] { margin: 0 0 4px; font-size: 14.5px; font-weight: 600; }

.ligne-champs[b-f2drheyfjg] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 14px;
    margin-top: 12px;
}

.champ label[b-f2drheyfjg] { display: block; font-size: 12.5px; font-weight: 500; margin-bottom: 5px; }
.champ input[b-f2drheyfjg], .champ select[b-f2drheyfjg] { width: 100%; }

.indice[b-f2drheyfjg] { margin: 6px 0 0; font-size: 12px; color: var(--text-muted); line-height: 1.5; }

.actions-formulaire[b-f2drheyfjg] { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; }

.mono[b-f2drheyfjg] { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; }

/* Assignation des sites : une colonne de cases, lisible même à cinq ou six usines. */
.cases-sites[b-f2drheyfjg] { display: flex; flex-direction: column; gap: 4px; }

.case-site[b-f2drheyfjg] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 12.5px;
    color: var(--text-muted);
    white-space: nowrap;
}

.pastille[b-f2drheyfjg] {
    display: inline-block;
    margin-left: 6px;
    padding: 1px 6px;
    border-radius: 999px;
    background: var(--accent-soft);
    color: var(--accent-dark);
    font-size: 10.5px;
    font-weight: 600;
}
/* /Components/Pages/Entreprise/MembresEntreprise.razor.rz.scp.css */
/* Reprend les cartes et tableaux des écrans d'administration : trois onglets du même
   portail doivent se ressembler. Le CSS scopé de Blazor étant par composant, ces règles
   sont volontairement dupliquées entre les onglets plutôt que jetées dans app.css, où
   elles s'appliqueraient à toute l'application. */

.page[b-3gm1ycq3i7] { padding: 24px 28px 40px; }

.intro[b-3gm1ycq3i7] { max-width: 780px; margin: 0 0 20px; line-height: 1.6; }

.texte-muet[b-3gm1ycq3i7] { color: var(--text-muted); font-size: 13px; }

.alerte-erreur[b-3gm1ycq3i7] { margin-bottom: 16px; }

.sous-ligne[b-3gm1ycq3i7] { font-size: 12px; margin-top: 2px; }

.carte-liste[b-3gm1ycq3i7] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    overflow: hidden;
    margin-bottom: 18px;
}

.entete-table[b-3gm1ycq3i7] {
    padding: 12px 16px;
    font-size: 13px;
    font-weight: 600;
    border-bottom: 1px solid var(--border);
}

.carte-liste table[b-3gm1ycq3i7] { width: 100%; border-collapse: collapse; font-size: 13px; }

.carte-liste th[b-3gm1ycq3i7] {
    text-align: left;
    font-size: 11.5px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
    font-weight: 600;
    padding: 10px 12px;
    border-bottom: 1px solid var(--border);
}

.carte-liste td[b-3gm1ycq3i7] { padding: 10px 12px; border-bottom: 1px solid var(--border); vertical-align: top; }
.carte-liste tr:last-child td[b-3gm1ycq3i7] { border-bottom: 0; }

.ligne-inactive[b-3gm1ycq3i7] { opacity: 0.55; }

.colonne-actions[b-3gm1ycq3i7] { text-align: right; white-space: nowrap; }

.carte-formulaire[b-3gm1ycq3i7] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 18px 20px;
    margin-bottom: 18px;
}

.carte-formulaire h3[b-3gm1ycq3i7] { margin: 0 0 4px; font-size: 14.5px; font-weight: 600; }

.ligne-champs[b-3gm1ycq3i7] {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 14px;
    margin-top: 12px;
}

.champ label[b-3gm1ycq3i7] { display: block; font-size: 12.5px; font-weight: 500; margin-bottom: 5px; }
.champ input[b-3gm1ycq3i7], .champ select[b-3gm1ycq3i7] { width: 100%; }

.indice[b-3gm1ycq3i7] { margin: 6px 0 0; font-size: 12px; color: var(--text-muted); line-height: 1.5; }

.actions-formulaire[b-3gm1ycq3i7] { display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px; }

.mono[b-3gm1ycq3i7] { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; }

/* Assignation des sites : une colonne de cases, lisible même à cinq ou six usines. */
.cases-sites[b-3gm1ycq3i7] { display: flex; flex-direction: column; gap: 4px; }

.case-site[b-3gm1ycq3i7] {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 12.5px;
    color: var(--text-muted);
    white-space: nowrap;
}

.pastille[b-3gm1ycq3i7] {
    display: inline-block;
    margin-left: 6px;
    padding: 1px 6px;
    border-radius: 999px;
    background: var(--accent-soft);
    color: var(--accent-dark);
    font-size: 10.5px;
    font-weight: 600;
}

/* --- Création d'un compte sur place --------------------------------------- */

/* Encadrée d'un liseré : c'est la seule porte par laquelle une adresse entre sans avoir
   été prouvée, et l'écran doit le dire avant qu'on clique, pas après. */
.carte-sur-place[b-3gm1ycq3i7] {
    border-left: 3px solid var(--accent);
}

.entete-sur-place[b-3gm1ycq3i7] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.entete-sur-place h3[b-3gm1ycq3i7] {
    margin: 0;
}

/* Les deux moments du geste se distinguent à l'œil : ce que l'administrateur décide, puis
   ce que la personne saisit une fois le clavier passé. Sans cette césure, on remplirait
   tout soi-même sans y penser — et le mot de passe est justement ce qu'il ne faut pas
   remplir à sa place. */
.bloc-sur-place[b-3gm1ycq3i7] {
    margin-top: 14px;
    padding: 12px 14px;
    background: var(--surface-2);
    border-radius: 8px;
}

.bloc-sur-place .titre-bloc[b-3gm1ycq3i7] {
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--text-muted);
    margin-bottom: 10px;
}

.bloc-personne[b-3gm1ycq3i7] {
    border: 1px dashed var(--border);
    background: none;
}

/* Un élément de grille refuse par défaut de descendre sous sa largeur minimale, et
   celle-ci est dictée par la plus longue option du sélecteur de rôle et par des libellés
   de site en « nowrap ». Sans ce min-width, la colonne de droite pousse le panneau
   au-delà de la page et fait apparaître une barre de défilement horizontale. */
.bloc-sur-place .champ[b-3gm1ycq3i7] {
    min-width: 0;
}

/* Les sites en ligne plutôt qu'en colonne : une entreprise en a rarement plus de trois ou
   quatre, et empilés ils allongeaient le bloc pour rien. Ils occupent leur propre ligne,
   donc la largeur ne manque plus. */
.bloc-sur-place .champ-sites[b-3gm1ycq3i7] {
    margin-top: 12px;
}

.bloc-sur-place .cases-sites[b-3gm1ycq3i7] {
    flex-flow: row wrap;
    gap: 6px 18px;
}

.sans-marge[b-3gm1ycq3i7] {
    margin: 6px 0 0;
}

/* Même définition que dans PartageProjet et MatriceRisque : la classe n'est pas dans
   app.css, chaque écran qui confirme un geste la redéclare. */
.alerte-succes[b-3gm1ycq3i7] {
    margin: 0 0 14px;
    padding: 12px 14px;
    border-radius: 6px;
    background: var(--success-soft);
    border: 1px solid oklch(80% 0.07 150);
    color: oklch(35% 0.12 150);
    font-size: 13px;
}
/* /Components/Pages/MaBibliotheque/FonctionsSecurite.razor.rz.scp.css */
/* Reprend le tableau des écrans d'administration : c'est la même matière, elle doit se
   lire de la même façon. Le CSS scopé de Blazor étant par composant, ces règles sont
   volontairement dupliquées plutôt que jetées dans app.css, où elles s'appliqueraient à
   toute l'application. */

.page[b-bj7itdbrwt] {
    padding: 24px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.texte-muet[b-bj7itdbrwt] { color: var(--text-muted); font-size: 13px; }
.texte-faible[b-bj7itdbrwt] { color: var(--text-faint); font-size: 13px; }
.intro[b-bj7itdbrwt] { margin: 0; max-width: 780px; line-height: 1.6; }
.note[b-bj7itdbrwt] { margin: 0; max-width: 780px; line-height: 1.6; }
.alerte-erreur[b-bj7itdbrwt] { margin: 0; }
.sans-marge[b-bj7itdbrwt] { margin: 0; }

.carte-liste[b-bj7itdbrwt] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

table[b-bj7itdbrwt] { border-collapse: collapse; width: 100%; }

th[b-bj7itdbrwt] {
    text-align: left;
    padding: 9px 20px;
    font-size: 11px;
    font-weight: 500;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    border-bottom: 1px solid var(--border);
}

td[b-bj7itdbrwt] {
    padding: 8px 20px;
    font-size: 13px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
}

tr.ligne-inactive[b-bj7itdbrwt] { opacity: 0.5; }

.cellule-vide[b-bj7itdbrwt] { padding: 18px 20px; line-height: 1.6; }

td input[type="text"][b-bj7itdbrwt] { padding: 6px 8px; font-size: 13px; width: 100%; }

.colonne-case[b-bj7itdbrwt] { width: 60px; text-align: center; }
.colonne-case input[b-bj7itdbrwt] { width: auto; }

.code-sf[b-bj7itdbrwt] { font-size: 12px; font-weight: 600; color: var(--text-muted); }

/* Le td doit rester une cellule de tableau : en display:flex il sort de la mise en page
   du tableau et le trait de séparation se casse à cette colonne. */
.colonne-actions[b-bj7itdbrwt] { width: 190px; white-space: nowrap; }
.colonne-actions .actions-cellule[b-bj7itdbrwt] { display: flex; align-items: center; gap: 8px; }

.btn-xs[b-bj7itdbrwt] { padding: 5px 10px; font-size: 12px; }

.btn-lien-supprimer[b-bj7itdbrwt], .btn-lien-publier[b-bj7itdbrwt] {
    background: transparent;
    border: none;
    color: var(--text-faint);
    padding: 4px;
    cursor: pointer;
    display: inline-flex;
}

.btn-lien-publier:hover[b-bj7itdbrwt] { color: var(--accent); }
.btn-lien-supprimer:hover[b-bj7itdbrwt] { color: var(--danger); }

.btn-lien-annuler[b-bj7itdbrwt] {
    background: transparent;
    border: none;
    color: var(--text-muted);
    font-size: 12.5px;
    cursor: pointer;
    padding: 5px 4px;
}

.btn-lien-annuler:hover[b-bj7itdbrwt] { color: var(--text); text-decoration: underline; }

/* --- Où la fonction est déjà publiée ---------------------------------------- */

.colonne-publications[b-bj7itdbrwt] { max-width: 260px; }

.pastille-publication[b-bj7itdbrwt] {
    display: inline-block;
    margin: 1px 4px 1px 0;
    padding: 1px 7px;
    border-radius: 999px;
    background: var(--accent-soft);
    color: var(--accent-dark);
    font-size: 11px;
    font-weight: 500;
}

/* --- Encart de publication --------------------------------------------------- */

.rangee-publication td[b-bj7itdbrwt] { background: var(--surface-2); }

.encart-publication[b-bj7itdbrwt] { display: flex; flex-direction: column; gap: 10px; padding: 4px 0; }

.titre-encart[b-bj7itdbrwt] { font-size: 13px; font-weight: 600; }

.ligne-encart[b-bj7itdbrwt] {
    display: flex;
    align-items: flex-end;
    gap: 12px;
    flex-wrap: wrap;
}

.ligne-encart label[b-bj7itdbrwt] { display: flex; flex-direction: column; gap: 4px; }

.etiquette[b-bj7itdbrwt] {
    font-size: 11.5px;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    color: var(--text-muted);
}

.ligne-encart select[b-bj7itdbrwt] { min-width: 240px; padding: 6px 9px; font-size: 13px; }
.ligne-encart .champ-code[b-bj7itdbrwt] { width: 140px; padding: 6px 8px; font-size: 13px; }

.indice[b-bj7itdbrwt] { margin: 0; font-size: 12px; color: var(--text-muted); line-height: 1.5; max-width: 76ch; }

/* --- Formulaire d'ajout ------------------------------------------------------ */

.formulaire-ajout[b-bj7itdbrwt] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 14px 20px;
    background: var(--surface-2);
}

.formulaire-ajout input[type="text"][b-bj7itdbrwt] { padding: 7px 10px; font-size: 13px; }
.formulaire-ajout .champ-code[b-bj7itdbrwt] { width: 140px; flex-shrink: 0; flex-grow: 0; }
.formulaire-ajout input[type="text"]:not(.champ-code)[b-bj7itdbrwt] { flex: 1; }
/* /Components/Pages/MaBibliotheque/MaBibliothequeEntete.razor.rz.scp.css */
/* Même matière que l'entête d'administration : les deux se lisent comme un même bandeau. */

.entete[b-dd2c2c72w7] {
    padding: 24px 28px 0;
    border-bottom: 1px solid var(--border);
    background: var(--surface);
}

.titre[b-dd2c2c72w7] { font-size: 20px; font-weight: 600; }

.soustitre[b-dd2c2c72w7] {
    font-size: 12.5px;
    color: var(--text-muted);
    margin-top: 4px;
    margin-bottom: 16px;
    max-width: 80ch;
    line-height: 1.5;
}

/* La sous-navigation vit dans `app.css`, partagée par les quatre portails. */
/* /Components/Pages/MaBibliotheque/Normes.razor.rz.scp.css */
/* Reprend la matière de l'écran d'administration des normes : c'est la même liste, elle
   doit se lire de la même façon. Le CSS scopé de Blazor étant par composant, ces règles
   sont volontairement redéfinies plutôt que jetées dans app.css. */

.page[b-9on5v0qrmb] {
    padding: 24px 28px 40px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.texte-muet[b-9on5v0qrmb] { color: var(--text-muted); font-size: 13px; }
.intro[b-9on5v0qrmb] { margin: 0; max-width: 82ch; line-height: 1.6; }
.note[b-9on5v0qrmb] { margin: 0; max-width: 82ch; line-height: 1.6; }
.alerte-erreur[b-9on5v0qrmb] { margin: 0; }
.sans-marge[b-9on5v0qrmb] { margin: 0; }
.mono[b-9on5v0qrmb] { font-family: ui-monospace, "SFMono-Regular", Menlo, monospace; font-size: 12.5px; }
.forte[b-9on5v0qrmb] { font-weight: 700; }

/* Ce que l'application ne fait pas est ce qu'on doit lire en premier : elle ne livre aucun
   texte de norme, et n'en livrera pas. */
.avis-licence[b-9on5v0qrmb] {
    padding: 14px 16px;
    border-radius: 8px;
    background: var(--warning-soft);
    border: 1px solid oklch(84% 0.07 75);
    color: oklch(34% 0.08 75);
    font-size: 13px;
    line-height: 1.6;
}

.carte-vide[b-9on5v0qrmb] {
    background: var(--surface);
    border: 1px dashed var(--border);
    border-radius: 8px;
    padding: 26px 24px;
    text-align: center;
}

.carte-vide p[b-9on5v0qrmb] { margin: 0 0 6px; }
.carte-vide p:last-child[b-9on5v0qrmb] { margin-bottom: 0; }

/* --- La liste ---------------------------------------------------------------- */

.liste-normes[b-9on5v0qrmb] { display: flex; flex-direction: column; gap: 12px; }

.carte-norme[b-9on5v0qrmb] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 16px 18px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.entete-norme[b-9on5v0qrmb] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
}

.ligne-reference[b-9on5v0qrmb] { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.reference[b-9on5v0qrmb] { font-size: 14px; font-weight: 600; }
.titre-norme[b-9on5v0qrmb] { font-size: 13px; color: var(--text-muted); margin-top: 3px; line-height: 1.5; }
.actions-norme[b-9on5v0qrmb] { display: flex; align-items: center; gap: 12px; flex-shrink: 0; }

.jeton[b-9on5v0qrmb] {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.02em;
    white-space: nowrap;
}

.jeton-type[b-9on5v0qrmb] { background: var(--accent-soft); color: var(--accent-dark); }
.jeton-transcrite[b-9on5v0qrmb] { background: var(--surface-2); color: var(--text); }

/* Une norme citée sans article ne prescrit rien : état légitime, d'où le pointillé. */
.jeton-vide[b-9on5v0qrmb] { background: var(--surface-2); color: var(--text-faint); border: 1px dashed var(--border); }

.etat-transcription[b-9on5v0qrmb] { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.explication[b-9on5v0qrmb] { font-size: 12px; color: var(--text-muted); }

.btn-lien-supprimer[b-9on5v0qrmb], .btn-lien-modifier[b-9on5v0qrmb] {
    background: transparent;
    border: none;
    padding: 2px;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--text-faint);
    cursor: pointer;
}

.btn-lien-supprimer:hover[b-9on5v0qrmb] { color: var(--danger); }
.btn-lien-modifier:hover[b-9on5v0qrmb] { color: var(--accent); }

.btn-lien-publier[b-9on5v0qrmb] {
    background: transparent;
    border: none;
    color: var(--text-faint);
    padding: 2px;
    cursor: pointer;
    display: inline-flex;
}

.btn-lien-publier:hover[b-9on5v0qrmb] { color: var(--accent); }

.btn-lien-annuler[b-9on5v0qrmb] {
    background: transparent;
    border: none;
    color: var(--text-muted);
    font-size: 12.5px;
    cursor: pointer;
    padding: 5px 4px;
}

.btn-lien-annuler:hover[b-9on5v0qrmb] { color: var(--text); text-decoration: underline; }

/* --- Où la norme est déjà publiée -------------------------------------------- */

.pastille-publication[b-9on5v0qrmb] {
    display: inline-block;
    padding: 1px 7px;
    border-radius: 999px;
    background: var(--accent-soft);
    color: var(--accent-dark);
    font-size: 11px;
    font-weight: 500;
}

/* --- Encart de publication --------------------------------------------------- */

.encart-publication[b-9on5v0qrmb] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 12px 14px;
    border-radius: 6px;
    background: var(--surface-2);
}

.titre-encart[b-9on5v0qrmb] { font-size: 13px; font-weight: 600; }

.ligne-encart[b-9on5v0qrmb] {
    display: flex;
    align-items: flex-end;
    gap: 12px;
    flex-wrap: wrap;
}

.ligne-encart label[b-9on5v0qrmb] { display: flex; flex-direction: column; gap: 4px; }

.etiquette[b-9on5v0qrmb] {
    font-size: 11.5px;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    color: var(--text-muted);
}

.ligne-encart select[b-9on5v0qrmb] { min-width: 240px; padding: 6px 9px; font-size: 13px; width: auto; }

.indice[b-9on5v0qrmb] { margin: 0; font-size: 12px; color: var(--text-muted); line-height: 1.5; max-width: 78ch; }

/* --- Les articles transcrits -------------------------------------------------- */

.bloc-articles[b-9on5v0qrmb] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding-top: 12px;
    border-top: 1px solid var(--border);
}

.bloc-articles table[b-9on5v0qrmb] { width: 100%; border-collapse: collapse; }

.bloc-articles th[b-9on5v0qrmb] {
    text-align: left;
    font-size: 11.5px;
    font-weight: 600;
    color: var(--text-muted);
    padding: 6px 8px;
    border-bottom: 1px solid var(--border);
}

.bloc-articles td[b-9on5v0qrmb] { padding: 8px; font-size: 13px; border-bottom: 1px solid var(--border); vertical-align: top; }
.col-article[b-9on5v0qrmb] { width: 70px; }
.col-genre[b-9on5v0qrmb] { width: 130px; }
.col-niveau[b-9on5v0qrmb] { width: 110px; }
.col-action[b-9on5v0qrmb] { width: 70px; text-align: right; }

.formulaire-article[b-9on5v0qrmb] { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.formulaire-article input[b-9on5v0qrmb], .formulaire-article select[b-9on5v0qrmb] { font-family: inherit; font-size: 13px; }

/* Les largeurs se déclarent sous le conteneur, et non sur la classe seule : app.css pose
   `input[type="text"] { width: 100% }`, dont la spécificité (0,1,1) bat celle d'une classe
   nue — chaque champ prenait alors sa ligne, et le formulaire tombait en colonne. */
.formulaire-article .champ-article[b-9on5v0qrmb] { width: 80px; flex: none; }
.formulaire-article .champ-intitule[b-9on5v0qrmb] { flex: 1; min-width: 220px; width: auto; }
.formulaire-article select[b-9on5v0qrmb] { width: auto; }

.aide[b-9on5v0qrmb] { font-size: 12px; color: var(--text-faint); line-height: 1.55; }

/* --- L'ajout ------------------------------------------------------------------ */

.carte-ajout[b-9on5v0qrmb] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 16px 18px;
}

.carte-ajout h3[b-9on5v0qrmb] { margin: 0 0 12px; font-size: 14px; font-weight: 600; }
.formulaire-norme[b-9on5v0qrmb] { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.formulaire-norme input[b-9on5v0qrmb], .formulaire-norme select[b-9on5v0qrmb] { font-family: inherit; font-size: 13px; }
.formulaire-norme .champ-organisme[b-9on5v0qrmb] { width: 90px; flex: none; }
.formulaire-norme .champ-numero[b-9on5v0qrmb] { width: 130px; flex: none; }
/* `input[type="number"]` ne figure pas dans la liste de sélecteurs d'app.css : sans ces
   quatre lignes il garde l'habillage du navigateur et fait 16 px de moins que ses voisins. */
.formulaire-norme .champ-edition[b-9on5v0qrmb] {
    width: 90px;
    flex: none;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--surface);
    color: var(--text);
}
.formulaire-norme .champ-titre[b-9on5v0qrmb] { flex: 1; min-width: 260px; width: auto; }
.formulaire-norme select[b-9on5v0qrmb] { width: auto; }
/* /Components/Pages/Projets/AnalyseRisque.razor.rz.scp.css */
.page-chargement[b-rx453rk8rj] {
    padding: 40px 28px;
}

.ecran[b-rx453rk8rj] {
    display: flex;
    flex-direction: column;
    /* Occupe la place laissée par l'en-tête de projet, quelle que soit sa hauteur.
       Un calc() sur 100vh supposerait une barre d'onglets d'une seule ligne. */
    flex: 1;
    min-height: 0;
}

.entete-ecran[b-rx453rk8rj] {
    padding: 20px 28px 16px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-shrink: 0;
}

.titre-section[b-rx453rk8rj] {
    font-size: 16px;
    font-weight: 600;
}

.soustitre-section[b-rx453rk8rj] {
    font-size: 12.5px;
    color: var(--text-muted);
    margin-top: 2px;
}

.btn-sm[b-rx453rk8rj] {
    padding: 9px 14px;
    font-size: 13px;
}

.alerte-globale[b-rx453rk8rj] {
    margin: 0 28px 16px;
}

.texte-muet[b-rx453rk8rj] { color: var(--text-muted); font-size: 13px; }

.etat-vide[b-rx453rk8rj] {
    background: var(--surface);
    border: 1px dashed var(--border);
    border-radius: 8px;
    padding: 32px;
    text-align: center;
}

.etat-vide p:first-child[b-rx453rk8rj] {
    margin: 0 0 4px;
    font-weight: 500;
    color: var(--text);
}

/* --- Formulaire nouvelle ligne ------------------------------------- */

.carte-formulaire-nouvelle[b-rx453rk8rj] {
    margin: 0 28px 16px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 18px 20px;
    flex-shrink: 0;
}

.grille-nouvelle[b-rx453rk8rj] {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
    margin-bottom: 14px;
}

.champ[b-rx453rk8rj] { margin-bottom: 4px; }

.champ textarea[b-rx453rk8rj] {
    width: 100%;
    font-family: inherit;
    font-size: 13.5px;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--surface);
    color: var(--text);
    resize: vertical;
}

.champ input[type="text"][b-rx453rk8rj] {
    width: 100%;
    font-family: inherit;
    font-size: 13.5px;
    padding: 10px 12px;
}

/* --- Énoncé de la situation dangereuse -------------------------------
   Une fiche, pas une pile de champs : colonne d'étiquettes fixe, valeurs alignées,
   filets entre les lignes. Conséquence et dommages n'ont volontairement pas de cadre —
   un champ grisé se clique, et on cherche pourquoi il ne répond pas. Le pied de fiche
   dit d'où elles viennent et porte l'enregistrement. */
.enonce[b-rx453rk8rj] {
    border: 1px solid var(--border);
    border-radius: 10px;
    background: var(--surface);
    overflow: hidden;
}

.ligne-enonce[b-rx453rk8rj] {
    display: grid;
    grid-template-columns: 200px minmax(0, 1fr);
    gap: 24px;
    align-items: start;
    padding: 13px 20px;
    border-top: 1px solid var(--border);
}

.ligne-enonce:first-child[b-rx453rk8rj] {
    border-top: none;
}

.ligne-enonce > label[b-rx453rk8rj],
.ligne-enonce > .etiquette[b-rx453rk8rj] {
    display: block;
    margin: 0;
    padding-top: 1px;
    font-size: 12.5px;
    font-weight: 500;
    color: var(--text-muted);
}

/* Les champs ont 10px de rembourrage : sans ce décalage, l'étiquette se poserait plus
   haut que le texte qu'elle nomme et la colonne partirait en escalier. */
.ligne-saisie > label[b-rx453rk8rj] {
    padding-top: 11px;
}

.ligne-saisie select[b-rx453rk8rj] {
    width: 100%;
}

.valeur-lecture[b-rx453rk8rj] {
    font-size: 14px;
    line-height: 1.5;
    white-space: pre-wrap;
}

.valeur-absente[b-rx453rk8rj] {
    color: var(--text-faint);
    font-style: italic;
}

.pied-enonce[b-rx453rk8rj] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
    padding: 11px 20px;
    border-top: 1px solid var(--border);
    background: var(--surface-2);
}

.note-catalogue[b-rx453rk8rj] {
    font-size: 11.5px;
    color: var(--text-faint);
}

.actions-formulaire[b-rx453rk8rj] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    margin-top: 12px;
}

.btn-xs[b-rx453rk8rj] {
    padding: 6px 11px;
    font-size: 12px;
}

/* --- Corps deux colonnes -------------------------------------------- */

.corps[b-rx453rk8rj] {
    flex: 1;
    display: flex;
    min-height: 0;
    border-top: 1px solid var(--border);
}

/* --- Détail ----------------------------------------------------------- */

.detail-ligne[b-rx453rk8rj] {
    flex: 1;
    min-width: 0;
    overflow-y: auto;
    padding: 24px 32px 40px;
    display: flex;
    flex-direction: column;
    gap: 22px;
}

/* Les champs occupaient toute la largeur de l'écran : sur un moniteur large, un titre
   de deux mots s'étirait sur 1 200 px et la fiche n'avait plus de forme. La colonne
   entière — énoncé, cotes, bandeau — se borne donc à une largeur de lecture.

   `flex-shrink: 0` n'est pas décoratif, c'est ce qui rend la fiche visible. La colonne
   est un conteneur flex de hauteur bornée : ses enfants se font écraser quand le contenu
   dépasse. Un enfant est normalement protégé par `min-height: auto`, qui vaut la hauteur
   de son contenu — sauf s'il porte `overflow` autre que `visible`, et la fiche porte
   `overflow: hidden` pour que ses coins arrondis découpent les filets. Elle perdait donc
   sa protection, se faisait comprimer à quelques pixels par les cotes en dessous, et
   n'affichait plus que ses deux bordures. Même règle et même raison que `.contenu > *`
   dans app.css. */
.detail-ligne > *[b-rx453rk8rj] {
    width: 100%;
    max-width: 960px;
    flex-shrink: 0;
}

.detail-entete h2[b-rx453rk8rj] {
    margin: 6px 0 0;
    font-size: 18px;
    font-weight: 600;
}

.detail-fil[b-rx453rk8rj] {
    font-size: 11px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--text-faint);
}

.section-gfop[b-rx453rk8rj] {
    border-top: 1px solid var(--border);
    padding-top: 20px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.ligne-cote label[b-rx453rk8rj] {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    margin-bottom: 8px;
}

.bandeau-indice[b-rx453rk8rj] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 18px;
    border-radius: 8px;
    border: 1px solid transparent;
}

.bandeau-etiquette[b-rx453rk8rj] {
    font-size: 11.5px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.bandeau-valeur[b-rx453rk8rj] {
    font-size: 24px;
    font-weight: 700;
    margin-top: 2px;
}

.bandeau-mention[b-rx453rk8rj] {
    font-size: 13px;
    font-weight: 600;
}

.bandeau-vert[b-rx453rk8rj] { background: var(--success-soft); }
.bandeau-vert .bandeau-etiquette[b-rx453rk8rj], .bandeau-vert .bandeau-valeur[b-rx453rk8rj], .bandeau-vert .bandeau-mention[b-rx453rk8rj] { color: oklch(35% 0.11 150); }

.bandeau-orange[b-rx453rk8rj] { background: var(--warning-soft); }
.bandeau-orange .bandeau-etiquette[b-rx453rk8rj], .bandeau-orange .bandeau-valeur[b-rx453rk8rj], .bandeau-orange .bandeau-mention[b-rx453rk8rj] { color: oklch(38% 0.13 75); }

.bandeau-rouge[b-rx453rk8rj] { background: var(--danger-soft); }
.bandeau-rouge .bandeau-etiquette[b-rx453rk8rj], .bandeau-rouge .bandeau-valeur[b-rx453rk8rj], .bandeau-rouge .bandeau-mention[b-rx453rk8rj] { color: oklch(38% 0.15 35); }

/* Le jugement fait partie de l’estimation : l’enregistrement le refuse sans conclusion.
   Le bloc est mis en avant tant qu’il manque, pour que l’on voie ce qui bloque plutôt
   que de chercher pourquoi le bouton reste inactif. */
.section-jugement[b-rx453rk8rj] {
    border-top: 1px solid var(--border);
    padding-top: 18px;
    margin-top: 4px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.section-jugement.jugement-attendu[b-rx453rk8rj] {
    border-top-color: var(--warning);
}

.section-jugement label[b-rx453rk8rj] {
    font-size: 12.5px;
    font-weight: 600;
    display: flex;
    align-items: center;
    gap: 8px;
}

.mention-obligatoire[b-rx453rk8rj] {
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    padding: 2px 7px;
    border-radius: 999px;
    background: var(--warning-soft);
    color: oklch(38% 0.09 75);
}


.aide-jugement[b-rx453rk8rj] {
    margin: 0;
    font-size: 12px;
    line-height: 1.5;
    color: oklch(45% 0.1 75);
}

.section-evaluation[b-rx453rk8rj] {
    border-top: 1px solid var(--border);
    padding-top: 20px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.section-evaluation label[b-rx453rk8rj] {
    font-size: 12.5px;
    font-weight: 600;
}

.choix-evaluation[b-rx453rk8rj] {
    display: flex;
    gap: 8px;
}

.choix[b-rx453rk8rj] {
    flex: 1;
    padding: 11px;
    border-radius: 6px;
    border: 1.5px solid var(--border);
    background: var(--surface);
    color: var(--text-muted);
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
}

.choix-oui-actif[b-rx453rk8rj] {
    border-color: var(--success);
    background: var(--success-soft);
    color: oklch(35% 0.11 150);
    font-weight: 600;
}

.choix-non-actif[b-rx453rk8rj] {
    border-color: var(--danger);
    background: var(--danger-soft);
    color: oklch(38% 0.15 35);
    font-weight: 600;
}

.indication-estimation[b-rx453rk8rj] {
    margin: 0;
    padding-top: 4px;
}

.pied-detail[b-rx453rk8rj] {
    border-top: 1px solid var(--border);
    padding-top: 16px;
    margin-top: auto;
}

.btn-lien-supprimer-texte[b-rx453rk8rj] {
    background: transparent;
    border: none;
    color: var(--text-faint);
    font-size: 12.5px;
    font-family: inherit;
    cursor: pointer;
    padding: 0;
}

.btn-lien-supprimer-texte:hover[b-rx453rk8rj] { color: var(--danger); }

/* --- Pièces jointes (section 5.12) ------------------------------------ */

.section-documents[b-rx453rk8rj] {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding-top: 16px;
    border-top: 1px solid var(--border);
}

.section-documents > label[b-rx453rk8rj] {
    font-size: 12px;
    font-weight: 500;
    color: var(--text-muted);
}

/* --- Module 10 : PLr requis, en appui de l'estimation ------------------ */

.section-plr[b-rx453rk8rj] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding-top: 16px;
    border-top: 1px solid var(--border);
}

.section-plr > label[b-rx453rk8rj] {
    font-size: 12px;
    font-weight: 500;
    color: var(--text-muted);
}

.bandeau-plr[b-rx453rk8rj] {
    display: flex;
    align-items: center;
    gap: 26px;
    flex-wrap: wrap;
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 12px 16px;
}

.etiquette-plr[b-rx453rk8rj] {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--text-faint);
}

.valeur-plr-grande[b-rx453rk8rj] {
    font-size: 22px;
    font-weight: 700;
    text-transform: lowercase;
    line-height: 1.1;
}

.valeur-transposition[b-rx453rk8rj] {
    font-size: 13px;
    font-weight: 500;
    font-variant-numeric: tabular-nums;
}

.renvoi-plr[b-rx453rk8rj] {
    margin: 0;
    font-size: 11.5px;
    color: var(--text-faint);
}

/* Le pictogramme du catalogue, dans l'énoncé de la situation. Bornée en hauteur
   et non en largeur : les pictogrammes arrivent en formats disjoints, et seule
   une hauteur commune garde l'énoncé régulier d'une situation à l'autre. */
.image-phenomene[b-rx453rk8rj] {
    height: 88px;
    width: auto;
    max-width: 100%;
    object-fit: contain;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--surface);
    padding: 4px;
}
/* /Components/Pages/Projets/ArretsUrgence.razor.rz.scp.css */
.page[b-0olxm16h6w] {
    padding: 24px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.texte-muet[b-0olxm16h6w] { color: var(--text-muted); font-size: 13px; }

.etat-vide[b-0olxm16h6w] {
    background: var(--surface);
    border: 1px dashed var(--border);
    border-radius: 8px;
    padding: 32px;
    text-align: center;
}

.etat-vide p:first-child[b-0olxm16h6w] {
    margin: 0 0 4px;
    font-weight: 500;
    color: var(--text);
}

.carte-table[b-0olxm16h6w] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

.entete-table[b-0olxm16h6w] {
    padding: 14px 20px;
    border-bottom: 1px solid var(--border);
    font-size: 13px;
    font-weight: 600;
}

table[b-0olxm16h6w] { border-collapse: collapse; width: 100%; }

th[b-0olxm16h6w] {
    text-align: left;
    padding: 9px 20px;
    font-size: 11px;
    font-weight: 500;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    border-bottom: 1px solid var(--border);
}

td[b-0olxm16h6w] {
    padding: 12px 20px;
    font-size: 13.5px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
}

tr:last-child td[b-0olxm16h6w] { border-bottom: none; }

.nom-projet[b-0olxm16h6w] { font-weight: 500; }

.etiquette-heritee[b-0olxm16h6w] {
    display: inline-block;
    margin-left: 8px;
    padding: 1px 7px;
    border-radius: 999px;
    background: var(--surface-2);
    color: var(--text-faint);
    font-size: 10.5px;
    font-weight: 400;
    letter-spacing: 0.02em;
}

.badge[b-0olxm16h6w] {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 100px;
    font-size: 11.5px;
    font-weight: 500;
}

.badge-vert[b-0olxm16h6w] { background: oklch(93% 0.03 145); color: oklch(42% 0.1 145); }
.badge-rouge[b-0olxm16h6w] { background: oklch(93% 0.07 25); color: oklch(45% 0.16 25); }
.badge-neutre[b-0olxm16h6w] { background: oklch(93% 0.006 90); color: var(--text-muted); }

.motif-non-conforme[b-0olxm16h6w] {
    margin: 6px 0 0;
    font-size: 12.5px;
    font-weight: 400;
    color: oklch(38% 0.15 35);
    line-height: 1.45;
}

.colonne-trombone[b-0olxm16h6w] {
    width: 44px;
    text-align: center;
}

.ligne-documents td[b-0olxm16h6w] {
    background: var(--surface-2);
    padding: 12px 20px;
}
/* /Components/Pages/Projets/BoutonPiecesJointes.razor.rz.scp.css */
.btn-trombone[b-yd1jnpvnx5] {
    background: none;
    border: none;
    padding: 2px 4px;
    cursor: pointer;
    color: var(--text-faint);
    display: inline-flex;
    align-items: center;
    gap: 3px;
    border-radius: 4px;
}

.btn-trombone:hover[b-yd1jnpvnx5] { color: var(--accent); }

.btn-trombone.actif[b-yd1jnpvnx5] {
    color: var(--accent);
    background: var(--accent-soft);
}

.compteur-trombone[b-yd1jnpvnx5] {
    font-size: 11px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}
/* /Components/Pages/Projets/CarteSousSysteme.razor.rz.scp.css */
/* Une carte de sous-système. Trois zones : l'en-tête qui dit le rôle, le corps qui
   montre le chemin du calcul, le pied qui annonce le niveau. Le pied prend la couleur
   du verdict — c'est la seule chose qu'on lit de loin. */

.carte-sous-systeme[b-kkbqz75bu6] {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

.carte-sous-systeme.en-refus[b-kkbqz75bu6] {
  border-color: oklch(84% 0.06 35);
}

/* --- En-tête ------------------------------------------------------------ */

.entete-carte[b-kkbqz75bu6] {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 12px 12px 12px 15px;
  border-bottom: 1px solid var(--border);
}

.titre-carte[b-kkbqz75bu6] {
  flex: 1;
  min-width: 0;
}

.role[b-kkbqz75bu6] {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--accent);
}

.nom[b-kkbqz75bu6] {
  font-size: 13.5px;
  font-weight: 600;
  margin-top: 1px;
  overflow-wrap: anywhere;
}

.btn-icone[b-kkbqz75bu6] {
  padding: 5px;
  background: none;
  border: none;
  color: var(--text-faint);
  border-radius: 5px;
  flex-shrink: 0;
}

.btn-icone:hover:not(:disabled)[b-kkbqz75bu6] { background: var(--surface-2); color: var(--text); }
.btn-icone-danger:hover:not(:disabled)[b-kkbqz75bu6] { background: var(--danger-soft); color: var(--danger); }
.btn-icone:disabled[b-kkbqz75bu6] { opacity: 0.4; cursor: default; }

/* --- Corps -------------------------------------------------------------- */

.corps-carte[b-kkbqz75bu6] {
  padding: 14px 15px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.pastille[b-kkbqz75bu6] {
  align-self: flex-start;
  padding: 4px 9px;
  border-radius: 999px;
  background: var(--surface-2);
  color: var(--text-muted);
  font-size: 11.5px;
  font-weight: 500;
}

.pastille-accent[b-kkbqz75bu6] { background: var(--accent-soft); color: var(--accent-dark); }

.lignes[b-kkbqz75bu6] { margin: 0; }

.lig[b-kkbqz75bu6] {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  padding: 6px 0;
  border-bottom: 1px solid var(--border);
  font-size: 12.5px;
}

.lig:last-child[b-kkbqz75bu6] { border-bottom: none; }
.lig dt[b-kkbqz75bu6] { color: var(--text-muted); }
.lig dd[b-kkbqz75bu6] { margin: 0; font-weight: 500; text-align: right; }

/* Le plafond de la norme se signale : sans lui, un MTTFD de 677 ans affiché à 100
   passerait pour une erreur de saisie. */
.lig-plafond[b-kkbqz75bu6] {
  background: var(--warning-soft);
  margin: 0 -15px;
  padding: 7px 15px;
  border-bottom: 1px dashed oklch(84% 0.07 75);
}

.lig-plafond dt[b-kkbqz75bu6], .lig-plafond dd[b-kkbqz75bu6] { color: oklch(38% 0.12 75); }
.lig-plafond dd[b-kkbqz75bu6] { font-weight: 600; }

.classe[b-kkbqz75bu6] { color: var(--text-muted); font-weight: 400; }
.absent[b-kkbqz75bu6] { color: var(--text-faint); font-weight: 400; }
.atteint[b-kkbqz75bu6] { color: oklch(35% 0.11 150); }
.manque[b-kkbqz75bu6] { color: oklch(42% 0.15 35); }

/* --- Matériel rattaché -------------------------------------------------- */

.materiel-carte[b-kkbqz75bu6] {
  border-top: 1px solid var(--border);
  padding-top: 10px;
}

.titre-materiel[b-kkbqz75bu6] {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: 6px;
}

.ligne-materiel[b-kkbqz75bu6] {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  padding: 3px 0;
  font-size: 12px;
}

.ligne-materiel.hors-chaine[b-kkbqz75bu6] { color: var(--text-faint); }
.designation[b-kkbqz75bu6] { overflow-wrap: anywhere; }
.quantite[b-kkbqz75bu6] { color: var(--text-muted); margin-left: 4px; }
.valeur-materiel[b-kkbqz75bu6] { flex-shrink: 0; font-size: 11.5px; }

.note-carte[b-kkbqz75bu6] {
  margin: 0;
  font-size: 11.5px;
  color: var(--text-faint);
  line-height: 1.5;
}

.refus-carte[b-kkbqz75bu6] {
  margin: 0;
  padding: 10px 12px;
  border-radius: 7px;
  background: var(--danger-soft);
  border: 1px solid oklch(85% 0.06 35);
  font-size: 12px;
  line-height: 1.55;
  color: oklch(38% 0.14 35);
}

/* --- Barème des causes communes ----------------------------------------- */

.btn-bareme[b-kkbqz75bu6] {
  align-self: flex-start;
  padding: 0;
  background: none;
  border: none;
  color: var(--accent);
  font-size: 12px;
  font-weight: 500;
}

.btn-bareme svg[b-kkbqz75bu6] { transition: transform 0.12s ease; }

.bareme[b-kkbqz75bu6] {
  padding: 14px 15px;
  background: var(--surface-2);
  border-top: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.indice-bareme[b-kkbqz75bu6] {
  margin: 0;
  font-size: 11.5px;
  color: var(--text-muted);
  line-height: 1.5;
}

.mesure[b-kkbqz75bu6] { display: flex; flex-direction: column; gap: 5px; }

.case-mesure[b-kkbqz75bu6] {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin: 0;
  font-size: 12px;
  font-weight: 400;
  color: var(--text);
  cursor: pointer;
}

.case-mesure input[b-kkbqz75bu6] { width: auto; margin: 2px 0 0; flex-shrink: 0; }
.enonce[b-kkbqz75bu6] { flex: 1; line-height: 1.45; }
.points[b-kkbqz75bu6] { flex-shrink: 0; color: var(--text-muted); font-size: 11.5px; }

.justification[b-kkbqz75bu6] {
  font-size: 12px;
  padding: 7px 9px;
  margin-left: 22px;
  width: calc(100% - 22px);
}

.pied-bareme[b-kkbqz75bu6] {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding-top: 4px;
}

.total[b-kkbqz75bu6] { font-size: 13.5px; font-weight: 700; }

.btn-sm[b-kkbqz75bu6] { padding: 7px 12px; font-size: 12.5px; }

/* --- Champs de l'éditeur ------------------------------------------------ */

.champ[b-kkbqz75bu6] { margin: 0; }

.etiquette-champ[b-kkbqz75bu6] {
  display: block;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: 5px;
}

.champ input[b-kkbqz75bu6], .champ select[b-kkbqz75bu6] { font-size: 13px; padding: 8px 10px; }

.deux-champs[b-kkbqz75bu6] { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }

.indice-champ[b-kkbqz75bu6] {
  margin: -6px 0 0;
  font-size: 11.5px;
  color: var(--text-muted);
  line-height: 1.5;
}

.actions-carte[b-kkbqz75bu6] { display: flex; justify-content: flex-end; gap: 8px; }

.sans-marge[b-kkbqz75bu6] { margin: 0; }

/* --- Pied --------------------------------------------------------------- */

.pied-carte[b-kkbqz75bu6] {
  margin-top: auto;
  padding: 11px 15px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  border-top: 1px solid var(--border);
}

.libelle-pied[b-kkbqz75bu6] { font-size: 12px; font-weight: 600; }
.niveau-pied[b-kkbqz75bu6] { font-size: 16px; font-weight: 700; }

.pied-etabli[b-kkbqz75bu6] {
  background: var(--success-soft);
  border-top-color: oklch(88% 0.04 150);
}
.pied-etabli .libelle-pied[b-kkbqz75bu6], .pied-etabli .niveau-pied[b-kkbqz75bu6] { color: oklch(35% 0.11 150); }

.pied-refus[b-kkbqz75bu6] {
  background: var(--danger-soft);
  border-top-color: oklch(85% 0.06 35);
}
.pied-refus .libelle-pied[b-kkbqz75bu6], .pied-refus .niveau-pied[b-kkbqz75bu6] { color: oklch(38% 0.14 35); }
.pied-refus .niveau-pied[b-kkbqz75bu6] { font-size: 12.5px; }

.pied-attente[b-kkbqz75bu6] { background: var(--surface-2); }
.pied-attente .libelle-pied[b-kkbqz75bu6] { color: var(--text-muted); }
.pied-attente .niveau-pied[b-kkbqz75bu6] { font-size: 12.5px; color: var(--text-faint); }
/* /Components/Pages/Projets/CouvertureNorme.razor.rz.scp.css */
/* Reprend la matière de l'écran des normes applicables — c'est sa suite immédiate. */

.couverture-norme[b-iwly678jq8] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding-top: 12px;
    border-top: 1px solid var(--border);
}

.jeton[b-iwly678jq8] {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.02em;
    white-space: nowrap;
}

.jeton-niveau[b-iwly678jq8] { background: var(--surface-2); color: var(--text); font-family: ui-monospace, monospace; }

/* Un article non transcrit ne vaut pas « aucune exigence » : le pointillé dit l'absence de
   lecture, pas un zéro. */
.jeton-vide[b-iwly678jq8] { background: var(--surface-2); color: var(--text-faint); border: 1px dashed var(--border); }

.rien-a-couvrir[b-iwly678jq8] { margin: 0; font-size: 13px; color: var(--text-muted); line-height: 1.6; }

/* --- Les articles ------------------------------------------------------------ */

.liste-exigences[b-iwly678jq8] { display: flex; flex-direction: column; gap: 8px; }

.exigence[b-iwly678jq8] {
    border: 1px solid var(--border);
    border-left: 3px solid var(--border);
    border-radius: 6px;
    padding: 11px 13px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

/* Le filet de gauche porte l'état : c'est ce qu'on lit en parcourant la liste, avant de lire
   quoi que ce soit d'autre. */
.est-couverte[b-iwly678jq8] { border-left-color: var(--success); }
.est-ecartee[b-iwly678jq8] { border-left-color: var(--text-faint); background: var(--surface-2); }
.est-a-traiter[b-iwly678jq8] { border-left-color: var(--danger); }

.entete-exigence[b-iwly678jq8] { display: flex; align-items: flex-start; gap: 12px; }

.numero-article[b-iwly678jq8] {
    font-family: ui-monospace, monospace;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--text-muted);
    flex-shrink: 0;
    min-width: 44px;
}

.corps-exigence[b-iwly678jq8] { flex: 1; min-width: 0; }
.intitule[b-iwly678jq8] { font-size: 13.5px; line-height: 1.5; }
.attributs[b-iwly678jq8] { display: flex; align-items: center; gap: 8px; margin-top: 5px; flex-wrap: wrap; }
.genre[b-iwly678jq8] { font-size: 11.5px; color: var(--text-faint); }

.reponse[b-iwly678jq8] {
    display: flex;
    align-items: baseline;
    gap: 10px;
    padding-left: 56px;
    font-size: 12.5px;
    line-height: 1.5;
}

.etiquette-etat[b-iwly678jq8] {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.02em;
    flex-shrink: 0;
    min-width: 56px;
}

.couvert .etiquette-etat[b-iwly678jq8] { color: var(--success); }
.ecart .etiquette-etat[b-iwly678jq8] { color: var(--text-faint); }
.a-traiter .etiquette-etat[b-iwly678jq8] { color: var(--danger); }

.texte-reponse[b-iwly678jq8] { flex: 1; min-width: 0; color: var(--text-muted); }
.motif[b-iwly678jq8] { flex: 1; min-width: 0; color: var(--text-muted); font-style: italic; }
.indice[b-iwly678jq8] { color: var(--text-faint); margin-left: 6px; }

.a-traiter .texte-reponse[b-iwly678jq8] { color: var(--text-faint); }

/* --- Les gestes --------------------------------------------------------------- */

.actions-exigence[b-iwly678jq8] { padding-left: 56px; display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }

.btn-lien[b-iwly678jq8] {
    background: transparent;
    border: none;
    padding: 2px;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--text-faint);
    cursor: pointer;
}

.btn-lien:hover[b-iwly678jq8] { color: var(--accent); }

.formulaire-inline[b-iwly678jq8] { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; width: 100%; }
.formulaire-inline select[b-iwly678jq8] { width: auto; max-width: 380px; font-family: inherit; font-size: 13px; }
.formulaire-inline .champ-description[b-iwly678jq8] { flex: 1; min-width: 240px; width: auto; font-size: 13px; }
.formulaire-inline .champ-motif[b-iwly678jq8] { flex: 1; min-width: 280px; width: auto; font-size: 13px; }
/* /Components/Pages/Projets/DefinitionMachineBandeau.razor.rz.scp.css */
.bandeau-definition[b-4v0trwlgmf] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    background: var(--accent-soft);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 14px 18px;
}

.titre-bandeau[b-4v0trwlgmf] {
    font-size: 13.5px;
    font-weight: 600;
    margin-bottom: 3px;
}

.texte-bandeau p[b-4v0trwlgmf] {
    margin: 0;
    font-size: 12.5px;
    color: var(--text-muted);
    max-width: 78ch;
}

.btn-xs[b-4v0trwlgmf] {
    padding: 5px 10px;
    font-size: 12px;
    flex-shrink: 0;
    white-space: nowrap;
}
/* /Components/Pages/Projets/DocumentsJoints.razor.rz.scp.css */
.documents[b-msrzzfve1a] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    align-items: flex-start;
}

.texte-faible[b-msrzzfve1a] { font-size: 12px; color: var(--text-faint); }

.liste-documents[b-msrzzfve1a] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
    width: 100%;
}

.document[b-msrzzfve1a] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 12.5px;
}

.vignette-lien[b-msrzzfve1a] { display: inline-flex; }

.vignette[b-msrzzfve1a] {
    width: 30px;
    height: 30px;
    object-fit: cover;
    border-radius: 4px;
    border: 1px solid var(--border);
    display: block;
}

.icone-fichier[b-msrzzfve1a] {
    width: 30px;
    height: 30px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 4px;
    background: var(--surface-2);
    border: 1px solid var(--border);
    font-size: 9px;
    font-weight: 600;
    color: var(--text-muted);
    letter-spacing: 0.02em;
    flex-shrink: 0;
}

.nom-document[b-msrzzfve1a] {
    color: var(--accent);
    max-width: 220px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.taille-document[b-msrzzfve1a] {
    font-size: 11.5px;
    color: var(--text-faint);
    font-variant-numeric: tabular-nums;
}

.btn-lien-supprimer[b-msrzzfve1a] {
    background: none;
    border: none;
    padding: 2px;
    cursor: pointer;
    color: var(--text-faint);
    display: inline-flex;
}

.btn-lien-supprimer:hover[b-msrzzfve1a] { color: var(--danger); }
.btn-lien-supprimer:disabled[b-msrzzfve1a] { opacity: 0.4; cursor: default; }

/* L'input natif est masqué : son rendu par défaut jure avec le reste des écrans,
   et le label entier sert de zone cliquable. */
.ajout-document[b-msrzzfve1a] {
    display: inline-flex;
    align-items: center;
    cursor: pointer;
    /* Indispensable, pas décoratif : le champ de fichier masqué ci-dessous est en
       position absolue. Sans ancêtre positionné, son bloc conteneur serait la fenêtre —
       il échapperait au panneau qui défile et étirerait la page entière jusqu'à sa
       position statique, soit une grande zone vide sous l'écran. */
    position: relative;
    overflow: hidden;
}

.ajout-document[b-msrzzfve1a]  input[type="file"] {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
    font-size: 0;
}

.libelle-ajout[b-msrzzfve1a] {
    font-size: 12px;
    color: var(--text-muted);
    border: 1px dashed var(--border);
    border-radius: 5px;
    padding: 4px 9px;
}

.ajout-document:hover .libelle-ajout[b-msrzzfve1a] {
    color: var(--accent);
    border-color: var(--accent);
}

.erreur-document[b-msrzzfve1a] {
    font-size: 12px;
    color: var(--danger);
}

/* --- Repères sur les photos ---------------------------------------------- */

/* La ligne reste une ligne ; la photo annotée passe dessous sur toute la largeur. */
.document[b-msrzzfve1a] { flex-wrap: wrap; }

.zone-photo[b-msrzzfve1a] {
    flex-basis: 100%;
    max-width: 560px;
    margin: 6px 0 10px;
}

.btn-annoter[b-msrzzfve1a] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    flex-shrink: 0;
    padding: 3px 9px;
    border: 1px solid var(--border);
    border-radius: 5px;
    background: var(--surface);
    color: var(--text-muted);
    font-family: inherit;
    font-size: 11.5px;
    font-weight: 500;
    cursor: pointer;
}

.btn-annoter:hover[b-msrzzfve1a] { color: var(--accent); border-color: var(--accent); }
.btn-annoter:disabled[b-msrzzfve1a] { opacity: 0.4; cursor: default; }

.compte-reperes[b-msrzzfve1a] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 15px;
    height: 15px;
    border-radius: 8px;
    padding: 0 4px;
    background: #e03a12;
    color: white;
    font-family: 'IBM Plex Mono', monospace;
    font-size: 10px;
    font-weight: 600;
}

.legende-lecture[b-msrzzfve1a] {
    list-style: none;
    margin: 6px 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 3px;
    font-size: 12px;
    color: var(--text-muted);
}

.legende-lecture li[b-msrzzfve1a] {
    display: flex;
    align-items: center;
    gap: 7px;
}

.puce-lecture[b-msrzzfve1a] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: #e03a12;
    color: white;
    font-family: 'IBM Plex Mono', monospace;
    font-size: 10.5px;
    font-weight: 600;
}
/* /Components/Pages/Projets/EditeurAnnotationsPhoto.razor.rz.scp.css */
.editeur-annotations[b-036nzbbm2n] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 12px;
    border: 1px solid var(--border);
    border-radius: 8px;
    background: var(--surface-2);
}

.barre-outils[b-036nzbbm2n] {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
}

.outils[b-036nzbbm2n] {
    display: flex;
    gap: 4px;
    padding: 3px;
    border-radius: 7px;
    background: var(--surface);
    border: 1px solid var(--border);
}

.outil[b-036nzbbm2n] {
    padding: 5px 11px;
    border: 0;
    border-radius: 5px;
    background: transparent;
    color: var(--text-muted);
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 500;
    cursor: pointer;
}

.outil:hover[b-036nzbbm2n] { color: var(--text); }

.outil.actif[b-036nzbbm2n] {
    background: var(--accent);
    color: white;
}

.consigne[b-036nzbbm2n] {
    font-size: 12px;
    color: var(--text-faint);
}

.texte-faible[b-036nzbbm2n] {
    margin: 0;
    font-size: 12px;
    color: var(--text-faint);
}

/* --- Légende ------------------------------------------------------------- */

.legende[b-036nzbbm2n] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.legende li[b-036nzbbm2n] {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 4px 6px;
    border-radius: 6px;
    cursor: pointer;
}

.legende li:hover[b-036nzbbm2n] { background: var(--surface); }

.legende li.selectionnee[b-036nzbbm2n] {
    background: var(--accent-soft);
}

.puce[b-036nzbbm2n] {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: #e03a12;
    color: white;
    font-family: 'IBM Plex Mono', monospace;
    font-size: 11px;
    font-weight: 600;
}

.forme[b-036nzbbm2n] {
    flex-shrink: 0;
    width: 48px;
    font-size: 11.5px;
    color: var(--text-faint);
}

.legende input[type="text"][b-036nzbbm2n] {
    flex: 1;
    min-width: 0;
    padding: 4px 8px;
    font-size: 12.5px;
}

.btn-lien-supprimer[b-036nzbbm2n] {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    padding: 2px;
    border: 0;
    background: none;
    color: var(--text-faint);
    cursor: pointer;
}

.btn-lien-supprimer:hover[b-036nzbbm2n] { color: var(--danger); }

.erreur-document[b-036nzbbm2n] {
    font-size: 12px;
    color: var(--danger);
}

.actions-formulaire[b-036nzbbm2n] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}

.btn-xs[b-036nzbbm2n] {
    padding: 5px 10px;
    font-size: 12px;
}
/* /Components/Pages/Projets/FichierRendu.razor.rz.scp.css */
.page[b-dponag4ljt] {
    padding: 24px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 18px;
}

.texte-muet[b-dponag4ljt] { color: var(--text-muted); font-size: 13px; }
.sans-marge[b-dponag4ljt] { margin: 0; }
.indice[b-dponag4ljt] { font-size: 12px; color: var(--text-faint); line-height: 1.45; }

.etat-vide[b-dponag4ljt] { padding: 40px; text-align: center; }

.entete-section[b-dponag4ljt] {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
}

.entete-section h2[b-dponag4ljt] { margin: 0; font-size: 14.5px; font-weight: 600; }

/* --- Bandeau d'état (module 11) ---------------------------------------------
   En tête d'écran : ce que le document est, et les deux gestes qu'on peut faire.
   Ils étaient auparavant à trois endroits différents de la page — deux boutons de
   version au milieu, l'émission enfouie dans le bloc d'identification. */

.bandeau[b-dponag4ljt] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 18px;
    flex-wrap: wrap;
    background: var(--surface);
    border: 1px solid var(--border);
    border-left: 3px solid var(--success);
    border-radius: 10px;
    padding: 14px 18px;
}

/* Le liseré passe au rouge quand l'émission est refusée : la couleur porte
   l'information avant la lecture, le détail est juste en dessous. */
.bandeau-bloque[b-dponag4ljt] { border-left-color: var(--danger); }

.bandeau-texte[b-dponag4ljt] { display: flex; align-items: center; gap: 12px; flex: 1; min-width: 280px; }
.bandeau-texte p[b-dponag4ljt] { font-size: 12.5px; color: var(--text-muted); line-height: 1.45; }

.bandeau-actions[b-dponag4ljt] { display: flex; gap: 8px; align-items: center; }
.bandeau-actions a[b-dponag4ljt] { text-decoration: none; }

.pastille[b-dponag4ljt] {
    font-size: 11.5px;
    font-weight: 600;
    padding: 3px 10px;
    border-radius: 999px;
    white-space: nowrap;
}

.pastille-emise[b-dponag4ljt] { color: var(--success); background: var(--success-soft); }
.pastille-epreuve[b-dponag4ljt] { color: var(--danger); background: var(--danger-soft); }

/* --- Ce qui manque avant d'émettre -----------------------------------------
   L'écran ne disait rien : on découvrait sur le PDF ou au clic sur « Émettre ». */

.controles[b-dponag4ljt] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 16px 18px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.controle[b-dponag4ljt] {
    display: flex;
    gap: 10px;
    align-items: flex-start;
    padding: 9px 11px;
    border-radius: 6px;
    font-size: 13px;
}

.controle.bloquant[b-dponag4ljt] { background: var(--danger-soft); }
.controle.avertissement[b-dponag4ljt] { background: var(--warning-soft); }
.controle.fait[b-dponag4ljt] { background: transparent; padding: 5px 11px; }

.marque[b-dponag4ljt] {
    flex: none;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    font-size: 11px;
    font-weight: 700;
    color: #fff;
    margin-top: 1px;
}

.controle.bloquant .marque[b-dponag4ljt] { background: var(--danger); }
.controle.avertissement .marque[b-dponag4ljt] { background: oklch(62% 0.13 75); }
.controle.fait .marque[b-dponag4ljt] { background: var(--success); }

.controle-titre[b-dponag4ljt] { font-weight: 600; }
.controle-detail[b-dponag4ljt] { color: var(--text-muted); font-size: 12.5px; line-height: 1.45; margin-top: 1px; }

.controles-faits summary[b-dponag4ljt] {
    cursor: pointer;
    font-size: 12.5px;
    color: var(--text-muted);
    padding: 4px 0;
}

.note-bloquante[b-dponag4ljt] {
    font-size: 12.5px;
    color: var(--text-muted);
    line-height: 1.45;
    padding-top: 2px;
}

/* --- Identification et émission --------------------------------------------- */

.carte-identification[b-dponag4ljt], .encart-revision[b-dponag4ljt], .registre-section[b-dponag4ljt] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 16px 18px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.encart-revision[b-dponag4ljt] { border-left: 3px solid var(--accent); }

.ligne-champs[b-dponag4ljt] { display: flex; gap: 14px; flex-wrap: wrap; align-items: flex-start; }

/* Qualifié en `label.champ` : `.ligne-champs label` empilerait en colonne, et une règle
   de classe nue ne pèse pas contre un sélecteur descendant. */
label.champ[b-dponag4ljt] { display: flex; flex-direction: column; gap: 4px; flex: 1; min-width: 200px; }
.champ-large[b-dponag4ljt] { flex: 2; }

.etiquette-champ[b-dponag4ljt] {
    font-size: 11px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
}

.carte-identification input[type="text"][b-dponag4ljt],
.carte-identification input[type="date"][b-dponag4ljt],
.carte-identification select[b-dponag4ljt],
.carte-identification textarea[b-dponag4ljt],
.encart-revision input[type="text"][b-dponag4ljt] {
    padding: 7px 10px;
    font-size: 13px;
    width: 100%;
}

.carte-identification textarea[b-dponag4ljt] { resize: vertical; }

.actions-formulaire[b-dponag4ljt] { display: flex; justify-content: flex-end; gap: 8px; }

.registre[b-dponag4ljt] { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.registre th[b-dponag4ljt] {
    text-align: left;
    font-size: 10.5px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--text-muted);
    font-weight: 600;
    padding: 5px 8px;
    border-bottom: 1px solid var(--border);
}
.registre td[b-dponag4ljt] { padding: 6px 8px; border-bottom: 1px solid var(--border); }
.registre .num[b-dponag4ljt] { font-variant-numeric: tabular-nums; width: 44px; }

/* --- Composition et aperçu, côte à côte -------------------------------------
   Cocher une case sans voir ce qu'elle retire revenait à générer un PDF pour le
   découvrir, à trois secondes de Chromium le coup. */

.atelier[b-dponag4ljt] {
    display: grid;
    grid-template-columns: minmax(320px, 1fr) minmax(360px, 1.1fr);
    gap: 16px;
    align-items: start;
}

.composition[b-dponag4ljt], .cadre-apercu[b-dponag4ljt] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 16px 18px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.indice-composition[b-dponag4ljt] { font-size: 12px; line-height: 1.45; }

.element[b-dponag4ljt] {
    display: flex;
    gap: 9px;
    align-items: flex-start;
    padding: 6px 8px;
    border-radius: 6px;
    cursor: pointer;
}

.element:hover[b-dponag4ljt] { background: var(--surface-2); }

.element input[type="checkbox"][b-dponag4ljt] { width: auto; flex: none; margin-top: 2px; }

.element-texte[b-dponag4ljt] { display: flex; flex-direction: column; gap: 2px; }
.element-titre[b-dponag4ljt] { font-size: 13px; display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.element-explication[b-dponag4ljt] { font-size: 11.5px; color: var(--text-faint); line-height: 1.45; }

.visionneuse[b-dponag4ljt] {
    width: 100%;
    height: 620px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--surface-2);
}

.apercu-vide[b-dponag4ljt] {
    border: 1px dashed var(--border);
    border-radius: 6px;
    padding: 28px 20px;
    text-align: center;
}

.apercu-vide p[b-dponag4ljt] { max-width: 380px; margin-inline: auto; line-height: 1.5; }

@media (max-width: 1100px) {
    .atelier[b-dponag4ljt] { grid-template-columns: 1fr; }
    .visionneuse[b-dponag4ljt] { height: 520px; }
}
/* /Components/Pages/Projets/FonctionSecuriteDetail.razor.rz.scp.css */
/* La fiche d'une fonction de sécurité. Bandeau de niveaux, ruban d'étapes, puis une
   colonne centrée par étape — l'étape « Modélisation » est la seule à prendre toute la
   largeur, parce que trois cartes côte à côte sont la seule façon de voir la chaîne. */

.page[b-zbfztzjbsf] {
  padding: 24px 28px 60px;
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.texte-muet[b-zbfztzjbsf] { color: var(--text-muted); font-size: 13px; }
.sans-marge[b-zbfztzjbsf] { margin: 0; }

.carte-vide[b-zbfztzjbsf] {
  padding: 28px;
  border: 1px dashed var(--border);
  border-radius: 10px;
  background: var(--surface-2);
  text-align: center;
}

.carte-vide p[b-zbfztzjbsf] { margin: 0 0 6px; font-size: 13.5px; }
.carte-vide p:last-child[b-zbfztzjbsf] { margin-bottom: 0; }
.carte-vide .actions[b-zbfztzjbsf] { justify-content: center; margin-top: 14px; }

.etiq[b-zbfztzjbsf] {
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--text-muted);
}

/* --- Bandeau : ce que la fonction est, et où elle en est ----------------- */

.bandeau-fonction[b-zbfztzjbsf] {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 16px 20px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
}

.identite[b-zbfztzjbsf] { min-width: 0; }
.fil[b-zbfztzjbsf] { font-size: 11.5px; color: var(--text-muted); margin-bottom: 3px; }
.identite h1[b-zbfztzjbsf] { margin: 0; font-size: 17px; font-weight: 600; }

.niveaux[b-zbfztzjbsf] {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-shrink: 0;
}

.niveau[b-zbfztzjbsf] { text-align: right; }
.valeur-niveau[b-zbfztzjbsf] { font-size: 20px; font-weight: 700; line-height: 1.2; }
.valeur-niveau.etabli[b-zbfztzjbsf] { color: oklch(35% 0.11 150); }
.valeur-niveau.insuffisant[b-zbfztzjbsf] { color: oklch(42% 0.15 35); }
.valeur-attente[b-zbfztzjbsf] { font-size: 12.5px; color: var(--text-faint); margin-top: 4px; }

.separateur[b-zbfztzjbsf] { width: 1px; height: 34px; background: var(--border); flex-shrink: 0; }

/* --- Ruban d'étapes ----------------------------------------------------- */

.etapes[b-zbfztzjbsf] {
  display: flex;
  align-items: center;
  gap: 2px;
  padding: 6px 10px;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 10px;
  overflow-x: auto;
}

.chevron[b-zbfztzjbsf] { color: var(--text-faint); flex-shrink: 0; }

.etape[b-zbfztzjbsf] {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 8px 14px;
  background: none;
  border: none;
  border-radius: 7px;
  font-size: 13px;
  font-weight: 400;
  color: var(--text-muted);
  white-space: nowrap;
}

.etape:hover[b-zbfztzjbsf] { background: var(--surface); }
.etape.active[b-zbfztzjbsf] { background: var(--surface); color: var(--text); font-weight: 600; }

.jeton[b-zbfztzjbsf] {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  border: 1.5px solid var(--border);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 11.5px;
  font-weight: 600;
  color: var(--text-faint);
  flex-shrink: 0;
}

.etape.active .jeton[b-zbfztzjbsf] {
  background: var(--accent);
  border-color: var(--accent);
  color: white;
}

.jeton.franchie[b-zbfztzjbsf] {
  background: var(--success);
  border-color: var(--success);
  color: white;
}

/* --- Colonnes de contenu ------------------------------------------------ */

.colonne[b-zbfztzjbsf] {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.colonne-etroite[b-zbfztzjbsf] {
  width: 100%;
  max-width: 820px;
  align-self: center;
}

.carte[b-zbfztzjbsf] {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 20px 22px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.carte h2[b-zbfztzjbsf] { margin: 0; font-size: 14.5px; font-weight: 600; }

.sous-titre[b-zbfztzjbsf] {
  margin: -8px 0 0;
  font-size: 12.5px;
  color: var(--text-muted);
  line-height: 1.55;
}

.entete-section[b-zbfztzjbsf] {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
}

.indice[b-zbfztzjbsf] {
  margin: -8px 0 0;
  font-size: 12px;
  color: var(--text-muted);
  line-height: 1.5;
}

.actions[b-zbfztzjbsf] { display: flex; justify-content: flex-end; gap: 8px; }
.btn-sm[b-zbfztzjbsf] { padding: 8px 14px; font-size: 12.5px; }

/* --- Champs -------------------------------------------------------------- */

.champ[b-zbfztzjbsf] { margin: 0; }

.etiquette-champ[b-zbfztzjbsf] {
  display: block;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: 6px;
}

.champ input[b-zbfztzjbsf], .champ select[b-zbfztzjbsf], .champ textarea[b-zbfztzjbsf] { font-size: 13.5px; }
.champ textarea[b-zbfztzjbsf] { line-height: 1.6; resize: vertical; }
.champ input[readonly][b-zbfztzjbsf] { background: var(--surface-2); color: var(--text-muted); }

.grille-code-nom[b-zbfztzjbsf] { display: grid; grid-template-columns: 140px 1fr; gap: 14px; }

.grille-champs[b-zbfztzjbsf] {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px;
}

.champ-double[b-zbfztzjbsf] { grid-column: span 2; }

.case-hors-chaine[b-zbfztzjbsf] {
  display: flex;
  align-items: flex-start;
  gap: 9px;
  margin: 0;
  font-size: 12.5px;
  font-weight: 400;
  color: var(--text-muted);
  line-height: 1.5;
  cursor: pointer;
}

.case-hors-chaine input[b-zbfztzjbsf] { width: auto; margin: 2px 0 0; flex-shrink: 0; }

/* --- Situations couvertes ------------------------------------------------ */

.liste-situations[b-zbfztzjbsf] { display: flex; flex-direction: column; gap: 8px; }

.situation[b-zbfztzjbsf] {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 11px 14px;
  border: 1px solid var(--border);
  border-radius: 8px;
}

.texte-situation[b-zbfztzjbsf] { flex: 1; min-width: 0; font-size: 13px; }
.cause[b-zbfztzjbsf] { font-size: 13.5px; font-weight: 500; }
.phenomene[b-zbfztzjbsf] { font-size: 11.5px; color: var(--text-muted); margin-top: 3px; }
.plr-situation[b-zbfztzjbsf] { text-align: right; flex-shrink: 0; font-size: 15px; font-weight: 700; }

.marque-ok[b-zbfztzjbsf] { color: oklch(45% 0.12 150); flex-shrink: 0; }
.marque-manque[b-zbfztzjbsf] { color: oklch(50% 0.16 35); flex-shrink: 0; }

.statut-situation[b-zbfztzjbsf] { font-size: 12.5px; font-weight: 600; flex-shrink: 0; }
.statut-situation.etabli[b-zbfztzjbsf] { color: oklch(35% 0.11 150); }
.statut-situation.insuffisant[b-zbfztzjbsf] { color: oklch(42% 0.15 35); }

.bandeau-exigence[b-zbfztzjbsf] {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 16px;
  border-radius: 8px;
  background: var(--accent-soft);
  border: 1px solid oklch(86% 0.04 200);
}

.grand-niveau[b-zbfztzjbsf] { font-size: 22px; font-weight: 700; color: var(--accent-dark); }
.titre-exigence[b-zbfztzjbsf] { font-size: 13px; font-weight: 600; color: var(--accent-dark); }

.detail-exigence[b-zbfztzjbsf] {
  font-size: 12px;
  color: var(--accent-dark);
  opacity: 0.85;
  margin-top: 2px;
  line-height: 1.5;
}

.avis[b-zbfztzjbsf] {
  margin: 0;
  font-size: 12.5px;
  color: oklch(38% 0.12 75);
  line-height: 1.5;
}

.pied-etape[b-zbfztzjbsf] {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}

/* --- Deux origines du matériel ------------------------------------------ */

.deux-origines[b-zbfztzjbsf] { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }

.origine[b-zbfztzjbsf] {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 16px 18px;
  border-radius: 10px;
}

.origine svg[b-zbfztzjbsf] { flex-shrink: 0; margin-top: 1px; }

.origine-a-venir[b-zbfztzjbsf] {
  border: 1px dashed var(--border);
  background: var(--surface-2);
  color: var(--text-faint);
}

.origine-a-venir .titre-origine[b-zbfztzjbsf] { color: var(--text-muted); }

.origine-ici[b-zbfztzjbsf] {
  border: 1px solid oklch(86% 0.04 200);
  background: var(--accent-soft);
  color: var(--accent-dark);
}

.titre-origine[b-zbfztzjbsf] { font-size: 13px; font-weight: 600; }
.detail-origine[b-zbfztzjbsf] { font-size: 12px; margin-top: 3px; line-height: 1.5; }
.origine-ici .detail-origine[b-zbfztzjbsf] { opacity: 0.85; }

/* --- Nomenclature ------------------------------------------------------- */

.carte-tableau[b-zbfztzjbsf] { padding: 0; gap: 0; overflow-x: auto; }
.entete-tableau[b-zbfztzjbsf] { padding: 14px 16px; border-bottom: 1px solid var(--border); }
.vide-tableau[b-zbfztzjbsf] { margin: 0; padding: 22px 16px; line-height: 1.55; }

table[b-zbfztzjbsf] { width: 100%; border-collapse: collapse; }

th[b-zbfztzjbsf] {
  text-align: left;
  padding: 9px 12px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--text-muted);
  border-bottom: 1px solid var(--border);
  white-space: nowrap;
}

td[b-zbfztzjbsf] {
  padding: 11px 12px;
  font-size: 13px;
  border-bottom: 1px solid var(--border);
  vertical-align: top;
}

tbody tr:last-child td[b-zbfztzjbsf] { border-bottom: none; }
tr.hors-chaine[b-zbfztzjbsf] { background: var(--surface-2); }
tr.hors-chaine td[b-zbfztzjbsf] { color: var(--text-muted); }

.colonne-etroite-th[b-zbfztzjbsf] { width: 170px; }
.colonne-mince[b-zbfztzjbsf] { width: 74px; }
.colonne-moyenne[b-zbfztzjbsf] { width: 150px; }
.colonne-source[b-zbfztzjbsf] { width: 170px; }

.designation[b-zbfztzjbsf] { font-weight: 500; }
.provenance[b-zbfztzjbsf] { font-size: 11.5px; color: var(--text-muted); margin-top: 2px; }
.manque[b-zbfztzjbsf] { font-size: 11.5px; color: oklch(42% 0.15 35); margin-top: 2px; }
.source[b-zbfztzjbsf] { color: var(--text-muted); font-size: 12px; }

.actions-ligne[b-zbfztzjbsf] { white-space: nowrap; text-align: right; }

.btn-icone[b-zbfztzjbsf] {
  padding: 5px;
  background: none;
  border: none;
  color: var(--text-faint);
  border-radius: 5px;
}

.btn-icone:hover:not(:disabled)[b-zbfztzjbsf] { background: var(--surface-2); color: var(--text); }
.btn-icone-danger:hover:not(:disabled)[b-zbfztzjbsf] { background: var(--danger-soft); color: var(--danger); }
.btn-icone:disabled[b-zbfztzjbsf] { opacity: 0.4; cursor: default; }

.formulaire-composant[b-zbfztzjbsf] { background: var(--surface-2); }

/* --- Avis ambre --------------------------------------------------------- */

.avis-ambre[b-zbfztzjbsf] {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 14px 16px;
  border-radius: 8px;
  background: var(--warning-soft);
  border: 1px solid oklch(84% 0.07 75);
  font-size: 12.5px;
  line-height: 1.55;
  color: oklch(38% 0.12 75);
}

.avis-ambre svg[b-zbfztzjbsf] { flex-shrink: 0; margin-top: 1px; color: oklch(45% 0.14 75); }
.avis-ambre strong[b-zbfztzjbsf] { font-weight: 600; }

/* --- Modélisation ------------------------------------------------------- */

.entete-modelisation[b-zbfztzjbsf] {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
}

.entete-modelisation h2[b-zbfztzjbsf] { margin: 0 0 3px; font-size: 14.5px; font-weight: 600; }

.grille-sous-systemes[b-zbfztzjbsf] {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 16px;
  align-items: stretch;
}

.bande-chaine[b-zbfztzjbsf] {
  flex-direction: row;
  align-items: center;
  gap: 18px;
  padding: 16px 20px;
  flex-wrap: wrap;
}

.somme[b-zbfztzjbsf] {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: 1;
  flex-wrap: wrap;
}

.operateur[b-zbfztzjbsf] { font-size: 15px; color: var(--text-faint); }
.terme[b-zbfztzjbsf] { text-align: center; }
.valeur-terme[b-zbfztzjbsf] { font-size: 12.5px; font-weight: 500; }
.role-terme[b-zbfztzjbsf] { font-size: 10.5px; color: var(--text-muted); margin-top: 2px; }

.terme-total[b-zbfztzjbsf] {
  padding: 6px 14px;
  border-radius: 7px;
  background: var(--accent-soft);
}

.terme-total .valeur-terme[b-zbfztzjbsf] { font-size: 14px; font-weight: 700; color: var(--accent-dark); }
.terme-total .role-terme[b-zbfztzjbsf] { color: var(--accent-dark); }

.conclusion-chaine[b-zbfztzjbsf] { display: flex; align-items: center; gap: 12px; }
.texte-conclusion[b-zbfztzjbsf] { text-align: right; }
.titre-conclusion[b-zbfztzjbsf] { font-size: 12.5px; font-weight: 600; }
.titre-conclusion.etabli[b-zbfztzjbsf] { color: oklch(35% 0.11 150); }
.titre-conclusion.refus[b-zbfztzjbsf] { color: oklch(42% 0.15 35); }
.texte-conclusion .texte-muet[b-zbfztzjbsf] { font-size: 11.5px; }

/* --- Verdict ------------------------------------------------------------ */

.verdict[b-zbfztzjbsf] {
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 20px 24px;
  border-radius: 10px;
}

.pastille-verdict[b-zbfztzjbsf] {
  width: 50px;
  height: 50px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  color: white;
}

.texte-verdict[b-zbfztzjbsf] { flex: 1; min-width: 0; }
.titre-verdict[b-zbfztzjbsf] { font-size: 16px; font-weight: 600; }
.detail-verdict[b-zbfztzjbsf] { font-size: 13px; margin-top: 4px; line-height: 1.55; }

.note-verdict[b-zbfztzjbsf] {
  font-size: 12.5px;
  line-height: 1.55;
  margin-top: 9px;
  padding-top: 9px;
  border-top: 1px solid currentColor;
  opacity: 0.85;
}

.motifs[b-zbfztzjbsf] { margin: 6px 0 0; padding-left: 20px; font-size: 13px; line-height: 1.6; }

.verdict-ok[b-zbfztzjbsf] {
  background: var(--success-soft);
  border: 1px solid oklch(86% 0.05 150);
  color: oklch(35% 0.1 150);
}

.verdict-ok .pastille-verdict[b-zbfztzjbsf] { background: oklch(45% 0.12 150); }
.verdict-ok .titre-verdict[b-zbfztzjbsf] { color: oklch(32% 0.11 150); }

.verdict-insuffisant[b-zbfztzjbsf] {
  background: var(--warning-soft);
  border: 1px solid oklch(84% 0.07 75);
  color: oklch(38% 0.11 75);
}

.verdict-insuffisant .pastille-verdict[b-zbfztzjbsf] { background: oklch(52% 0.14 75); }
.verdict-insuffisant .titre-verdict[b-zbfztzjbsf] { color: oklch(36% 0.12 75); }

.verdict-refus[b-zbfztzjbsf] {
  background: var(--danger-soft);
  border: 1px solid oklch(80% 0.08 35);
  color: oklch(40% 0.13 35);
  align-items: flex-start;
}

.verdict-refus .pastille-verdict[b-zbfztzjbsf] { background: oklch(48% 0.16 35); width: 44px; height: 44px; }
.verdict-refus .titre-verdict[b-zbfztzjbsf] { color: oklch(36% 0.15 35); font-size: 15.5px; }

.marge[b-zbfztzjbsf] {
  text-align: center;
  padding-left: 20px;
  border-left: 1px solid currentColor;
  flex-shrink: 0;
}

.marge .etiq[b-zbfztzjbsf] { color: inherit; opacity: 0.8; }
.valeur-marge[b-zbfztzjbsf] { font-size: 19px; font-weight: 700; margin-top: 2px; }

/* --- Chemin du calcul --------------------------------------------------- */

.etape-calcul[b-zbfztzjbsf] {
  display: grid;
  grid-template-columns: 18px 1fr auto;
  align-items: baseline;
  gap: 12px;
  padding: 9px 0;
  border-bottom: 1px solid var(--border);
}

.etape-calcul:last-child[b-zbfztzjbsf] { border-bottom: none; }
.rang[b-zbfztzjbsf] { font-size: 11.5px; color: var(--text-faint); }
.enonce-calcul[b-zbfztzjbsf] { font-size: 12.5px; line-height: 1.5; }
.valeur-calcul[b-zbfztzjbsf] { font-size: 12.5px; font-weight: 500; text-align: right; }
.forte .valeur-calcul[b-zbfztzjbsf] { font-size: 13.5px; font-weight: 700; }

/* --- Écrans étroits ----------------------------------------------------- */

@media (max-width: 900px) {
  .page[b-zbfztzjbsf] { padding: 18px 16px 48px; }
  .bandeau-fonction[b-zbfztzjbsf] { flex-direction: column; align-items: flex-start; gap: 14px; }
  .deux-origines[b-zbfztzjbsf] { grid-template-columns: 1fr; }
  .grille-code-nom[b-zbfztzjbsf] { grid-template-columns: 1fr; }
  .champ-double[b-zbfztzjbsf] { grid-column: span 1; }
  .pied-etape[b-zbfztzjbsf] { flex-direction: column; align-items: stretch; gap: 12px; }
  .verdict[b-zbfztzjbsf] { flex-direction: column; align-items: flex-start; }
  .marge[b-zbfztzjbsf] { padding-left: 0; border-left: none; text-align: left; }
}
/* /Components/Pages/Projets/FonctionsSecurite.razor.rz.scp.css */
/* Reprend la matière des écrans d'analyse : c'est la même démarche, elle doit se lire de la
   même façon. Le CSS scopé de Blazor étant par composant, ces règles sont volontairement
   dupliquées plutôt que jetées dans app.css, où elles s'appliqueraient à toute l'application. */

.page[b-ivbz8u5v1f] {
    padding: 24px 28px 40px;
    display: flex;
    flex-direction: column;
    gap: 18px;
}

.texte-muet[b-ivbz8u5v1f] { color: var(--text-muted); font-size: 13px; }
.intro[b-ivbz8u5v1f] { margin: 0; max-width: 82ch; line-height: 1.6; }
.alerte-erreur[b-ivbz8u5v1f] { margin: 0; }
.sans-marge[b-ivbz8u5v1f] { margin: 0; }

.carte-vide[b-ivbz8u5v1f] {
    background: var(--surface);
    border: 1px dashed var(--border);
    border-radius: 8px;
    padding: 26px 24px;
    text-align: center;
}

.carte-vide p[b-ivbz8u5v1f] { margin: 0 0 6px; }
.carte-vide p:last-child[b-ivbz8u5v1f] { margin-bottom: 0; }

/* --- La liste des fonctions ------------------------------------------------- */

.liste-fonctions[b-ivbz8u5v1f] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.fonction[b-ivbz8u5v1f] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 14px 18px;
}

/* Le seul endroit où l'on hausse la voix : une fonction qui n'atteint pas ce qu'on lui
   demande est ce qu'on vient chercher sur cet écran. */
.fonction-insuffisante[b-ivbz8u5v1f] { border-left: 3px solid var(--danger); }

.fonction-entete[b-ivbz8u5v1f] {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.code-fonction[b-ivbz8u5v1f] {
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--accent-dark);
    background: var(--accent-soft);
    padding: 2px 8px;
    border-radius: 4px;
}

.nom-fonction[b-ivbz8u5v1f] { font-size: 14.5px; font-weight: 600; }

.verdict[b-ivbz8u5v1f] {
    font-size: 11.5px;
    font-weight: 500;
    padding: 2px 8px;
    border-radius: 999px;
}

.verdict-ok[b-ivbz8u5v1f] { color: var(--success); background: var(--success-soft); }
.verdict-insuffisant[b-ivbz8u5v1f] { color: var(--danger); background: var(--danger-soft); }
.verdict-attente[b-ivbz8u5v1f] { color: var(--text-muted); background: var(--surface-2); }

.btn-lien-modifier[b-ivbz8u5v1f], .btn-lien-supprimer[b-ivbz8u5v1f] {
    background: transparent;
    border: none;
    color: var(--text-faint);
    padding: 3px;
    cursor: pointer;
    display: inline-flex;
}

.btn-lien-modifier:hover[b-ivbz8u5v1f] { color: var(--accent); }
.btn-lien-supprimer:hover[b-ivbz8u5v1f] { color: var(--danger); }

/* Les deux boutons filent à droite ; le premier prend la marge. */
.fonction-entete .btn-lien-modifier[b-ivbz8u5v1f] { margin-left: auto; }

/* --- Les chiffres de la fonction -------------------------------------------- */

.fonction-chiffres[b-ivbz8u5v1f] {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 26px;
    margin-top: 10px;
}

.chiffre[b-ivbz8u5v1f] { display: flex; flex-direction: column; gap: 1px; }

.chiffre .etiquette[b-ivbz8u5v1f] {
    font-size: 10.5px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
}

.chiffre .valeur[b-ivbz8u5v1f] {
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 13.5px;
    font-weight: 600;
}

.chiffre .valeur-texte[b-ivbz8u5v1f] { font-size: 13px; }

.avis-provisoire[b-ivbz8u5v1f] {
    margin: 10px 0 0;
    font-size: 12px;
    color: var(--warning);
    line-height: 1.5;
}

/* --- Le formulaire d'édition ------------------------------------------------ */

.formulaire-fonction[b-ivbz8u5v1f] {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--border);
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.ligne-champs[b-ivbz8u5v1f] { display: flex; gap: 14px; flex-wrap: wrap; align-items: flex-end; }

.formulaire-fonction label[b-ivbz8u5v1f] { display: flex; flex-direction: column; gap: 4px; }

.champ-large[b-ivbz8u5v1f] { flex: 1; min-width: 240px; }
.champ-large input[b-ivbz8u5v1f] { width: 100%; }

.etiquette-champ[b-ivbz8u5v1f] {
    font-size: 11px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
}

.formulaire-fonction input[type="text"][b-ivbz8u5v1f], .formulaire-fonction select[b-ivbz8u5v1f] {
    padding: 6px 9px;
    font-size: 13px;
}

.indice[b-ivbz8u5v1f] { margin: 0; font-size: 12px; color: var(--text-muted); line-height: 1.5; max-width: 80ch; }

/* --- La couverture ---------------------------------------------------------- */

.couverture[b-ivbz8u5v1f] {
    background: var(--surface-2);
    border-radius: 6px;
    padding: 12px 14px;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.titre-couverture[b-ivbz8u5v1f] {
    font-size: 11.5px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
    margin-bottom: 4px;
}

/* Même spécificité que `.formulaire-fonction label`, qui empile en colonne : sans ça la
   case se retrouve au-dessus de son libellé. */
.formulaire-fonction label.case-ligne[b-ivbz8u5v1f] {
    flex-direction: row;
    align-items: baseline;
    gap: 9px;
    font-size: 13px;
    cursor: pointer;
    padding: 3px 0;
}

.formulaire-fonction label.case-ligne input[type="checkbox"][b-ivbz8u5v1f] {
    width: auto;
    margin: 0;
    flex: none;
    position: relative;
    top: 2px;
}

/* Verrouillée parce qu'une mesure la cite : on la montre cochée et grise plutôt que de la
   retirer, sinon on chercherait pourquoi elle a disparu. */
.case-verrouillee[b-ivbz8u5v1f] { opacity: 0.62; cursor: not-allowed; }

.texte-ligne[b-ivbz8u5v1f] { flex: 1; }

.plr-ligne[b-ivbz8u5v1f] {
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 11.5px;
    color: var(--text-muted);
    white-space: nowrap;
}

.actions-formulaire[b-ivbz8u5v1f] { display: flex; justify-content: flex-end; gap: 8px; }

.btn-sm[b-ivbz8u5v1f] { padding: 6px 12px; font-size: 13px; }

/* --- L'ajout ---------------------------------------------------------------- */

.carte-ajout[b-ivbz8u5v1f] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 14px 18px;
}

.titre-ajout[b-ivbz8u5v1f] { font-size: 13px; font-weight: 600; margin-bottom: 10px; }

.formulaire-ajout[b-ivbz8u5v1f] { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; }
.formulaire-ajout input[type="text"][b-ivbz8u5v1f] { padding: 7px 10px; font-size: 13px; }
.formulaire-ajout .champ-code[b-ivbz8u5v1f] { width: 150px; flex: none; }
.formulaire-ajout input[type="text"]:not(.champ-code)[b-ivbz8u5v1f] { flex: 1; }

/* Le nom mène à la fiche : la liste dit l'essentiel, la fiche porte le travail. */
a.nom-fonction[b-ivbz8u5v1f] { color: var(--text); text-decoration: none; }
a.nom-fonction:hover[b-ivbz8u5v1f] { color: var(--accent); text-decoration: underline; }

.btn-fiche[b-ivbz8u5v1f] {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 6px 11px;
  border-radius: 6px;
  border: 1px solid var(--border);
  background: var(--surface);
  font-size: 12px;
  font-weight: 600;
  color: var(--text-muted);
  text-decoration: none;
  white-space: nowrap;
}

.btn-fiche:hover[b-ivbz8u5v1f] {
  background: var(--accent-soft);
  border-color: oklch(86% 0.04 200);
  color: var(--accent-dark);
  text-decoration: none;
}

/* --- D'où vient l'exigence ---------------------------------------------------
   Deux sources se rencontrent sur chaque fonction — le graphe de risque et la norme de
   type C — et la plus exigeante l'emporte. Laquelle a tranché est ce qu'un lecteur veut
   savoir en premier : c'est ce qu'on lui oppose. */

.origine-plr[b-ivbz8u5v1f] {
    display: block;
    font-size: 11px;
    color: var(--text-faint);
    margin-top: 3px;
    white-space: nowrap;
}

.avis-norme[b-ivbz8u5v1f] {
    margin: 10px 0 0;
    padding: 9px 12px;
    border-radius: 6px;
    background: var(--accent-soft);
    color: var(--accent-dark);
    font-size: 12.5px;
    line-height: 1.55;
}
/* /Components/Pages/Projets/GuideCotationGfop.razor.rz.scp.css */
/* Les échelles de cotation, devenues le sélecteur lui-même : chaque définition est une
   carte cliquable. La cible est donc le texte qu'on lit pour décider, et non plus une
   pastille de trois caractères posée à côté. */

.guide-cotation[b-0ybm7bxfhc] {
    margin-top: 6px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 6px;
}

.cartes[b-0ybm7bxfhc] {
    display: flex;
    flex-direction: column;
    gap: 6px;
    width: 100%;
}

/* Un bouton, mais qui doit se lire comme un paragraphe : on défait donc tout ce que le
   navigateur pose sur `button` — centrage, police système, troncature. */
.carte-cote[b-0ybm7bxfhc] {
    display: flex;
    flex-direction: column;
    /* Le navigateur pose `align-items: center` sur tout `button` : sans ce rappel, le
       titre se centrait et chaque bloc de texte se réduisait à sa largeur utile, la
       première ligne rentrant sous les suivantes. */
    align-items: stretch;
    gap: 4px;
    width: 100%;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-left: 2px solid var(--border);
    border-radius: 0 6px 6px 0;
    background: var(--surface-2);
    font: inherit;
    font-size: 12.5px;
    line-height: 1.5;
    color: var(--text-muted);
    text-align: left;
    white-space: normal;
    cursor: pointer;
    transition: border-color 0.12s ease, background 0.12s ease;
}

.carte-cote:hover[b-0ybm7bxfhc] {
    border-color: var(--accent);
    border-left-color: var(--accent);
    background: var(--surface);
}

.carte-cote:focus-visible[b-0ybm7bxfhc] {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
}

/* Retenue : le liseré porte le choix. Un fond plein sur un pavé de cette taille se lirait
   comme une alerte plutôt que comme une sélection. */
.carte-cote.choisie[b-0ybm7bxfhc] {
    border-color: var(--accent);
    border-left: 2px solid var(--accent);
    background: var(--accent-soft);
    color: var(--text);
}

.entete-cote[b-0ybm7bxfhc] {
    display: flex;
    align-items: center;
    gap: 8px;
}

.cote[b-0ybm7bxfhc] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 30px;
    padding: 2px 6px;
    border-radius: 4px;
    background: var(--accent-soft);
    color: var(--accent-dark);
    font-family: 'IBM Plex Mono', monospace;
    font-size: 11.5px;
    font-weight: 600;
}

/* Sur fond accentué, la pastille du code doit reprendre du contraste. */
.carte-cote.choisie .cote[b-0ybm7bxfhc] {
    background: var(--accent);
    color: #fff;
}

.titre-cote[b-0ybm7bxfhc] {
    font-size: 12.5px;
    font-weight: 600;
    color: var(--text);
}

.definition[b-0ybm7bxfhc] {
    display: block;
}

.puces[b-0ybm7bxfhc] {
    margin: 0;
    padding-left: 16px;
}

.puces li + li[b-0ybm7bxfhc] {
    margin-top: 4px;
}

.exemples[b-0ybm7bxfhc],
.note[b-0ybm7bxfhc] {
    display: block;
    color: var(--text-faint);
}

.note[b-0ybm7bxfhc] {
    font-style: italic;
}

/* Le repli : un lien discret, pas un bouton de plus dans un écran qui en compte déjà. */
.bascule[b-0ybm7bxfhc] {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 2px 0;
    background: none;
    border: 0;
    font-size: 12px;
    color: var(--text-faint);
    cursor: pointer;
}

.bascule[b-0ybm7bxfhc]::before {
    content: '';
    width: 5px;
    height: 5px;
    border-right: 1.5px solid currentColor;
    border-bottom: 1.5px solid currentColor;
    transform: rotate(45deg) translate(-2px, -2px);
}

.bascule:hover[b-0ybm7bxfhc] {
    color: var(--accent);
}

.bascule:focus-visible[b-0ybm7bxfhc] {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
    border-radius: 3px;
}

/* Les définitions viennent de l'API : quand elles manquent, le dire et offrir de
   reprendre, plutôt que d'afficher une liste de cotes sans texte — c'est le texte qui
   sert à choisir. */
.erreur-cotation[b-0ybm7bxfhc] {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    margin: 0;
    font-size: 12.5px;
    color: var(--danger);
}

.chargement-cotation[b-0ybm7bxfhc] {
    margin: 0;
    font-size: 12.5px;
    color: var(--text-muted);
}

/* Pas la bascule : son chevron annonce un dépliage, et reprendre un chargement n'en
   est pas un. */
.reprise[b-0ybm7bxfhc] {
    background: none;
    border: 0;
    padding: 0;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--accent);
    text-decoration: underline;
    cursor: pointer;
}

.reprise:focus-visible[b-0ybm7bxfhc] {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
    border-radius: 3px;
}
/* /Components/Pages/Projets/LimitesMachine.razor.rz.scp.css */
.page[b-qx2vmsy07g] {
    padding: 24px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.texte-muet[b-qx2vmsy07g] { color: var(--text-muted); font-size: 13px; }

.etat-vide[b-qx2vmsy07g] {
    background: var(--surface);
    border: 1px dashed var(--border);
    border-radius: 8px;
    padding: 32px;
    text-align: center;
}

.etat-vide p:first-child[b-qx2vmsy07g] {
    margin: 0 0 4px;
    font-weight: 500;
    color: var(--text);
}

.carte-table[b-qx2vmsy07g] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

.entete-table[b-qx2vmsy07g] {
    padding: 14px 20px;
    border-bottom: 1px solid var(--border);
    font-size: 13px;
    font-weight: 600;
}

table[b-qx2vmsy07g] { border-collapse: collapse; width: 100%; }

th[b-qx2vmsy07g] {
    text-align: left;
    padding: 9px 20px;
    font-size: 11px;
    font-weight: 500;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    border-bottom: 1px solid var(--border);
}

td[b-qx2vmsy07g] {
    padding: 12px 20px;
    font-size: 13.5px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
}

tr:last-child td[b-qx2vmsy07g] { border-bottom: none; }

.nom-projet[b-qx2vmsy07g] { font-weight: 500; }

.tag[b-qx2vmsy07g] {
    font-size: 11.5px;
    padding: 3px 9px;
    border-radius: 100px;
    background: var(--accent-soft);
    color: var(--accent);
}

/* Une limite héritée d'une machine mère se lit ici mais se corrige là-bas : l'étiquette
   dit d'où elle vient, ce que l'absence de bouton d'édition ne suffirait pas à expliquer. */
.etiquette-heritee[b-qx2vmsy07g] {
    display: inline-block;
    margin-left: 8px;
    padding: 1px 7px;
    border-radius: 999px;
    background: var(--surface-2);
    color: var(--text-faint);
    font-size: 10.5px;
    font-weight: 400;
    letter-spacing: 0.02em;
}

/* --- Pièces jointes (section 5.12) ------------------------------------ */

.colonne-trombone[b-qx2vmsy07g] {
    width: 44px;
    text-align: center;
}

/* Le panneau se déplie sous la ligne concernée plutôt que dans sa cellule :
   une pièce jointe et sa vignette ne tiennent pas dans la hauteur d'une ligne. */
.ligne-documents td[b-qx2vmsy07g] {
    background: var(--surface-2);
    padding: 12px 20px;
}
/* /Components/Pages/Projets/ListeSituationsDangereuses.razor.rz.scp.css */
.liste-lignes[b-f8hydx9jh0] {
    width: 320px;
    flex-shrink: 0;
    border-right: 1px solid var(--border);
    overflow-y: auto;
    padding: 14px 10px;
}

.entete-liste[b-f8hydx9jh0] {
    font-size: 11px;
    font-weight: 600;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    padding: 4px 8px 10px;
}

.item-ligne[b-f8hydx9jh0] {
    padding: 11px 12px;
    border-radius: 8px;
    cursor: pointer;
    margin-bottom: 2px;
}

.item-ligne:hover[b-f8hydx9jh0] { background: var(--surface-2); }

.item-ligne.actif[b-f8hydx9jh0] {
    background: var(--accent-soft);
    border: 1px solid oklch(80% 0.05 200);
}

.item-entete[b-f8hydx9jh0] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 8px;
}

.item-titre[b-f8hydx9jh0] {
    font-size: 13.5px;
    font-weight: 500;
    line-height: 1.35;
}

/* La description de la cause, sous le titre : c'est elle qui départage deux situations
   portant le même phénomène. Saisie libre, donc bornée à deux lignes — un paragraphe
   entier déferait le balayage de la colonne. */
.item-description[b-f8hydx9jh0] {
    font-size: 12px;
    color: var(--text-muted);
    line-height: 1.35;
    margin-top: 3px;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    overflow: hidden;
}

.item-soustitre[b-f8hydx9jh0] {
    font-size: 11.5px;
    color: var(--text-faint);
    margin-top: 3px;
}

.badge-indice[b-f8hydx9jh0] {
    flex-shrink: 0;
    font-family: 'IBM Plex Mono', monospace;
    font-size: 11px;
    font-weight: 700;
    border-radius: 5px;
    padding: 2px 7px;
    color: white;
}

.badge-indice-vert[b-f8hydx9jh0] { background: var(--success); }
.badge-indice-orange[b-f8hydx9jh0] { background: var(--warning); color: oklch(30% 0.1 75); }
.badge-indice-rouge[b-f8hydx9jh0] { background: var(--danger); }
.badge-indice-neutre[b-f8hydx9jh0] { background: var(--border); color: var(--text-muted); }
/* Compteur discret dans la liste de gauche : indique qu'une situation porte des
   preuves terrain sans obliger à l'ouvrir. */
.item-trombone[b-f8hydx9jh0] {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    margin-left: 6px;
    font-size: 11px;
    font-weight: 600;
    color: var(--text-faint);
}

/* /Components/Pages/Projets/NormesApplicables.razor.rz.scp.css */
/* Reprend la matière des autres écrans du projet : même démarche, même lecture. Le CSS
   scopé de Blazor étant par composant, ces règles sont volontairement redéfinies plutôt
   que jetées dans app.css, où elles s'appliqueraient à toute l'application. */

.page[b-e7a2cqci72] {
    padding: 24px 28px 40px;
    display: flex;
    flex-direction: column;
    gap: 18px;
}

.page-chargement[b-e7a2cqci72] { padding: 40px 28px; }
.texte-muet[b-e7a2cqci72] { color: var(--text-muted); font-size: 13px; }
.intro[b-e7a2cqci72] { margin: 6px 0 0; max-width: 82ch; line-height: 1.6; }
.alerte-erreur[b-e7a2cqci72] { margin: 0; }

.entete-section[b-e7a2cqci72] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 24px;
}

.entete-section h2[b-e7a2cqci72] { margin: 0; font-size: 17px; font-weight: 600; }

.etat-vide[b-e7a2cqci72] {
    background: var(--surface);
    border: 1px dashed var(--border);
    border-radius: 8px;
    padding: 26px 24px;
    text-align: center;
    color: var(--text-muted);
    line-height: 1.6;
}

/* --- Les normes déclarées --------------------------------------------------- */

.liste-normes[b-e7a2cqci72] { display: flex; flex-direction: column; gap: 12px; }

.carte-norme[b-e7a2cqci72] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 16px 18px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.entete-norme[b-e7a2cqci72] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 16px;
}

.ligne-reference[b-e7a2cqci72] {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

.reference[b-e7a2cqci72] { font-size: 14px; font-weight: 600; }
.titre-norme[b-e7a2cqci72] { font-size: 13px; color: var(--text-muted); margin-top: 3px; line-height: 1.5; }

/* La forme d'un jeton d'un côté, ce qu'il dit de l'autre : le nom partagé évite six copies
   de la même géométrie, et chaque variante ne porte plus que sa couleur. */
.jeton[b-e7a2cqci72] {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.02em;
    white-space: nowrap;
}

.jeton-type[b-e7a2cqci72] { background: var(--accent-soft); color: var(--accent-dark); }
.jeton-heritee[b-e7a2cqci72] { background: var(--surface-2); color: var(--text-muted); border: 1px solid var(--border); }
.jeton-transcrite[b-e7a2cqci72] { background: var(--surface-2); color: var(--text); }
.jeton-relue[b-e7a2cqci72] { background: var(--success-soft); color: oklch(35% 0.1 150); }

/* Une transcription que personne n'a repassée commande pourtant des niveaux de
   performance : elle se voit, sans crier au défaut. */
.jeton-non-relue[b-e7a2cqci72] { background: var(--warning-soft); color: oklch(38% 0.09 75); }

/* Une norme citée sans article transcrit ne prescrit rien. C'est un état légitime, pas une
   erreur — d'où le pointillé plutôt que le rouge. */
.jeton-vide[b-e7a2cqci72] {
    background: var(--surface-2);
    color: var(--text-faint);
    border: 1px dashed var(--border);
}

.etat-transcription[b-e7a2cqci72] {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

.explication[b-e7a2cqci72] { font-size: 12px; color: var(--text-muted); }

.compteurs[b-e7a2cqci72] { display: flex; gap: 16px; flex-wrap: wrap; }
.compteur[b-e7a2cqci72] { font-size: 12px; color: var(--text-muted); white-space: nowrap; }
.compteur b[b-e7a2cqci72] { font-size: 15px; color: var(--text); margin-right: 3px; }
.valeur-ok[b-e7a2cqci72] { color: var(--success); }

/* Le seul chiffre qui appelle un geste : les deux autres racontent ce qui a été fait. */
.valeur-alerte[b-e7a2cqci72] { color: var(--danger); }

/* Retirer une norme est un lien, pas un bouton plein : sans cette remise à plat il prend le
   style de bouton d'app.css et pèse autant que « Ajouter une norme ». */
.btn-lien-supprimer[b-e7a2cqci72] {
    background: transparent;
    border: none;
    padding: 2px;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--text-faint);
    cursor: pointer;
    flex-shrink: 0;
}

.btn-lien-supprimer:hover[b-e7a2cqci72] { color: var(--danger); }

/* --- La justification ------------------------------------------------------- */

.bloc-justification[b-e7a2cqci72] { display: flex; flex-direction: column; gap: 6px; }

.etiquette[b-e7a2cqci72] {
    font-size: 11.5px;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--text-muted);
}

.bloc-justification textarea[b-e7a2cqci72] {
    width: 100%;
    font-family: inherit;
    font-size: 13px;
    line-height: 1.55;
    padding: 9px 11px;
    border: 1px solid var(--border);
    border-radius: 6px;
    resize: vertical;
}

.pied-justification[b-e7a2cqci72] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
}

.aide[b-e7a2cqci72] { font-size: 12px; color: var(--text-faint); line-height: 1.5; }
.justification-lue[b-e7a2cqci72] { margin: 0; font-size: 13px; line-height: 1.6; }
.aucune-justification[b-e7a2cqci72] { margin: 0; font-size: 13px; color: var(--text-faint); font-style: italic; }

.signature-declaration[b-e7a2cqci72] {
    font-size: 11.5px;
    color: var(--text-faint);
    padding-top: 10px;
    border-top: 1px solid var(--border);
}

/* --- Le choix dans la bibliothèque ------------------------------------------ */

.voile[b-e7a2cqci72] {
    position: fixed;
    inset: 0;
    background: oklch(20% 0.014 250 / 0.34);
    z-index: 40;
}

.panneau-choix[b-e7a2cqci72] {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: min(640px, calc(100vw - 48px));
    max-height: calc(100vh - 96px);
    overflow: auto;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 22px 24px;
    z-index: 41;
    display: flex;
    flex-direction: column;
    gap: 14px;
}

.panneau-choix h3[b-e7a2cqci72] { margin: 0; font-size: 16px; font-weight: 600; }
.intro-choix[b-e7a2cqci72] { margin: 0; font-size: 13px; color: var(--text-muted); line-height: 1.55; }

.liste-choix[b-e7a2cqci72] { display: flex; flex-direction: column; gap: 8px; }

/* Le bouton par défaut du navigateur centre son contenu : sans cette remise à plat, chaque
   ligne de la liste se ramasse au milieu et le texte perd sa colonne. */
.option-norme[b-e7a2cqci72] {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 4px;
    width: 100%;
    text-align: left;
    padding: 12px 14px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    font-weight: 400;
}

.option-norme:hover[b-e7a2cqci72] { background: var(--surface-2); border-color: var(--accent); }
.option-norme .titre-norme[b-e7a2cqci72] { margin-top: 0; }
.etat-choix[b-e7a2cqci72] { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 4px; }

.pied-choix[b-e7a2cqci72] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding-top: 12px;
    border-top: 1px solid var(--border);
}
/* /Components/Pages/Projets/PartageProjet.razor.rz.scp.css */
.page[b-5qi7yh5hn8] {
    padding: 24px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.texte-muet[b-5qi7yh5hn8] { color: var(--text-muted); font-size: 13px; }
.intro[b-5qi7yh5hn8] { margin: 0; max-width: 760px; line-height: 1.55; }
.note[b-5qi7yh5hn8] { margin: 0; max-width: 760px; line-height: 1.55; }
.alerte-erreur[b-5qi7yh5hn8] { margin: 0; }

.alerte-succes[b-5qi7yh5hn8] {
    margin: 0;
    padding: 12px 14px;
    border-radius: 6px;
    background: var(--success-soft);
    border: 1px solid oklch(80% 0.07 150);
    color: oklch(35% 0.12 150);
    font-size: 13px;
}

.etat-vide[b-5qi7yh5hn8] { padding: 40px; text-align: center; }

.carte-liste[b-5qi7yh5hn8] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

.entete-liste[b-5qi7yh5hn8] {
    padding: 14px 20px;
    border-bottom: 1px solid var(--border);
}

.titre-liste[b-5qi7yh5hn8] { font-size: 13.5px; font-weight: 600; }
.soustitre-liste[b-5qi7yh5hn8] { font-size: 12px; color: var(--text-muted); margin-top: 1px; }

table[b-5qi7yh5hn8] { border-collapse: collapse; width: 100%; }

th[b-5qi7yh5hn8] {
    text-align: left;
    padding: 9px 20px;
    font-size: 11px;
    font-weight: 500;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    border-bottom: 1px solid var(--border);
}

td[b-5qi7yh5hn8] {
    padding: 9px 20px;
    font-size: 13px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
}

tr:last-child td[b-5qi7yh5hn8] { border-bottom: none; }

.cellule-forte[b-5qi7yh5hn8] { font-weight: 500; }

td select[b-5qi7yh5hn8] { padding: 5px 8px; font-size: 12.5px; }

.badge-proprietaire[b-5qi7yh5hn8] {
    font-size: 11px;
    font-weight: 600;
    padding: 2px 8px;
    border-radius: 4px;
    background: var(--accent-soft);
    color: var(--accent-dark);
}

.colonne-actions[b-5qi7yh5hn8] { width: 60px; text-align: right; }

.btn-lien-supprimer[b-5qi7yh5hn8] {
    background: transparent;
    border: none;
    color: var(--text-faint);
    cursor: pointer;
    padding: 2px;
    display: inline-flex;
}

.btn-lien-supprimer:hover[b-5qi7yh5hn8] { color: var(--danger); }
.btn-lien-supprimer:disabled[b-5qi7yh5hn8] { opacity: 0.4; cursor: default; }

.formulaire-ajout[b-5qi7yh5hn8] {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 14px 20px;
    border-top: 1px solid var(--border);
    background: var(--surface-2);
}

.formulaire-ajout input[type="email"][b-5qi7yh5hn8] {
    flex: 1;
    padding: 7px 10px;
    font-size: 13px;
}

.formulaire-ajout select[b-5qi7yh5hn8] {
    padding: 7px 10px;
    font-size: 13px;
    width: 120px;
    flex-shrink: 0;
}

.btn-xs[b-5qi7yh5hn8] { padding: 6px 12px; font-size: 12.5px; }
.btn-xs:disabled[b-5qi7yh5hn8] { opacity: 0.5; cursor: default; }
/* /Components/Pages/Projets/PhotoAnnotee.razor.rz.scp.css */
/* Le calque se pose sur des photos de terrain dont on ne sait rien : les couleurs du
   thème ne garantiraient pas le contraste. Rouge franc cerné de blanc, valeurs en dur
   et identiques à celles du fichier de rendu (GenerateurHtmlRapport.StylesAnnotations)
   pour que l'écran et la page imprimée montrent exactement la même chose. */

.cadre-photo[b-4jk6cl9wew] {
    position: relative;
    display: block;
    line-height: 0;
    border-radius: 6px;
    overflow: hidden;
    border: 1px solid var(--border);
    background: var(--surface-2);
}

.cadre-actif[b-4jk6cl9wew] {
    cursor: crosshair;
}

.photo[b-4jk6cl9wew] {
    display: block;
    width: 100%;
    height: auto;
}

.annotation[b-4jk6cl9wew] {
    position: absolute;
    color: #ffffff;
    /* Transparent aux clics par défaut : sinon un repère déjà posé volerait le clic
       destiné à la photo, et on ne pourrait plus rien placer par-dessus. */
    pointer-events: none;
}

.annotations-cliquables .annotation[b-4jk6cl9wew] {
    pointer-events: auto;
    cursor: pointer;
}

/* --- Repère : un anneau qui entoure le point sans le masquer ------------- */

.repere[b-4jk6cl9wew] {
    transform: translate(-50%, -50%);
}

.cible[b-4jk6cl9wew] {
    display: block;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    border: 3px solid #e03a12;
    box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.9), inset 0 0 0 2px rgba(255, 255, 255, 0.9);
}

.repere .pastille[b-4jk6cl9wew] {
    position: absolute;
    left: 100%;
    top: -10px;
    margin-left: -10px;
}

/* --- Flèche : le fût part de la pointe vers l'arrière -------------------- */

/* Hauteur nulle et origine sur le bord gauche : la rotation fait pivoter la queue
   autour de la pointe, qui reste collée au point désigné. */
.fleche[b-4jk6cl9wew] {
    height: 0;
    transform-origin: left center;
}

/* Démarre sous la tête : son extrémité carrée, contour blanc compris, est ainsi
   recouverte, et les deux liserés blancs se rejoignent sans marche. */
.fleche-fut[b-4jk6cl9wew] {
    position: absolute;
    left: 14px;
    right: 0;
    top: -2px;
    height: 4px;
    background: #e03a12;
    box-shadow: 0 0 0 1.5px #ffffff;
}

/* SVG et non triangle CSS : un triangle en bordures ne peut porter qu'un halo
   rectangulaire, alors qu'un tracé prend un contour qui épouse sa forme
   (paint-order dessine le liseré sous le remplissage). L'apex du tracé est en x = 2 du
   viewBox et l'élément est décalé de -2px : la pointe tombe donc exactement sur le
   point désigné. */
.fleche-tete[b-4jk6cl9wew] {
    position: absolute;
    left: -2px;
    top: -9px;
    width: 20px;
    height: 18px;
    overflow: visible;
}

.fleche-tete path[b-4jk6cl9wew] {
    fill: #e03a12;
    stroke: #ffffff;
    stroke-width: 3;
    stroke-linejoin: round;
    paint-order: stroke;
}

.fleche .pastille[b-4jk6cl9wew] {
    position: absolute;
    right: 0;
    top: 0;
}

/* --- Pastille numérotée --------------------------------------------------- */

.pastille[b-4jk6cl9wew] {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: #e03a12;
    border: 1.5px solid #ffffff;
    font-family: 'IBM Plex Mono', monospace;
    font-size: 11px;
    font-weight: 600;
    line-height: 1;
}

/* --- Sélection dans l'éditeur --------------------------------------------- */

.selectionnee .cible[b-4jk6cl9wew],
.selectionnee .pastille[b-4jk6cl9wew] {
    outline: 2px solid #ffffff;
    outline-offset: 2px;
}

.selectionnee .fleche-fut[b-4jk6cl9wew] {
    box-shadow: 0 0 0 2.5px #ffffff;
}

.selectionnee .fleche-tete path[b-4jk6cl9wew] {
    stroke-width: 5;
}
/* /Components/Pages/Projets/ProjetEntete.razor.rz.scp.css */
.entete-projet[b-cj574ca36d] {
    padding: 24px 28px 0;
    border-bottom: 1px solid var(--border);
    background: var(--surface);
    /* Ne se comprime pas : les onglets passent à deux lignes dans une fenêtre étroite, et
       c'est à l'écran de céder la place, pas à la navigation de s'écraser. */
    flex-shrink: 0;
}

.fil-ariane[b-cj574ca36d] {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 12.5px;
    color: var(--text-muted);
    margin-bottom: 16px;
}

.fil-ariane span:last-child[b-cj574ca36d] {
    color: var(--text);
    font-weight: 500;
}

/* La sous-navigation — rangée, pastilles, filet de groupe, écart à droite — vit dans
   `app.css`, en une seule définition partagée par les quatre portails. */

/* Conservé ici et sans effet visible : le filet est un élément de ce fichier, donc le CSS
   à portée limitée l'atteint. Il reprend la règle globale pour que l'inspecteur montre
   d'où vient la mesure. */
.separateur-nav[b-cj574ca36d] {
    width: 1px;
    height: 18px;
    background: var(--border);
    margin: 0 8px;
}


/* --- Renommage du dossier ------------------------------------------------ */

/* Discret au repos : le fil d'Ariane est une adresse, pas une barre d'outils. Le crayon
   ne se colore qu'au survol, comme ailleurs dans l'administration. */
.btn-renommer[b-cj574ca36d] {
    background: transparent;
    border: none;
    padding: 2px 4px;
    margin-left: 2px;
    color: var(--text-faint);
    line-height: 0;
    cursor: pointer;
    border-radius: 4px;
}

.btn-renommer:hover[b-cj574ca36d] { color: var(--accent); background: var(--surface-2); }

.carte-renommage[b-cj574ca36d] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    margin: -6px 0 16px;
    padding: 14px 16px;
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 8px;
    max-width: 760px;
}

/* Le nom prend la moitié, la description le reste : c'est le nom qu'on vient corriger. */
.champs-renommage[b-cj574ca36d] {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr);
    gap: 12px;
}

.champs-renommage .champ[b-cj574ca36d] { display: flex; flex-direction: column; gap: 4px; }

.champs-renommage label[b-cj574ca36d] {
    font-size: 12px;
    font-weight: 500;
    color: var(--text-muted);
    margin: 0;
}

.champs-renommage input[b-cj574ca36d] { font-size: 13.5px; padding: 8px 10px; }

.alerte-renommage[b-cj574ca36d] {
    margin: 0;
    font-size: 12.5px;
    color: oklch(38% 0.15 35);
}

.actions-renommage[b-cj574ca36d] { display: flex; justify-content: flex-end; gap: 8px; }

.btn-xs[b-cj574ca36d] { padding: 6px 12px; font-size: 12.5px; }

@media (max-width: 720px) {
    .champs-renommage[b-cj574ca36d] { grid-template-columns: 1fr; }
}
/* /Components/Pages/Projets/ReductionRisque.razor.rz.scp.css */
.page-chargement[b-1g77bwnukn] {
    padding: 40px 28px;
}

.ecran[b-1g77bwnukn] {
    display: flex;
    flex-direction: column;
    /* Occupe la place laissée par l'en-tête de projet, quelle que soit sa hauteur.
       Un calc() sur 100vh supposerait une barre d'onglets d'une seule ligne. */
    flex: 1;
    min-height: 0;
}

.entete-ecran[b-1g77bwnukn] {
    padding: 20px 28px 16px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-shrink: 0;
}

.titre-section[b-1g77bwnukn] {
    font-size: 16px;
    font-weight: 600;
}

.soustitre-section[b-1g77bwnukn] {
    font-size: 12.5px;
    color: var(--text-muted);
    margin-top: 2px;
}

.btn-sm[b-1g77bwnukn] {
    padding: 9px 14px;
    font-size: 13px;
}

.alerte-globale[b-1g77bwnukn] {
    margin: 0 28px 16px;
}

.texte-muet[b-1g77bwnukn] { color: var(--text-muted); font-size: 13px; }

.etat-vide[b-1g77bwnukn] {
    background: var(--surface);
    border: 1px dashed var(--border);
    border-radius: 8px;
    padding: 32px;
    text-align: center;
}

.etat-vide p:first-child[b-1g77bwnukn] {
    margin: 0 0 4px;
    font-weight: 500;
    color: var(--text);
}

/* --- Formulaire de mesure ------------------------------------------- */

.champ[b-1g77bwnukn] { margin-bottom: 4px; }

.champ textarea[b-1g77bwnukn] {
    width: 100%;
    font-family: inherit;
    font-size: 13.5px;
    padding: 10px 12px;
    border: 1px solid var(--border);
    border-radius: 6px;
    background: var(--surface);
    color: var(--text);
    resize: vertical;
}

.actions-formulaire[b-1g77bwnukn] {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    margin-top: 12px;
}

.btn-xs[b-1g77bwnukn] {
    padding: 6px 11px;
    font-size: 12px;
}

/* --- Corps deux colonnes -------------------------------------------- */

.corps[b-1g77bwnukn] {
    flex: 1;
    display: flex;
    min-height: 0;
    border-top: 1px solid var(--border);
}

/* --- Détail ----------------------------------------------------------- */

.detail-ligne[b-1g77bwnukn] {
    flex: 1;
    min-width: 0;
    overflow-y: auto;
    padding: 24px 32px 40px;
    display: flex;
    flex-direction: column;
    gap: 22px;
}

.detail-entete h2[b-1g77bwnukn] {
    margin: 2px 0 0;
    font-size: 18px;
    font-weight: 600;
}

.detail-fil[b-1g77bwnukn] {
    font-size: 12px;
    color: var(--text-muted);
}

.section-gfop[b-1g77bwnukn] {
    border-top: 1px solid var(--border);
    padding-top: 20px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.ligne-cote label[b-1g77bwnukn] {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    margin-bottom: 8px;
}

.bandeau-indice[b-1g77bwnukn] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 18px;
    border-radius: 8px;
    border: 1px solid transparent;
}

.bandeau-etiquette[b-1g77bwnukn] {
    font-size: 11.5px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.bandeau-valeur[b-1g77bwnukn] {
    font-size: 24px;
    font-weight: 700;
    margin-top: 2px;
}

.bandeau-mention[b-1g77bwnukn] {
    font-size: 13px;
    font-weight: 600;
}

.bandeau-vert[b-1g77bwnukn] { background: var(--success-soft); }
.bandeau-vert .bandeau-etiquette[b-1g77bwnukn], .bandeau-vert .bandeau-valeur[b-1g77bwnukn], .bandeau-vert .bandeau-mention[b-1g77bwnukn] { color: oklch(35% 0.11 150); }

.bandeau-orange[b-1g77bwnukn] { background: var(--warning-soft); }
.bandeau-orange .bandeau-etiquette[b-1g77bwnukn], .bandeau-orange .bandeau-valeur[b-1g77bwnukn], .bandeau-orange .bandeau-mention[b-1g77bwnukn] { color: oklch(38% 0.13 75); }

.bandeau-rouge[b-1g77bwnukn] { background: var(--danger-soft); }
.bandeau-rouge .bandeau-etiquette[b-1g77bwnukn], .bandeau-rouge .bandeau-valeur[b-1g77bwnukn], .bandeau-rouge .bandeau-mention[b-1g77bwnukn] { color: oklch(38% 0.15 35); }

.section-evaluation[b-1g77bwnukn] {
    border-top: 1px solid var(--border);
    padding-top: 20px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.section-evaluation label[b-1g77bwnukn] {
    font-size: 12.5px;
    font-weight: 600;
}

.choix-evaluation[b-1g77bwnukn] {
    display: flex;
    gap: 8px;
}

.choix[b-1g77bwnukn] {
    flex: 1;
    padding: 11px;
    border-radius: 6px;
    border: 1.5px solid var(--border);
    background: var(--surface);
    color: var(--text-muted);
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
}

.choix-oui-actif[b-1g77bwnukn] {
    border-color: var(--success);
    background: var(--success-soft);
    color: oklch(35% 0.11 150);
    font-weight: 600;
}

.choix-non-actif[b-1g77bwnukn] {
    border-color: var(--danger);
    background: var(--danger-soft);
    color: oklch(38% 0.15 35);
    font-weight: 600;
}

.indication-estimation[b-1g77bwnukn] {
    margin: 0;
    padding-top: 4px;
}

/* --- Modules 9 et 10 : réduction du risque et PLr --------------------- */

.section-reduction[b-1g77bwnukn],
.section-plr[b-1g77bwnukn],
.section-residuel[b-1g77bwnukn] {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding-top: 16px;
    border-top: 1px solid var(--border);
}

.section-reduction > label[b-1g77bwnukn],
.section-plr > label[b-1g77bwnukn],
.section-residuel > label[b-1g77bwnukn] {
    font-size: 12px;
    font-weight: 500;
    color: var(--text-muted);
}

.entete-section[b-1g77bwnukn] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.entete-section label[b-1g77bwnukn] {
    font-size: 12px;
    font-weight: 500;
    color: var(--text-muted);
}

.formulaire-mesure[b-1g77bwnukn] {
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 14px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.grille-mesure[b-1g77bwnukn] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
}

.grille-mesure .champ-large[b-1g77bwnukn] { grid-column: 1 / -1; }

.aide-champ[b-1g77bwnukn] {
    font-size: 11.5px;
    color: var(--text-faint);
    margin-top: 3px;
}

.aide-champ code[b-1g77bwnukn] {
    font-size: 11px;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 3px;
    padding: 0 3px;
}

.liste-mesures[b-1g77bwnukn] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.mesure[b-1g77bwnukn] {
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 11px 13px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    background: var(--surface);
}

.mesure-entete[b-1g77bwnukn] {
    display: flex;
    align-items: center;
    gap: 7px;
}

/* La teinte suit le rang dans la hiérarchie : les niveaux les plus efficaces
   (élimination, substitution) se distinguent d'un simple EPI au coup d'œil. */
.badge-niveau[b-1g77bwnukn] {
    font-size: 11px;
    font-weight: 600;
    padding: 2px 7px;
    border-radius: 4px;
}

.badge-niveau-1[b-1g77bwnukn] { background: var(--success-soft); color: oklch(35% 0.12 150); }
.badge-niveau-2[b-1g77bwnukn] { background: var(--success-soft); color: oklch(35% 0.12 150); }
.badge-niveau-3[b-1g77bwnukn] { background: var(--accent-soft); color: var(--accent-dark); }
.badge-niveau-4[b-1g77bwnukn] { background: var(--warning-soft); color: oklch(38% 0.12 75); }
.badge-niveau-5[b-1g77bwnukn] { background: var(--warning-soft); color: oklch(38% 0.12 75); }
.badge-niveau-6[b-1g77bwnukn] { background: var(--danger-soft); color: oklch(38% 0.15 35); }

.badge-statut[b-1g77bwnukn] {
    font-size: 11px;
    padding: 2px 7px;
    border-radius: 4px;
    background: var(--surface-2);
    color: var(--text-muted);
    border: 1px solid var(--border);
}

.badge-statut.badge-recommandee[b-1g77bwnukn] {
    color: var(--accent-dark);
    border-color: var(--accent);
}

.badge-fonction[b-1g77bwnukn] {
    font-size: 11px;
    font-weight: 600;
    color: var(--text-muted);
    letter-spacing: 0.02em;
}

/* Seul le premier des deux boutons pousse le groupe à droite, sinon ils se
   sépareraient aux deux extrémités de l'en-tête. */
.mesure-entete .btn-lien-modifier[b-1g77bwnukn] {
    margin-left: auto;
}

.mesure-entete .btn-lien-modifier[b-1g77bwnukn],
.mesure-entete .btn-lien-supprimer[b-1g77bwnukn] {
    background: none;
    border: none;
    padding: 2px;
    cursor: pointer;
    color: var(--text-faint);
    display: inline-flex;
}

.mesure-entete .btn-lien-modifier:hover[b-1g77bwnukn] { color: var(--accent); }
.mesure-entete .btn-lien-supprimer:hover[b-1g77bwnukn] { color: var(--danger); }

/* Le formulaire remplace le texte à l'intérieur de la carte : il ne reprend donc
   pas le fond de la carte d'ajout, qui le ferait paraître imbriqué deux fois. */
.formulaire-mesure-edition[b-1g77bwnukn] {
    margin-top: 4px;
    background: var(--surface);
}

.mesure-texte[b-1g77bwnukn] { font-size: 13px; line-height: 1.5; }

.mesure-reference[b-1g77bwnukn],
.mesure-signature[b-1g77bwnukn],
.mesure-validation[b-1g77bwnukn] {
    font-size: 11.5px;
    color: var(--text-faint);
}

.mesure-plr[b-1g77bwnukn] {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    padding-top: 4px;
}

.etiquette-plr[b-1g77bwnukn] {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--text-faint);
}

.valeur-plr[b-1g77bwnukn] {
    font-size: 14px;
    font-weight: 700;
    text-transform: lowercase;
}

/* Le PL ne se saisit plus ici : la fonction le porte, et son onglet le règle. Le bloc
   reste pour montrer où en est la fonction citée, avec le renvoi qui va avec. */
.lien-fonction[b-1g77bwnukn] {
    font-size: 11.5px;
    color: var(--accent);
    margin-left: auto;
    white-space: nowrap;
}

.lien-fonction:hover[b-1g77bwnukn] { color: var(--accent-dark); }


.verdict-plr[b-1g77bwnukn] { font-size: 11.5px; font-weight: 500; }
.verdict-ok[b-1g77bwnukn] { color: var(--success); }
.verdict-insuffisant[b-1g77bwnukn] { color: var(--danger); }

.mesure-validation-form[b-1g77bwnukn] {
    display: flex;
    gap: 8px;
    align-items: center;
}

.mesure-validation-form input[type="text"][b-1g77bwnukn] {
    flex: 1;
    padding: 5px 8px;
    font-size: 12.5px;
}

.bandeau-plr[b-1g77bwnukn] {
    display: flex;
    align-items: center;
    gap: 26px;
    flex-wrap: wrap;
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 6px;
    padding: 12px 16px;
}

.valeur-plr-grande[b-1g77bwnukn] {
    font-size: 22px;
    font-weight: 700;
    text-transform: lowercase;
    line-height: 1.1;
}

.valeur-transposition[b-1g77bwnukn] {
    font-size: 13px;
    font-weight: 500;
    font-variant-numeric: tabular-nums;
}

.verdict-plr-grand[b-1g77bwnukn] {
    font-size: 12.5px;
    font-weight: 500;
    margin-left: auto;
}

.ecart-indice[b-1g77bwnukn] {
    font-size: 12px;
    font-weight: 400;
    opacity: 0.75;
    margin-left: 6px;
}

/* --- Suivi du plan d'action (module 11) -------------------------------------- */

.mesure-suivi[b-1g77bwnukn] {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 8px 12px;
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px dashed var(--border);
}

/* Qualifié en `label` : une classe nue ne pèse pas contre `.mesure-suivi label`, et sans
   ça les champs se rangeraient en ligne au lieu de tenir sous leur étiquette. */
.mesure-suivi label[b-1g77bwnukn] { display: flex; flex-direction: column; gap: 3px; }
.mesure-suivi .champ-motif[b-1g77bwnukn] { flex: 1 1 100%; }

.etiquette-suivi[b-1g77bwnukn] {
    font-size: 10.5px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--text-muted);
}

.mesure-suivi input[type="text"][b-1g77bwnukn],
.mesure-suivi input[type="date"][b-1g77bwnukn],
.mesure-suivi select[b-1g77bwnukn] {
    padding: 5px 8px;
    font-size: 12.5px;
}

.mesure-suivi .champ-motif input[b-1g77bwnukn] { width: 100%; }
/* /Components/Pages/Projets/SelecteurFonctionSecurite.razor.rz.scp.css */
/* Le composant vit dans la grille du formulaire de mesure : le `.champ` extérieur reprend
   donc les règles de ReductionRisque.razor.css, que le CSS scopé de Blazor ne fait pas
   traverser d'un composant à l'autre. */

.champ[b-06lsskofdq] { display: flex; flex-direction: column; gap: 5px; }

.champ > label[b-06lsskofdq] {
    font-size: 12px;
    font-weight: 500;
    color: var(--text-muted);
}

select[b-06lsskofdq] { padding: 7px 9px; font-size: 13px; width: 100%; }

/* Sépare visuellement « + Créer une nouvelle fonction… » des deux bibliothèques : le
   libellé du groupe est un espace de largeur nulle, seul son filet compte. */
optgroup[b-06lsskofdq] { font-size: 12px; }

/* --- Encart de matérialisation --------------------------------------------- */

.encart-fonction[b-06lsskofdq] {
    margin-top: 8px;
    padding: 12px 14px;
    background: var(--surface-2);
    border: 1px solid var(--border);
    border-radius: 8px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.titre-encart[b-06lsskofdq] { font-size: 12.5px; font-weight: 600; }

.ligne-encart[b-06lsskofdq] { display: flex; align-items: flex-end; gap: 10px; flex-wrap: wrap; }

.encart-fonction label[b-06lsskofdq] { display: flex; flex-direction: column; gap: 4px; }

.champ-souple[b-06lsskofdq] { flex: 1; min-width: 180px; }
.champ-souple input[b-06lsskofdq] { width: 100%; }

.etiquette-encart[b-06lsskofdq] {
    font-size: 11px;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    color: var(--text-muted);
}

.encart-fonction input[type="text"][b-06lsskofdq] { padding: 6px 8px; font-size: 13px; }
.champ-code-encart[b-06lsskofdq] { width: 130px; }

/* `.encart-fonction label` empile en colonne ; il faut la même spécificité pour reprendre
   la main, sans quoi la case et son libellé se retrouvent l'un au-dessus de l'autre. */
.encart-fonction label.case-encart[b-06lsskofdq] {
    flex-direction: row;
    align-items: center;
    gap: 7px;
    font-size: 12.5px;
    color: var(--text-muted);
    cursor: pointer;
}

.encart-fonction label.case-encart input[type="checkbox"][b-06lsskofdq] {
    width: auto;
    margin: 0;
    flex: none;
}

.indice-encart[b-06lsskofdq] {
    margin: 0;
    font-size: 12px;
    color: var(--text-muted);
    line-height: 1.5;
}

.sans-marge[b-06lsskofdq] { margin: 0; }

/* Rappel de ce que la fonction retenue vaut déjà : le détail se règle dans son onglet,
   mais l'analyste doit voir d'ici s'il cite quelque chose d'encore vide. */
.rappel-fonction[b-06lsskofdq] {
    margin: 6px 0 0;
    font-size: 12px;
    color: var(--text-muted);
    line-height: 1.5;
}

.rappel-fonction .a-statuer[b-06lsskofdq] { color: var(--warning); }
/* /Components/Pages/Projets/TachesEnergie.razor.rz.scp.css */
.page[b-s3m5mzq75y] {
    padding: 24px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.alerte-erreur[b-s3m5mzq75y] { margin: 0; }
.texte-muet[b-s3m5mzq75y] { color: var(--text-muted); font-size: 13px; }

.etat-vide[b-s3m5mzq75y] {
    background: var(--surface);
    border: 1px dashed var(--border);
    border-radius: 8px;
    padding: 32px;
    text-align: center;
}

.carte-section[b-s3m5mzq75y] {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: 8px;
    overflow: hidden;
}

.entete-section[b-s3m5mzq75y] {
    padding: 14px 20px;
    border-bottom: 1px solid var(--border);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}

.titre-section[b-s3m5mzq75y] {
    font-size: 13.5px;
    font-weight: 600;
}

.soustitre-section[b-s3m5mzq75y] {
    font-size: 12px;
    color: var(--text-muted);
    margin-top: 1px;
}

.btn-sm[b-s3m5mzq75y] {
    padding: 7px 12px;
    font-size: 12.5px;
}

.formulaire-inline[b-s3m5mzq75y] {
    padding: 16px 20px;
    border-bottom: 1px solid var(--border);
    background: var(--surface-2);
}

.grille-3[b-s3m5mzq75y] {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
}

.champ-large[b-s3m5mzq75y] { grid-column: span 2; }
.champ[b-s3m5mzq75y] { margin-bottom: 4px; }

.actions-formulaire[b-s3m5mzq75y] {
    display: flex;
    justify-content: flex-end;
    margin-top: 12px;
}

.ligne-vide[b-s3m5mzq75y] {
    padding: 20px;
    text-align: center;
    font-size: 13px;
    color: var(--text-muted);
}

table[b-s3m5mzq75y] { border-collapse: collapse; width: 100%; }

th[b-s3m5mzq75y] {
    text-align: left;
    padding: 9px 20px;
    font-size: 11px;
    font-weight: 500;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
    border-bottom: 1px solid var(--border);
}

td[b-s3m5mzq75y] {
    padding: 12px 20px;
    font-size: 13.5px;
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
}

tr:last-child td[b-s3m5mzq75y] { border-bottom: none; }

.cellule-forte[b-s3m5mzq75y] { font-weight: 500; }

/* Le td doit rester une cellule de tableau. En display:flex il sort de la mise
   en page du tableau : sa bordure basse se peint alors sur la hauteur de son
   contenu au lieu de celle de la rangée, et le trait de séparation se casse à
   cette colonne. La disposition des boutons vit donc sur un conteneur interne. */
.colonne-actions[b-s3m5mzq75y] {
    width: 1%;
    white-space: nowrap;
}

.colonne-actions .actions-cellule[b-s3m5mzq75y] {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 6px;
}

.btn-lien-supprimer[b-s3m5mzq75y], .btn-lien-modifier[b-s3m5mzq75y] {
    background: transparent;
    border: none;
    color: var(--text-faint);
    padding: 4px;
    cursor: pointer;
    display: inline-flex;
    flex-shrink: 0;
}

.btn-lien-supprimer:hover[b-s3m5mzq75y] { color: var(--danger); }
.btn-lien-modifier:hover[b-s3m5mzq75y] { color: var(--accent); }

.btn-xs[b-s3m5mzq75y] {
    padding: 5px 10px;
    font-size: 12px;
    flex-shrink: 0;
}

.btn-lien-annuler[b-s3m5mzq75y] {
    background: transparent;
    border: none;
    color: var(--text-muted);
    font-size: 12px;
    font-family: inherit;
    padding: 5px 4px;
    cursor: pointer;
    flex-shrink: 0;
}

.btn-lien-annuler:hover[b-s3m5mzq75y] { color: var(--text); }

td select[b-s3m5mzq75y], td input[type="text"][b-s3m5mzq75y] {
    padding: 6px 8px;
    font-size: 13px;
}

.badge[b-s3m5mzq75y] {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 100px;
    font-size: 11.5px;
    font-weight: 500;
}

.badge-bleu[b-s3m5mzq75y] { background: oklch(93% 0.02 200); color: oklch(40% 0.08 200); }
.badge-violet[b-s3m5mzq75y] { background: oklch(93% 0.03 280); color: oklch(45% 0.1 280); }
.badge-vert[b-s3m5mzq75y] { background: oklch(93% 0.03 145); color: oklch(42% 0.1 145); }
.badge-orange[b-s3m5mzq75y] { background: oklch(93% 0.06 35); color: oklch(45% 0.14 35); }
.badge-rouge[b-s3m5mzq75y] { background: oklch(93% 0.07 25); color: oklch(45% 0.16 25); }
.badge-neutre[b-s3m5mzq75y] { background: oklch(93% 0.006 90); color: var(--text-muted); }

/* Ce qui vient d'une machine mère se lit ici mais se corrige là-bas : l'étiquette dit
   d'où ça vient, ce que l'absence de bouton d'édition ne suffirait pas à expliquer. */
.etiquette-heritee[b-s3m5mzq75y] {
    display: inline-block;
    margin-left: 8px;
    padding: 1px 7px;
    border-radius: 999px;
    background: var(--surface-2);
    color: var(--text-faint);
    font-size: 10.5px;
    font-weight: 400;
    letter-spacing: 0.02em;
    flex-shrink: 0;
}

.avertissement-residuel[b-s3m5mzq75y] {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 12.5px;
    font-weight: 500;
    color: oklch(45% 0.14 75);
}

.liste-puces[b-s3m5mzq75y] {
    list-style: none;
    margin: 0;
    padding: 6px 20px 14px;
}

.liste-puces li[b-s3m5mzq75y] {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
    padding: 10px 0;
    border-bottom: 1px solid var(--border);
    font-size: 13px;
    line-height: 1.5;
}

.liste-puces li:last-child[b-s3m5mzq75y] { border-bottom: none; }

.liste-puces li span:first-child[b-s3m5mzq75y]::before {
    content: "";
    display: inline-block;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--text-muted);
    margin-right: 10px;
    margin-bottom: 1px;
}

/* --- Pièces jointes (section 5.12) ------------------------------------ */

.colonne-trombone[b-s3m5mzq75y] {
    width: 44px;
    text-align: center;
}

/* Le panneau se déplie sous la ligne concernée plutôt que dans sa cellule :
   une pièce jointe et sa vignette ne tiennent pas dans la hauteur d'une ligne. */
.ligne-documents td[b-s3m5mzq75y] {
    background: var(--surface-2);
    padding: 12px 20px;
}
/* /Components/TempsReel/AbonnementFraicheur.razor.rz.scp.css */
/* Discret par construction : c'est un avis, pas une alerte. Il se glisse en tête de l'écran
   sans pousser le contenu de plus d'une ligne. */
.bandeau-fraicheur[b-efui1lyh8o] {
    display: flex;
    align-items: center;
    gap: 10px;
    background: var(--accent-soft);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 8px 12px;
    margin-bottom: 12px;
    font-size: 12.5px;
}

.pastille[b-efui1lyh8o] {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--accent);
    flex: none;
}

.texte[b-efui1lyh8o] {
    font-weight: 600;
    color: var(--text);
}

.precision[b-efui1lyh8o] {
    color: var(--text-muted);
    flex: 1;
}

.btn-recharger[b-efui1lyh8o] {
    background: var(--accent);
    color: #fff;
    border: 0;
    border-radius: 6px;
    padding: 4px 10px;
    font-size: 12px;
    font-weight: 600;
    cursor: pointer;
}

.btn-recharger:hover[b-efui1lyh8o] {
    background: var(--accent-dark);
}

.btn-ignorer[b-efui1lyh8o] {
    background: none;
    border: 0;
    color: var(--text-faint);
    cursor: pointer;
    font-size: 16px;
    line-height: 1;
    padding: 0 2px;
}

.btn-ignorer:hover[b-efui1lyh8o] {
    color: var(--text);
}
