Files
Cli-Proxy-API-Management-Ce…/src/pages/LoginPage.module.scss
2026-02-06 15:20:25 +03:00

344 lines
6.1 KiB
SCSS

@use '../styles/variables.scss' as *;
// 主容器 - 左右分栏布局
.container {
min-height: 100vh;
display: flex;
background: var(--bg-primary);
}
// 左侧品牌展示区
.brandPanel {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background: #000000;
padding: $spacing-2xl;
position: relative;
overflow: hidden;
// 移动端隐藏
@media (max-width: $breakpoint-mobile) {
display: none;
}
}
// 品牌文字容器
.brandContent {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
align-items: flex-end;
width: 100%;
padding: 0;
gap: 0;
}
// 品牌大字淡入动画
@keyframes brandFadeIn {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: var(--target-opacity, 0.9);
transform: translateY(0);
}
}
// 品牌大字
.brandWord {
font-size: 14vw;
font-weight: 900;
color: rgba(255, 255, 255, 0.9);
letter-spacing: -0.02em;
line-height: 0.85;
text-transform: uppercase;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
text-align: right;
padding-right: 0;
opacity: 0;
animation: brandFadeIn 0.8s ease-out forwards;
// 不同字有不同的透明度和延迟,从上到下依次显现
&:nth-child(1) {
--target-opacity: 0.95;
animation-delay: 0.1s;
}
&:nth-child(2) {
--target-opacity: 0.7;
animation-delay: 0.35s;
}
&:nth-child(3) {
--target-opacity: 0.45;
animation-delay: 0.6s;
}
}
// 右侧功能交互区
.formPanel {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: $spacing-2xl;
background: var(--bg-primary);
position: relative;
@media (max-width: $breakpoint-mobile) {
padding: $spacing-lg;
min-height: 100vh;
}
}
// 右侧内容容器
.formContent {
width: 100%;
max-width: 420px;
display: flex;
flex-direction: column;
align-items: center;
gap: $spacing-xl;
}
// Logo
.logo {
width: 80px;
height: 80px;
border-radius: $radius-lg;
object-fit: cover;
box-shadow: var(--shadow-lg);
border: 3px solid var(--border-color);
}
// 登录表单卡片
.loginCard {
width: 100%;
background: var(--bg-primary);
border: 1px solid var(--border-color);
border-radius: $radius-lg;
box-shadow: var(--shadow-lg);
padding: $spacing-xl;
display: flex;
flex-direction: column;
gap: $spacing-lg;
@media (max-width: $breakpoint-mobile) {
padding: $spacing-lg;
box-shadow: none;
border: none;
background: transparent;
}
}
// 登录头部
.loginHeader {
display: flex;
flex-direction: column;
gap: $spacing-sm;
text-align: center;
}
// 标题行
.titleRow {
display: flex;
align-items: center;
justify-content: center;
gap: $spacing-sm;
flex-wrap: wrap;
}
// 标题
.title {
font-size: 22px;
font-weight: 800;
color: var(--text-primary);
}
// 副标题
.subtitle {
color: var(--text-secondary);
font-size: 14px;
}
// 语言下拉选择
.languageSelect {
white-space: nowrap;
border: 1px solid var(--border-color);
border-radius: $radius-md;
padding: 10px 12px;
font-size: 14px;
background: var(--bg-primary);
color: var(--text-primary);
cursor: pointer;
height: 40px;
box-sizing: border-box;
&:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.15);
}
}
// 连接信息框
.connectionBox {
background: var(--bg-secondary);
border: 1px dashed var(--border-color);
border-radius: $radius-md;
padding: $spacing-md;
display: flex;
flex-direction: column;
gap: $spacing-xs;
.label {
color: var(--text-secondary);
font-size: 14px;
}
.value {
font-weight: 700;
color: var(--text-primary);
word-break: break-all;
}
.hint {
color: var(--text-secondary);
font-size: 12px;
}
}
// 复选框行
.toggleAdvanced {
display: flex;
justify-content: flex-start;
align-items: center;
gap: $spacing-xs;
color: var(--text-secondary);
cursor: pointer;
input[type='checkbox'] {
cursor: pointer;
}
label {
cursor: pointer;
font-size: 14px;
}
}
// 错误提示框
.errorBox {
background: rgba(239, 68, 68, 0.1);
border: 1px solid rgba(239, 68, 68, 0.4);
border-radius: $radius-md;
padding: $spacing-sm $spacing-md;
color: $error-color;
font-size: 14px;
}
// ========== 启动动画(右侧) ==========
// 启动动画进入效果
@keyframes splashEnter {
from {
opacity: 0;
transform: scale(0.9) translateY(20px);
}
to {
opacity: 1;
transform: scale(1) translateY(0);
}
}
// Logo 脉冲效果
@keyframes splashLogoPulse {
0%,
100% {
transform: scale(1);
}
50% {
transform: scale(1.05);
}
}
// 加载条动画
@keyframes splashLoading {
0% {
transform: scaleX(0);
transform-origin: left;
}
50% {
transform: scaleX(1);
transform-origin: left;
}
50.01% {
transform-origin: right;
}
100% {
transform: scaleX(0);
transform-origin: right;
}
}
// 启动动画内容容器
.splashContent {
display: flex;
flex-direction: column;
align-items: center;
gap: $spacing-md;
animation: splashEnter 0.6s ease-out;
}
// 启动动画 Logo
.splashLogo {
height: 80px;
width: auto;
border-radius: $radius-lg;
box-shadow: $shadow-lg;
animation: splashLogoPulse 1.5s ease-in-out infinite;
}
// 启动动画标题
.splashTitle {
font-size: 28px;
font-weight: 800;
color: var(--text-primary);
margin: 0;
letter-spacing: -0.5px;
}
// 启动动画副标题
.splashSubtitle {
font-size: 16px;
font-weight: 500;
color: var(--text-secondary);
margin: 0;
margin-top: -8px;
}
// 启动动画加载条容器
.splashLoader {
width: 120px;
height: 3px;
background: var(--border-color);
border-radius: $radius-full;
overflow: hidden;
margin-top: $spacing-md;
}
// 启动动画加载条
.splashLoaderBar {
width: 100%;
height: 100%;
background: var(--primary-color);
border-radius: $radius-full;
animation: splashLoading 1.2s ease-in-out infinite;
}