/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-gep2x4mnmx],
.components-reconnect-repeated-attempt-visible[b-gep2x4mnmx],
.components-reconnect-failed-visible[b-gep2x4mnmx],
.components-pause-visible[b-gep2x4mnmx],
.components-resume-failed-visible[b-gep2x4mnmx],
.components-rejoining-animation[b-gep2x4mnmx] {
    display: none;
}

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


#components-reconnect-modal[b-gep2x4mnmx] {
    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-gep2x4mnmx 0.5s both;
    &[open]

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

}

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

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

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

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

    100% {
        opacity: 1;
    }
}

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

    100% {
        opacity: 0;
    }
}

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

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

/* ⚠️⚠️ Fiche `T-23` — le bouton portait `#6b9ed2` sous du blanc, soit 2,82:1 : bien sous les
   4,5:1 exiges d'un texte. Feuille echafaudee par Blazor, a peine personnalisee, et jamais
   relue — la garde de contraste ne lisait que `app.css` jusqu'au 2026-09-25.

   ⚠️ Le survol etait DEJA conforme (#3b6ea2, 5,33:1) : l'etat par defaut etait donc le moins
   lisible des trois, et `:active` revenait au plus pale. Les tokens du projet reglent les trois
   d'un coup — 5,17:1 au repos, 6,70:1 au survol — et suivent le theme, ce que trois litteraux
   ne font jamais.

   ⚠️ Ce modal apparait quand le circuit tombe : c'est le moment ou l'utilisateur a le plus
   besoin de lire son unique bouton. */
#components-reconnect-modal button[b-gep2x4mnmx] {
    border: 0;
    background-color: var(--rm-primary);
    color: #ffffff;
    padding: 4px 24px;
    border-radius: 4px;
}

    #components-reconnect-modal button:hover[b-gep2x4mnmx],
    #components-reconnect-modal button:active[b-gep2x4mnmx] {
        background-color: var(--rm-primary-dark);
    }

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

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

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

@keyframes components-rejoining-animation-b-gep2x4mnmx {
    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/Shared/CarClassCrud.razor.rz.scp.css */
/* Spec 03 §7.5.6 — la sélection de catégories pour fusion.
   Tokens issus de la liste close d'`app.css` (UX_DESIGN_SYSTEM §3.4), aucun fallback hex. */

.rm-class-pick[b-7pl0hcy5yt] {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.25rem 0.6rem;
    border: 1px solid var(--rm-border);
    border-radius: var(--rm-pill-radius);
    background: var(--rm-card-bg-subtle);
}

/* La case reprend sa taille normale : dans un mode dont chaque geste mène à une
   suppression physique, une cible de clic étriquée est un piège. */
.rm-class-pick .form-check-input[b-7pl0hcy5yt] {
    margin: 0;
    flex: none;
}

.rm-class-pick__label[b-7pl0hcy5yt] {
    margin: 0;
    font-size: 0.875rem;
    cursor: pointer;
    word-break: break-word;
}
/* /Components/Shared/CarModelMergeDialog.razor.rz.scp.css */
/* Spec 03 §7.5.6 — l'écran de fusion.
   Tous les tokens proviennent de la liste close d'`app.css` (UX_DESIGN_SYSTEM §3.4).
   Aucun fallback hex : un `var(--rm-X, #fff)` masque le token manquant en clair et
   casse le thème sombre (gotcha U23). */

/* La bordure rouge du dialogue. Elle venait du `border-danger` de Bootstrap, retiré en
   passant au bloc BEM — et l'inventaire CSS a signalé la classe orpheline, ce qui a révélé
   la perte. Un écran destructif se reconnaît avant d'être lu. */
.rm-merge[b-sirx9fof3x] {
    border-color: var(--rm-danger);
}

.rm-merge__scope[b-sirx9fof3x] {
    font-size: 0.85rem;
    color: var(--rm-text-muted);
    margin-bottom: 0.25rem;
}

.rm-merge__question[b-sirx9fof3x] {
    font-weight: 600;
    margin-bottom: 0.75rem;
}

/* ── Les deux candidates, côte à côte ─────────────────────────── */

.rm-merge__cards[b-sirx9fof3x] {
    display: grid;
    grid-template-columns: 1fr;
    gap: 0.75rem;
    margin-bottom: 1rem;
}

@media (min-width: 768px) {
    .rm-merge__cards[b-sirx9fof3x] {
        grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    }
}

.rm-merge__card[b-sirx9fof3x] {
    border: 1px solid var(--rm-border);
    border-radius: var(--rm-card-radius);
    background: var(--rm-card-bg-subtle);
    padding: 0.75rem;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    min-width: 0;
}

/* Le sort est porté par la BORDURE autant que par le texte : la couleur seule ne
   suffit pas (accessibilité), le mot seul se perd dans la grille. */
.rm-merge__card--kept[b-sirx9fof3x] {
    border-color: var(--rm-success);
    background: var(--rm-success-light);
}

.rm-merge__card--doomed[b-sirx9fof3x] {
    border-color: var(--rm-danger);
    background: var(--rm-danger-light);
}

.rm-merge__name[b-sirx9fof3x] {
    font-family: var(--rm-font-mono);
    font-weight: 700;
    word-break: break-word;
}

.rm-merge__tags[b-sirx9fof3x] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.25rem;
}

