
/* TSN LOGIN - FIRST PAINT V11 */

/* Hide Frappe's default login heading immediately. */
#page-login .for-login > .page-card-head {
    display: none !important;
}

/* Center field icons using their actual wrappers. */
#page-login .email-field,
#page-login .password-field {
    position: relative !important;
}

#page-login .email-field > svg.field-icon,
#page-login .password-field > svg.field-icon {
    position: absolute !important;
    left: 14px !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    width: 18px !important;
    height: 18px !important;
    margin: 0 !important;
    z-index: 5 !important;
    pointer-events: none;
}

#page-login .password-field > .toggle-password {
    position: absolute !important;
    right: 14px !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    margin: 0 !important;
    z-index: 6 !important;
}

/* Prevent the original login content flashing before JS. */


/* Reveal after TSN branding initializes. */


/* Fallback for browsers with JavaScript disabled. */
@media (prefers-reduced-motion: reduce) {
    #page-login .for-login {
        transition: none !important;
    }
}

/* TSN LOGIN HEADER FLASH FIX V18 */

/* Hide the Frappe website navbar before login JS initializes. */
html:has(body[data-path="login"]) body > .navbar,
html:has(body[data-path="login"]) body > nav.navbar {
    display: none !important;
}


/* TSN V19 — Prevent original Frappe login header flash */
#page-login[data-path="login"] .page-card-head {
    display: none !important;
}


/* TSN LOGIN FIRST-PAINT VISIBILITY V20 */

/* Keep the original login hidden while TSN initializes. */
html:not(.tsn-login-ready) #page-login[data-path="login"] .for-login {
    visibility: hidden !important;
}

/* Reveal the completed TSN login. */
html.tsn-login-ready #page-login[data-path="login"] .for-login {
    visibility: visible !important;
}

