/* Framework/template overrides routed to design tokens (P1-6, DV.2-AddendumA).
   Dead Bootstrap-template rules (btn-*, .content, .form-floating, checkbox) were removed;
   only the rules Blazor actually applies are kept, on tokens (no hard-coded colours). */

:where(.content, main) a {
    color: var(--color-text-link);
}

/* Nav links: the canonical .nav-menu__link styling now lives in a SINGLE sheet,
   css/components/nav-link.css (FND-13), linked globally by App.razor — no longer duplicated here. */

/* FND-5 : la neutralisation reduced-motion est centralisée dans reset.css (garde unique). */

/* The router focuses the page heading on navigation (a11y); h1 is non-interactive, so suppress its
   focus ring (keyboard focus rings on real controls come from the global :focus-visible rule). */
h1:focus {
    outline: none;
}

/* Blazor EditForm validation state (was hard-coded off-brand red). */
.valid.modified:not([type=checkbox]) {
    outline: 1px solid var(--color-success);
}

.invalid {
    outline: 1px solid var(--color-error);
}

.validation-message {
    color: var(--color-error);
}

/* Blazor unhandled-error boundary (was hard-coded off-brand red). */
/* TRV-07 : le texte du garde-fou d'erreur NE DOIT PAS vivre dans un content: CSS (non localisable,
   non extractible). L'ErrorBoundary de MainLayout + le #blazor-error-ui (TRV-01) portent déjà le
   message localisé (Error_Unhandled) ; on ne garde ici que la présentation du conteneur.
   SUPPRIMÉ : .blazor-error-boundary::after { content: "An error has occurred."; } */
.blazor-error-boundary {
    padding: var(--space-md);
    border: 1px solid var(--color-error);
    border-radius: var(--radius-md);
    background-color: var(--color-error-subtle);
    color: var(--color-text-primary);
}

/* TRV-07 : titre ajouté au modal de reconnexion — stylé explicitement, sinon il hérite du h2
   applicatif dans un contexte où le CSS de thème peut ne pas être encore appliqué. Tokens réels
   (les --type-heading-* du snippet d'audit n'existent pas dans ce dépôt). */
.components-reconnect-title {
    margin-block: 0 var(--space-sm);
    font-size: var(--text-lg);
    line-height: var(--leading-tight);
    font-weight: var(--font-weight-semibold);
    text-align: start;
}

/* Account self-service pages (15.1) — shared, tokens-only, logical properties. */
.account {
    max-inline-size: 28rem;
    margin-inline: auto;
    padding: var(--space-xl);
}

.account__title {
    margin-block-end: var(--space-lg);
}

.account__form {
    display: flex;
    flex-direction: column;
    gap: var(--space-md);
}

.account__field {
    display: flex;
    flex-direction: column;
    gap: var(--space-xs);
}

.account__input {
    padding: var(--space-sm);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
}

.account__submit {
    padding-block: var(--space-sm);
    padding-inline: var(--space-lg);
    border: none;
    border-radius: var(--radius-md);
    background-color: var(--color-primary);
    color: var(--color-on-primary);
    cursor: pointer;
}

.account__ok {
    padding: var(--space-sm);
    margin-block-end: var(--space-md);
    border-radius: var(--radius-md);
    background-color: var(--color-success-subtle);
    color: var(--color-success);
}

.account__warn {
    padding: var(--space-sm);
    margin-block-end: var(--space-md);
    border-radius: var(--radius-md);
    background-color: var(--color-warning-subtle);
    color: var(--color-warning);
}

.account__error {
    padding: var(--space-sm);
    margin-block-end: var(--space-md);
    border-radius: var(--radius-md);
    background-color: var(--color-error-subtle);
    color: var(--color-error);
}

.account__links {
    margin-block-start: var(--space-lg);
}

.account__request {
    margin-block-start: var(--space-md);
    color: var(--color-text-secondary);
    font-size: var(--text-sm);
}

/* Auth & error pages (15.5) — shared brand header, tokens-only, logical properties (RTL-safe). */
.auth-brand {
    display: flex;
    justify-content: center;
    margin-block-end: var(--space-lg);
}

.auth-brand__logo {
    block-size: 3rem;
    inline-size: auto;
}

/* TRV-01 — substrat de boot : occupe la zone de contenu pendant le chargement du runtime, sans faire
   croire que l'application est prête. Barre indéterminée + libellé annoncé une fois. Le mouvement est
   neutralisé par le garde-fou reduced-motion CENTRAL (reset.css, FND-5) — aucun bloc local ici. */
.app-boot {
    position: fixed;
    inset-block-start: var(--layout-topbar-height);
    inset-inline-start: var(--layout-sidebar-width);
    inset-inline-end: 0;
    z-index: var(--z-raised);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-sm);
    padding-block-start: var(--space-2xl);
    background-color: var(--color-bg-base);
    color: var(--color-text-secondary);
    font-size: var(--text-sm);
}

.app-boot__bar {
    position: relative;
    inline-size: 12rem;
    block-size: 0.25rem;
    border-radius: var(--radius-sm);
    background-color: var(--color-bg-subtle);
    overflow: hidden;
}

.app-boot__bar::after {
    content: "";
    position: absolute;
    inset-block: 0;
    inline-size: 40%;
    border-radius: var(--radius-sm);
    background-color: var(--color-primary);
    animation: app-boot-slide 1.1s ease-in-out infinite;
}

/* inset-inline-start : le balayage suit le sens de lecture, donc part de la droite en RTL. */
@keyframes app-boot-slide {
    0%   { inset-inline-start: -40%; }
    100% { inset-inline-start: 100%; }
}

/* Écran étroit : plus de sidebar, le substrat couvre toute la largeur. */
@media (max-width: 48rem) {
    .app-boot { inset-inline-start: 0; }
}

/* TRV-01 — bandeau d'erreur non gérée (était absent : une exception de circuit ne montrait RIEN). */
.app-error-ui {
    display: none; /* Blazor bascule en 'block' */
    position: fixed;
    inset-block-end: 0;
    inset-inline: 0;
    z-index: var(--z-toast);
    align-items: center;
    gap: var(--space-md);
    padding-block: var(--space-sm);
    padding-inline: var(--space-lg);
    background-color: var(--color-error-subtle);
    color: var(--color-text-primary);
    border-block-start: 1px solid var(--color-error);
    box-shadow: var(--shadow-md);
}

.app-error-ui__reload {
    color: var(--color-text-link);
    font-weight: var(--font-weight-medium);
}

.app-error-ui__dismiss {
    margin-inline-start: auto;
    border: none;
    background: transparent;
    color: var(--color-text-secondary);
    font-size: var(--text-lg);
    cursor: pointer;
}
