{/* Surface 2 — Brand Slot (above the login card, in the flow) */} {/* Surface 3 — Login Card */}

Sign in

{/* Surface 4 — Username field */}
setUsername(e.target.value)} onKeyDown={handleUsernameKeyDown} aria-describedby={loginError ? 'login-error' : undefined} style={inputStyle(inputHasError)} />
{/* Surface 5 — Password field with show/hide toggle */}
setPassword(e.target.value)} onKeyDown={handlePasswordKeyDown} onBlur={() => setShowPassword(false)} aria-describedby={loginError ? 'login-error' : undefined} style={{ ...inputStyle(inputHasError), paddingRight: '44px' }} /> {/* Show/hide toggle button — 44px tap target (UI-SPEC Surface 5) */}
{/* Surface 6 — Error / lockout banner */} {loginError && (
{loginError === 'invalid' && (
)} {loginError === 'rate-limit' && (
)} {loginError === 'locked' && (
)} {loginError === 'server' && (
)}
)} {/* Surface 7 — Primary submit button */} {/* Surface 10 — Forgot password helper (informational only, not interactive) */}

Forgot your password? Ask your admin.

{/* Surfaces 8 & 9 — Method divider + OIDC button (only when oidcEnabled) */} {oidcEnabled && ( <> {/* Surface 8 — Method divider */} ); }