2025-05-11 23:06:57 +08:00

992 lines
19 KiB
CSS

body {
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
font-family: 'Inter', system-ui, -apple-system, sans-serif;
color: #212529;
min-height: 100vh;
}
/* 组合相似的选择器,减少重复 */
.card, .table, .alert {
border-radius: 12px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
overflow: hidden;
}
.card {
border: none;
transition: all 0.3s ease;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
}
.card-header {
background: rgba(255, 255, 255, 0.9);
border-bottom: 1px solid rgba(0, 0, 0, 0.08);
font-weight: 600;
color: #111827;
}
/* 优化按钮相关样式 */
.btn {
transition: all 0.3s ease;
position: relative;
overflow: hidden;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.btn:hover {
transform: translateY(-2px);
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
}
.btn:active {
transform: translateY(1px);
}
/* 优化按钮波纹效果 */
.btn::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 5px;
height: 5px;
background: rgba(255, 255, 255, 0.5);
opacity: 0;
border-radius: 100%;
transform: scale(1) translate(-50%, -50%);
transform-origin: 0 0;
}
.btn:focus:not(:active)::after {
animation: ripple 1s ease-out;
}
@keyframes ripple {
0% { transform: scale(0); opacity: 0.6; }
100% { transform: scale(25); opacity: 0; }
}
/* 优化表格样式 */
.table {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
width: 100%;
margin-bottom: 1rem;
}
.table td, .table th {
padding: 0.75rem 1rem;
vertical-align: middle;
}
/* 简化表格悬停效果 */
.table tbody tr:hover {
background-color: rgba(241, 245, 249, 0.7);
transform: scale(1.01);
}
/* 合并加载遮罩样式 */
.loading-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: none;
justify-content: center;
align-items: center;
z-index: 10000;
pointer-events: none;
}
.loading-overlay.show {
display: flex;
pointer-events: auto;
}
.spinner-container {
background-color: white;
padding: 20px;
border-radius: 10px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
text-align: center;
}
.stat-number {
font-size: 2rem;
font-weight: 700;
background: linear-gradient(120deg, #4f46e5, #7c3aed);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin-bottom: 5px;
}
.stat-label {
font-size: 0.9rem;
color: #1f2937;
font-weight: 500;
}
.badge {
font-weight: 500;
padding: 0.35em 0.6em;
border-radius: 4px;
}
.operation-column .btn {
margin: 0.15rem;
padding: 0.25rem 0.5rem;
border-radius: 4px;
}
.email-column {
max-width: 250px;
word-break: break-all;
}
.password-cell, .token-cell {
position: relative;
}
.copy-btn {
margin-left: 0.25rem !important;
}
.container {
max-width: 1400px;
padding: 1.5rem;
}
.table th {
background-color: #f3f4f6;
font-weight: 600;
color: #111827;
border-top: none;
}
.table tbody tr {
transition: all 0.2s ease;
}
#fireworks-canvas {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 9999;
pointer-events: none;
display: none;
}
#alert-container {
position: fixed;
top: 20px;
right: 20px;
z-index: 10000;
max-width: 400px;
}
.alert {
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
border-radius: 10px;
border-left: 4px solid;
}
.alert-success {
border-left-color: #10b981;
}
.alert-danger {
border-left-color: #ef4444;
}
.special-alert {
background: linear-gradient(135deg, #10b981, #059669);
color: white;
font-weight: 500;
transform-origin: center;
}
.text-muted {
color: #6c757d !important;
}
/* 调整卡片内部间距,使内容更紧凑 */
.card-body {
padding: 1.25rem;
}
/* 调整统计图表容器高度 */
#usage-chart-container {
height: 200px; /* 从250px减小到200px */
}
/* 调整任务控制详情部分 */
#task-details .card {
margin-bottom: 0.5rem; /* 减小底部边距 */
}
#task-details .card .card-body {
padding: 0.5rem; /* 减小内部填充 */
}
/* 调整操作按钮大小和间距 */
.task-control-buttons .btn {
padding: 0.375rem 0.75rem;
}
/* 调整任务状态信息间距 */
.task-status-info {
margin-bottom: 0.75rem;
}
/* 调整图表大小 */
#usage-chart {
max-height: 160px; /* 从200px减小到160px */
}
/* 使用情况进度条样式更新 */
.usage-progress-container {
display: flex;
flex-direction: column;
width: 100%;
margin-bottom: 5px;
}
/* 使用情况列样式优化 */
.usage-info {
min-width: 140px;
}
.usage-numbers {
font-size: 0.8rem;
margin-bottom: 3px;
white-space: nowrap;
}
.used-count {
font-weight: 500;
color: #333;
}
.total-count {
color: #666;
}
.remaining-count {
font-size: 0.75rem;
color: #28a745;
margin-left: 4px;
}
/* 修改进度条背景为灰色 */
.usage-progress {
height: 8px;
background-color: #e9ecef;
border-radius: 4px;
overflow: hidden;
}
/* 修改进度条填充颜色为浅红色 */
.usage-progress-bar {
height: 100%;
background: linear-gradient(90deg, #ff8a8a, #ffb3b3);
border-radius: 4px;
transition: width 0.5s ease;
}
/* 调整表格列宽 */
.usage-column {
min-width: 180px;
}
.email-column {
max-width: 220px;
overflow: hidden;
text-overflow: ellipsis;
}
/* 高亮显示当前行 */
.table tbody tr.active {
background-color: rgba(79, 70, 229, 0.05);
}
/* 调整使用量查询按钮 */
.get-usage-btn {
white-space: nowrap;
}
/* 保留操作列样式,但可以调整 */
.operation-column {
min-width: 120px; /* 由于按钮组,宽度需要调整 */
white-space: nowrap;
}
/* 标题和面板间距优化 */
h2, h3, h4, h5 {
margin-bottom: 1rem;
font-weight: 600;
}
/* 添加鼠标悬停手形光标效果 */
.copy-btn,
.toggle-password,
.toggle-token,
.toggle-username,
.btn,
.status-action,
.get-usage-btn,
.delete-account-btn {
cursor: pointer;
}
/* 为复制和显示/隐藏图标添加悬停效果 */
.copy-btn:hover,
.toggle-password:hover,
.toggle-token:hover,
.toggle-username:hover {
color: #4f46e5;
transform: scale(1.1);
transition: all 0.2s ease;
}
/* 添加额度进度条样式 */
.battery-progress {
display: flex;
width: 100%;
height: 20px;
/* background-color: #e9ecef; */
border-radius: 5px;
overflow: hidden;
position: relative;
/* border: 1px solid #dee2e6; */
}
/* 电池内部格子线 */
.battery-grid {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: flex;
pointer-events: none;
}
/* 电池格子 */
.battery-cell {
flex: 1;
height: 2px;
border-right: 1px solid rgba(0,0,0,0.1);
}
.battery-cell:last-child {
border-right: none;
}
/* 已使用的部分 - 浅红色 */
.battery-used {
height: 100%;
background: linear-gradient(90deg, #ff8a8a, #ffb3b3);
transition: width 0.5s ease;
}
/* 额度信息文本 */
.usage-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 0.75rem;
font-weight: 600;
color: #495057;
text-shadow: 0 0 2px rgba(255,255,255,0.7);
white-space: nowrap;
}
/* 使用量显示样式 */
.usage-display {
width: 100%;
}
.usage-text {
font-weight: 500;
font-size: 0.9rem;
}
.progress {
height: 8px !important;
border-radius: 4px;
background-color: transparent !important;
overflow: hidden;
}
/* 自定义颜色 */
.bg-danger-soft {
background-color: #ffcccc !important;
}
.bg-success-soft {
background-color: #d1ffd1 !important;
}
/* 新的额度显示样式 - 参考图片精确复刻 */
.usage-bar-container {
display: flex;
align-items: center;
width: 100%;
padding: 10px 0;
}
.usage-bar {
flex-grow: 1;
height: 15px;
background-color: #e8f7e8; /* 浅绿背景 */
border-radius: 10px;
margin-right: 15px;
position: relative;
overflow: hidden;
}
.usage-bar-used {
position: absolute;
left: 0;
top: 0;
height: 100%;
background-color: #ffcccc; /* 浅红色 */
border-radius: 10px 0 0 10px;
}
.usage-percent {
font-size: 14px;
color: #666;
font-weight: normal;
white-space: nowrap;
min-width: 55px;
text-align: right;
}
/* 使用情况列样式 */
.usage-info {
white-space: nowrap;
}
.usage-numbers {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 4px;
margin-bottom: 5px;
}
.used-count {
font-weight: 600;
color: #0d6efd;
}
.separator {
color: #6c757d;
}
.total-count {
font-weight: 600;
color: #212529;
}
.remaining-count {
color: #28a745;
font-size: 0.85em;
margin-left: 5px;
}
/* 电池式进度指示器 - 修改颜色逻辑 */
.battery-progress {
display: flex;
align-items: center;
gap: 8px;
}
.battery-bars {
display: flex;
gap: 2px;
align-items: center;
position: relative;
padding: 0 2px;
}
.battery-bars::before {
content: '';
position: absolute;
left: -3px;
height: 8px;
width: 3px;
background-color: #adb5bd;
border-radius: 2px 0 0 2px;
}
.battery-bar {
width: 6px;
height: 14px;
background-color: rgba(40, 167, 69, 0.2); /* 默认未使用为浅绿色 */
display: inline-block;
border-radius: 1px;
transition: background-color 0.3s ease;
}
/* 根据进度点亮电池条 - 反转逻辑,显示已用部分 */
.battery-progress[data-percent="0"] .battery-bar:nth-child(n) {
background-color: rgba(40, 167, 69, 0.2); /* 全未用 - 全部浅绿色 */
}
/* 已使用部分为浅红色 */
.battery-progress[data-percent="10"] .battery-bar:nth-child(1),
.battery-progress[data-percent="20"] .battery-bar:nth-child(-n+2),
.battery-progress[data-percent="30"] .battery-bar:nth-child(-n+3),
.battery-progress[data-percent="40"] .battery-bar:nth-child(-n+4),
.battery-progress[data-percent="50"] .battery-bar:nth-child(-n+5),
.battery-progress[data-percent="60"] .battery-bar:nth-child(-n+6),
.battery-progress[data-percent="70"] .battery-bar:nth-child(-n+7),
.battery-progress[data-percent="80"] .battery-bar:nth-child(-n+8),
.battery-progress[data-percent="90"] .battery-bar:nth-child(-n+9),
.battery-progress[data-percent="100"] .battery-bar:nth-child(-n+10) {
background-color: rgba(220, 53, 69, 0.2); /* 浅红色表示已使用 */
}
/* 删除旧的根据进度值设置颜色的规则,因为现在使用统一的红绿对比 */
.battery-percent {
font-size: 0.75rem;
color: #6c757d;
min-width: 40px;
}
#registration-status {
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
}
/* 添加侧边栏菜单样式 */
.app-layout {
display: flex;
min-height: 100vh;
}
#sidebar {
width: 250px;
background: #f8f9fa;
border-right: 1px solid #dee2e6;
height: 100vh;
position: fixed;
left: 0;
top: 0;
z-index: 1000;
box-shadow: 0 0 10px rgba(0,0,0,0.05);
}
.sidebar-header {
padding: 15px;
text-align: center;
border-bottom: 1px solid #dee2e6;
}
.sidebar-header h4 {
margin: 0;
font-size: 1.2rem;
color: #343a40;
}
.nav-menu {
list-style: none;
padding: 15px 0;
margin: 0;
}
.nav-item {
margin: 5px 0;
}
.nav-link {
display: flex;
align-items: center;
padding: 10px 15px;
color: #495057;
text-decoration: none;
border-left: 3px solid transparent;
transition: all 0.2s;
}
.nav-link:hover, .nav-link.active {
background: #e9ecef;
color: #0d6efd;
border-left-color: #0d6efd;
}
.nav-link i {
margin-right: 10px;
width: 20px;
text-align: center;
}
#content {
flex: 1;
margin-left: 250px;
padding: 20px;
}
.page-content {
display: none;
}
.page-content.active {
display: block;
}
/* 响应式样式 */
@media (max-width: 768px) {
#sidebar {
width: 70px;
}
#content {
margin-left: 70px;
}
.sidebar-header h4, .nav-link span {
display: none;
}
.nav-link {
justify-content: center;
padding: 15px;
}
.nav-link i {
margin-right: 0;
}
}
@media (max-width: 576px) {
#sidebar {
width: 0;
overflow: hidden;
}
#content {
margin-left: 0;
}
}
/* 侧边栏底部文案样式 */
.sidebar-footer {
padding: 15px;
text-align: center;
position: absolute;
bottom: 0;
width: 100%;
border-top: 1px solid #dee2e6;
background-color: #f8f9fa;
font-size: 0.8rem;
color: #6c757d;
}
/* 调整侧边栏内容区域,为底部文案留出空间 */
.nav-menu {
padding-bottom: 60px; /* 确保内容不会被底部文案遮挡 */
}
/* 在响应式布局中隐藏/显示footer文本 */
@media (max-width: 768px) {
.sidebar-footer {
padding: 10px 5px;
font-size: 0.7rem;
}
.sidebar-footer span {
display: none;
}
}
@media (min-width: 769px) {
.sidebar-footer span {
display: inline-block;
}
}
/* 更新编辑配置按钮样式 - 占满一行 */
#edit-config-btn {
display: block;
width: 100%;
padding: 0.75rem 1rem;
margin-bottom: 0.25rem;
font-weight: 500;
font-size: 1.05rem;
text-align: center;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
transition: all 0.3s ease;
border: none;
}
#edit-config-btn:hover {
transform: translateY(-2px);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2);
}
#edit-config-btn:active {
transform: translateY(1px);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
}
/* 调整徽章位置,使其更加合理 */
#edit-config-btn .position-absolute {
top: -8px !important;
right: -8px !important;
left: auto !important;
transform: none !important;
}
/* 卡片标题与按钮的对齐 */
.card-header.bg-white.d-flex {
padding: 1rem 1.25rem;
}
/* 配置按钮样式 */
.config-actions button {
padding: 0.75rem 1rem;
font-weight: 500;
transition: all 0.3s ease;
}
#cancel-config-btn {
background-color: #6c757d;
border: none;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.12);
}
#cancel-config-btn:hover {
background-color: #5a6268;
transform: translateY(-2px);
box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15);
}
#save-config-btn {
background-color: #198754;
border: none;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.12);
}
#save-config-btn:hover {
background-color: #157347;
transform: translateY(-2px);
box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15);
}
/* 分页控件样式优化 */
.pagination {
border-radius: 30px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08);
background-color: #fff;
overflow: hidden;
}
.pagination .page-item:first-child .page-link,
.pagination .page-item:last-child .page-link {
border-radius: 0;
}
.pagination .page-item .page-link {
border: none;
font-weight: 500;
color: #6c757d;
min-width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s ease;
padding: 0;
margin: 0;
}
.pagination .page-item.active .page-link {
background-color: #4285f4;
color: white;
font-weight: 600;
box-shadow: 0 2px 5px rgba(66, 133, 244, 0.3);
}
.pagination .page-item .page-link:hover:not(.disabled) {
background-color: #f5f5f5;
color: #4285f4;
z-index: 1;
}
.pagination .page-item.disabled .page-link {
color: #ccc;
background-color: #f8f9fa;
}
/* 分页容器样式 */
.pagination-container {
background-color: #f8f9fa;
border-radius: 8px;
padding: 12px 16px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}
.per-page-selector .form-select {
border-radius: 20px;
font-size: 0.9rem;
padding: 0.375rem 2rem 0.375rem 1rem;
border: 1px solid #dee2e6;
background-color: white;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
}
.pagination-info {
font-size: 0.9rem;
color: #6c757d;
}
/* 添加表头排序图标样式 */
.sortable {
cursor: pointer;
position: relative;
}
.sortable:after {
content: '\f0dc';
font-family: 'Font Awesome 5 Free';
font-weight: 900;
margin-left: 5px;
color: #ccc;
font-size: 0.8em;
}
.sortable.asc:after {
content: '\f0de';
color: #0d6efd;
}
.sortable.desc:after {
content: '\f0dd';
color: #0d6efd;
}
/* 代理配置样式 */
#proxy-settings {
background-color: #f8f9fa;
padding: 15px;
border-radius: 6px;
border: 1px solid #e9ecef;
margin-top: 10px;
transition: all 0.3s ease;
}
.form-check-input:checked + .form-check-label {
font-weight: 600;
color: #0d6efd;
}
/* 代理类型下拉框样式 */
#proxy-type {
border-color: #ced4da;
border-radius: 4px;
padding: 0.375rem 0.75rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
#proxy-type:focus {
border-color: #86b7fe;
box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
}
/* 系统维护按钮样式 - 更新蓝色按钮样式 */
.config-section .btn-danger,
.config-section .btn-primary {
transition: all 0.3s ease;
font-weight: 500;
}
.config-section .btn-primary {
background-color: #0b5ed7;
border-color: #0a58ca;
}
.config-section .btn-danger:hover {
background-color: #dc2626;
box-shadow: 0 4px 8px rgba(220, 38, 38, 0.3);
transform: translateY(-2px);
}
.config-section .btn-primary:hover {
background-color: #0a4fbf;
box-shadow: 0 4px 8px rgba(11, 94, 215, 0.3);
transform: translateY(-2px);
}
/* 系统维护卡片强调 */
.config-section.card {
border-color: #e2e8f0;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
}
/* 更新所有余量按钮样式 */
#update-all-usage {
margin-right: 10px;
}
#update-all-usage .fa-sync-alt {
transition: transform 0.3s ease;
}
#update-all-usage:active .fa-sync-alt {
transform: rotate(180deg);
}
/* 按钮加载状态 */
.btn-loading {
position: relative;
pointer-events: none;
color: transparent !important;
}
.btn-loading:after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 1em;
height: 1em;
margin-top: -0.5em;
margin-left: -0.5em;
border-radius: 50%;
border: 2px solid currentColor;
border-right-color: transparent;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
/* 更新余量按钮样式 */
.btn-purple {
color: #fff;
background-color: #6f42c1;
border-color: #6610f2;
}
.btn-purple:hover {
color: #fff;
background-color: #5a32a3;
border-color: #5a32a3;
}
.btn-purple:focus {
box-shadow: 0 0 0 0.25rem rgba(111, 66, 193, 0.25);
}
.btn-purple:active {
background-color: #4c2888;
border-color: #4c2888;
}