* { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif; line-height: 1.5; overflow: hidden; background: #f5f5f5; } /* 主布局 */ .login-page { display: grid; grid-template-columns: 1fr 1fr; min-height: 100vh; } /* ============ 左侧角色区域 ============ */ .characters-section { position: relative; display: flex; flex-direction: column; justify-content: space-between; background: #ffffff; padding: 3rem; color: #1a1a1a; overflow: hidden; } /* 装饰性背景 */ .characters-section::before { content: ""; position: absolute; inset: 0; background-image: repeating-linear-gradient(0deg, transparent, transparent 20px, rgba(0,0,0,0.02) 20px, rgba(0,0,0,0.02) 21px); pointer-events: none; } .characters-section::after { content: ""; position: absolute; top: 25%; right: 25%; width: 400px; height: 400px; background: rgba(108, 63, 245, 0.05); border-radius: 50%; filter: blur(80px); pointer-events: none; } /* Logo */ .brand-logo { display: flex; align-items: center; gap: 0.75rem; font-size: 1.125rem; font-weight: 600; z-index: 20; } .logo-icon { width: 2rem; height: 2rem; object-fit: contain; } /* 角色容器 */ .characters-container { position: relative; width: 550px; height: 400px; margin: 0 auto; z-index: 10; } /* 角色基础样式 */ .character { position: absolute; bottom: 0; transition: transform 0.3s ease-out, height 0.7s ease-in-out; transform-origin: bottom center; will-change: transform, height; } /* 紫色角色 */ .character.purple { left: 70px; width: 180px; height: 400px; background: #6C3FF5; border-radius: 10px 10px 0 0; z-index: 1; } /* 黑色角色 */ .character.black { left: 240px; width: 120px; height: 310px; background: #2D2D2D; border-radius: 8px 8px 0 0; z-index: 2; } .character.black.shy { transform: skewX(0deg); } .character.black.looking-away { transform: skewX(0deg); } /* 橙色角色 */ .character.orange { left: 0; width: 240px; height: 200px; background: #FF9B6B; border-radius: 120px 120px 0 0; z-index: 3; } .character.orange.looking-away { transform: skewX(0deg); } /* 黄色角色 */ .character.yellow { left: 310px; width: 140px; height: 230px; background: #E8D754; border-radius: 70px 70px 0 0; z-index: 4; } .character.yellow.looking-away { transform: skewX(0deg); } /* 眼睛容器 */ .eyes { position: absolute; display: flex; gap: 2rem; transition: all 0.7s ease; } .character.purple .eyes { left: 45px; top: 40px; gap: 2rem; } .character.black .eyes { left: 26px; top: 32px; gap: 1.5rem; } /* 眼睛 */ .eye { width: 18px; height: 18px; background: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; overflow: hidden; transition: height 0.15s ease; } .character.black .eye { width: 16px; height: 16px; } /* 瞳孔 */ .pupil { width: 7px; height: 7px; background: #2D2D2D; border-radius: 50%; transition: transform 0.1s ease-out; } .character.black .pupil { width: 6px; height: 6px; } /* 简单瞳孔(橙色和黄色角色) */ .eyes-simple { position: absolute; display: flex; gap: 2rem; transition: all 0.2s ease-out; } .character.orange .eyes-simple { left: 82px; top: 90px; gap: 2rem; } .character.yellow .eyes-simple { left: 52px; top: 40px; gap: 1.5rem; } .pupil-simple { width: 12px; height: 12px; background: #2D2D2D; border-radius: 50%; transition: transform 0.2s ease-out; } /* 嘴巴(黄色角色) */ .mouth { position: absolute; left: 40px; top: 88px; width: 80px; height: 4px; background: #2D2D2D; border-radius: 2px; transition: all 0.2s ease-out; } /* 底部链接 */ .footer-links { display: flex; gap: 2rem; font-size: 0.875rem; color: rgba(0, 0, 0, 0.5); z-index: 20; } .footer-links a { color: inherit; text-decoration: none; transition: color 0.3s ease; } .footer-links a:hover { color: rgba(0, 0, 0, 0.8); } /* ============ 右侧登录区域 ============ */ .login-section { display: flex; align-items: center; justify-content: center; padding: 2rem; background: #000000; } .login-container { width: 100%; max-width: 420px; } .login-header { text-align: center; margin-bottom: 2.5rem; } .login-header h1 { font-size: 1.875rem; font-weight: 700; color: #ffffff; margin-bottom: 0.5rem; } .login-header p { font-size: 0.875rem; color: rgba(255, 255, 255, 0.6); } /* 表单样式 */ .login-form { display: flex; flex-direction: column; gap: 1.25rem; } .form-group { display: flex; flex-direction: column; gap: 0.5rem; } .form-group label { font-size: 0.875rem; font-weight: 500; color: rgba(255, 255, 255, 0.9); } .form-input { height: 3rem; padding: 0 1rem; border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 0.5rem; font-size: 1rem; color: #ffffff; background: rgba(255, 255, 255, 0.05); transition: all 0.3s ease; width: 100%; } .form-input:focus { outline: none; border-color: #6C3FF5; box-shadow: 0 0 0 3px rgba(108, 63, 245, 0.2); background: rgba(255, 255, 255, 0.08); } .form-input::placeholder { color: rgba(255, 255, 255, 0.4); } /* 密码输入框包装器 */ .password-wrapper { position: relative; width: 100%; } .password-wrapper .form-input { padding-right: 3rem; } .password-toggle { position: absolute; right: 0.75rem; top: 50%; transform: translateY(-50%); background: transparent; border: none; padding: 0.5rem; cursor: pointer; color: rgba(255, 255, 255, 0.5); transition: color 0.3s ease; display: flex; align-items: center; justify-content: center; z-index: 10; } .password-toggle:hover { color: rgba(255, 255, 255, 0.9); } .eye-icon { width: 20px; height: 20px; } /* 验证码组 */ .captcha-group { display: grid; grid-template-columns: 1fr auto; gap: 0.75rem; align-items: end; } .captcha-input-wrapper { display: flex; flex-direction: column; gap: 0.5rem; } .captcha-input-wrapper label { font-size: 0.875rem; font-weight: 500; color: rgba(255, 255, 255, 0.9); } .captcha-input-wrapper .form-input { width: 100%; } .captcha-image-wrapper { width: 110px; height: 48px; border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 0.5rem; overflow: hidden; cursor: pointer; transition: all 0.3s ease; background: rgba(255, 255, 255, 0.05); flex-shrink: 0; } .captcha-image-wrapper:hover { border-color: #6C3FF5; transform: scale(1.02); } .captcha-image { width: 100%; height: 100%; object-fit: contain; display: block; } /* 错误消息 */ .error-message { padding: 0.75rem 1rem; background: #fef2f2; border: 1px solid #fecaca; border-radius: 0.5rem; color: #dc2626; font-size: 0.875rem; animation: shake 0.4s ease; } @keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-8px); } 75% { transform: translateX(8px); } } /* 登录按钮 */ .login-button { height: 3rem; padding: 0 2rem; background: linear-gradient(135deg, #6C3FF5 0%, #5a32d9 100%); color: white; border: none; border-radius: 0.5rem; font-size: 1rem; font-weight: 600; cursor: pointer; transition: all 0.3s ease; position: relative; overflow: hidden; } .login-button::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); transition: left 0.5s ease; } .login-button:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(108, 63, 245, 0.3); } .login-button:hover::before { left: 100%; } .login-button:active { transform: translateY(0); } .login-button:disabled { opacity: 0.7; cursor: not-allowed; transform: none; } /* 加载动画 */ .btn-loader { display: flex; gap: 0.375rem; justify-content: center; align-items: center; } .btn-loader .dot { width: 8px; height: 8px; border-radius: 50%; background: #ffffff; animation: bounce 0.9s ease infinite; } .btn-loader .dot:nth-child(2) { animation-delay: 0.15s; } .btn-loader .dot:nth-child(3) { animation-delay: 0.3s; } @keyframes bounce { 0%, 100% { transform: translateY(0); opacity: 0.7; } 50% { transform: translateY(-8px); opacity: 1; } } /* 表单底部 */ .form-footer { text-align: center; margin-top: 1rem; } .copyright { font-size: 0.875rem; color: rgba(255, 255, 255, 0.5); } /* 响应式设计 */ @media (max-width: 1024px) { .login-page { grid-template-columns: 1fr; } .characters-section { display: none; } .login-section { min-height: 100vh; } } @media (max-width: 480px) { .login-section { padding: 1.5rem; } .login-container { max-width: 100%; } .login-header h1 { font-size: 1.5rem; } .form-input, .login-button { height: 2.75rem; font-size: 0.9375rem; } }