/* ==========================================================
   LUMINIVOR
   LOGIN / AUTHENTICATION PAGE

   FILE:
   login/login.css
========================================================== */


/* ==========================================================
   ROOT
========================================================== */

:root {

    --black: #0d0d0d;
    --black-soft: #131313;
    --black-light: #191919;

    --white: #ffffff;

    --background: #f5f5f3;
    --background-soft: #f8f8f6;

    --surface: #ffffff;
    --surface-soft: #fafaf8;

    --text: #181818;
    --text-soft: #666666;
    --text-light: #8b8b87;

    --border: #dededb;
    --border-strong: #c9c9c5;
    --border-dark: #292929;

    --success: #1f7a4c;
    --success-soft: #edf7f1;

    --error: #a73a3a;
    --error-soft: #fff1f1;

    --warning: #9a6b15;
    --warning-soft: #fff8e8;

    --radius-small: 8px;
    --radius-medium: 12px;
    --radius-large: 18px;

    --shadow-small:
        0 10px 30px
        rgba(0, 0, 0, 0.045);

    --shadow:
        0 20px 55px
        rgba(0, 0, 0, 0.07);

    --shadow-dark:
        0 22px 55px
        rgba(0, 0, 0, 0.16);

    --transition:
        220ms cubic-bezier(
            0.22,
            1,
            0.36,
            1
        );

}


/* ==========================================================
   RESET
========================================================== */

* {

    margin: 0;
    padding: 0;

    box-sizing: border-box;

}


html {

    min-height: 100%;

    scroll-behavior: smooth;

}


body {

    min-height: 100vh;

    background:
        var(--background);

    color:
        var(--text);

    font-family:
        "Montserrat",
        Arial,
        sans-serif;

    font-size: 16px;

    line-height: 1.6;

    -webkit-font-smoothing:
        antialiased;

    text-rendering:
        optimizeLegibility;

}


button,
input {

    font:
        inherit;

}


button {

    border: 0;

}


button,
a,
input {

    -webkit-tap-highlight-color:
        transparent;

}


a {

    color:
        inherit;

    text-decoration:
        none;

}


img {

    display: block;

    max-width: 100%;

}


/* ==========================================================
   SELECTION
========================================================== */

::selection {

    background:
        var(--black);

    color:
        var(--white);

}


/* ==========================================================
   PAGE
========================================================== */

.auth-page {

    min-height: 100vh;

    display: grid;

    grid-template-columns:
        minmax(420px, 46%)
        minmax(0, 54%);

}


/* ==========================================================
   LEFT BRAND PANEL
========================================================== */

.auth-brand-panel {

    position: relative;

    min-height: 100vh;

    overflow: hidden;

    background:
        var(--black);

    color:
        var(--white);

}


/* subtle visual texture */

.auth-brand-panel::before {

    content: "";

    position: absolute;

    inset: 0;

    pointer-events: none;

    background:

        radial-gradient(
            circle at 15% 10%,
            rgba(255, 255, 255, 0.055),
            transparent 30%
        ),

        radial-gradient(
            circle at 90% 90%,
            rgba(255, 255, 255, 0.025),
            transparent 38%
        );

}


/* vertical decorative line */

.auth-brand-panel::after {

    content: "";

    position: absolute;

    top: 0;
    right: 54px;

    width: 1px;
    height: 100%;

    background:
        rgba(255, 255, 255, 0.05);

    pointer-events: none;

}


.auth-brand-content {

    position: relative;

    z-index: 1;

    min-height: 100vh;

    padding:
        54px
        64px
        42px;

    display: flex;

    flex-direction: column;

}


/* ==========================================================
   LOGO
========================================================== */

.auth-logo {

    width: fit-content;

    display: inline-flex;

    align-items: center;

}


.auth-logo img {

    width: 138px;

    height: auto;

    object-fit: contain;

    transition:
        opacity var(--transition);

}


.auth-logo:hover img {

    opacity: 0.72;

}


/* ==========================================================
   BRAND COPY
========================================================== */

.auth-brand-copy {

    width: 100%;

    max-width: 560px;

    margin-top: auto;
    margin-bottom: auto;

    padding:
        80px
        0;

}


.auth-eyebrow {

    display: inline-block;

    margin-bottom: 24px;

    color:
        rgba(255, 255, 255, 0.48);

    font-family:
        "Michroma",
        sans-serif;

    font-size: 9px;

    line-height: 1.5;

    letter-spacing: 3px;

}


.auth-brand-copy h1 {

    margin-bottom: 26px;

    color:
        var(--white);

    font-size:
        clamp(
            42px,
            4vw,
            68px
        );

    font-weight: 600;

    line-height: 1.08;

    letter-spacing: -3px;

}


