/* =========================================================
   PAGE LOGIN / MOT DE PASSE OUBLIÉ NOÉVA / BOOST
   Fichier : assets/css/login.css
========================================================= */

/* =========================================================
   BASE COMMUNE
========================================================= */

body.noeva-login-page,
body.noeva-forgot-page {
    min-height: 100vh;
    overflow-x: hidden;
    color: var(--noeva-white);
    background: var(--noeva-black);
    font-family: var(--noeva-font-body);
}

.noeva-login,
.noeva-forgot {
    position: relative;
    min-height: 100vh;
    display: grid;
    grid-template-rows: auto 1fr;
    padding: clamp(24px, 4vw, 46px) 20px clamp(26px, 4vw, 54px);
    overflow: hidden;
    isolation: isolate;
    background:
        radial-gradient(circle at 14% 18%, rgba(255, 0, 107, 0.24), transparent 30%),
        radial-gradient(circle at 86% 22%, rgba(8, 236, 239, 0.22), transparent 32%),
        radial-gradient(circle at 52% 88%, rgba(208, 11, 244, 0.18), transparent 35%),
        linear-gradient(135deg, var(--noeva-black), var(--noeva-deep) 48%, #17001d);
}

.noeva-login::before,
.noeva-forgot::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -3;
    background:
        linear-gradient(to bottom, rgba(5, 0, 19, 0.08), rgba(5, 0, 19, 0.88)),
        linear-gradient(rgba(255, 255, 255, 0.045) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255, 255, 255, 0.045) 1px, transparent 1px);
    background-size: auto, 58px 58px, 58px 58px;
    mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.95), transparent 92%);
    opacity: 0.7;
    pointer-events: none;
}

.noeva-login::after,
.noeva-forgot::after {
    content: "";
    position: absolute;
    left: -12%;
    right: -12%;
    bottom: -130px;
    height: 320px;
    z-index: -2;
    background:
        radial-gradient(ellipse at center,
            rgba(8, 236, 239, 0.42) 0%,
            rgba(255, 0, 107, 0.24) 34%,
            rgba(208, 11, 244, 0.18) 58%,
            transparent 76%);
    filter: blur(22px);
    opacity: 0.84;
    pointer-events: none;
    animation: noevaLoginHalo 7s ease-in-out infinite alternate;
}

/* =========================================================
   FOND ANIMÉ / ESPACE
========================================================= */

.noeva-login__sky,
.noeva-forgot__sky,
.noeva-login__orb,
.noeva-forgot__orb,
.noeva-login__star,
.noeva-forgot__star {
    position: absolute;
    pointer-events: none;
}

.noeva-login__sky,
.noeva-forgot__sky {
    inset: 0;
    z-index: -1;
}

.noeva-login__orb,
.noeva-forgot__orb {
    border-radius: 999px;
    filter: blur(42px);
    opacity: 0.78;
    animation: noevaLoginFloat 8s ease-in-out infinite alternate;
}

.noeva-login__orb--pink,
.noeva-forgot__orb--pink {
    width: 340px;
    height: 340px;
    left: -120px;
    top: 22%;
    background: rgba(255, 0, 107, 0.34);
}

.noeva-login__orb--cyan,
.noeva-forgot__orb--cyan {
    width: 420px;
    height: 420px;
    right: -150px;
    top: 10%;
    background: rgba(8, 236, 239, 0.28);
    animation-delay: -2s;
}

.noeva-login__orb--purple,
.noeva-forgot__orb--purple {
    width: 360px;
    height: 360px;
    left: 46%;
    bottom: -155px;
    background: rgba(208, 11, 244, 0.28);
    animation-delay: -4s;
}

.noeva-login__star,
.noeva-forgot__star {
    width: 5px;
    height: 5px;
    border-radius: 999px;
    background: var(--noeva-cyan);
    box-shadow: 0 0 16px var(--noeva-cyan);
    animation: noevaLoginStar 8s linear infinite;
}

.noeva-login__star:nth-child(4),
.noeva-forgot__star:nth-child(4) {
    left: 10%;
    top: 74%;
    animation-delay: -1s;
}

