536 lines
9.8 KiB
CSS
536 lines
9.8 KiB
CSS
/* 密码恢复容器 */
|
|
.password-recovery-container {
|
|
width: 100%;
|
|
max-width: 760px;
|
|
min-width: 0;
|
|
margin: auto;
|
|
padding: clamp(20px, 3vw, 36px);
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
/* 管理员附加验证弹窗 */
|
|
.admin-recovery-description {
|
|
margin: 0 0 20px;
|
|
color: var(--pm-text-secondary, #64748b);
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.admin-recovery-dialog :deep(.el-input__wrapper) {
|
|
min-height: 42px;
|
|
border-radius: 10px;
|
|
}
|
|
|
|
.admin-recovery-dialog :deep(.el-form-item__error) {
|
|
position: static;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.admin-recovery-actions {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
gap: 12px;
|
|
margin-top: 24px;
|
|
}
|
|
|
|
.admin-recovery-actions .el-button {
|
|
min-height: 40px;
|
|
margin-left: 0;
|
|
}
|
|
|
|
/* 步骤导航条 */
|
|
.recovery-steps-bar {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 12px;
|
|
margin-bottom: 24px;
|
|
padding: 12px 18px;
|
|
background: var(--pm-surface-muted, #f8fafc);
|
|
border-radius: 14px;
|
|
border: 1px solid var(--pm-border-color, #e2e8f0);
|
|
}
|
|
|
|
.step-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
color: var(--pm-text-secondary, #64748b);
|
|
transition: all 0.25s ease;
|
|
}
|
|
|
|
.step-number {
|
|
width: 26px;
|
|
height: 26px;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
background: #e2e8f0;
|
|
color: #64748b;
|
|
transition: all 0.25s ease;
|
|
}
|
|
|
|
.step-label {
|
|
font-size: 14px;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.step-item.active {
|
|
color: var(--pm-primary-color, #2563eb);
|
|
}
|
|
|
|
.step-item.active .step-number {
|
|
background: var(--pm-primary-color, #2563eb);
|
|
color: #fff;
|
|
}
|
|
|
|
.step-item.current .step-label {
|
|
font-weight: 700;
|
|
}
|
|
|
|
.step-divider {
|
|
flex: 1;
|
|
max-width: 48px;
|
|
height: 2px;
|
|
background: #e2e8f0;
|
|
transition: all 0.25s ease;
|
|
}
|
|
|
|
.step-divider.active {
|
|
background: var(--pm-primary-color, #2563eb);
|
|
}
|
|
|
|
/* 步骤内容区域 */
|
|
.step-content {
|
|
animation: fadeIn 0.3s cubic-bezier(0.16, 1, 0.3, 1);
|
|
}
|
|
|
|
@keyframes fadeIn {
|
|
from { opacity: 0; transform: translateY(6px); }
|
|
to { opacity: 1; transform: translateY(0); }
|
|
}
|
|
|
|
.step-two-intro {
|
|
margin-bottom: 20px;
|
|
padding: 16px 20px;
|
|
background: linear-gradient(135deg, rgba(239, 246, 255, 0.95), rgba(248, 251, 255, 0.9));
|
|
border: 1px solid rgba(37, 99, 235, 0.16);
|
|
border-radius: 14px;
|
|
}
|
|
|
|
.step-two-intro h2 {
|
|
margin: 0 0 6px;
|
|
font-size: 18px;
|
|
font-weight: 700;
|
|
color: var(--pm-text-primary, #0f172a);
|
|
}
|
|
|
|
.step-two-intro p {
|
|
margin: 0;
|
|
font-size: 13px;
|
|
color: var(--pm-text-secondary, #475569);
|
|
line-height: 1.5;
|
|
}
|
|
|
|
/* 表单主体 */
|
|
.recovery-form {
|
|
width: 100%;
|
|
min-width: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.recovery-form :deep(.el-form-item) {
|
|
min-width: 0;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
.recovery-form :deep(.el-form-item__label) {
|
|
max-width: 100%;
|
|
padding-bottom: 4px;
|
|
color: var(--pm-text-primary);
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
line-height: 1.35;
|
|
letter-spacing: 0.01em;
|
|
white-space: normal;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.recovery-form :deep(.el-input__wrapper) {
|
|
min-height: 44px;
|
|
background-color: var(--pm-surface-muted);
|
|
border: 1px solid transparent;
|
|
border-radius: 12px;
|
|
box-shadow: 0 0 0 1px var(--pm-border-color) inset !important;
|
|
transition: all 0.2s;
|
|
}
|
|
|
|
.recovery-form :deep(.el-input__wrapper:hover),
|
|
.recovery-form :deep(.el-input__wrapper.is-focus) {
|
|
border-color: var(--pm-primary-color);
|
|
background-color: var(--pm-bg-secondary);
|
|
}
|
|
|
|
.reset-boundary {
|
|
margin-top: 18px;
|
|
}
|
|
|
|
/* 方式切换栏 */
|
|
.method-switcher {
|
|
position: relative;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 16px;
|
|
min-width: 0;
|
|
margin: 8px 0 18px;
|
|
padding: 16px 18px;
|
|
box-sizing: border-box;
|
|
background: linear-gradient(135deg, rgba(239, 246, 255, 0.98), rgba(248, 251, 255, 0.94));
|
|
border: 1px solid rgba(37, 99, 235, 0.16);
|
|
border-radius: 16px;
|
|
box-shadow: 0 8px 22px rgba(31, 41, 55, 0.06);
|
|
}
|
|
|
|
.method-copy {
|
|
position: relative;
|
|
min-width: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
padding-left: 12px;
|
|
}
|
|
|
|
.method-copy::before {
|
|
position: absolute;
|
|
top: 2px;
|
|
bottom: 2px;
|
|
left: 0;
|
|
width: 4px;
|
|
border-radius: 999px;
|
|
background: var(--pm-primary-color);
|
|
content: '';
|
|
}
|
|
|
|
.method-label {
|
|
color: var(--pm-text-secondary);
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
line-height: 1.35;
|
|
letter-spacing: 0.04em;
|
|
}
|
|
|
|
.method-copy strong {
|
|
color: var(--pm-text-primary);
|
|
font-size: 17px;
|
|
font-weight: 700;
|
|
line-height: 1.35;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.switch-button {
|
|
flex: 0 0 auto;
|
|
max-width: 48%;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
/* 面板 */
|
|
.verification-panel {
|
|
min-width: 0;
|
|
margin-bottom: 18px;
|
|
padding: 18px 20px 20px;
|
|
box-sizing: border-box;
|
|
background: linear-gradient(180deg, rgba(252, 253, 255, 0.98), rgba(245, 249, 255, 0.94));
|
|
border: 1px solid var(--pm-border-color);
|
|
border-radius: 16px;
|
|
box-shadow: 0 8px 22px rgba(31, 41, 55, 0.06);
|
|
}
|
|
|
|
.panel-header h2 {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
margin: 0 0 8px;
|
|
color: var(--pm-text-primary);
|
|
font-size: 18px;
|
|
font-weight: 700;
|
|
line-height: 1.35;
|
|
letter-spacing: -0.01em;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.panel-header h2::before {
|
|
width: 5px;
|
|
height: 20px;
|
|
flex: 0 0 auto;
|
|
border-radius: 999px;
|
|
background: var(--pm-primary-color);
|
|
content: '';
|
|
}
|
|
|
|
.panel-header p {
|
|
margin: 0 0 16px;
|
|
color: var(--pm-text-secondary);
|
|
font-size: 13px;
|
|
line-height: 1.6;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
/* 核心紧凑排列组:用户名与外部邮箱相邻 */
|
|
.compact-field-group {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.verification-code-row {
|
|
width: 100%;
|
|
min-width: 0;
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) 140px;
|
|
gap: 10px;
|
|
}
|
|
|
|
.verification-code-row > * {
|
|
min-width: 0;
|
|
}
|
|
|
|
.code-btn {
|
|
width: 100%;
|
|
font-size: 13px !important;
|
|
}
|
|
|
|
.verification-state {
|
|
display: block;
|
|
min-width: 0;
|
|
margin: 4px 0 14px;
|
|
padding: 8px 12px;
|
|
background: rgba(37, 99, 235, 0.06);
|
|
border-radius: 8px;
|
|
color: var(--pm-primary-color);
|
|
font-size: 13px;
|
|
line-height: 1.45;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.offline-grid {
|
|
min-width: 0;
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: 16px;
|
|
}
|
|
|
|
.offline-grid :deep(.el-form-item) {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
/* 步骤二:垂直紧凑密码输入 */
|
|
.password-grid-vertical {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.password-error-msg {
|
|
color: #ef4444;
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
margin-top: 4px;
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
/* 步骤三:成功界面居中展示 */
|
|
.step-success {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 40px 20px;
|
|
text-align: center;
|
|
}
|
|
|
|
.success-icon-wrap {
|
|
width: 80px;
|
|
height: 80px;
|
|
border-radius: 50%;
|
|
background: linear-gradient(135deg, #dcfce7, #bbf7d0);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-bottom: 20px;
|
|
box-shadow: 0 10px 25px rgba(34, 197, 94, 0.2);
|
|
}
|
|
|
|
.success-emoji {
|
|
font-size: 28px;
|
|
font-weight: 800;
|
|
color: #16a34a;
|
|
letter-spacing: -1px;
|
|
}
|
|
|
|
.success-title {
|
|
font-size: 22px;
|
|
font-weight: 700;
|
|
color: var(--pm-text-primary, #0f172a);
|
|
margin: 0 0 10px;
|
|
}
|
|
|
|
.success-description {
|
|
font-size: 14px;
|
|
color: var(--pm-text-secondary, #64748b);
|
|
margin: 0 0 28px;
|
|
}
|
|
|
|
.success-action {
|
|
width: 100%;
|
|
max-width: 240px;
|
|
}
|
|
|
|
.success-action :deep(.recovery-action-btn) {
|
|
width: 100%;
|
|
}
|
|
|
|
/* 底部操作区 */
|
|
.recovery-footer {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 16px;
|
|
min-width: 0;
|
|
padding-top: 22px;
|
|
}
|
|
|
|
.actions {
|
|
min-width: 0;
|
|
display: flex;
|
|
gap: 12px;
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
.actions .el-button,
|
|
.back-button {
|
|
max-width: 100%;
|
|
white-space: normal;
|
|
line-height: 1.35;
|
|
}
|
|
|
|
.back-button {
|
|
margin: 0;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.recovery-form :deep(.recovery-action-btn),
|
|
.recovery-form :deep(.switch-button) {
|
|
min-height: 44px;
|
|
padding: 0 18px;
|
|
border-radius: 12px;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
line-height: 1.35;
|
|
white-space: normal;
|
|
transition:
|
|
transform 0.2s var(--pm-ease-out),
|
|
border-color 0.2s var(--pm-ease-out),
|
|
background-color 0.2s var(--pm-ease-out),
|
|
box-shadow 0.2s var(--pm-ease-out);
|
|
}
|
|
|
|
.recovery-form :deep(.recovery-action-btn) {
|
|
box-shadow: 0 8px 20px rgba(37, 99, 235, 0.2);
|
|
}
|
|
|
|
.recovery-form :deep(.recovery-action-btn:hover) {
|
|
transform: translateY(-1px);
|
|
box-shadow: 0 12px 24px rgba(37, 99, 235, 0.26);
|
|
}
|
|
|
|
.recovery-form :deep(.secondary-action-btn) {
|
|
color: var(--pm-text-primary);
|
|
border-color: var(--pm-border-color);
|
|
background: rgba(240, 246, 255, 0.9);
|
|
box-shadow: 0 4px 14px rgba(31, 41, 55, 0.04);
|
|
}
|
|
|
|
.recovery-form :deep(.secondary-action-btn:hover),
|
|
.recovery-form :deep(.secondary-action-btn:focus-visible) {
|
|
color: var(--pm-primary-color);
|
|
border-color: rgba(37, 99, 235, 0.36);
|
|
background: rgba(37, 99, 235, 0.07);
|
|
transform: translateY(-1px);
|
|
}
|
|
|
|
@media (max-width: 760px) {
|
|
.password-recovery-container {
|
|
padding: 16px 14px 20px;
|
|
}
|
|
|
|
.reset-boundary {
|
|
margin-top: 12px;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 560px) {
|
|
.recovery-steps-bar {
|
|
padding: 8px 10px;
|
|
gap: 6px;
|
|
}
|
|
|
|
.step-label {
|
|
font-size: 12px;
|
|
}
|
|
|
|
.step-divider {
|
|
max-width: 24px;
|
|
}
|
|
|
|
.method-switcher {
|
|
gap: 8px;
|
|
padding: 12px;
|
|
}
|
|
|
|
.switch-button {
|
|
max-width: 48%;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.verification-panel {
|
|
padding: 14px 12px 16px;
|
|
}
|
|
|
|
.panel-header h2 {
|
|
font-size: 16px;
|
|
}
|
|
|
|
.panel-header p {
|
|
font-size: 12px;
|
|
}
|
|
|
|
.verification-code-row {
|
|
grid-template-columns: minmax(0, 1fr) 110px;
|
|
}
|
|
|
|
.offline-grid {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
gap: 0;
|
|
}
|
|
|
|
.offline-grid :deep(.el-form-item) {
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.recovery-footer {
|
|
align-items: stretch;
|
|
flex-direction: column-reverse;
|
|
gap: 10px;
|
|
}
|
|
|
|
.actions,
|
|
.actions .el-button,
|
|
.back-button {
|
|
width: 100%;
|
|
}
|
|
}
|