.rm-merge__tag[b-sirx9fof3x] {
    font-size: 0.7rem;
    padding: 0.05rem 0.45rem;
    border-radius: var(--rm-pill-radius);
    border: 1px solid var(--rm-border);
    background: var(--rm-card-bg);
    color: var(--rm-text-muted);
    white-space: nowrap;
}

.rm-merge__tag--archived[b-sirx9fof3x] {
    border-color: var(--rm-warning);
    color: var(--rm-accent-orange-text);
    background: var(--rm-warning-light);
}

.rm-merge__tag--verified[b-sirx9fof3x] {
    border-color: var(--rm-success);
    color: var(--rm-success-text);
    background: var(--rm-success-light);
}

.rm-merge__stats[b-sirx9fof3x] {
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 0.1rem;
}

.rm-merge__stat[b-sirx9fof3x] {
    display: flex;
    justify-content: space-between;
    gap: 0.5rem;
    font-size: 0.82rem;
}

.rm-merge__stat dt[b-sirx9fof3x] {
    font-weight: 400;
    color: var(--rm-text-muted);
    margin: 0;
}

.rm-merge__stat dd[b-sirx9fof3x] {
    margin: 0;
    font-family: var(--rm-font-mono);
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.rm-merge__fate[b-sirx9fof3x] {
    border-top: 1px solid var(--rm-border);
    padding-top: 0.5rem;
    margin-top: auto;
}

.rm-merge__fate-kept[b-sirx9fof3x] {
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: var(--rm-success-text);
}

.rm-merge__fate-doomed[b-sirx9fof3x] {
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: var(--rm-danger);
}

/* ── Le bloc « après fusion » ─────────────────────────────────── */

.rm-merge__after[b-sirx9fof3x] {
    border: 1px solid var(--rm-border);
    border-radius: var(--rm-card-radius);
    background: var(--rm-card-bg);
    padding: 0.75rem;
    margin-bottom: 0.75rem;
}

.rm-merge__after-title[b-sirx9fof3x] {
    font-size: 0.78rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--rm-text-muted);
    margin: 0 0 0.5rem;
}

.rm-merge__after-lines[b-sirx9fof3x] {
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
}

.rm-merge__after-line[b-sirx9fof3x] {
    display: flex;
    justify-content: space-between;
    gap: 0.75rem;
    font-size: 0.87rem;
}

.rm-merge__after-line dt[b-sirx9fof3x] {
    font-weight: 400;
    margin: 0;
}

.rm-merge__after-line dd[b-sirx9fof3x] {
    margin: 0;
    font-family: var(--rm-font-mono);
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.rm-merge__after-line--warn dt[b-sirx9fof3x],
.rm-merge__after-line--warn dd[b-sirx9fof3x] {
    color: var(--rm-accent-orange-text);
}

.rm-merge__names[b-sirx9fof3x] {
    font-family: var(--rm-font-mono);
    font-size: 0.8rem;
    color: var(--rm-accent-orange-text);
    margin: 0.4rem 0 0;
    word-break: break-word;
}

.rm-merge__alias[b-sirx9fof3x],
.rm-merge__resolve[b-sirx9fof3x] {
    font-size: 0.82rem;
    margin: 0.4rem 0 0;
    display: flex;
    align-items: flex-start;
    gap: 0.35rem;
    color: var(--rm-text-muted);
}

.rm-merge__alias[b-sirx9fof3x] {
    color: var(--rm-success-text);
}

/* ── La saisie qui arme le bouton ─────────────────────────────── */

.rm-merge__confirm[b-sirx9fof3x] {
    margin-bottom: 0.75rem;
}

.rm-merge__confirm-input[b-sirx9fof3x] {
    font-family: var(--rm-font-mono);
    max-width: 20rem;
}
/* /Components/Shared/ReferentialDuplicatePrompt.razor.rz.scp.css */
/* Spec 03 §7.5.6 Écran A — la question des doublons probables.
   Tokens issus de la liste close d'`app.css` (UX_DESIGN_SYSTEM §3.4), aucun fallback hex. */

.rm-dedup[b-vzfv40edqf] {
    margin-bottom: 1rem;
}

.rm-dedup__banner[b-vzfv40edqf] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.6rem 0.85rem;
    border: 1px solid var(--rm-warning);
    border-radius: var(--rm-card-radius);
    background: var(--rm-warning-light);
    color: var(--rm-accent-orange-text);
    font-size: 0.9rem;
}