.noeva-login__star:nth-child(5),
.noeva-forgot__star:nth-child(5) {
    left: 26%;
    top: 26%;
    background: var(--noeva-pink);
    box-shadow: 0 0 16px var(--noeva-pink);
    animation-delay: -3s;
}

.noeva-login__star:nth-child(6),
.noeva-forgot__star:nth-child(6) {
    left: 52%;
    top: 18%;
    animation-delay: -5s;
}

.noeva-login__star:nth-child(7),
.noeva-forgot__star:nth-child(7) {
    left: 78%;
    top: 66%;
    background: var(--noeva-purple);
    box-shadow: 0 0 16px var(--noeva-purple);
    animation-delay: -2s;
}

.noeva-login__star:nth-child(8),
.noeva-forgot__star:nth-child(8) {
    left: 91%;
    top: 34%;
    animation-delay: -6s;
}

/* =========================================================
   HEADER / LOGO
========================================================= */

.noeva-login__header,
.noeva-forgot__header {
    position: relative;
    z-index: 4;
    display: flex;
    justify-content: center;
    align-items: center;
    padding-bottom: clamp(24px, 4vw, 46px);
}

.noeva-login__logo,
.noeva-forgot__logo {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 190px;
    padding: 14px 26px;
    border-radius: 999px;
    border: 1px solid rgba(255, 255, 255, 0.16);
    background: rgba(255, 255, 255, 0.075);
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
    box-shadow:
        0 20px 44px rgba(0, 0, 0, 0.30),
        0 0 34px rgba(8, 236, 239, 0.14),
        inset 0 1px 0 rgba(255, 255, 255, 0.16);
    transition:
        transform 0.25s ease,
        box-shadow 0.25s ease,
        border-color 0.25s ease;
}

.noeva-login__logo:hover,
.noeva-forgot__logo:hover {
    transform: translateY(-2px);
    border-color: rgba(8, 236, 239, 0.42);
    box-shadow:
        0 24px 54px rgba(0, 0, 0, 0.38),
        0 0 42px rgba(8, 236, 239, 0.20),
        0 0 32px rgba(255, 0, 107, 0.14);
}

.noeva-login__logo img,
.noeva-forgot__logo img {
    display: block;
    width: min(210px, 48vw);
    height: auto;
    filter: drop-shadow(0 0 18px rgba(255, 255, 255, 0.12));
}

/* =========================================================
   LAYOUT COMMUN
========================================================= */

.noeva-login__layout,
.noeva-forgot__layout {
    position: relative;
    z-index: 3;
    width: min(1180px, 100%);
    margin: 0 auto;
    display: grid;
    grid-template-columns: minmax(0, 1.08fr) minmax(360px, 0.82fr);
    gap: clamp(26px, 4vw, 56px);
    align-items: end;
}

.noeva-login__visual,
.noeva-forgot__visual {
    position: relative;
    align-self: end;
    min-height: min(650px, calc(100vh - 180px));
    display: flex;
    align-items: flex-end;
}

.noeva-login__panel,
.noeva-forgot__panel {
    align-self: end;
    display: grid;
    gap: 16px;
}

/* =========================================================
   IMAGE GAUCHE
========================================================= */

.noeva-login__image-frame,
.noeva-forgot__image-frame {
    position: relative;
    width: 100%;
    height: clamp(480px, 66vh, 670px);
    border-radius: 36px;
    overflow: hidden;
    border: 1px solid rgba(8, 236, 239, 0.28);
    background: rgba(255, 255, 255, 0.06);
    box-shadow:
        0 34px 90px rgba(0, 0, 0, 0.48),
        0 0 48px rgba(8, 236, 239, 0.16),
        0 0 58px rgba(255, 0, 107, 0.10),
        inset 0 1px 0 rgba(255, 255, 255, 0.16);
    transform: perspective(1200px) rotateY(3deg) rotateX(1deg);
}

