0 / 0 ←/→ to navigate.

LOGIN — standard password

Plain input[type="password"].

LOGIN — new-password

Same selector match with signup attributes.

LOGIN — type="text"

Doesn't match the LOGIN selector.

LOGIN — display:none on the input

Field exists in the DOM but is not rendered.

LOGIN — visibility:hidden on the input

Caught by visibilityProperty:true.

LOGIN — opacity:0 on the input

Caught by checkOpacity:true.

LOGIN — disabled

Filtered by the explicit !el.disabled guard.

LOGIN — hidden attribute

UA stylesheet sets display:none.

LOGIN — ancestor has display:none

Wrapper, not the input, is hidden.

MFA — autocomplete="one-time-code"

MFA — split-digit (type=text, inputmode=numeric, maxlength=1)

MFA — split-digit (type=tel, inputmode=numeric)

MFA — split-digit (type=number)

MFA — maxlength=6 numeric (no keyword)

Doesn't match split-digit (maxlength != 1) and has no MFA keyword.

MFA — id contains "OTP" (case-insensitive)

MFA — name="mfaCode"

MFA — placeholder contains "2fa"

MFA — aria-label contains "verification"

MFA — display:none

MFA — visibility:hidden

MFA — opacity:0

MFA — disabled

MFA — hidden attribute

MFA — ancestor has display:none

Off-viewport — field is below the fold

A spacer pushes the field below the viewport. The detector doesn't filter by viewport position, only by CSS visibility.

Scrollable container — field inside overflow:auto

Field lives in a scrollable inner container. Scroll inside the box to reveal it.