fe / bt-source /panel /BTPanel /static /css /login.css
GGSheng's picture
feat: deploy Gemma 4 to hf space
3a5cf48 verified
/* 设计系统 - 语义化颜色变量 */
/*
* 颜色系统使用指南:
*
* 背景色系统 (--bg-*):
* - primary: 页面主背景,最浅的背景色
* - secondary: 卡片、面板等容器背景
* - tertiary: 输入框、按钮等交互元素背景
* - quaternary: 边框、分割线等装饰元素
* - hover/active: 交互状态的背景色
* - disabled: 禁用状态的背景色
* - overlay: 遮罩层背景色
*
* 文字颜色系统 (--text-*):
* - primary: 标题、重要文本,最高对比度
* - secondary: 正文、描述文本,高对比度
* - tertiary: 辅助信息、标签,中等对比度
* - quaternary: 占位符、禁用文本,低对比度
* - inverse: 反色文字,用于深色背景
* - link: 链接文字及其悬停状态
*
* 状态颜色系统 (--color-*):
* - success/warning/error/info: 主要状态色
* - *-bg: 对应的背景色,用于状态容器
* - *-text: 对应的文字色,确保在状态背景上可读
*
* 对比度要求:
* - 正文文字与背景对比度 ≥ 4.5:1
* - 大文字与背景对比度 ≥ 3:1
* - 交互元素与背景对比度 ≥ 3:1
*/
:root {
/* 背景色系统 - 从浅到深 */
--bg-primary: #444; /* 主要背景色 - 页面主背景 */
--bg-secondary: #f8f9fa; /* 次要背景色 - 卡片、面板背景 */
--bg-tertiary: #f1f3f4; /* 三级背景色 - 输入框、按钮背景 */
--bg-quaternary: #e9ecef; /* 四级背景色 - 分割线、边框 */
--bg-hover: #f5f7fa; /* 悬停背景色 - 交互元素悬停 */
--bg-active: #e4e7ed; /* 激活背景色 - 交互元素激活 */
--bg-disabled: #f8f9fa; /* 禁用背景色 - 禁用状态 */
--bg-overlay: rgba(0, 0, 0, 0.5); /* 遮罩背景色 - 模态框遮罩 */
/* 文字颜色系统 - 从深到浅 */
--text-primary: #212529; /* 主要文字色 - 标题、重要文本 */
--text-secondary: #495057; /* 次要文字色 - 正文、描述文本 */
--text-tertiary: #6c757d; /* 三级文字色 - 辅助信息、标签 */
--text-quaternary: #adb5bd; /* 四级文字色 - 占位符、禁用文本 */
--text-inverse: #ffffff; /* 反色文字 - 深色背景上的文字 */
--text-link: #28a745; /* 链接文字色 - 可点击链接 */
--text-link-hover: #167628; /* 链接悬停色 - 链接悬停状态 */
/* 主题切换动画变量 - 优化版本 */
--view-transition-duration: 0.6s;
--view-transition-timing: cubic-bezier(0.25, 0.1, 0.25, 1);
--theme-transition-duration: 0.3s;
--theme-transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
/* 主题切换圆形动画的默认位置和半径 */
--x: 50%;
--y: 50%;
--r: 150%;
/* 状态颜色系统 - 亮色模式 */
--color-success: #28a745; /* 成功色 - 绿色 */
--color-success-bg: #d4edda; /* 成功背景色 - 浅绿色 */
--color-success-text: #155724; /* 成功文字色 - 深绿色 */
--color-warning: #ffc107; /* 警告色 - 黄色 */
--color-warning-bg: #fff3cd; /* 警告背景色 - 浅黄色 */
--color-warning-text: #856404; /* 警告文字色 - 深黄色 */
--color-error: #dc3545; /* 错误色 - 红色 */
--color-error-bg: #f8d7da; /* 错误背景色 - 浅红色 */
--color-error-text: #721c24; /* 错误文字色 - 深红色 */
--color-info: #17a2b8; /* 信息色 - 青色 */
--color-info-bg: #d1ecf1; /* 信息背景色 - 浅青色 */
--color-info-text: #0c5460; /* 信息文字色 - 深青色 */
/* 间距系统 */
--spacing-1: 2px;
--spacing-2: 3px;
--spacing-3: 4px;
--spacing-4: 16px;
--spacing-5: 1rem;
--spacing-6: 0.4rem;
/* 字体尺寸系统 */
--font-size-1: 10px;
--font-size-2: 12px;
--font-size-3: 14px;
--font-size-4: 15px;
--font-size-5: 16px;
--font-size-6: 20px;
--font-size-7: 24px;
--font-size-8: 26px;
--font-size-9: 30px;
/* 阴影系统 */
--shadow-1: 0 0 0 1px #0f0f0f;
--shadow-2: 0 0 0 1px #1a1a1a;
--shadow-3: 0 0 0 1px #333333;
--shadow-4: 0 0 0 1px #4d4d4d;
/* 圆角系统 */
--radius-1: 2px;
--radius-2: 3px;
--radius-3: 4px;
--radius-4: 16px;
--radius-5: 1rem;
--radius-6: 0.4rem;
--radius-circle: 50%;
--radius-full: 100%;
}
/* 暗色模式变量 */
:root.dark {
/* 背景色系统 - 暗色模式 */
--bg-primary: #0d1117; /* 主要背景色 - 深色页面背景 */
--bg-secondary: #161b22; /* 次要背景色 - 深色卡片背景 */
--bg-tertiary: #21262d; /* 三级背景色 - 深色输入框背景 */
--bg-quaternary: #30363d; /* 四级背景色 - 深色边框 */
--bg-hover: #1c2128; /* 悬停背景色 - 深色悬停状态 */
--bg-active: #262c36; /* 激活背景色 - 深色激活状态 */
--bg-disabled: #161b22; /* 禁用背景色 - 深色禁用状态 */
--bg-overlay: rgba(0, 0, 0, 0.8); /* 遮罩背景色 - 深色遮罩 */
/* 文字颜色系统 - 暗色模式 */
--text-primary: #f0f6fc; /* 主要文字色 - 高对比度白色 */
--text-secondary: #c9d1d9; /* 次要文字色 - 中等对比度灰色 */
--text-tertiary: #8b949e; /* 三级文字色 - 低对比度灰色 */
--text-quaternary: #6e7681; /* 四级文字色 - 最低对比度灰色 */
--text-inverse: #efefef; /* 反色文字 - 浅色背景上的深色文字 */
/* --text-link: #58a6ff; 链接文字色 - 蓝色链接 */
/* --text-link-hover: #79c0ff; 链接悬停色 - 浅蓝色悬停 */
/* 状态颜色系统 - 暗色模式 */
--color-success: #3fb950; /* 成功色 - 亮绿色 */
--color-success-bg: #0d2818; /* 成功背景色 - 深绿色背景 */
--color-success-text: #56d364; /* 成功文字色 - 明亮绿色 */
--color-warning: #d29922; /* 警告色 - 亮黄色 */
--color-warning-bg: #2d2107; /* 警告背景色 - 深黄色背景 */
--color-warning-text: #e3b341; /* 警告文字色 - 明亮黄色 */
--color-error: #f85149; /* 错误色 - 亮红色 */
--color-error-bg: #2d1117; /* 错误背景色 - 深红色背景 */
--color-error-text: #ff7b72; /* 错误文字色 - 明亮红色 */
--color-info: #58a6ff; /* 信息色 - 亮蓝色 */
--color-info-bg: #0c2d48; /* 信息背景色 - 深蓝色背景 */
--color-info-text: #79c0ff; /* 信息文字色 - 明亮蓝色 */
}
input:autofill {
background: var(--bg-secondary);
}
/* 支持chrome */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
transition: background-color 5000s;
-webkit-text-fill-color: #444 !important;
}
/* 暗色模式切换按钮 */
.dark-toggle-btn {
position: fixed;
top: 20px;
right: 20px;
width: 40px;
height: 40px;
border-radius: var(--radius-circle);
background-color: transparent;
border: 1px solid transparent;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
/* 优化的过渡效果 - 使用更平滑的缓动函数和适中的持续时间 */
transition:
background-color 0.25s cubic-bezier(0.4, 0, 0.2, 1),
border-color 0.25s cubic-bezier(0.4, 0, 0.2, 1),
color 0.25s cubic-bezier(0.4, 0, 0.2, 1),
transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1),
box-shadow 0.25s cubic-bezier(0.4, 0, 0.2, 1);
z-index: 1000;
/* 亮色模式下使用偏白色图标 */
color: #f0f0f0;
/* 添加微妙的阴影效果 */
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
/* 启用硬件加速 */
will-change: transform, background-color, box-shadow;
transform: translateZ(0);
}
/* 暗色模式下使用深色图标 */
:root.dark .dark-toggle-btn {
color: var(--text-primary);
/* 暗色模式下的微妙背景色 */
background-color: rgba(255, 255, 255, 0.05);
border-color: rgba(255, 255, 255, 0.1);
/* 暗色模式下的阴影效果 */
box-shadow:
0 2px 8px rgba(0, 0, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.dark-toggle-btn:hover {
background-color: var(--bg-active);
border-color: var(--bg-quaternary);
color: var(--text-primary);
/* 优化悬停动画 - 更自然的缩放和阴影效果 */
transform: scale(1.08) translateZ(0);
box-shadow:
0 4px 16px rgba(0, 0, 0, 0.15),
0 2px 8px rgba(0, 0, 0, 0.1);
}
/* 暗色模式下悬停状态 */
:root.dark .dark-toggle-btn:hover {
color: var(--text-primary);
/* 暗色模式下的悬停效果 */
background-color: rgba(255, 255, 255, 0.1);
border-color: rgba(255, 255, 255, 0.2);
box-shadow:
0 4px 16px rgba(0, 0, 0, 0.4),
0 2px 8px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.15);
}
.dark-toggle-btn svg {
/* 优化SVG动画 - 更平滑的旋转和缩放效果 */
transition:
transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1),
opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
/* 确保SVG继承父元素颜色 */
color: inherit;
transform-origin: center;
will-change: transform;
}
.dark-toggle-btn:hover svg {
/* 增强悬停时的旋转效果 */
transform: rotate(20deg) scale(1.1);
}
/* 点击时的动画效果 */
.dark-toggle-btn:active {
transform: scale(0.95) translateZ(0);
transition-duration: 0.1s;
}
.dark-toggle-btn:active svg {
transform: rotate(30deg) scale(0.9);
transition-duration: 0.1s;
}
@font-face {
font-family: "svgtofont";
src: url('../font/svgtofont.eot?t=1731579762035'); /* IE9*/
src: url('../font/svgtofont.eot?t=1731579762035#iefix') format('embedded-opentype'), /* IE6-IE8 */
url("../font/svgtofont.woff2?t=1731579762035") format("woff2"),
url("../font/svgtofont.woff?t=1731579762035") format("woff"),
url('../font/svgtofont.ttf?t=1731579762035') format('truetype') /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
}
[class^="svgtofont-"], [class*=" svgtofont-"] {
font-family: 'svgtofont' !important;font-size: var(--font-size-3);
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.svgtofont-el-question-filled:before { content: "\ea3b"; color: var(--color-warning);}
* {
box-sizing: border-box;
}
html,
body,
#app {
font-size: 10px;
position: relative;
width: 100%;
height: 100%;
}
body {
margin: 0;
padding: 0;
background-color: var(--bg-primary);
line-height: 1.4;
font-size: 1.2rem;
font-family:
PingFang SC,
HarmonyOS_Medium,
Helvetica Neue,
Microsoft YaHei,
sans-serif !important;
color: var(--text-secondary);
scrollbar-width: thin;
/* 添加全局过渡效果以减少主题切换时的闪屏 */
transition:
background-color var(--theme-transition-duration) var(--theme-transition-timing),
color var(--theme-transition-duration) var(--theme-transition-timing);
/* 防止主题切换时的布局抖动 */
will-change: background-color, color;
}
.loading-icon.svgtofont-el-question-filled:before {
/* content: "\ea50"; */
font-size: var(--font-size-6);
}
/* ===== 主题切换动画优化 ===== */
/* 为关键元素添加优化的颜色过渡效果 */
*:not(img):not(video):not(canvas):not(svg):not(path):not(circle):not(rect):not(line):not(polygon):not(polyline):not(ellipse) {
transition:
background-color var(--theme-transition-duration) var(--theme-transition-timing),
color var(--theme-transition-duration) var(--theme-transition-timing),
border-color var(--theme-transition-duration) var(--theme-transition-timing),
box-shadow var(--theme-transition-duration) var(--theme-transition-timing);
}
/* SVG元素的专门过渡效果 */
svg, svg * {
transition:
fill var(--theme-transition-duration) var(--theme-transition-timing),
stroke var(--theme-transition-duration) var(--theme-transition-timing);
}
/* View Transitions API 主题切换动画 - 优化版本 */
::view-transition-old(root) {
animation: theme-fade-out var(--view-transition-duration) var(--view-transition-timing) both;
animation-delay: 0.05s;
z-index: 1;
/* 启用硬件加速 */
transform: translateZ(0);
will-change: opacity;
/* 防止动画期间的闪烁 */
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
::view-transition-new(root) {
animation: theme-clip-in var(--view-transition-duration) var(--view-transition-timing) both;
z-index: 2;
/* 启用硬件加速 */
transform: translateZ(0);
will-change: clip-path, opacity;
/* 防止动画期间的闪烁 */
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
@keyframes theme-clip-in {
0% {
clip-path: circle(0% at var(--x, 50%) var(--y, 50%));
opacity: 1;
}
100% {
clip-path: circle(var(--r, 150%) at var(--x, 50%) var(--y, 50%));
opacity: 1;
}
}
@keyframes theme-fade-out {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
/* 防止闪屏的额外样式 - 增强版本 */
::view-transition-group(root) {
animation-duration: var(--view-transition-duration);
/* 确保动画组的稳定性 */
contain: layout style paint;
transform: translateZ(0);
}
::view-transition-image-pair(root) {
isolation: isolate;
/* 防止图像对的渲染问题 */
contain: strict;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
/* 主题切换时的根元素优化 */
html {
/* 防止主题切换时的滚动条闪烁 */
scrollbar-gutter: stable;
/* 确保根元素的渲染稳定性 */
contain: layout style;
}
/* 主题切换期间的性能优化 */
.theme-switching {
/* 临时禁用不必要的动画 */
*, *::before, *::after {
animation-play-state: paused !important;
transition-duration: 0s !important;
}
/* 保持主题切换动画 */
::view-transition-old(root),
::view-transition-new(root) {
animation-play-state: running !important;
transition-duration: var(--view-transition-duration) !important;
}
/* 保持dark-toggle-btn的动画 */
.dark-toggle-btn,
.dark-toggle-btn svg {
transition-duration: var(--theme-transition-duration) !important;
animation-play-state: running !important;
}
}
/* ===== 响应式设计和无障碍功能 ===== */
/* 减少动画偏好支持 */
@media (prefers-reduced-motion: reduce) {
.dark-toggle-btn,
.dark-toggle-btn svg,
*:not(img):not(video):not(canvas):not(svg):not(path):not(circle):not(rect):not(line):not(polygon):not(polyline):not(ellipse),
svg, svg * {
transition-duration: 0.01s !important;
animation-duration: 0.01s !important;
}
.dark-toggle-btn:hover svg {
transform: none !important;
}
.dark-toggle-btn:active {
transform: none !important;
}
.dark-toggle-btn:active svg {
transform: none !important;
}
/* 禁用View Transitions API动画 */
::view-transition-old(root),
::view-transition-new(root) {
animation: none !important;
}
}
/* 焦点状态优化 - 键盘导航支持 */
.dark-toggle-btn:focus-visible {
outline: 2px solid var(--color-info);
outline-offset: 2px;
/* 确保焦点环在暗色模式下也清晰可见 */
}
:root.dark .dark-toggle-btn:focus-visible {
outline-color: var(--text-primary);
}
.loading-icon {
display: flex;
align-items: center;
margin-left: 12px;
font-size: var(--font-size-6);
/* color:#e6a23c */
}
.loading-icon .el-message__icon {
font-size: var(--font-size-9);
width: 30px;
height: 30px;
}
.loading-icon.svgtofont-el-circle-check-filled:before {
color: var(--color-success);
font-size: var(--font-size-9);
content: '\ea19';
}
.loading-icon.svgtofont-el-circle-close-filled:before {
color: var(--color-error);
font-size: var(--font-size-9);
content: "\ea1b";
}
.\!hidden {
display: none !important;
}
.\!mt-0 {
margin-top: 0 !important;
}
.w-full,
.w-\[100\%\] {
width: 100%;
}
.\!w-\[230px\] {
width: 230px !important;
}
.w-\[140px\] {
width: 140px;
}
.h-\[140px\] {
height: 140px;
}
.h-\[40px\] {
height: 40px;
}
.leading-8 {
line-height: 20px;
}
.p-\[\8px\] {
padding: 8px;
}
.mb-\[\.8rem\] {
margin-bottom: 0.8rem;
}
.font-bold {
font-weight: 700;
}
.text-danger {
color: var(--color-error);
}
.w-\[40rem\] {
width: 40rem;
}
.mr-\[15px\] {
margin-right: 15px;
}
.flex {
display: flex;
}
.hide{
display: none;
}
/* 登录背景 */
.login-bg {
background-color: var(--bg-primary);
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
transition: background-color 0.3s ease;
}
.login-images {
width: 100%;
height: 100%;
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
position: absolute;
top: 0;
left: 0;
}
/* 登录主体内容 */
.login-main {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
position: relative;
}
/* 切换登录方式 */
.login-main .cut-login-type {
cursor: pointer;
position: absolute;
z-index: 999;
right: 16px;
top: 60px;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
}
.login-main .cut-login-type svg {
width: 24px;
height: 24px;
color: var(--text-secondary);
transition: color 0.3s ease;
}
.login-main .cut-login-type:hover svg {
color: var(--color-success);
}
.login-main .cut-login-type .tips-text {
font-size: var(--font-size-2);
}
.login-main .cut-login-type .tips {
background-color: var(--color-success-bg);
border-radius: var(--radius-6);
display: flex;
align-items: center;
justify-content: center;
height: 28px;
position: absolute;
top: 2px;
right: 48px;
text-align: center;
color: var(--color-success-text);
width: 112px;
animation: rock 1s 0s ease-in-out infinite;
}
.login-main .cut-login-type .tips > span:nth-child(1) {
background-repeat: no-repeat;
display: inline-block;
height: 14px;
margin-right: 4px;
position: relative;
top: 0.5px;
width: 14px;
background-size: 14px;
}
.login-main .cut-login-type .tips > span.account {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAgCAYAAACYTcH3AAAAAXNSR0IArs4c6QAAAdFJREFUWEdjZIACuSUW1kyMTKUMDAyODAwMfDBxLHTDg+hjjXjkGUSnOvBwC/7czPCf0QGPugcMDAy7HkQfS4epYQQxoA45gs8CJLkHD6KPKeJTK7/MKovxP8NUIs2Dew7sGIWlVhMYGBjyoZqvMjD+f43LIKZ/DL33Yo5vIWSR/BKrYkam/z441SGF2h/W/zJPwo4/hThmmeV+WJD++8+s/Sjm8DVCllEqr7jUMvQ/A+MqsDn//jk+iD1xAMMxD6KPgcVoDRQWWzgwMDHtH3UMekiPhgyutDdUQsa6n+H//4L//xnuPIw5pkrrnAQyX3aBlTIzK8MdEJuJmUn9XsSRW/BsrLDMMpKB8f/xB5EnQMU0XQA4qhgYGEBlDIimS5lCrM8Gl2MUl1i5/Wf6X0ms62mi7j/T6wfRR8MYFZZaXWFgYNCmiSWkGZoFcsx8BgaGBNL0UV316/+MDBGDK81Q3Y8UGAgPGbmlNsb/WP++ADVyKDCPJK1yS2y1WNn+/Lobdhxc+MFaevUMDAwNDAwMVx9EH9MhyUQyFSuvslT5+5vxNrhtBW3QjTauQKExVGptRIN8tA082jtAKgaISsAD34kbTN3bQdXxB0XlYBgSAQBVv1HZQYwH1wAAAABJRU5ErkJggg==);
}
.login-main .cut-login-type .tips > span.scan {
height: 1.6rem;
top: -0.5px;
width: 1.6rem;
background-size: 1.6rem;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADAElEQVRYR8VWS1LbQBTs51Sogo3NCTKcAC+xN5gTxCyDSGFOgHOCJCeIOQGmgpIl5gSYjcTSOQGTE8TeOJSp6KVmRvJHGlljXAWzorDmdc/rfh/CKx96ZXw4ERDf9xoolfbBXAFQ1aSJZn8DAzAP48cMQDQEcV8ehXdFD8wlEIOegNEEQYGlDv8GION/CoDeZT/BEIQeouhSfrzv28hkCAi/XgX4GiBhLmigHgh9MEnpBYNlr9L3iQUYDQDNGTGWAB2m71sI1PoAqXRfgqhTBFiUYk2IuQ2iE4DvpBcqYtOTS0B6gZM/iggkvwu/zisQQFV6oUV3V7jsdysQsDN9PrS5Kfya8tCuPA62CyRYn4D4uSfw+DiUp4OkNA0B0H5aWlsVWLVyzYAxHW5BuJNe0Jx54AUIzIFXQHwoj8LeixFYAEd0Kr377nzW1pZAXFQr85ouBp+mvQIL+NSEz/WA8Os9MPZBOEg3pqKXL0qQLW97I0qVi/hRa4LpGqx7+5SEK7jJwEqNKFsuwt9rAaWLhIQZE9rtuWlPyeTaCevKue8xGW+nNV8goaK7gl9UK9jY+gPgZr40TYjUEX79C4DPiKID2widktD3sm639Yt4tN8C+Cq9QMVfNoySVPMneRx2cgOqZSBnxmcedVVT0/CbjXA2A6qNRqUHW7pcu6Elq0bWUrQjP9wnS4z+zDpyhV+TYCrjabyTV/uuZFT/wNutBxCPpBfGS84SCeKSMT4AutILTl3BrHJd1bp6GWG7pPk74VV9AMKuq9Gs4LPS/SWPA7PMpk4+Ae0FGgBUBrgtvfB8lUyIqfF4hBJX09onsZauXfGCquZ4Gcx9PP09LPKE0XzzGkQNgEcANZbtlYV7nw64sdkzi6puxR1MxueZJmWazRkY7XiNv8Fk3CoiXEggSZVpQNQx2cAQ4C7esJHlH50B1DLA6tVKssVxnCefMwFdHeaVbQVgvDF/dLpVdjpFr17aCV2NFk/Ilukm3J3fflxj5DaiVQKs++1KEqwLZrv/HyI/ujC8s0y6AAAAAElFTkSuQmCC);
}
.login-main .cut-login-type .tips:before {
margin-left: 8px;
position: absolute;
top: 8px;
right: -12px;
content: '';
border: 6px solid var(--color-success-bg);
border-color: transparent transparent transparent var(--color-success-bg);
}
/* 账户登录模式样式 */
.login-main .cut-login-type.account-login {
/* 使用默认样式 */
}
.login-main .cut-login-type.account-login:hover {
/* 使用默认悬停样式 */
}
/* 扫码登录模式样式 */
.login-main .cut-login-type.scan-code-login {
/* 使用默认样式 */
}
.login-main .cut-login-type.scan-code-login:hover {
/* 使用默认悬停样式 */
}
.text-small {
font-size: var(--font-size-2);
}
.text-middle {
font-size: var(--font-size-3);
}
/* 链接样式 */
.bt-link {
font-size: var(--font-size-2);
color: var(--text-link);
text-decoration: none;
}
.bt-link:hover {
color: var(--text-link-hover);
}
/* 登录图标 */
.login-svg {
text-align: center;
margin-bottom: 1.25rem; /* mb-5 corresponds to 1.25rem in Tailwind */
width: 100%;
}
.login-svg img {
height: 88px;
max-width: 440px;
display: inline-flex;
align-items: center;
justify-content: center;
fill: currentColor;
vertical-align: -1.5px;
overflow: hidden;
}
.login-account,
.login-scan {
width: 440px;
position: relative;
padding: 40px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background-color: var(--bg-secondary);
border-radius: var(--radius-4);
transition: background-color 0.3s ease, border-color 0.3s ease;
}
/* 登录表单 */
.login-form {
display: flex;
flex-direction: column;
position: relative;
text-align: center;
margin-top: 5px;
}
.login-form.google-verify-view {
margin-top: 0;
}
.login-title {
margin: 25px;
font-size: var(--font-size-8);
color: var(--text-primary);
display: flex;
justify-content: center;
}
.title-text{
width:100%;
text-overflow: ellipsis;
overflow: hidden;
text-align: center;
white-space: nowrap;
}
.login-form-item {
width: 100%;
}
.form-group {
position: relative;
padding-bottom: 22px;
display: flex;
align-items: center;
}
.form-group .error-tips {
font-size: var(--font-size-2);
display: block;
position: absolute;
bottom: 6px;
left: 2px;
}
.form-group.error .login-form-input {
border-color: var(--color-error) !important;
}
.form-group.error .error-tips {
color: var(--color-error);
}
.login-form-input {
width: 100%;
background-color: var(--bg-tertiary);
background-image: none;
border-radius: var(--radius-5);
border: 1px solid var(--bg-quaternary);
box-sizing: border-box;
color: var(--text-secondary);
display: inline-block;
font-size: var(--font-size-3);
height: 40px;
line-height: 40px;
font-size: var(--font-size-3);
outline: none;
padding: 0 15px;
transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), background-color 0.3s ease, color 0.3s ease;
}
.login-form-input:hover {
border-color: var(--bg-hover);
}
.login-form-input:focus {
border-color: var(--color-success) !important;
}
.login-form-item .cut-login-code {
width: 115px;
height: 40px;
border: 1px solid var(--bg-quaternary);
border-radius: var(--radius-3);
cursor: pointer;
display: flex;
align-items: center;
}
.login-form-item .cut-login-code img {
border-radius: var(--radius-3);
font-size: var(--font-size-2);
}
.login-form-button {
width: 100%;
color: var(--text-inverse);
background-color: var(--color-success);
border-color: var(--color-success);
border-radius: var(--radius-5);
cursor: pointer;
display: inline-block;
line-height: 1;
white-space: nowrap;
cursor: pointer;
text-align: center;
box-sizing: border-box;
outline: none;
margin: 0;
transition: all 0.3s ease;
font-weight: 500;
padding: 12px 20px;
font-size: var(--font-size-3);
border: none;
}
.login-form-button:hover,
.login-form-button:focus {
background: var(--color-success);
border-color: var(--color-success);
color: var(--text-inverse);
}
.login-form-footer {
display: flex;
justify-content: space-between;
align-items: center;
}
.login-form-footer .cdn-node {
background-color: var(--bg-secondary);
border-color: var(--bg-quaternary);
border-top-left-radius: var(--radius-5);
border-bottom-left-radius: var(--radius-5);
border-width: 1px;
border-right-width: 0px;
display: flex;
align-items: center;
height: 28px;
padding-left: 8px;
padding-right: 8px;
font-size: var(--font-size-2);
color: var(--text-secondary);
}
.login-form-footer .form-select-module {
border-radius: 4px;
}
/* 谷歌认证 */
.login-google-verify {
width: 360px;
background-color: var(--bg-secondary);
border-radius: var(--radius-3);
padding: 60px 30px 40px 30px;
position: fixed;
top: 50%;
margin-top: -140px;
z-index: 999;
box-shadow: 1px 1px 50px var(--shadow-4);
}
.login-form li {
text-align: left;
font-size: var(--font-size-2);
line-height: 1.8;
}
.google-verify-shade {
background-color: var(--bg-overlay);
height: 100%;
opacity: 0.3;
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 998;
}
.close-popup-btn {
background-position: center;
background-repeat: no-repeat;
background-size: contain;
cursor: pointer;
height: 30px;
position: absolute;
width: 30px;
transform-origin: center;
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MCA1MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAgNTAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxjaXJjbGUgc3R5bGU9ImZpbGw6I2ZmZiIgY3g9IjI1IiBjeT0iMjUiIHI9IjI1Ii8+PGNpcmNsZSBzdHlsZT0iZmlsbDojNzg3ODc4IiBjeD0iMjUiIGN5PSIyNSIgcj0iMjAuNSIvPjxwYXRoIHN0eWxlPSJmaWxsOiNmZmYiIGQ9Im0zMi4wNzEgMzQuODk5LTE2Ljk3LTE2Ljk3YTIgMiAwIDEgMSAyLjgyOC0yLjgyOEwzNC45IDMyLjA3MmEyIDIgMCAxIDEtMi44MjkgMi44Mjd6Ii8+PHBhdGggc3R5bGU9ImZpbGw6I2ZmZiIgZD0ibTM0Ljg5OSAxNy45MjktMTYuOTcgMTYuOTdhMiAyIDAgMSAxLTIuODI4LTIuODI4TDMyLjA3MiAxNS4xYTIgMiAwIDEgMSAyLjgyNyAyLjgyOXoiLz48L3N2Zz4=);
background-size: contain contain;
background-position: center;
background-repeat: no-repeat;
transition: transform 0.4s ease-in-out;
right: -15px;
top: -15px;
}
.close-popup-btn:hover {
transform: rotate(180deg);
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MCA1MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAgNTAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxjaXJjbGUgc3R5bGU9ImZpbGw6I2ZmZiIgY3g9IjI1IiBjeT0iMjUiIHI9IjI1Ii8+PGNpcmNsZSBzdHlsZT0iZmlsbDojZjEyOTMwIiBjeD0iMjUiIGN5PSIyNSIgcj0iMjAuNSIvPjxwYXRoIHN0eWxlPSJmaWxsOiNmZmYiIGQ9Im0zMi4wNzEgMzQuODk5LTE2Ljk3LTE2Ljk3YTIgMiAwIDEgMSAyLjgyOC0yLjgyOEwzNC45IDMyLjA3MmEyIDIgMCAxIDEtMi44MjkgMi44Mjd6Ii8+PHBhdGggc3R5bGU9ImZpbGw6I2ZmZiIgZD0ibTM0Ljg5OSAxNy45MjktMTYuOTcgMTYuOTdhMiAyIDAgMSAxLTIuODI4LTIuODI4TDMyLjA3MiAxNS4xYTIgMiAwIDEgMSAyLjgyNyAyLjgyOXoiLz48L3N2Zz4=);
}
/* 登录扫描 */
.login-scan-view {
display: flex;
flex: 1;
position: relative;
align-items: center;
flex-direction: column;
}
.login-scan-success {
display: flex;
flex-direction: column;
align-items: center;
}
.login-scan-error {
display: flex;
flex-direction: column;
padding: 40px 0;
}
/* 下拉框 */
.form-select-module.small {
height: 28px;
line-height: 28px;
font-size: var(--font-size-2);
}
.form-select-module.small .select-display {
padding: 0 30px 0 10px;
}
.form-select-module.small .select-display:after {
right: 10px;
top: 12px;
}
.form-select-module.active.small .select-list {
top: 32px;
}
.form-select-module.small .select-list .select-item {
height: 28px;
line-height: 28px;
}
.form-select-module {
position: relative;
text-align: left;
height: 40px;
line-height: 40px;
border-radius: var(--radius-5);
font-size: var(--font-size-3);
border: 1px solid var(--bg-quaternary);
cursor: pointer;
}
.form-select-module .select-display {
padding: 0 40px 0 15px;
}
.form-select-module .select-display:hover {
border-color: var(--bg-hover);
}
.form-select-module .select-display:after {
content: '';
position: absolute;
top: 50%;
right: 15px;
margin-top: -5px;
width: 8px;
height: 8px;
border-bottom: 1.5px solid var(--text-tertiary);
border-right: 1.5px solid var(--text-tertiary);
transform: rotate(45deg);
transition: transform 0.3s ease-in-out;
}
.form-select-module.small .select-display:after {
width: 6px;
height: 6px;
}
.form-select-module .select-list {
display: none;
list-style-type: none;
box-sizing: border-box;
margin: 0;
padding-top: 6px;
padding-bottom: 6px;
position: absolute;
top: 40px;
left: 0;
width: 100%;
background-color: var(--bg-secondary);
border-color: var(--bg-quaternary);
border-radius: var(--radius-1);
z-index: 100;
max-height: 200px;
overflow: auto;
}
@media screen and (max-height: 950px) {
.login-cdn-accelerate.form-select-module .select-list {
top: -205px !important;
}
}
/* 激活选中 */
.form-select-module.active .select-display:after {
transform: rotate(225deg);
}
.form-select-module.active .select-display {
border-color: var(--color-success);
}
.form-select-module.active .select-list {
width: inherit;
display: block;
position: absolute;
top: 50px;
z-index: 90;
border-style: solid;
border-width: 1px;
border-color: var(--bg-quaternary);
border-radius: var(--radius-3);
background-color: var(--bg-secondary);
box-shadow: 0 1px 3px 0 var(--shadow-2), 0 1px 2px 0 var(--shadow-1);
box-sizing: border-box;
}
/* 下拉角标 */
.form-select-module .select-list::after {
content: '';
position: absolute;
top: -6px;
left: 50%;
margin-left: -6px;
border: 6px solid transparent;
border-bottom-color: var(--bg-secondary);
}
/* 下拉选项 */
.form-select-module .select-list .select-item {
font-size: var(--font-size-2);
padding: 0 20px;
position: relative;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: var(--text-secondary);
height: 34px;
line-height: 34px;
box-sizing: border-box;
cursor: pointer;
text-align: left;
}
.form-select-module .select-list .select-item.disabled {
color: var(--text-quaternary);
cursor: not-allowed;
}
.form-select-module .select-list .select-item.active {
color: var(--color-success);
font-weight: 700;
}
.form-select-module .select-list .select-item:hover {
background-color: var(--bg-hover);
}
/* 扫码 */
.login-scan-canvas {
width: 140px;
height: 140px;
margin-bottom: 10px;
}
.login-scan-tips {
font-size: var(--font-size-5);
margin-top: 12px;
display: flex;
}
.login-scan-error .title {
font-size: var(--font-size-5);
margin-bottom: 16px;
font-weight: 700;
}
.login-scan-error .line {
font-size: var(--font-size-4);
margin-bottom: 14px;
}
/* 进度loading */
.el-loading-mask.login-loading {
display: flex;
align-items: center;
justify-content: center;
position: fixed;
z-index: 9999;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
.el-loading-mask.login-loading .el-loading-spinner {
display: flex;
align-items: center;
width: auto;
min-width: 180px;
max-width: 700px;
padding: 16px 25px;
background-color: var(--bg-secondary);
border: 1px solid var(--bg-quaternary);
border-radius: var(--radius-2);
word-break: break-all;
}
.el-loading-mask.login-loading .el-loading-spinner .svgtofont-loading {
width: 24px;
font-size: var(--font-size-7);
margin-right: 16px;
color: var(--text-secondary);
animation: none;
position: relative;
display: flex;
align-items: center;
justify-content: center;
}
.el-loading-mask.login-loading .el-loading-spinner .svgtofont-loading:after {
content: '';
position: absolute;
display: block;
width: 24px;
height: 24px;
border: 1.5px solid var(--color-success);
border-top-color: transparent;
border-radius: var(--radius-full);
animation: circle infinite 0.6s linear;
opacity: 0.8;
}
.el-loading-mask.login-loading .el-loading-spinner .svgtofont-loading:before{
content: "";
}
@keyframes circle {
0% {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
.el-loading-mask.login-loading .svgtofont-loading svg {
height: var(--font-size-5);
}
.el-loading-mask.login-loading .el-loading-spinner{
display: flex;
align-items: center;
}
.el-loading-mask.login-loading .el-loading-spinner .el-loading-text {
margin: 0;
line-height: 24px;
text-align: left;
font-size: var(--font-size-3);
color: var(--text-secondary);
}
/* 消息提示 */
.el-tooltip__popper {
position: absolute;
border-radius: var(--radius-3);
padding: 10px;
z-index: 2000;
font-size: var(--font-size-2);
line-height: 1.2;
min-width: 10px;
word-wrap: break-word;
}
.el-tooltip-white {
background: linear-gradient(180deg, rgba(255, 249, 236, 0.4) 15.727%, rgba(255, 255, 255, 0) 100%) !important;
background-color: var(--bg-secondary) !important;
color: var(--text-secondary) !important;
padding: 1.6rem 1.5rem !important;
border-radius: var(--radius-6) !important;
box-shadow: 1px 2px 11px var(--shadow-3) !important;
padding: 1.6rem !important;
background: var(--bg-secondary) !important;
}
.el-tooltip-white .popper__arrow {
border-bottom-color: #fffdf8 !important;
border-top-color: var(--bg-secondary) !important;
border-bottom-color: var(--bg-secondary) !important;
}
.el-tooltip-white .popper__arrow:after {
border-top-color: #fffdf8 !important;
border-bottom-color: #fffdf8 !important;
border-top-color: var(--bg-secondary) !important;
border-bottom-color: var(--bg-secondary) !important;
}
.el-tooltip__popper .popper__arrow,
.el-tooltip__popper .popper__arrow:after {
position: absolute;
display: block;
width: 0;
height: 0;
border-color: transparent;
border-width: 6px;
}
/*
.el-tooltip__popper .popper__arrow:after {
content: ' ';
border-width: 5px;
} */
.el-tooltip__popper[x-placement^='top'] .popper__arrow {
bottom: -6px;
border-top-color: var(--text-secondary);
border-bottom-width: 0;
}
.el-tooltip__popper .popper__arrow {
border-width: 6px;
}
/* 消息通知 */
.el-message {
top: 50%;
left: 50%;
align-items: start;
min-width: 180px;
padding: 10px 8px;
border: 1px solid var(--bg-quaternary);
background-color: var(--bg-secondary);
transition:
top 0s,
opacity 0.3s,
transform 0.4s;
padding-right: 24px;
max-width: 400px;
transform: translateX(-50%) translateY(-50%);
position: fixed;
display: flex;
align-items: center;
border-radius: var(--radius-3);
box-shadow: 0 2px 12px 0 var(--shadow-3);
}
.el-message .el-dialog-close{
position: absolute;
transition: all;
top: -1.5rem;
right: -1.5rem;
z-index: 999;
width: 3rem;
height: 3rem;
cursor: pointer;
border-radius: var(--radius-full);
background-size: contain;
background-position: center;
background-repeat: no-repeat;
transition: transform .4s ease-in-out;
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MCA1MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAgNTAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxjaXJjbGUgc3R5bGU9ImZpbGw6I2ZmZiIgY3g9IjI1IiBjeT0iMjUiIHI9IjI1Ii8+PGNpcmNsZSBzdHlsZT0iZmlsbDojNzg3ODc4IiBjeD0iMjUiIGN5PSIyNSIgcj0iMjAuNSIvPjxwYXRoIHN0eWxlPSJmaWxsOiNmZmYiIGQ9Im0zMi4wNzEgMzQuODk5LTE2Ljk3LTE2Ljk3YTIgMiAwIDEgMSAyLjgyOC0yLjgyOEwzNC45IDMyLjA3MmEyIDIgMCAxIDEtMi44MjkgMi44Mjd6Ii8+PHBhdGggc3R5bGU9ImZpbGw6I2ZmZiIgZD0ibTM0Ljg5OSAxNy45MjktMTYuOTcgMTYuOTdhMiAyIDAgMSAxLTIuODI4LTIuODI4TDMyLjA3MiAxNS4xYTIgMiAwIDEgMSAyLjgyNyAyLjgyOXoiLz48L3N2Zz4=);
}
.el-message .el-dialog-close:hover{
transform: rotate(180deg);
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MCA1MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTAgNTAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxjaXJjbGUgc3R5bGU9ImZpbGw6I2ZmZiIgY3g9IjI1IiBjeT0iMjUiIHI9IjI1Ii8+PGNpcmNsZSBzdHlsZT0iZmlsbDojZjEyOTMwIiBjeD0iMjUiIGN5PSIyNSIgcj0iMjAuNSIvPjxwYXRoIHN0eWxlPSJmaWxsOiNmZmYiIGQ9Im0zMi4wNzEgMzQuODk5LTE2Ljk3LTE2Ljk3YTIgMiAwIDEgMSAyLjgyOC0yLjgyOEwzNC45IDMyLjA3MmEyIDIgMCAxIDEtMi44MjkgMi44Mjd6Ii8+PHBhdGggc3R5bGU9ImZpbGw6I2ZmZiIgZD0ibTM0Ljg5OSAxNy45MjktMTYuOTcgMTYuOTdhMiAyIDAgMSAxLTIuODI4LTIuODI4TDMyLjA3MiAxNS4xYTIgMiAwIDEgMSAyLjgyNyAyLjgyOXoiLz48L3N2Zz4=);
}
.el-message .el-message__content {
flex: 1;
padding: 3px 0;
line-height: 24px;
font-size: var(--font-size-3);
color: var(--text-secondary);
margin-left: 5px;
}
.el-message .el-message__content h2{
margin-top: 5px;
}
.el-message .el-message__icon {
font-size: var(--font-size-9);
}
.el-message .el-icon-success {
color: var(--color-success);
}
.el-message .el-icon-error {
color: var(--color-error);
}
.el-divider--vertical {
display: inline-block;
width: 1px;
height: 1em;
margin: 0 8px;
vertical-align: middle;
position: relative;
}
.el-divider {
background-color: var(--bg-quaternary);
position: relative;
}
.cursor-pointer{
cursor: pointer;
}
/* View Transitions API 主题切换动画 */
::view-transition-old(root) {
animation: theme-fade-out var(--view-transition-duration) var(--view-transition-timing) both;
animation-delay: 0.1s;
z-index: 1;
/* 启用硬件加速 */
transform: translateZ(0);
will-change: opacity;
/* 防止动画期间的闪烁 */
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
::view-transition-new(root) {
animation: theme-clip-in var(--view-transition-duration) var(--view-transition-timing) both;
z-index: 2;
/* 启用硬件加速 */
transform: translateZ(0);
will-change: clip-path, opacity;
/* 防止动画期间的闪烁 */
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
@keyframes theme-clip-in {
0% {
clip-path: circle(0% at var(--x, 50%) var(--y, 50%));
opacity: 1;
}
100% {
clip-path: circle(var(--r, 150%) at var(--x, 50%) var(--y, 50%));
opacity: 1;
}
}
@keyframes theme-fade-out {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
/* 防止闪屏的额外样式 */
::view-transition-group(root) {
animation-duration: var(--view-transition-duration);
/* 确保动画组的稳定性 */
contain: layout style paint;
transform: translateZ(0);
}
::view-transition-image-pair(root) {
isolation: isolate;
/* 防止图像对的渲染问题 */
contain: strict;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
/* 主题切换期间的性能优化 */
.theme-switching {
/* 临时禁用不必要的动画 */
*, *::before, *::after {
animation-play-state: paused !important;
transition-duration: 0s !important;
}
/* 保持主题切换动画 */
::view-transition-old(root),
::view-transition-new(root) {
animation-play-state: running !important;
transition-duration: var(--view-transition-duration) !important;
}
}