diff --git a/src/frontend/src/screens/login/LoginPage.tsx b/src/frontend/src/screens/login/LoginPage.tsx index b7de685..0e7504a 100644 --- a/src/frontend/src/screens/login/LoginPage.tsx +++ b/src/frontend/src/screens/login/LoginPage.tsx @@ -31,6 +31,7 @@ export function LoginPage() { const [phase, setPhase] = useState('login'); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); + const [showPw, setShowPw] = useState(false); const [remember, setRemember] = useState(false); const [error, setError] = useState(null); const [submitting, setSubmitting] = useState(false); @@ -157,15 +158,39 @@ export function LoginPage() {
- setPassword(e.target.value)} - required - /> +
+ setPassword(e.target.value)} + required + /> + +
diff --git a/src/frontend/src/screens/login/login.css b/src/frontend/src/screens/login/login.css index 3018fce..cf51ac7 100644 --- a/src/frontend/src/screens/login/login.css +++ b/src/frontend/src/screens/login/login.css @@ -364,6 +364,35 @@ border-color: var(--color-primary-600); box-shadow: 0 0 0 3px rgba(0, 102, 179, 0.15); } +/* 비밀번호 표시/숨김 토글 (눈 아이콘) */ +.kx-field__pw { + position: relative; +} +.kx-field__pw input { + width: 100%; + padding-right: 44px; +} +.kx-field__pw-toggle { + position: absolute; + top: 50%; + right: 6px; + transform: translateY(-50%); + display: inline-flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border: none; + background: transparent; + color: var(--color-neutral-500); + cursor: pointer; + border-radius: var(--radius-sm); + transition: color 0.15s ease, background 0.15s ease; +} +.kx-field__pw-toggle:hover { + color: var(--color-primary-600); + background: var(--color-neutral-050); +} /* ── 워크스페이스 선택 ── */ .kx-ws {