.noeva-login__image-frame::before,
.noeva-forgot__image-frame::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 2;
    background:
        radial-gradient(circle at 28% 18%, rgba(8, 236, 239, 0.22), transparent 26%),
        radial-gradient(circle at 72% 78%, rgba(255, 0, 107, 0.18), transparent 32%),
        linear-gradient(180deg, rgba(5, 0, 19, 0.04), rgba(5, 0, 19, 0.72));
    pointer-events: none;
}

.noeva-login__image-frame::after,
.noeva-forgot__image-frame::after {
    content: "";
    position: absolute;
    inset: 1px;
    z-index: 3;
    border-radius: inherit;
    border: 1px solid rgba(255, 255, 255, 0.10);
    pointer-events: none;
}

.noeva-login__image-frame img,
.noeva-forgot__image-frame img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    filter: saturate(1.08) contrast(1.05) brightness(0.92);
}

.noeva-login__image-glow,
.noeva-forgot__image-glow {
    position: absolute;
    z-index: 4;
    width: 180px;
    height: 180px;
    border-radius: 999px;
    filter: blur(52px);
    opacity: 0.72;
    pointer-events: none;
}

.noeva-login__image-glow--one,
.noeva-forgot__image-glow--one {
    left: -48px;
    bottom: 9%;
    background: rgba(8, 236, 239, 0.55);
}

.noeva-login__image-glow--two,
.noeva-forgot__image-glow--two {
    right: -54px;
    top: 14%;
    background: rgba(255, 0, 107, 0.42);
}

.noeva-login__visual-caption,
.noeva-forgot__visual-caption {
    position: absolute;
    z-index: 6;
    left: clamp(18px, 4vw, 34px);
    right: clamp(18px, 4vw, 34px);
    bottom: clamp(18px, 4vw, 34px);
    padding: clamp(20px, 3vw, 28px);
    border-radius: 26px;
    border: 1px solid rgba(255, 255, 255, 0.18);
    background:
        linear-gradient(145deg, rgba(255, 255, 255, 0.14), rgba(255, 255, 255, 0.045)),
        rgba(5, 0, 19, 0.66);
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
    box-shadow:
        0 24px 58px rgba(0, 0, 0, 0.42),
        0 0 30px rgba(8, 236, 239, 0.12);
}

.noeva-login__visual-caption span,
.noeva-forgot__visual-caption span,
.noeva-login__card-head span,
.noeva-forgot__card-head span,
.noeva-login__signup-head span {
    display: inline-flex;
    margin-bottom: 10px;
    color: var(--noeva-cyan);
    font-size: 0.76rem;
    font-weight: 900;
    letter-spacing: 0.14em;
    text-transform: uppercase;
}

.noeva-login__visual-caption h1,
.noeva-forgot__visual-caption h1 {
    max-width: 620px;
    margin: 0;
    color: var(--noeva-white);
    font-family: var(--noeva-font-title);
    font-size: clamp(1.7rem, 3.5vw, 3.05rem);
    line-height: 0.98;
    letter-spacing: -0.055em;
    text-transform: uppercase;
}

.noeva-login__visual-caption p,
.noeva-forgot__visual-caption p {
    max-width: 620px;
    margin: 16px 0 0;
    color: rgba(255, 255, 255, 0.72);
    font-size: 0.98rem;
    line-height: 1.7;
}

/* =========================================================
   CARTES FORMULAIRE
========================================================= */

.noeva-login__card,
.noeva-forgot__card,
.noeva-login__signup-card,
.noeva-login__notice,
.noeva-forgot__notice,
#nl-form-messages:not(.hidden) {
    position: relative;
    border: 1px solid rgba(255, 255, 255, 0.16);
    background:
        radial-gradient(circle at 12% 0%, rgba(255, 0, 107, 0.14), transparent 36%),
        radial-gradient(circle at 96% 10%, rgba(8, 236, 239, 0.13), transparent 34%),
        linear-gradient(145deg, rgba(255, 255, 255, 0.14), rgba(255, 255, 255, 0.045)),
        rgba(8, 3, 27, 0.78);
    backdrop-filter: blur(22px);
    -webkit-backdrop-filter: blur(22px);
    box-shadow:
        0 30px 80px rgba(0, 0, 0, 0.44),
        0 0 36px rgba(8, 236, 239, 0.13),
        inset 0 1px 0 rgba(255, 255, 255, 0.16);
}

