ComponentsPassword Input

Password Input

atom

A password field with a reveal toggle and caps-lock warning.

Set a password
Use at least 8 characters.
Fair

Recipe CSS

This is the exact CSS your kit ships for Password Input — token-driven, so it re-themes with every knob. Get it (and the rest) from the configurator's Use kit panel.

/* === PasswordInput (#6) === */
.pwinput__eye {
  flex-shrink: 0;
  width: 32px;
  height: 32px;
  margin-right: var(--k-s-4);
  border: 0;
  background: transparent;
  color: var(--k-fg-muted);
  cursor: pointer;
  display: grid;
  place-items: center;
  border-radius: 999px;
}
.pwinput__eye:hover { background: var(--k-state-hover); color: var(--k-fg); }
/* Strength meter — wider bars (48px vs 36px) + thicker (4px vs 3px) read
 * more confidently. Smooth background transition so a level change feels
 * dynamic rather than stepped. Nielsen Norman / Baymard both recommend
 * visible scale + named feedback label. */
.pwinput__strength {
  display: flex;
  align-items: center;
  gap: var(--k-s-4);
  margin-top: var(--k-s-8);
}
.pwinput__bar {
  flex: 1;
  max-width: 48px;
  height: 4px;
  border-radius: 999px;
  background: var(--k-surface-2);
  border: var(--k-hairline, 1px solid var(--k-border));
  transition: background var(--k-dur, 200ms) var(--k-ease), border-color var(--k-dur, 200ms) var(--k-ease);
}
.pwinput__bar--on[data-level="1"] { background: var(--k-danger); border-color: transparent; }
.pwinput__bar--on[data-level="2"] { background: var(--k-warning); border-color: transparent; }
.pwinput__bar--on[data-level="3"] { background: var(--k-success); border-color: transparent; }
.pwinput__label {
  font-size: var(--k-type-caption);
  color: var(--k-fg-muted);
  margin-left: var(--k-s-6);
}
/* Caps-lock warning — show when the input detects Caps Lock (getModifierState).
 * A quiet warning-toned hint below the field, not an error (the password may be
 * intentional). Render/remove it from the consumer's keydown/keyup handler. */
.pwinput__capslock {
  display: flex;
  align-items: center;
  gap: var(--k-s-6);
  margin-top: var(--k-s-6);
  font-size: var(--k-type-caption);
  color: var(--k-warning-soft-fg);
}
.pwinput__capslock svg { width: var(--k-icon-xs); height: var(--k-icon-xs); flex: none; }