.auth-brand-copy p {

    max-width: 490px;

    color:
        rgba(255, 255, 255, 0.55);

    font-size: 14px;

    line-height: 1.85;

}


/* ==========================================================
   BRAND FOOTER
========================================================== */

.auth-brand-footer {

    display: flex;

    align-items: center;

    flex-wrap: wrap;

    gap:
        14px
        24px;

    color:
        rgba(255, 255, 255, 0.38);

    font-size: 10px;

    letter-spacing: 0.6px;

}


.auth-brand-footer a {

    position: relative;

    transition:
        color var(--transition);

}


.auth-brand-footer a:hover {

    color:
        var(--white);

}


/* ==========================================================
   RIGHT FORM PANEL
========================================================== */

.auth-form-panel {

    position: relative;

    min-height: 100vh;

    padding:
        60px
        7vw;

    display: flex;

    align-items: center;

    justify-content: center;

    background:
        var(--background);

}


.auth-container {

    position: relative;

    width: 100%;

    max-width: 520px;

}


/* ==========================================================
   MOBILE LOGO
========================================================== */

.auth-mobile-logo {

    display: none;

    width: fit-content;

    margin-bottom: 54px;

}


.auth-mobile-logo img {

    width: 135px;

}


/* ==========================================================
   AUTH STEP
========================================================== */

.auth-step {

    display: none;

    animation:
        authStepIn
        450ms
        cubic-bezier(
            0.22,
            1,
            0.36,
            1
        )
        both;

}


.auth-step.active {

    display: block;

}


@keyframes authStepIn {

    from {

        opacity: 0;

        transform:
            translateY(12px);

    }

    to {

        opacity: 1;

        transform:
            translateY(0);

    }

}


/* ==========================================================
   STEP HEADER
========================================================== */

.auth-step-header {

    margin-bottom: 38px;

}


.auth-label {

    display: inline-block;

    margin-bottom: 16px;

    color:
        var(--text-light);

    font-family:
        "Michroma",
        sans-serif;

    font-size: 8px;

    font-weight: 400;

    line-height: 1.6;

    letter-spacing: 2.6px;

}


.auth-step-header h2 {

    margin-bottom: 14px;

    color:
        var(--text);

    font-size:
        clamp(
            32px,
            3vw,
            44px
        );

    font-weight: 600;

    line-height: 1.12;

    letter-spacing: -1.8px;

}


.auth-step-header p {

    max-width: 450px;

    color:
        var(--text-soft);

    font-size: 13px;

    line-height: 1.75;

}


.auth-step-header p strong {

    color:
        var(--text);

    font-weight: 600;

    word-break: break-word;

}


/* ==========================================================
   FORM
========================================================== */

.auth-form {

    width: 100%;

}


.form-group {

    margin-bottom: 22px;

}


.form-group label {

    display: block;

    margin-bottom: 9px;

    color:
        var(--text);

    font-size: 11px;

    font-weight: 600;

    letter-spacing: 0.2px;

}


/* ==========================================================
   INPUT WRAPPER
========================================================== */

.input-wrapper {

    position: relative;

    width: 100%;

}


.input-wrapper > svg {

    position: absolute;

    top: 50%;
    left: 18px;

    width: 17px;
    height: 17px;

    transform:
        translateY(-50%);

    color:
        var(--text-light);

    pointer-events: none;

    transition:
        color var(--transition);

}


.input-wrapper input {

    width: 100%;

    height: 58px;

    padding:
        0
        18px
        0
        50px;

    background:
        var(--surface);

    color:
        var(--text);

    border:
        1px solid
        var(--border);

    border-radius:
        var(--radius-small);

    outline: none;

    font-size: 13px;

    box-shadow:
        0 1px 0
        rgba(255, 255, 255, 0.8)
        inset;

    transition:
        border-color var(--transition),
        box-shadow var(--transition),
        background var(--transition);

}


.input-wrapper input:hover {

    border-color:
        var(--border-strong);

}


.input-wrapper:focus-within > svg {

    color:
        var(--black);

}


.input-wrapper input:focus {

    border-color:
        var(--black);

    box-shadow:
        0 0 0 3px
        rgba(13, 13, 13, 0.07);

}


.input-wrapper input::placeholder {

    color:
        #adadaa;

}


/* ==========================================================
   FORM HELP
========================================================== */

.form-help {

    display: block;

    margin-top: 9px;

    color:
        var(--text-light);

    font-size: 10px;

    line-height: 1.6;

}


/* ==========================================================
   PRIMARY BUTTON
========================================================== */

