.login-label {
    font-size: 13px;
    line-height: 20px;
    font-weight: 700;
    margin-bottom: 15px;
}
.login-headline {
    font-size: 40px;
    line-height: 50px;
    margin-bottom: 16px;
    font-family: Poppins, sans-serif;
    font-weight: 800;
}
.login-col-left {
    padding: 90px 60px;
    background: linear-gradient(90deg, #f7f7f7 100%, transparent 0);
}
.login-col-right {
    padding: 90px 60px;
    background: #d9e4f6;
}
.login-form-inner {
    width: 430px;
    max-width: 100%;
}
.login-register-inner {
    width: 500px;
    max-width: 100%;
}
.login-input {
    border-radius: 13px;
}
.login-submit {
    border-radius: 9999px;
    border-style: solid;
    border-width: 2px;
    width: 100%;
}
.login-forgot {
    text-align: right;
    color: #555;
    cursor: pointer;
    font-family: Montserrat, sans-serif;
    font-size: 12px;
    font-style: italic;
}
.login-register-btn {
    display: inline-block;
    background-color: #fff;
    color: #0b5ed7;
    padding: 9px 28%;
    cursor: pointer;
    text-decoration: none;
    border-radius: 9999px;
    border: 2px solid #0b5ed7;
}
.title { margin-bottom: 10px; margin-top: 0; text-align: left; transition: all .4s ease; }
.title a { color: #555; cursor: pointer; font-family: Montserrat,sans-serif; font-size: 13px; font-weight: 700; text-transform: uppercase; transition: all .4s ease; }
/* ── Bouton « afficher / masquer le mot de passe » ───────────────────────
 * Le bouton est un enfant direct de .form-floating, qui contient aussi le
 * lien « mot de passe oublié » et le .invalid-feedback : sa hauteur dépasse
 * donc celle du champ. On ne peut pas centrer verticalement sur le conteneur
 * (top:50%), on cale le bouton en haut sur la hauteur exacte d'un
 * .form-control de .form-floating (Bootstrap 5.3 : 3.5rem + 2px de bordures).
 * ------------------------------------------------------------------------ */
.form-floating > .toggle-password {
    position: absolute;
    top: 0;
    right: 0;
    z-index: 3;              /* le <label> flottant de Bootstrap est en z-index:2 */
    display: flex;
    align-items: center;
    justify-content: center;
    width: 46px;
    height: calc(3.5rem + 2px);
    padding: 0;
    border: 0;
    border-radius: 13px;     /* aligné sur .login-input */
    background: none;
    color: #6c757d;
    cursor: pointer;
    transition: color .15s ease-in-out;
}
.form-floating > .toggle-password:hover {
    color: #212529;
}
.form-floating > .toggle-password:focus-visible {
    color: #212529;
    outline: 2px solid #0d6efd;
    outline-offset: -3px;
}

/* Une seule des deux icônes est visible à la fois ; .is-revealed est posée
 * par le JS quand le mot de passe est en clair. */
.toggle-password .icon-eye-off,
.toggle-password.is-revealed .icon-eye {
    display: none;
}
.toggle-password.is-revealed .icon-eye-off {
    display: block;
}

/* Classe posée par le JS sur le champ piloté : réserve la place de l'icône
 * pour que la saisie ne passe pas dessous.
 * Le sélecteur reprend `.form-floating >` : Bootstrap déclare le padding avec
 * `.form-floating > .form-control`, une classe seule perdrait l'arbitrage. */
.form-floating > .pw-toggle-input {
    padding-right: 46px;
}

/* Bootstrap dessine son icône de validation en fond, collée à droite du champ :
 * sans ce décalage elle se superposerait à l'œil. Les deux écritures sont
 * couvertes — `.is-valid/.is-invalid` posées à la main par loginController,
 * et `.was-validated` + pseudo-classes posées par la validation native. */
.form-floating > .pw-toggle-input.is-valid,
.form-floating > .pw-toggle-input.is-invalid,
.was-validated .form-floating > .pw-toggle-input:valid,
.was-validated .form-floating > .pw-toggle-input:invalid {
    padding-right: calc(46px + 1.5em + .75rem);
    background-position: right calc(46px + .375em + .1875rem) center;
}
