diff --git a/static/css/settings.css b/static/css/settings.css
index c2ad429..d9d6c17 100644
--- a/static/css/settings.css
+++ b/static/css/settings.css
@@ -615,6 +615,7 @@
position: relative;
display: flex;
align-items: center;
+ width: 100%;
}
.settings-password-wrapper .settings-input {
@@ -624,21 +625,46 @@
.settings-password-toggle-btn {
position: absolute;
right: var(--s-space-8);
+ top: 50%;
+ transform: translateY(-50%);
background: transparent;
border: none;
color: var(--s-color-muted);
cursor: pointer;
- padding: var(--s-space-6);
- display: flex;
+ padding: 0;
+ display: inline-flex;
align-items: center;
justify-content: center;
border-radius: var(--s-radius-sm);
- min-width: 32px;
- min-height: 32px;
+ width: 32px;
+ height: 32px;
+ transition: color 0.15s ease, background-color 0.15s ease;
}
.settings-password-toggle-btn:hover {
color: var(--s-color-text);
+ background-color: var(--s-color-hover);
+}
+
+.settings-password-toggle-btn:focus-visible {
+ outline: 2px solid var(--s-color-primary);
+ outline-offset: 2px;
+}
+
+.settings-password-toggle-btn .icon-eye {
+ display: block;
+}
+
+.settings-password-toggle-btn .icon-eye-off {
+ display: none;
+}
+
+.settings-password-toggle-btn[aria-pressed="true"] .icon-eye {
+ display: none;
+}
+
+.settings-password-toggle-btn[aria-pressed="true"] .icon-eye-off {
+ display: block;
}
/* Password Strength Meter */
diff --git a/static/css/styles.css b/static/css/styles.css
index 98869e6..0f3520c 100644
--- a/static/css/styles.css
+++ b/static/css/styles.css
@@ -1056,6 +1056,70 @@ a {
color: var(--text-dim);
}
+/* Password Toggle Wrapper & Action Button (Auth Pages) */
+.password-input-wrapper {
+ position: relative;
+ display: flex;
+ align-items: center;
+ width: 100%;
+}
+
+.password-input-wrapper .form-input {
+ padding-right: 2.75rem;
+}
+
+.password-toggle-btn {
+ position: absolute;
+ right: 0.5rem;
+ top: 50%;
+ transform: translateY(-50%);
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 2rem;
+ height: 2rem;
+ padding: 0;
+ background: transparent;
+ border: none;
+ border-radius: var(--radius-xs);
+ color: var(--text-dim);
+ cursor: pointer;
+ transition: color 0.15s ease, background-color 0.15s ease;
+}
+
+.password-toggle-btn:hover {
+ color: var(--text-primary);
+ background-color: rgba(15, 23, 42, 0.05);
+}
+
+.password-toggle-btn:focus-visible {
+ outline: 2px solid var(--brand-navy);
+ outline-offset: 1px;
+}
+
+.password-toggle-icon {
+ width: 1.125rem;
+ height: 1.125rem;
+ stroke-width: 1.6;
+ pointer-events: none;
+}
+
+.password-toggle-btn .icon-eye {
+ display: block;
+}
+
+.password-toggle-btn .icon-eye-off {
+ display: none;
+}
+
+.password-toggle-btn[aria-pressed="true"] .icon-eye {
+ display: none;
+}
+
+.password-toggle-btn[aria-pressed="true"] .icon-eye-off {
+ display: block;
+}
+
.alert-danger {
padding: 0.75rem 1rem;
border-radius: var(--radius-sm);
diff --git a/static/img/icons/settings-sprite.svg b/static/img/icons/settings-sprite.svg
index 165c287..f27f532 100644
--- a/static/img/icons/settings-sprite.svg
+++ b/static/img/icons/settings-sprite.svg
@@ -26,4 +26,12 @@