.auth-primary-button {

    position: relative;

    width: 100%;
    min-height: 58px;

    padding:
        0
        20px;

    display: flex;

    align-items: center;

    justify-content: space-between;

    gap: 20px;

    overflow: hidden;

    background:
        var(--black);

    color:
        var(--white);

    border-radius:
        var(--radius-small);

    cursor: pointer;

    font-size: 11px;

    font-weight: 600;

    letter-spacing: 0.2px;

    box-shadow:
        var(--shadow-small);

    transition:
        transform var(--transition),
        background var(--transition),
        box-shadow var(--transition),
        opacity var(--transition);

}


.auth-primary-button::before {

    content: "";

    position: absolute;

    top: 0;
    left: -120%;

    width: 100%;
    height: 100%;

    background:
        linear-gradient(
            110deg,
            transparent,
            rgba(255, 255, 255, 0.08),
            transparent
        );

    transition:
        left 650ms
        cubic-bezier(
            0.22,
            1,
            0.36,
            1
        );

}


.auth-primary-button:hover {

    background:
        #1b1b1b;

    transform:
        translateY(-1px);

    box-shadow:
        0 14px 34px
        rgba(0, 0, 0, 0.13);

}


.auth-primary-button:hover::before {

    left: 120%;

}


.auth-primary-button:active {

    transform:
        translateY(0);

}


.auth-primary-button svg {

    position: relative;

    z-index: 1;

    width: 17px;
    height: 17px;

    transition:
        transform var(--transition);

}


.auth-primary-button span {

    position: relative;

    z-index: 1;

}


.auth-primary-button:hover svg {

    transform:
        translateX(3px);

}


.auth-primary-button:disabled {

    opacity: 0.55;

    cursor: not-allowed;

    pointer-events: none;

    transform: none;

}


/* ==========================================================
   SECURITY NOTE
========================================================== */

.auth-security-note {

    margin-top: 28px;

    padding:
        18px;

    display: flex;

    align-items: flex-start;

    gap: 14px;

    background:
        var(--surface-soft);

    border:
        1px solid
        var(--border);

    border-radius:
        var(--radius-small);

}


.auth-security-note > svg {

    flex-shrink: 0;

    width: 18px;
    height: 18px;

    margin-top: 2px;

    color:
        var(--text);

}


.auth-security-note div {

    display: flex;

    flex-direction: column;

    gap: 3px;

}


.auth-security-note strong {

    color:
        var(--text);

    font-size: 10px;

    font-weight: 600;

}


.auth-security-note span {

    color:
        var(--text-light);

    font-size: 10px;

    line-height: 1.6;

}


/* ==========================================================
   BACK BUTTON
========================================================== */

.auth-back-button {

    margin-bottom: 36px;

    padding: 0;

    display: inline-flex;

    align-items: center;

    gap: 8px;

    background:
        transparent;

    color:
        var(--text-soft);

    cursor: pointer;

    font-size: 10px;

    font-weight: 500;

    transition:
        color var(--transition),
        transform var(--transition);

}


.auth-back-button svg {

    width: 15px;
    height: 15px;

    transition:
        transform var(--transition);

}


.auth-back-button:hover {

    color:
        var(--black);

}


.auth-back-button:hover svg {

    transform:
        translateX(-3px);

}


/* ==========================================================
   OTP INPUT
========================================================== */

.otp-input-wrapper {

    position: relative;

    width: 100%;

}


.otp-input-wrapper input {

    width: 100%;
    height: 74px;

    padding:
        0
        22px;

    background:
        var(--surface);

    color:
        var(--black);

    border:
        1px solid
        var(--border);

    border-radius:
        var(--radius-small);

    outline: none;

    text-align: center;

    font-family:
        "Montserrat",
        sans-serif;

    font-size: 29px;

    font-weight: 600;

    letter-spacing: 14px;

    font-variant-numeric:
        tabular-nums;

    transition:
        border-color var(--transition),
        box-shadow var(--transition),
        background var(--transition);

}


.otp-input-wrapper input:hover {

    border-color:
        var(--border-strong);

}


.otp-input-wrapper input:focus {

    border-color:
        var(--black);

    box-shadow:
        0 0 0 3px
        rgba(13, 13, 13, 0.07);

}


.otp-input-wrapper input::placeholder {

    color:
        #d0d0cd;

}


/* Chrome removes numeric quirks */

.otp-input-wrapper input::-webkit-outer-spin-button,
.otp-input-wrapper input::-webkit-inner-spin-button {

    margin: 0;

    appearance: none;

}


/* ==========================================================
   OTP ACTIONS
========================================================== */