.noeva-login__card::before,
.noeva-forgot__card::before,
.noeva-login__signup-card::before {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    padding: 1px;
    background: linear-gradient(135deg, rgba(255, 0, 107, 0.72), rgba(208, 11, 244, 0.45), rgba(8, 236, 239, 0.62));
    -webkit-mask:
        linear-gradient(#000 0 0) content-box,
        linear-gradient(#000 0 0);
    -webkit-mask-composite: xor;
    mask-composite: exclude;
    pointer-events: none;
    opacity: 0.62;
}

.noeva-login__card,
.noeva-forgot__card {
    padding: clamp(26px, 4vw, 38px);
    border-radius: 34px;
}

.noeva-login__signup-card {
    padding: 24px;
    border-radius: 28px;
}

.noeva-login__card-head h2,
.noeva-forgot__card-head h2,
.noeva-login__signup-head h3 {
    margin: 0;
    color: var(--noeva-white);
    font-family: var(--noeva-font-title);
    line-height: 1;
    letter-spacing: -0.055em;
    text-transform: uppercase;
}

.noeva-login__card-head h2,
.noeva-forgot__card-head h2 {
    font-size: clamp(2.15rem, 4vw, 3.45rem);
}

.noeva-login__signup-head h3 {
    font-size: clamp(1.35rem, 2.5vw, 2.05rem);
}

.noeva-login__card-head p,
.noeva-forgot__card-head p,
.noeva-login__signup-head p {
    margin: 14px 0 0;
    color: rgba(255, 255, 255, 0.68);
    line-height: 1.65;
}

/* =========================================================
   FORMULAIRES
========================================================= */

.noeva-login__form,
.noeva-forgot__form {
    display: grid;
    gap: 18px;
    margin-top: 28px;
}

.noeva-login__form .form-row,
.noeva-forgot__form .form-row {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
}

.noeva-login__form .form-group,
.noeva-forgot__form .form-group {
    display: grid;
    gap: 8px;
    margin: 0;
}

.noeva-login__form label,
.noeva-forgot__form label {
    color: rgba(255, 255, 255, 0.82);
    font-size: 0.88rem;
    font-weight: 800;
}

.noeva-login__form .form-control,
.noeva-forgot__form .form-control,
.noeva-login__form select,
.noeva-forgot__form select,
.noeva-login__form textarea,
.noeva-forgot__form textarea {
    width: 100%;
    min-height: 54px;
    padding: 0 16px;
    border-radius: 17px;
    border: 1px solid rgba(255, 255, 255, 0.16);
    outline: none;
    color: var(--noeva-white);
    background: rgba(255, 255, 255, 0.075);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08);
    transition:
        border-color 0.25s ease,
        box-shadow 0.25s ease,
        background 0.25s ease;
}

.noeva-login__form .form-control::placeholder,
.noeva-forgot__form .form-control::placeholder {
    color: rgba(255, 255, 255, 0.40);
}

.noeva-login__form .form-control:focus,
.noeva-forgot__form .form-control:focus,
.noeva-login__form select:focus,
.noeva-forgot__form select:focus,
.noeva-login__form textarea:focus,
.noeva-forgot__form textarea:focus {
    border-color: rgba(8, 236, 239, 0.68);
    background: rgba(255, 255, 255, 0.10);
    box-shadow:
        0 0 0 4px rgba(8, 236, 239, 0.11),
        0 0 26px rgba(8, 236, 239, 0.16),
        inset 0 1px 0 rgba(255, 255, 255, 0.10);
}

.noeva-login__form select option,
.noeva-forgot__form select option {
    color: #120828;
    background: #ffffff;
}

/* =========================================================
   BOUTONS
========================================================= */

.noeva-login__form .btn,
.noeva-forgot__form .btn,
.noeva-login__submit,
.noeva-forgot__submit {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    min-height: 58px;
    width: 100%;
    padding: 0 22px;
    border: 0;
    border-radius: 999px;
    color: var(--noeva-white);
    font-family: var(--noeva-font-body);
    font-size: 0.96rem;
    font-weight: 900;
    text-decoration: none;
    cursor: pointer;
    overflow: hidden;
    background: linear-gradient(135deg, var(--noeva-pink), var(--noeva-purple), var(--noeva-cyan));
    box-shadow:
        0 18px 42px rgba(255, 0, 107, 0.24),
        0 0 34px rgba(8, 236, 239, 0.17);
    transition:
        transform 0.25s ease,
        box-shadow 0.25s ease;
}

.noeva-login__form .btn::before,
.noeva-forgot__form .btn::before,
.noeva-login__submit::before,
.noeva-forgot__submit::before {
    content: "";
    position: absolute;
    inset: 0;
    transform: translateX(-110%);
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.35), transparent);
    transition: transform 0.55s ease;
}

