231 lines
4.2 KiB
CSS
231 lines
4.2 KiB
CSS
|
|
/* 认证表单专用样式 */
|
||
|
|
|
||
|
|
.auth-container {
|
||
|
|
animation: slideInUp 0.6s ease-out;
|
||
|
|
}
|
||
|
|
|
||
|
|
.auth-form-wrapper {
|
||
|
|
background: rgba(255, 255, 255, 0.85);
|
||
|
|
backdrop-filter: blur(20px);
|
||
|
|
box-shadow:
|
||
|
|
0 20px 25px -5px rgba(0, 0, 0, 0.1),
|
||
|
|
0 10px 10px -5px rgba(0, 0, 0, 0.04),
|
||
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.6);
|
||
|
|
}
|
||
|
|
|
||
|
|
.form-group {
|
||
|
|
position: relative;
|
||
|
|
}
|
||
|
|
|
||
|
|
.form-group input {
|
||
|
|
transition: all 0.3s ease;
|
||
|
|
}
|
||
|
|
|
||
|
|
.form-group input:focus {
|
||
|
|
transform: translateY(-2px);
|
||
|
|
box-shadow: 0 10px 20px rgba(37, 99, 235, 0.15);
|
||
|
|
}
|
||
|
|
|
||
|
|
.form-group input:valid {
|
||
|
|
border-color: #10b981;
|
||
|
|
}
|
||
|
|
|
||
|
|
.form-group input.error {
|
||
|
|
border-color: #ef4444;
|
||
|
|
background-color: rgba(239, 68, 68, 0.05);
|
||
|
|
}
|
||
|
|
|
||
|
|
.error-message {
|
||
|
|
animation: slideDown 0.3s ease-out;
|
||
|
|
font-size: 0.875rem;
|
||
|
|
}
|
||
|
|
|
||
|
|
.error-message.show {
|
||
|
|
display: block !important;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* 发送验证码按钮状态 */
|
||
|
|
#sendCodeBtn:disabled {
|
||
|
|
background-color: #9ca3af;
|
||
|
|
cursor: not-allowed;
|
||
|
|
}
|
||
|
|
|
||
|
|
#sendCodeBtn.countdown {
|
||
|
|
background-color: #6b7280;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* 登录/注册按钮动画 */
|
||
|
|
#loginBtn, #registerBtn {
|
||
|
|
position: relative;
|
||
|
|
overflow: hidden;
|
||
|
|
transform: translateZ(0);
|
||
|
|
}
|
||
|
|
|
||
|
|
#loginBtn:hover, #registerBtn:hover {
|
||
|
|
transform: translateY(-1px);
|
||
|
|
box-shadow: 0 10px 20px rgba(37, 99, 235, 0.3);
|
||
|
|
}
|
||
|
|
|
||
|
|
#loginBtn:active, #registerBtn:active {
|
||
|
|
transform: translateY(0);
|
||
|
|
}
|
||
|
|
|
||
|
|
/* 状态消息样式 */
|
||
|
|
#statusMessage {
|
||
|
|
border-left: 4px solid currentColor;
|
||
|
|
animation: slideInLeft 0.4s ease-out;
|
||
|
|
}
|
||
|
|
|
||
|
|
#statusMessage.success {
|
||
|
|
background-color: rgba(16, 185, 129, 0.1);
|
||
|
|
color: #059669;
|
||
|
|
border-color: #10b981;
|
||
|
|
}
|
||
|
|
|
||
|
|
#statusMessage.error {
|
||
|
|
background-color: rgba(239, 68, 68, 0.1);
|
||
|
|
color: #dc2626;
|
||
|
|
border-color: #ef4444;
|
||
|
|
}
|
||
|
|
|
||
|
|
#statusMessage.info {
|
||
|
|
background-color: rgba(59, 130, 246, 0.1);
|
||
|
|
color: #2563eb;
|
||
|
|
border-color: #3b82f6;
|
||
|
|
}
|
||
|
|
|
||
|
|
#statusMessage.warning {
|
||
|
|
background-color: rgba(245, 158, 11, 0.1);
|
||
|
|
color: #d97706;
|
||
|
|
border-color: #f59e0b;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* 动画定义 */
|
||
|
|
@keyframes slideInUp {
|
||
|
|
from {
|
||
|
|
opacity: 0;
|
||
|
|
transform: translateY(30px);
|
||
|
|
}
|
||
|
|
to {
|
||
|
|
opacity: 1;
|
||
|
|
transform: translateY(0);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@keyframes slideDown {
|
||
|
|
from {
|
||
|
|
opacity: 0;
|
||
|
|
transform: translateY(-10px);
|
||
|
|
max-height: 0;
|
||
|
|
}
|
||
|
|
to {
|
||
|
|
opacity: 1;
|
||
|
|
transform: translateY(0);
|
||
|
|
max-height: 50px;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@keyframes slideInLeft {
|
||
|
|
from {
|
||
|
|
opacity: 0;
|
||
|
|
transform: translateX(-20px);
|
||
|
|
}
|
||
|
|
to {
|
||
|
|
opacity: 1;
|
||
|
|
transform: translateX(0);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/* 输入框聚焦效果 */
|
||
|
|
.form-group label {
|
||
|
|
transition: all 0.3s ease;
|
||
|
|
}
|
||
|
|
|
||
|
|
.form-group input:focus + .absolute i {
|
||
|
|
color: #2563eb;
|
||
|
|
transform: scale(1.1);
|
||
|
|
}
|
||
|
|
|
||
|
|
/* 响应式设计 */
|
||
|
|
@media (max-width: 640px) {
|
||
|
|
.auth-form-wrapper {
|
||
|
|
margin: 1rem;
|
||
|
|
padding: 1.5rem;
|
||
|
|
}
|
||
|
|
|
||
|
|
.form-group {
|
||
|
|
margin-bottom: 1rem;
|
||
|
|
}
|
||
|
|
|
||
|
|
#sendCodeBtn {
|
||
|
|
padding: 0.75rem 1rem;
|
||
|
|
font-size: 0.875rem;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/* 加载状态 */
|
||
|
|
.loading {
|
||
|
|
position: relative;
|
||
|
|
pointer-events: none;
|
||
|
|
}
|
||
|
|
|
||
|
|
.loading::after {
|
||
|
|
content: '';
|
||
|
|
position: absolute;
|
||
|
|
top: 50%;
|
||
|
|
left: 50%;
|
||
|
|
width: 20px;
|
||
|
|
height: 20px;
|
||
|
|
margin: -10px 0 0 -10px;
|
||
|
|
border: 2px solid #ffffff;
|
||
|
|
border-top: 2px solid transparent;
|
||
|
|
border-radius: 50%;
|
||
|
|
animation: spin 1s linear infinite;
|
||
|
|
}
|
||
|
|
|
||
|
|
@keyframes spin {
|
||
|
|
0% { transform: rotate(0deg); }
|
||
|
|
100% { transform: rotate(360deg); }
|
||
|
|
}
|
||
|
|
|
||
|
|
/* 表单验证提示 */
|
||
|
|
.form-group .valid-feedback {
|
||
|
|
color: #10b981;
|
||
|
|
font-size: 0.875rem;
|
||
|
|
margin-top: 0.25rem;
|
||
|
|
}
|
||
|
|
|
||
|
|
.form-group .valid-feedback::before {
|
||
|
|
content: '✓ ';
|
||
|
|
font-weight: bold;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* 密码强度指示器(预留) */
|
||
|
|
.password-strength {
|
||
|
|
height: 4px;
|
||
|
|
background-color: #e5e7eb;
|
||
|
|
border-radius: 2px;
|
||
|
|
margin-top: 0.5rem;
|
||
|
|
overflow: hidden;
|
||
|
|
}
|
||
|
|
|
||
|
|
.password-strength-bar {
|
||
|
|
height: 100%;
|
||
|
|
transition: all 0.3s ease;
|
||
|
|
border-radius: 2px;
|
||
|
|
}
|
||
|
|
|
||
|
|
.password-strength.weak .password-strength-bar {
|
||
|
|
width: 33%;
|
||
|
|
background-color: #ef4444;
|
||
|
|
}
|
||
|
|
|
||
|
|
.password-strength.medium .password-strength-bar {
|
||
|
|
width: 66%;
|
||
|
|
background-color: #f59e0b;
|
||
|
|
}
|
||
|
|
|
||
|
|
.password-strength.strong .password-strength-bar {
|
||
|
|
width: 100%;
|
||
|
|
background-color: #10b981;
|
||
|
|
}
|