Security map — light re-layout (lo que pediste auditar)
Markup NUEVO (no "el mismo pero light"): el re-layout pudo introducir fugas que el dark no tenía. Mapeo de cada invariante:
aEnumeración (by-number). Paso 1 no renderiza roster — solo número + numpad, sin placeholder de longitud ni prefijo (no revela el formato del roster). PROPUESTA: el número se muestra en dígitos visibles (es un ID, no el secreto — el PIN es el que se enmascara). Cero-enumeración se preserva (sigue sin placeholder/prefijo); única exposición nueva = shoulder-surfing del propio número. Tu call: visible o enmascarado.
bFallo uniforme. Un solo banner (arriba) para PIN incorrecto / bloqueado / inexistente; sin contador. Mismo PinAuthService + decoy PBKDF2 (las 3 ramas pagan el costo). ✓
cSin displayName/ownerRef ni sesión previa. Ningún nombre del roster, «último acceso» ni sesión recordada — memory-only (BUG-010). El «Employee 04» del paso 2 es el número que TÚ tecleaste, no un nombre. ✓
dRiesgo del re-layout a vigilar (tu cold-review): contraste WCAG en light (ink sobre card, banner de error ≥4.5:1) y que el campo de número no herede autocompletado del browser (los dots deben venir del estado, no de un <input> autofill).