.noeva-login__form .btn:hover,
.noeva-forgot__form .btn:hover,
.noeva-login__submit:hover,
.noeva-forgot__submit:hover {
    transform: translateY(-3px);
    box-shadow:
        0 22px 52px rgba(255, 0, 107, 0.30),
        0 0 40px rgba(8, 236, 239, 0.24);
}

.noeva-login__form .btn:hover::before,
.noeva-forgot__form .btn:hover::before,
.noeva-login__submit:hover::before,
.noeva-forgot__submit:hover::before {
    transform: translateX(110%);
}

.noeva-login__submit span,
.noeva-forgot__submit span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.18);
}

.noeva-login__forgot,
.noeva-forgot__back-link {
    justify-self: center;
    color: rgba(255, 255, 255, 0.70);
    font-size: 0.9rem;
    font-weight: 800;
    text-decoration: none;
    transition:
        color 0.25s ease,
        text-shadow 0.25s ease;
}

.noeva-login__forgot:hover,
.noeva-forgot__back-link:hover {
    color: var(--noeva-cyan);
    text-shadow: 0 0 16px rgba(8, 236, 239, 0.28);
}

/* =========================================================
   NOTICES / ALERTES
========================================================= */

.notice.noeva-login__notice,
.notice.noeva-forgot__notice,
#nl-form-messages:not(.hidden) {
    margin: 0;
    padding: 16px 18px;
    border-radius: 20px;
    color: rgba(255, 255, 255, 0.88);
    line-height: 1.55;
}

.notice.noeva-login__notice ul,
.notice.noeva-forgot__notice ul {
    margin: 0;
    padding-left: 18px;
}

.notice--warning.noeva-login__notice,
.notice--warning.noeva-forgot__notice {
    border-color: rgba(250, 169, 64, 0.38);
    background:
        radial-gradient(circle at 0% 0%, rgba(250, 169, 64, 0.24), transparent 44%),
        rgba(250, 169, 64, 0.08);
}

.notice--success.noeva-login__notice,
.notice--success.noeva-forgot__notice,
#nl-form-messages.success:not(.hidden) {
    border-color: rgba(12, 246, 12, 0.35);
    background:
        radial-gradient(circle at 0% 0%, rgba(12, 246, 12, 0.18), transparent 42%),
        rgba(12, 246, 12, 0.075);
}

.notice--danger.noeva-login__notice,
.notice--danger.noeva-forgot__notice,
#nl-form-messages.error:not(.hidden) {
    border-color: rgba(255, 0, 107, 0.38);
    background:
        radial-gradient(circle at 0% 0%, rgba(255, 0, 107, 0.22), transparent 42%),
        rgba(255, 0, 107, 0.08);
}

.hidden {
    display: none !important;
}

/* =========================================================
   CHECKBOX NEWSLETTER
========================================================= */

.checkbox-wrapper {
    margin-top: 2px;
}

.checkbox-group {
    display: grid;
    grid-template-columns: 22px 1fr;
    gap: 11px;
    align-items: start;
    padding: 14px;
    border-radius: 17px;
    border: 1px solid rgba(255, 255, 255, 0.13);
    background: rgba(255, 255, 255, 0.055);
}