.otp-actions {

    margin-top: 25px;

    display: flex;

    align-items: center;

    justify-content: center;

    flex-wrap: wrap;

    gap:
        5px
        8px;

    color:
        var(--text-light);

    font-size: 10px;

}


.auth-text-button {

    padding: 0;

    background:
        transparent;

    color:
        var(--black);

    cursor: pointer;

    font-size: 10px;

    font-weight: 600;

    border-bottom:
        1px solid
        var(--black);

    transition:
        opacity var(--transition);

}


.auth-text-button:hover {

    opacity: 0.55;

}


.auth-text-button:disabled {

    opacity: 0.4;

    cursor: not-allowed;

}


/* ==========================================================
   STATUS MESSAGE
========================================================== */

.auth-message {

    width: 100%;

    margin-top: 22px;

    padding:
        14px
        16px;

    display: flex;

    align-items: flex-start;

    gap: 12px;

    background:
        var(--surface-soft);

    border:
        1px solid
        var(--border);

    border-radius:
        var(--radius-small);

    color:
        var(--text-soft);

    font-size: 10px;

    line-height: 1.6;

    animation:
        messageIn
        300ms
        ease
        both;

}


.auth-message[hidden] {

    display: none !important;

}


@keyframes messageIn {

    from {

        opacity: 0;

        transform:
            translateY(5px);

    }

    to {

        opacity: 1;

        transform:
            translateY(0);

    }

}


.auth-message-icon {

    flex-shrink: 0;

    width: 22px;
    height: 22px;

    display: flex;

    align-items: center;

    justify-content: center;

}


.auth-message-icon svg {

    width: 16px;
    height: 16px;

}


/* SUCCESS */

.auth-message.success {

    background:
        var(--success-soft);

    color:
        var(--success);

    border-color:
        rgba(31, 122, 76, 0.22);

}


/* ERROR */

.auth-message.error {

    background:
        var(--error-soft);

    color:
        var(--error);

    border-color:
        rgba(167, 58, 58, 0.22);

}


/* WARNING */

.auth-message.warning {

    background:
        var(--warning-soft);

    color:
        var(--warning);

    border-color:
        rgba(154, 107, 21, 0.22);

}


/* INFO */

.auth-message.info {

    background:
        var(--surface-soft);

    color:
        var(--text-soft);

    border-color:
        var(--border);

}


/* ==========================================================
   INVALID INPUT STATES
========================================================== */

.input-wrapper input.input-error,
.otp-input-wrapper input.input-error {

    border-color:
        var(--error);

    background:
        #fffafa;

}


.input-wrapper input.input-error:focus,
.otp-input-wrapper input.input-error:focus {

    box-shadow:
        0 0 0 3px
        rgba(167, 58, 58, 0.08);

}


.input-wrapper input.input-success,
.otp-input-wrapper input.input-success {

    border-color:
        var(--success);

}


/* ==========================================================
   LOADING OVERLAY
========================================================== */

.auth-loading {

    position: absolute;

    z-index: 30;

    inset: -20px;

    display: flex;

    align-items: center;

    justify-content: center;

    flex-direction: column;

    gap: 14px;

    background:
        rgba(245, 245, 243, 0.91);

    backdrop-filter:
        blur(5px);

    -webkit-backdrop-filter:
        blur(5px);

    border-radius:
        var(--radius-medium);

    opacity: 0;

    visibility: hidden;

    pointer-events: none;

    transition:
        opacity var(--transition),
        visibility var(--transition);

}


.auth-loading.active {

    opacity: 1;

    visibility: visible;

    pointer-events: all;

}


.auth-loading-spinner {

    width: 28px;
    height: 28px;

    border:
        2px solid
        var(--border);

    border-top-color:
        var(--black);

    border-radius:
        50%;

    animation:
        authSpinner
        750ms
        linear
        infinite;

}


@keyframes authSpinner {

    to {

        transform:
            rotate(360deg);

    }

}


.auth-loading span {

    color:
        var(--text-soft);

    font-size: 10px;

    font-weight: 500;

}


/* ==========================================================
   SUPPORT
========================================================== */

.auth-support {

    margin-top: 42px;

    padding-top: 26px;

    display: flex;

    align-items: center;

    flex-wrap: wrap;

    gap:
        5px
        8px;

    border-top:
        1px solid
        var(--border);

    color:
        var(--text-light);

    font-size: 9px;

}


.auth-support a {

    color:
        var(--text);

    font-weight: 600;

    transition:
        opacity var(--transition);

}


.auth-support a:hover {

    opacity: 0.55;

}


/* ==========================================================
   FOCUS
========================================================== */

