/* 通用认证页面样式 */ :root { --primary-color: #4285f4; --primary-hover: #3367d6; --success-color: #0f9d58; --danger-color: #db4437; --warning-color: #f4b400; --text-primary: #202124; --text-secondary: #5f6368; --bg-main: #ffffff; --bg-secondary: #f8f9fa; --border-color: #dadce0; --shadow-color: rgba(60, 64, 67, 0.15); --card-bg: #ffffff; --transition-speed: 0.3s; } .dark-mode { --primary-color: #8ab4f8; --primary-hover: #aecbfa; --success-color: #81c995; --danger-color: #f28b82; --warning-color: #fdd663; --text-primary: #e8eaed; --text-secondary: #9aa0a6; --bg-main: #202124; --bg-secondary: #303134; --border-color: #5f6368; --shadow-color: rgba(0, 0, 0, 0.3); --card-bg: #303134; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: var(--bg-secondary); color: var(--text-primary); margin: 0; padding: 0; transition: background-color var(--transition-speed), color var(--transition-speed); min-height: 100vh; display: flex; flex-direction: column; } .content-wrapper { flex: 1; display: flex; align-items: center; justify-content: center; padding: 2rem 1rem; } .auth-container { background-color: var(--card-bg); border-radius: 8px; box-shadow: 0 4px 20px var(--shadow-color); width: 100%; max-width: 450px; padding: 2.5rem; transition: background-color var(--transition-speed), box-shadow var(--transition-speed); } .logo-container { text-align: center; margin-bottom: 1.5rem; } .logo-container img { height: 60px; width: auto; } h1, h2 { color: var(--text-primary); text-align: center; font-weight: 500; margin-bottom: 1.5rem; transition: color var(--transition-speed); } .form-group { margin-bottom: 1.5rem; } .form-group label { display: block; margin-bottom: 0.5rem; color: var(--text-secondary); font-size: 0.9rem; transition: color var(--transition-speed); } .form-control { width: 100%; padding: 0.75rem 1rem; font-size: 1rem; border: 1px solid var(--border-color); border-radius: 4px; background-color: var(--bg-main); color: var(--text-primary); transition: border-color var(--transition-speed), background-color var(--transition-speed), color var(--transition-speed); } .form-control:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 2px rgba(66, 133, 244, 0.2); } .btn { display: block; width: 100%; padding: 0.75rem 1.5rem; font-size: 1rem; font-weight: 500; text-align: center; border: none; border-radius: 4px; cursor: pointer; transition: background-color var(--transition-speed), color var(--transition-speed); } .btn-primary { background-color: var(--primary-color); color: white; } .btn-primary:hover { background-color: var(--primary-hover); } .btn-success { background-color: var(--success-color); color: white; } .btn-success:hover { opacity: 0.9; } .alert { padding: 0.75rem 1rem; margin-bottom: 1rem; border-radius: 4px; font-size: 0.9rem; } .alert-danger { background-color: var(--danger-color); color: white; } .alert-success { background-color: var(--success-color); color: white; } .alert-info { background-color: var(--primary-color); color: white; } .alert-warning { background-color: var(--warning-color); color: var(--text-primary); } .text-center { text-align: center; } .mt-3 { margin-top: 1.5rem; } .mb-4 { margin-bottom: 2rem; } .d-none { display: none !important; } a { color: var(--primary-color); text-decoration: none; transition: color var(--transition-speed); } a:hover { text-decoration: underline; } .helper-text { font-size: 0.8rem; color: var(--text-secondary); margin-top: 0.5rem; } /* 响应式设计 */ @media (max-width: 576px) { .auth-container { padding: 1.5rem; } } /* 页脚样式 */ footer { text-align: center; padding: 1.5rem; font-size: 0.9rem; color: var(--text-secondary); background-color: var(--bg-main); border-top: 1px solid var(--border-color); transition: background-color var(--transition-speed), color var(--transition-speed), border-color var(--transition-speed); } /* 主题切换器 */ .theme-switcher { position: absolute; top: 1rem; right: 4rem; cursor: pointer; font-size: 1.5rem; color: var(--text-secondary); transition: color var(--transition-speed); } /* 语言切换器 */ .language-switcher { position: absolute; top: 1rem; right: 1rem; cursor: pointer; font-size: 1rem; color: var(--text-secondary); transition: color var(--transition-speed); } /* 表单验证样式 */ .form-control.is-invalid { border-color: var(--danger-color); } .invalid-feedback { display: none; color: var(--danger-color); font-size: 0.8rem; margin-top: 0.25rem; } .form-control.is-invalid + .invalid-feedback, .form-control.is-invalid ~ .invalid-feedback { display: block; } /* 性别单选按钮 */ .radio-group { display: flex; gap: 1rem; } .radio-option { display: flex; align-items: center; } .radio-option input[type="radio"] { margin-right: 0.5rem; } /* 密码框样式 */ .password-container { position: relative; } .password-toggle { position: absolute; right: 0.75rem; top: 50%; transform: translateY(-50%); cursor: pointer; color: var(--text-secondary); } /* 加载动画 */ .spinner { display: inline-block; width: 1rem; height: 1rem; border: 0.15rem solid rgba(255, 255, 255, 0.3); border-radius: 50%; border-top-color: #fff; animation: spin 1s linear infinite; margin-right: 0.5rem; } @keyframes spin { to { transform: rotate(360deg); } }