video-shuoshan/web/src/pages/DashboardPage.module.css
seaislee1209 277de4651f fix: 管理后台 UI 优化 — 表格撑满全屏 + 弹窗实心背景 + 设置页/仪表盘双列布局
- 所有表格页面移除 max-width: 1200px,撑满可用宽度
- 表格 td 加 white-space: nowrap 防止长文本折行
- AdminLayout 修改密码弹窗 background 改为实心 #16161e(修复半透明看不清)
- 系统设置页改为双列 grid(配额+设备限制并排,公告+异常检测整行)
- 仪表盘改为撑满 + 团队/用户排行双列并排

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 16:47:41 +08:00

125 lines
2.1 KiB
CSS

.page {
max-width: none;
}
.title {
font-size: 22px;
font-weight: 600;
color: var(--color-text-primary);
margin-bottom: 24px;
}
.statsGrid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
margin-bottom: 24px;
}
.statCard {
background: var(--color-bg-card);
border: 1px solid var(--color-border-card);
border-radius: var(--radius-card);
padding: 20px;
}
.statLabel {
color: var(--color-text-secondary);
font-size: 13px;
margin-bottom: 8px;
}
.statValue {
color: var(--color-text-primary);
font-size: 28px;
font-weight: 700;
line-height: 1.2;
}
.statChange {
display: inline-flex;
align-items: center;
gap: 4px;
font-size: 12px;
margin-top: 8px;
padding: 2px 6px;
border-radius: 4px;
}
.positive {
color: var(--color-success);
background: rgba(0, 184, 148, 0.1);
}
.negative {
color: var(--color-danger);
background: rgba(231, 76, 60, 0.1);
}
.chartSection {
margin-bottom: 24px;
}
.sectionTitle {
font-size: 16px;
font-weight: 600;
color: var(--color-text-primary);
margin-bottom: 12px;
}
.chartWrapper {
background: var(--color-bg-card);
border: 1px solid var(--color-border-card);
border-radius: var(--radius-card);
padding: 16px;
}
/* Skeleton loading */
.skeleton {
display: flex;
flex-direction: column;
gap: 24px;
}
.skeletonCards {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
.skeletonCard {
height: 100px;
background: var(--color-bg-card);
border: 1px solid var(--color-border-card);
border-radius: var(--radius-card);
animation: pulse 1.5s ease-in-out infinite;
}
.skeletonChart {
height: 320px;
background: var(--color-bg-card);
border: 1px solid var(--color-border-card);
border-radius: var(--radius-card);
animation: pulse 1.5s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
.chartsRow {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
}
@media (max-width: 1024px) {
.statsGrid { grid-template-columns: repeat(2, 1fr); }
.chartsRow { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
.statsGrid { grid-template-columns: 1fr; }
}