.checkbox-group input[type="checkbox"] {
    width: 18px;
    height: 18px;
    margin-top: 2px;
    accent-color: var(--noeva-cyan);
}

.checkbox-group label {
    color: rgba(255, 255, 255, 0.72);
    font-size: 0.82rem;
    line-height: 1.45;
}

/* =========================================================
   SPÉCIFIQUE MOT DE PASSE OUBLIÉ
========================================================= */

.noeva-forgot__helper {
    margin: 18px 0 0;
    padding: 16px 18px;
    border-radius: 20px;
    border: 1px solid rgba(8, 236, 239, 0.18);
    background:
        radial-gradient(circle at 0% 0%, rgba(8, 236, 239, 0.14), transparent 42%),
        rgba(255, 255, 255, 0.055);
    color: rgba(255, 255, 255, 0.68);
    font-size: 0.9rem;
    line-height: 1.65;
}

.noeva-forgot__helper strong {
    color: var(--noeva-white);
}

.noeva-forgot__small {
    margin-top: 14px;
    color: rgba(255, 255, 255, 0.54);
    font-size: 0.82rem;
    line-height: 1.55;
    text-align: center;
}

/* =========================================================
   ANIMATIONS
========================================================= */

@keyframes noevaLoginFloat {
    from {
        transform: translate3d(0, 0, 0) scale(1);
    }

    to {
        transform: translate3d(24px, -20px, 0) scale(1.06);
    }
}

@keyframes noevaLoginStar {
    from {
        transform: translateY(26px) scale(0.75);
        opacity: 0;
    }

    20% {
        opacity: 0.9;
    }

    to {
        transform: translateY(-110px) scale(1.15);
        opacity: 0;
    }
}

@keyframes noevaLoginHalo {
    from {
        transform: translateY(0) scaleX(1);
        opacity: 0.62;
    }

    to {
        transform: translateY(-18px) scaleX(1.08);
        opacity: 0.96;
    }
}

/* =========================================================
   RESPONSIVE
========================================================= */

@media (max-width: 980px) {
    .noeva-login,
    .noeva-forgot {
        padding-inline: 16px;
    }

    .noeva-login__layout,
    .noeva-forgot__layout {
        grid-template-columns: 1fr;
        width: min(720px, 100%);
        align-items: start;
    }

    .noeva-login__visual,
    .noeva-forgot__visual {
        min-height: auto;
        order: 2;
    }

    .noeva-login__panel,
    .noeva-forgot__panel {
        order: 1;
    }

    .noeva-login__image-frame,
    .noeva-forgot__image-frame {
        height: min(680px, 82vh);
        transform: none;
    }
}

@media (max-width: 640px) {
    .noeva-login,
    .noeva-forgot {
        padding-top: 18px;
    }

    .noeva-login__header,
    .noeva-forgot__header {
        padding-bottom: 22px;
    }

    .noeva-login__logo,
    .noeva-forgot__logo {
        min-width: 0;
        padding: 12px 20px;
    }

    .noeva-login__logo img,
    .noeva-forgot__logo img {
        width: min(185px, 58vw);
    }

    .noeva-login__card,
    .noeva-forgot__card,
    .noeva-login__signup-card {
        border-radius: 26px;
        padding: 22px;
    }

    .noeva-login__form .form-row,
    .noeva-forgot__form .form-row {
        grid-template-columns: 1fr;
    }

    .noeva-login__image-frame,
    .noeva-forgot__image-frame {
        height: 560px;
        border-radius: 28px;
    }

    .noeva-login__visual-caption,
    .noeva-forgot__visual-caption {
        left: 14px;
        right: 14px;
        bottom: 14px;
        border-radius: 22px;
    }

    .noeva-login__visual-caption p,
    .noeva-forgot__visual-caption p {
        font-size: 0.9rem;
    }
}

@media (max-width: 420px) {
    .noeva-login__image-frame,
    .noeva-forgot__image-frame {
        height: 500px;
    }

    .noeva-login__visual-caption h1,
    .noeva-forgot__visual-caption h1 {
        font-size: 1.45rem;
    }
}