.auth-primary-button:focus-visible,
.auth-back-button:focus-visible,
.auth-text-button:focus-visible,
.auth-logo:focus-visible,
.auth-mobile-logo:focus-visible,
.auth-brand-footer a:focus-visible,
.auth-support a:focus-visible {

    outline:
        2px solid
        var(--black);

    outline-offset:
        4px;

}


.auth-brand-panel
.auth-logo:focus-visible,
.auth-brand-panel
.auth-brand-footer a:focus-visible {

    outline-color:
        var(--white);

}


/* ==========================================================
   RESPONSIVE
   1280PX
========================================================== */

@media
(max-width: 1280px) {

    .auth-page {

        grid-template-columns:
            minmax(390px, 44%)
            minmax(0, 56%);

    }


    .auth-brand-content {

        padding:
            48px
            48px
            38px;

    }


    .auth-brand-copy h1 {

        font-size:
            clamp(
                40px,
                4vw,
                58px
            );

    }


    .auth-form-panel {

        padding:
            50px
            6vw;

    }

}


/* ==========================================================
   RESPONSIVE
   1050PX
========================================================== */

@media
(max-width: 1050px) {

    .auth-page {

        grid-template-columns:
            minmax(350px, 42%)
            minmax(0, 58%);

    }


    .auth-brand-content {

        padding:
            42px
            36px;

    }


    .auth-brand-panel::after {

        right: 30px;

    }


    .auth-brand-copy {

        padding:
            50px
            0;

    }


    .auth-brand-copy h1 {

        font-size: 44px;

        letter-spacing: -2px;

    }


    .auth-brand-copy p {

        font-size: 12px;

    }


    .auth-form-panel {

        padding:
            50px
            5vw;

    }

}


/* ==========================================================
   RESPONSIVE
   820PX
========================================================== */

@media
(max-width: 820px) {

    body {

        background:
            var(--background);

    }


    .auth-page {

        min-height: 100vh;

        display: block;

    }


    .auth-brand-panel {

        display: none;

    }


    .auth-form-panel {

        min-height: 100vh;

        padding:
            44px
            28px;

        align-items: flex-start;

    }


    .auth-container {

        max-width: 560px;

        margin:
            0 auto;

        padding-top: 10px;

    }


    .auth-mobile-logo {

        display: inline-flex;

    }


    .auth-step-header {

        margin-bottom: 34px;

    }


    .auth-step-header h2 {

        font-size: 38px;

    }


    .auth-support {

        margin-bottom: 20px;

    }

}


/* ==========================================================
   RESPONSIVE
   620PX
========================================================== */

@media
(max-width: 620px) {

    .auth-form-panel {

        padding:
            32px
            20px;

    }


    .auth-container {

        padding-top: 0;

    }


    .auth-mobile-logo {

        margin-bottom: 44px;

    }


    .auth-mobile-logo img {

        width: 120px;

    }


    .auth-step-header {

        margin-bottom: 30px;

    }


    .auth-label {

        margin-bottom: 13px;

        font-size: 7px;

        letter-spacing: 2px;

    }


    .auth-step-header h2 {

        margin-bottom: 12px;

        font-size: 34px;

        letter-spacing: -1.5px;

    }


    .auth-step-header p {

        font-size: 12px;

    }


    .input-wrapper input {

        height: 56px;

    }


    .auth-primary-button {

        min-height: 56px;

    }


    .otp-input-wrapper input {

        height: 68px;

        padding-left: 14px;
        padding-right: 14px;

        font-size: 26px;

        letter-spacing: 10px;

    }


    .auth-security-note {

        padding: 16px;

    }


    .auth-back-button {

        margin-bottom: 30px;

    }


    .auth-loading {

        inset: -10px;

    }

}


/* ==========================================================
   RESPONSIVE
   400PX
========================================================== */

@media
(max-width: 400px) {

    .auth-form-panel {

        padding:
            26px
            16px;

    }


    .auth-mobile-logo {

        margin-bottom: 38px;

    }


    .auth-step-header h2 {

        font-size: 31px;

    }


    .otp-input-wrapper input {

        font-size: 24px;

        letter-spacing: 8px;

    }


    .auth-security-note {

        gap: 11px;

    }


    .auth-support {

        align-items: flex-start;

        flex-direction: column;

        gap: 3px;

    }

}


/* ==========================================================
   REDUCED MOTION
========================================================== */

@media
(prefers-reduced-motion: reduce) {

    *,
    *::before,
    *::after {

        scroll-behavior: auto !important;

        animation-duration:
            0.01ms !important;

        animation-iteration-count:
            1 !important;

        transition-duration:
            0.01ms !important;

    }

}