.rm-dedup__card[b-vzfv40edqf] {
    border: 1px solid var(--rm-warning);
    border-radius: var(--rm-card-radius);
    background: var(--rm-card-bg);
    padding: 0.9rem;
}

.rm-dedup__question[b-vzfv40edqf] {
    font-weight: 700;
    margin: 0 0 0.2rem;
}

.rm-dedup__why[b-vzfv40edqf] {
    font-size: 0.85rem;
    color: var(--rm-text-muted);
    margin: 0 0 0.85rem;
}

/* ── Les deux côtés ───────────────────────────────────────────── */

.rm-dedup__sides[b-vzfv40edqf] {
    display: grid;
    grid-template-columns: 1fr;
    gap: 0.75rem;
    margin-bottom: 0.9rem;
}

@media (min-width: 768px) {
    .rm-dedup__sides[b-vzfv40edqf] {
        grid-template-columns: 1fr 1fr;
    }
}

.rm-dedup__side[b-vzfv40edqf] {
    border: 1px solid var(--rm-border);
    border-radius: var(--rm-card-radius);
    background: var(--rm-card-bg-subtle);
    padding: 0.7rem;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
    min-width: 0;
}

.rm-dedup__name[b-vzfv40edqf] {
    font-family: var(--rm-font-mono);
    font-weight: 700;
    word-break: break-word;
}

.rm-dedup__field-label[b-vzfv40edqf] {
    font-size: 0.68rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--rm-text-light);
}

/* Les modèles portent la décision : mono pour que deux noms voisins se comparent
   caractère par caractère — « Oreca 07 » contre « Oreca 07 ELMS 2023 ». */
.rm-dedup__models[b-vzfv40edqf] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
}

.rm-dedup__models li[b-vzfv40edqf] {
    font-family: var(--rm-font-mono);
    font-size: 0.8rem;
    padding: 0.2rem 0.4rem;
    border: 1px solid var(--rm-border);
    border-radius: 4px;
    background: var(--rm-card-bg);
    word-break: break-word;
}

.rm-dedup__none[b-vzfv40edqf] {
    font-size: 0.8rem;
    font-style: italic;
    color: var(--rm-text-light);
    margin: 0;
}

.rm-dedup__stats[b-vzfv40edqf] {
    margin: auto 0 0;
    padding-top: 0.4rem;
    display: flex;
    flex-direction: column;
    gap: 0.1rem;
}

.rm-dedup__stat[b-vzfv40edqf] {
    display: flex;
    justify-content: space-between;
    gap: 0.6rem;
    font-size: 0.82rem;
}

.rm-dedup__stat dt[b-vzfv40edqf] {
    font-weight: 400;
    color: var(--rm-text-muted);
    margin: 0;
}

.rm-dedup__stat dd[b-vzfv40edqf] {
    margin: 0;
    font-family: var(--rm-font-mono);
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

/* ── Les trois issues ─────────────────────────────────────────── */

.rm-dedup__actions[b-vzfv40edqf] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.5rem;
}

/* ── BR-CM-14 — les décisions déjà prises, et le retour en arrière ── */

.rm-dedup__decisions[b-vzfv40edqf] {
    margin-top: 0.6rem;
    border: 1px solid var(--rm-border);
    border-radius: var(--rm-card-radius);
    background: var(--rm-card-bg-dim);
    padding: 0.5rem 0.75rem;
}

.rm-dedup__decisions-summary[b-vzfv40edqf] {
    font-size: 0.85rem;
    color: var(--rm-text-muted);
    cursor: pointer;
}

.rm-dedup__decisions-list[b-vzfv40edqf] {
    list-style: none;
    margin: 0.5rem 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.3rem;
}

.rm-dedup__decision[b-vzfv40edqf] {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.5rem;
    font-size: 0.84rem;
    padding-top: 0.3rem;
    border-top: 1px solid var(--rm-border-light);
}

.rm-dedup__decision-pair[b-vzfv40edqf] {
    font-family: var(--rm-font-mono);
    word-break: break-word;
}

.rm-dedup__decision-who[b-vzfv40edqf] {
    color: var(--rm-text-light);
    font-size: 0.78rem;
}
