﻿/* =============================================================================
   login-split.css — maquette de connexion en DEUX COLONNES (vue Login_test)
   -----------------------------------------------------------------------------
   Chargé APRÈS `login-generique.css` (posé par `_LoginGeneriqueLayout`) : il en
   reprend tout l'habillage de carte/champs et ne redéfinit que la mise en page
   deux colonnes, plus les éléments propres à cette maquette (panneau de marque,
   séparateur « ou », bouton SSO en contour, pied de carte).

   🛑 COULEURS : uniquement des tokens de thème (`--bs-primary`, `--bs-main`,
   `--bs-info`, `--bs-*-rgb`). Aucun hex de charte en dur : le thème abonné doit
   pouvoir recolorer la page sans toucher ce fichier.

   Tout est scopé par `.login-split` : la page de connexion actuelle
   (`Views/Account/Login.cshtml`) n'est pas impactée.
   ============================================================================= */

.login-split {
    /* Fond du panneau de marque : le marine du thème, assombri pour le dégradé.
       `color-mix` n'est pas connu des moteurs anciens -> `background-color` de repli
       déclaré avant le dégradé (une valeur non comprise est simplement ignorée). */
    --tg-login-marine: var(--bs-primary, #2e3862);
    --tg-login-marine-sombre: color-mix(in srgb, var(--bs-primary, #2e3862) 62%, #000);
    /* Accent clair du logo : lisible sur le marine (texte de grande taille). */
    --tg-login-accent: var(--bs-info, #7096ff);
    /* Texte des liens sur fond blanc : le marine, seul ton de la charte qui tienne
       le contraste WCAG AA (4.5:1) en corps de texte. */
    --tg-login-lien: var(--bs-primary, #2e3862);

    display: grid;
    grid-template-columns: 1fr 1fr;
    width: 100%;
    min-height: 100vh;
}

/* Le layout centre son contenu via des utilitaires BS5 sur `<body>` : sur une mise en
   page pleine page, ce centrage n'a plus lieu d'être (il empêcherait les colonnes de
   prendre toute la hauteur). `:has` évite de devoir toucher au layout partagé. */
body.login-page:has(.login-split) {
    display: block !important;
    padding: 0;
}

/* -----------------------------------------------------------------------------
   Colonne GAUCHE — panneau de marque
   ----------------------------------------------------------------------------- */
.login-split__marque {
    position: relative;
    display: flex;
    align-items: center;
    padding: 3rem clamp(2rem, 6vw, 5rem);
    overflow: hidden;
    background-color: var(--tg-login-marine);
    background-image: linear-gradient(135deg, var(--tg-login-marine), var(--tg-login-marine-sombre));
    color: #fff;
}

/* Halos décoratifs : un bleu en haut à droite, un orange en bas à gauche. Portés par
   des pseudo-éléments (aucun markup décoratif dans la vue) et non interactifs. */
.login-split__marque::before,
.login-split__marque::after {
    content: "";
    position: absolute;
    width: 38rem;
    height: 38rem;
    border-radius: 50%;
    pointer-events: none;
}

.login-split__marque::before {
    top: -14rem;
    right: -12rem;
    background: radial-gradient(circle, rgb(var(--bs-info-rgb, 112 150 255) / 30%) 0%, transparent 70%);
}

.login-split__marque::after {
    bottom: -16rem;
    left: -14rem;
    background: radial-gradient(circle, rgb(var(--bs-main-rgb, 255 97 54) / 22%) 0%, transparent 70%);
}

/* `position: relative` : le contenu passe au-dessus des halos. */
.login-split__marque-contenu {
    position: relative;
    max-width: 32rem;
}

.login-split__brand {
    font-size: clamp(2.2rem, 3.4vw, 3.1rem);
}

.login-split__baseline {
    margin: .75rem 0 0;
    font-size: clamp(1rem, 1.2vw, 1.15rem);
    color: rgb(255 255 255 / 78%);
}

.login-split__arguments {
    margin: 3.5rem 0 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: 1.6rem;
}

.login-split__arguments li {
    display: flex;
    align-items: center;
    gap: 1rem;
    font-size: 1rem;
}

/* Puce carrée arrondie de l'argument. `flex: 0 0 auto` : elle ne se comprime pas
   quand le libellé passe sur deux lignes. */
.login-split__puce {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2rem;
    height: 2rem;
    border-radius: .5rem;
    background-color: rgb(var(--bs-info-rgb, 112 150 255) / 22%);
    color: var(--tg-login-accent);
}

/* 🛑 Cibler `> i` ET `> svg`, jamais `[data-lucide]` : `lucide-init.js` retire l'attribut
   du `<svg>` rendu (parade anti-boucle), une règle sur `[data-lucide]` serait morte dès
   l'icône affichée. `fill: none` : les icônes Lucide sont en trait seul. */
.login-split__puce > i,
.login-split__puce > svg {
    width: 16px;
    height: 16px;
    fill: none;
    stroke-width: 3;
}

/* -----------------------------------------------------------------------------
   Colonne DROITE — formulaire
   ----------------------------------------------------------------------------- */
.login-split__formulaire {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 3rem 1.5rem;
    background-color: var(--bs-secondary-bg, #eef1f6);
}

.login-split__colonne {
    width: 100%;
    max-width: 27rem;
}

.login-split__carte {
    border-radius: 1.125rem;
    box-shadow: 0 1.25rem 3rem rgb(var(--bs-primary-rgb, 46 56 98) / 10%);
}

.login-split__carte .card-body {
    padding: 2rem 2rem .5rem;
}

.login-split__carte .card-footer {
    padding: 0 2rem 1.75rem;
}

.login-split__titre {
    margin: 0 0 .35rem;
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--bs-primary, #2e3862);
}

/* Écrans sans sous-titre (session expirée, connexion interrompue, accès bloqué) : le titre
   est suivi directement d'une alerte, qu'il faut décoller. */
.login-split__titre + .alert,
.login-split__titre + .validation-summary-errors {
    margin-top: 1rem;
}

/* Sous-titre = `.legend` (le handler « Mot de passe oublié ? » y réécrit sa consigne) :
   pas d'`italic` ni de hauteur figée, le texte de remplacement est bien plus long. */
.login-split__carte .legend.login-split__sous-titre {
    margin-bottom: 1.5rem;
    font-size: .8rem;
    font-style: normal;
    color: var(--bs-secondary-color, #6c757d);
}

/* Astérisque « obligatoire » en orange de charte (le modèle générique le met en rouge). */
.login-split__carte .required-star {
    color: var(--bs-main, #ff6136);
}

/* Placeholders : le gris BS5 par défaut est trop clair pour l'AA -> ton secondaire plein. */
.login-split__carte .form-control::placeholder {
    color: var(--bs-secondary-color, #6c757d);
    opacity: 1;
}

/* Focus visible : bordure + halo primaires, y compris sur la boîte d'icône accolée
   (sans cela le champ semble se « décoller » de son icône au focus). */
.login-split__carte .form-control:focus {
    border-color: var(--tg-login-accent);
    box-shadow: 0 0 0 .25rem rgb(var(--bs-primary-rgb, 46 56 98) / 15%);
}

.login-split__carte .input-group:focus-within .input-group-text {
    border-color: var(--tg-login-accent);
}

/* 🛑 Passage en mode « mot de passe oublié » SANS rechargement : `LoginGenerique.js` retire le
   lien (`$("#loginBlockFooter a").remove()`) mais laisse la case « Se souvenir de moi », qui se
   retrouve seule au-dessus du bouton « Réinitialiser mon mot de passe » — où elle n'a aucun sens
   (et n'est de toute façon pas branchée). La ligne disparaît donc dès qu'elle n'a plus son lien.
   Réglé ici, et non en modifiant le JS, qui est partagé avec les pages de connexion abonnées. */
.login-split__ligne-options:not(:has(> a)) {
    display: none;
}

/* Ligne « Se souvenir de moi » / « Mot de passe oublié ? ». */
.login-split__ligne-options {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    margin-bottom: 1.25rem;
    font-size: .875rem;
}

.login-split__ligne-options .form-check-label {
    color: var(--bs-body-color, #212529);
}

.login-split__lien {
    color: var(--tg-login-lien);
    font-weight: 500;
    text-decoration: none;
}

.login-split__lien:hover,
.login-split__lien:focus-visible {
    text-decoration: underline;
}

/* -----------------------------------------------------------------------------
   Boutons
   ----------------------------------------------------------------------------- */

/* Action principale. `background-color` est redéclaré EN PLUS des variables
   `--bs-btn-*` : le socle porte un vestige `#loginBlockFooter .btn { background-color }`
   (spécificité 1,1,0) qui écraserait la couleur calculée depuis `--bs-btn-bg`. */
#loginBlockFooter .login-split__btn-principal,
.login-split__carte .login-split__btn-principal {
    --bs-btn-bg: var(--bs-primary);
    --bs-btn-border-color: var(--bs-primary);
    --bs-btn-hover-bg: var(--tg-login-marine-sombre);
    --bs-btn-hover-border-color: var(--tg-login-marine-sombre);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .5rem;
    padding-top: .6rem;
    padding-bottom: .6rem;
    background-color: var(--bs-primary);
    border-color: var(--bs-primary);
    font-weight: 600;
}

.login-split__btn-principal > i,
.login-split__btn-principal > svg {
    width: 18px;
    height: 18px;
    fill: none;
}

/* Séparateur « ou » : le trait est porté par les pseudo-éléments, pas par un markup dédié. */
.login-split__separateur {
    display: flex;
    align-items: center;
    gap: .75rem;
    margin: .25rem 0;
    font-size: .8125rem;
    color: var(--bs-secondary-color, #6c757d);
}

.login-split__separateur::before,
.login-split__separateur::after {
    content: "";
    flex: 1 1 auto;
    height: 1px;
    background-color: var(--bs-border-color, #e7eaf0);
}

/* 🛑 Le handler « Mot de passe oublié ? » de `LoginGenerique.js` fait
   `$("#loginBlockFooter a").remove()` : le bouton SSO (un `<a>`) part, mais pas le
   séparateur. Devenu dernier enfant de `.right`, il serait un « ou » orphelin sous le
   bouton de réinitialisation -> on le masque. Réglé ici, et non en retouchant le JS,
   pour ne rien changer au comportement de la page de connexion en production. */
#loginBlockFooter .right > .login-split__separateur:last-child {
    display: none;
}

/* Action SECONDAIRE : contour orange sur fond blanc (et non plus l'aplat orange).
   ⚠️ Le texte est un orange ASSOMBRI : `--bs-main` pur sur blanc plafonne à ~3:1,
   insuffisant pour du corps de texte en WCAG AA. La bordure, elle, reste le ton de
   charte (un élément non textuel se contente de 3:1). */
#loginBlockFooter .login-split__btn-sso,
.login-split__carte .login-split__btn-sso {
    --bs-btn-bg: #fff;
    --bs-btn-border-color: var(--bs-main);
    --bs-btn-hover-bg: var(--bs-main);
    --bs-btn-hover-border-color: var(--bs-main);
    --bs-btn-hover-color: #fff;
    background-color: #fff;
    border: 1px solid var(--bs-main);
    color: var(--bs-main, #ff6136);
    padding-top: .6rem;
    padding-bottom: .6rem;
    font-weight: 600;
}

#loginBlockFooter .login-split__btn-sso:hover,
#loginBlockFooter .login-split__btn-sso:focus-visible,
.login-split__carte .login-split__btn-sso:hover,
.login-split__carte .login-split__btn-sso:focus-visible {
    background-color: var(--bs-main);
    border-color: var(--bs-main);
    color: #fff;
}

/* -----------------------------------------------------------------------------
   Mention de sécurité + pied de carte
   ----------------------------------------------------------------------------- */
.login-split__mention-securite {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .4rem;
    margin: 1.25rem 0 0;
    font-size: .75rem;
    color: var(--bs-secondary-color, #6c757d);
}

.login-split__mention-securite > i,
.login-split__mention-securite > svg {
    width: 14px;
    height: 14px;
    flex: 0 0 auto;
    fill: none;
}

.login-split__pied {
    margin-top: 1.25rem;
    padding-top: 1rem;
    border-top: 1px solid var(--bs-border-color, #e7eaf0);
    text-align: center;
    font-size: .75rem;
    color: var(--bs-secondary-color, #6c757d);
}

.login-split__pied-version a,
.login-split__pied-liens a {
    color: var(--bs-secondary-color, #6c757d);
    text-decoration: none;
}

.login-split__pied-version a:hover,
.login-split__pied-version a:focus-visible,
.login-split__pied-liens a:hover,
.login-split__pied-liens a:focus-visible {
    color: var(--tg-login-lien);
    text-decoration: underline;
}

.login-split__pied-version {
    margin-top: .35rem;
}

/* -----------------------------------------------------------------------------
   Notifications TgNotify sur le layout du login
   -----------------------------------------------------------------------------
   Le markup de `_Notifications.cshtml` ne porte VOLONTAIREMENT pas de `bottom-0` /
   `top-0` : la position est pilotée par le CSS applicatif (`socle/shell.css` pour les
   toasts, `teogest-fonctionnel.css` pour les barres), afin de dégager la barre d'action
   fixe `#foot` et le rail. Or `_LoginGeneriqueLayout` ne charge NI l'un NI l'autre : sans
   les règles ci-dessous, le conteneur reste à sa position verticale statique (toast collé
   en haut à droite au lieu du bas). Le login n'ayant ni `#foot` ni rail, on colle au bord.
   Les 5 vues servies par ce layout chargent toutes ce fichier. */
#tgToastContainer.toast-container {
    bottom: 0;
}

#tgBandeauContainer {
    top: 0;
    left: 0;
    right: 0;
    z-index: 1090;
}

/* -----------------------------------------------------------------------------
   Responsive — sous 820px : une seule colonne, fond marine sur toute la page
   -----------------------------------------------------------------------------
   Le panneau de marque n'est PAS masqué : il se réduit au seul logo et se retrouve
   empilé au-dessus de la carte. Un seul markup sert les deux formats (le logo n'est
   pas dupliqué dans la colonne de droite), ce qui garantit qu'il ne peut pas
   diverger entre desktop et mobile. */
@media (max-width: 820px) {
    .login-split {
        grid-template-columns: 1fr;
        /* `min-height: auto` : deux lignes qui valent chacune 100vh donneraient une page
           deux fois trop haute (défilement dans le vide sous la carte). */
        min-height: auto;
    }

    .login-split__marque {
        justify-content: center;
        padding: 2.25rem 1.25rem .5rem;
        /* Fond porté par la page entière (règle ci-dessous) : le panneau devient transparent
           pour ne pas superposer deux dégradés au raccord avec la carte. */
        background: none;
    }

    /* Les halos décoratifs restent portés par la page, pas par ce bloc réduit. */
    .login-split__marque::before,
    .login-split__marque::after {
        display: none;
    }

    .login-split__marque-contenu {
        max-width: none;
        text-align: center;
    }

    .login-split__brand {
        font-size: clamp(1.8rem, 8vw, 2.3rem);
    }

    /* Baseline et arguments : hors sujet sur un écran étroit, où seule la connexion compte. */
    .login-split__baseline,
    .login-split__arguments {
        display: none;
    }

    /* Le fond marine passe sur la page entière : les deux colonnes empilées sont
       transparentes pour le laisser voir. */
    body.login-page:has(.login-split) {
        background-color: var(--bs-primary, #2e3862);
        background-image: linear-gradient(160deg, var(--bs-primary, #2e3862), color-mix(in srgb, var(--bs-primary, #2e3862) 62%, #000));
    }

    .login-split__formulaire {
        background-color: transparent;
        padding: 1rem 1.25rem 2.5rem;
    }
}

@media (max-width: 480px) {
    .login-split__carte .card-body {
        padding: 1.5rem 1.25rem .5rem;
    }

    .login-split__carte .card-footer {
        padding: 0 1.25rem 1.5rem;
    }
}
