387 lines
10 KiB
CSS
387 lines
10 KiB
CSS
/* 活力运动风格:清爽蓝/绿/橙系配色方案 */
|
|
:root{
|
|
/* 主色调:清爽蓝色系 */
|
|
--primary: #00a8ff; /* 活力蓝 */
|
|
--primary-light: #4cdfff; /* 浅蓝 */
|
|
--primary-dark: #0077cc; /* 深蓝 */
|
|
|
|
/* 辅助色:绿色和橙色系 */
|
|
--accent-green: #00d8a7; /* 活力绿 */
|
|
--accent-orange: #ff9f43; /* 活力橙 */
|
|
--accent-yellow: #feca57; /* 阳光黄 */
|
|
|
|
/* 中性色 */
|
|
--secondary: #4a4a4a; /* 深灰 */
|
|
--danger: #ff6b6b; /* 活力红 */
|
|
--success: #00d8a7; /* 成功绿 */
|
|
--warning: #ff9f43; /* 警告橙 */
|
|
|
|
/* 背景与表面 */
|
|
--bg: #f8fafc; /* 浅灰背景 */
|
|
--surface: #ffffff; /* 白色表面 */
|
|
--border: #e1e8ed; /* 浅灰边框 */
|
|
--hover: #f0f7ff; /* 悬停蓝色 */
|
|
|
|
/* 文字色 */
|
|
--text-primary: #2c3e50; /* 深蓝灰 */
|
|
--text-secondary: #7f8c8d; /* 中灰 */
|
|
--text-muted: #95a5a6; /* 浅灰 */
|
|
}
|
|
|
|
*{ box-sizing:border-box; }
|
|
body{ margin:0; font-family:'PingFang SC', 'Helvetica Neue', Arial, sans-serif; background:var(--bg); color:var(--text-primary); line-height:1.6; }
|
|
|
|
/* 顶部导航(运动风格) */
|
|
.nav{
|
|
display:flex; justify-content:space-between; align-items:center;
|
|
padding:16px 20px;
|
|
background: linear-gradient(135deg, var(--primary) 0%, var(--accent-green) 100%);
|
|
color:white;
|
|
box-shadow: 0 4px 20px rgba(0,168,255,0.15);
|
|
position:sticky; top:0; z-index:10;
|
|
}
|
|
.nav-left{
|
|
font-weight:700; font-size:20px;
|
|
text-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
|
}
|
|
.nav a{ text-decoration:none; }
|
|
.nav-right{
|
|
display:flex; flex-wrap:nowrap;
|
|
overflow-x:auto; -webkit-overflow-scrolling:touch;
|
|
background: rgba(255,255,255,0.15);
|
|
border-radius: 25px;
|
|
padding: 4px;
|
|
}
|
|
.nav-right::-webkit-scrollbar{ display:none; }
|
|
.nav-right a{
|
|
position:relative; margin:0 2px;
|
|
padding:8px 16px;
|
|
color:rgba(255,255,255,0.9);
|
|
text-decoration:none;
|
|
border-radius:20px;
|
|
transition:all 0.3s ease;
|
|
font-weight:500;
|
|
white-space: nowrap;
|
|
}
|
|
.nav-right a:hover{
|
|
color:white;
|
|
background:rgba(255,255,255,0.2);
|
|
transform: translateY(-2px);
|
|
}
|
|
.nav-right a.active{
|
|
color:var(--primary);
|
|
background:white;
|
|
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
.container{ max-width:1000px; margin:24px auto; padding:0 20px; }
|
|
|
|
/* 通用控件 - 运动风格 */
|
|
label{ display:block; font-size:14px; color:var(--text-secondary); margin-bottom:8px; font-weight:500; }
|
|
input,select,button{
|
|
padding:12px 16px;
|
|
font-size:14px;
|
|
border: 2px solid var(--border);
|
|
border-radius: 12px;
|
|
transition: all 0.3s ease;
|
|
}
|
|
input:focus, select:focus{
|
|
outline: none;
|
|
border-color: var(--primary);
|
|
box-shadow: 0 0 0 3px rgba(0,168,255,0.1);
|
|
}
|
|
|
|
/* 按钮样式 */
|
|
.primary{
|
|
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-light) 100%);
|
|
color:#fff;
|
|
border:none;
|
|
border-radius:12px;
|
|
font-weight:600;
|
|
box-shadow: 0 4px 12px rgba(0,168,255,0.3);
|
|
cursor: pointer;
|
|
}
|
|
.primary:hover{
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 6px 20px rgba(0,168,255,0.4);
|
|
}
|
|
.secondary{
|
|
background: linear-gradient(135deg, var(--accent-green) 0%, #00e6b8 100%);
|
|
color:#fff;
|
|
border:none;
|
|
border-radius:12px;
|
|
font-weight:600;
|
|
box-shadow: 0 4px 12px rgba(0,216,167,0.3);
|
|
cursor: pointer;
|
|
}
|
|
.secondary:hover{
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 6px 20px rgba(0,216,167,0.4);
|
|
}
|
|
.danger{
|
|
background: linear-gradient(135deg, var(--danger) 0%, #ff8e8e 100%);
|
|
color:#fff;
|
|
border:none;
|
|
border-radius:12px;
|
|
font-weight:600;
|
|
box-shadow: 0 4px 12px rgba(255,107,107,0.3);
|
|
cursor: pointer;
|
|
}
|
|
.danger:hover{
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 6px 20px rgba(255,107,107,0.4);
|
|
}
|
|
|
|
.link{
|
|
color:var(--primary);
|
|
text-decoration:none;
|
|
margin-left:8px;
|
|
font-weight:500;
|
|
transition: all 0.3s ease;
|
|
}
|
|
.link:hover{
|
|
color:var(--primary-dark);
|
|
text-decoration:underline;
|
|
}
|
|
|
|
.muted{ color:var(--text-muted); }
|
|
|
|
/* 卡片样式 */
|
|
.card {
|
|
background: white;
|
|
padding: 24px;
|
|
border-radius: 16px;
|
|
box-shadow: 0 4px 20px rgba(0,0,0,0.05);
|
|
margin-bottom: 24px;
|
|
}
|
|
.card-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
margin-bottom: 20px;
|
|
padding-bottom: 8px;
|
|
border-bottom: 3px solid var(--primary);
|
|
}
|
|
.card-header h3 {
|
|
margin: 0;
|
|
color: var(--text-primary);
|
|
font-size: 20px;
|
|
}
|
|
|
|
/* Stats Cards */
|
|
.stats-cards {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
gap: 20px;
|
|
margin-bottom: 30px;
|
|
}
|
|
.stat-card {
|
|
color: white;
|
|
padding: 20px;
|
|
border-radius: 16px;
|
|
text-align: center;
|
|
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
|
|
}
|
|
.stat-value {
|
|
font-size: 32px;
|
|
font-weight: 700;
|
|
margin: 8px 0;
|
|
}
|
|
.stat-label {
|
|
font-size: 14px;
|
|
opacity: 0.9;
|
|
}
|
|
.stat-icon {
|
|
font-size: 12px;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
/* Table */
|
|
.table-responsive {
|
|
overflow-x: auto;
|
|
}
|
|
.data-table {
|
|
width: 100%;
|
|
border-collapse: separate;
|
|
border-spacing: 0;
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 16px;
|
|
overflow: hidden;
|
|
}
|
|
.data-table th {
|
|
background: linear-gradient(135deg, var(--primary-light) 0%, rgba(0,168,255,0.1) 100%);
|
|
color: var(--text-primary);
|
|
font-weight: 600;
|
|
padding: 16px 20px;
|
|
border-bottom: 2px solid var(--primary);
|
|
text-align: left;
|
|
}
|
|
.data-table td {
|
|
padding: 14px 20px;
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
.data-table tr:nth-child(odd) {
|
|
background: #fcfdff;
|
|
}
|
|
.data-table tr:hover {
|
|
background: var(--hover);
|
|
}
|
|
|
|
/* Modal */
|
|
.modal {
|
|
display: none;
|
|
position: fixed;
|
|
top: 0; left: 0;
|
|
width: 100%; height: 100%;
|
|
background: rgba(0,0,0,0.5);
|
|
z-index: 100;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
.modal.active {
|
|
display: flex;
|
|
}
|
|
.modal-content {
|
|
background: white;
|
|
padding: 24px;
|
|
border-radius: 16px;
|
|
width: 90%;
|
|
max-width: 500px;
|
|
max-height: 90vh;
|
|
overflow-y: auto;
|
|
box-shadow: 0 10px 40px rgba(0,0,0,0.2);
|
|
}
|
|
|
|
/* Tabs */
|
|
.tabs {
|
|
display: flex;
|
|
gap: 10px;
|
|
margin-bottom: 20px;
|
|
}
|
|
.tool-tabs {
|
|
display: flex;
|
|
gap: 10px;
|
|
margin: 16px 0 24px 0;
|
|
}
|
|
.tab-btn {
|
|
padding: 10px 20px;
|
|
border: none;
|
|
background: white;
|
|
border-radius: 12px;
|
|
cursor: pointer;
|
|
font-weight: 600;
|
|
color: var(--text-secondary);
|
|
}
|
|
.tab-btn.active {
|
|
background: var(--primary);
|
|
color: white;
|
|
box-shadow: 0 4px 12px rgba(0,168,255,0.3);
|
|
}
|
|
.tab-content {
|
|
display: none;
|
|
}
|
|
.tab-content.active {
|
|
display: block;
|
|
}
|
|
|
|
.grid-2 {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: 16px;
|
|
}
|
|
.grid-3 {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
gap: 16px;
|
|
}
|
|
.grid-4 {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: 16px;
|
|
}
|
|
|
|
/* Plan Badge */
|
|
.plan-badge {
|
|
background: #e3f2fd;
|
|
color: #1976d2;
|
|
padding: 4px 8px;
|
|
border-radius: 12px;
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.calendar-wrapper { background: var(--surface); padding: 16px; border-radius: 16px; box-shadow: 0 4px 12px rgba(0,0,0,0.06); }
|
|
.calendar { width: 100%; border-collapse: separate; border-spacing: 0; }
|
|
.calendar th { padding: 8px; color: var(--text-secondary); }
|
|
.calendar td { vertical-align: top; border: 1px solid var(--border); padding: 8px; min-height: 80px; }
|
|
.calendar td.empty { background: #f5f7fa; }
|
|
.calendar .date { font-weight: 600; color: var(--text-primary); margin-bottom: 6px; }
|
|
.calendar .metric { font-size: 12px; color: var(--text-secondary); }
|
|
.calendar .small { font-size: 12px; color: var(--text-muted); }
|
|
.calendar td:hover { background: var(--hover); }
|
|
|
|
.screen-card { background: #0b2e4f; color: #cfe8ff; padding: 16px; border-radius: 16px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); }
|
|
.screen-card .label { font-size: 14px; opacity: 0.9; margin-bottom: 8px; }
|
|
.screen-card .progress-list { display: flex; flex-direction: column; gap: 12px; }
|
|
.progress-item { margin-bottom: 8px; }
|
|
.progress-title { font-size: 14px; color: #cfe8ff; margin-bottom: 6px; }
|
|
.progress { width: 100%; height: 10px; background: rgba(207,232,255,0.2); border-radius: 999px; overflow: hidden; }
|
|
.progress .fill { height: 100%; background: #4fc3f7; }
|
|
|
|
.filter-bar { background: #f8fafc; padding: 16px; border-radius: 12px; margin-bottom: 20px; }
|
|
.range-btn { padding: 8px 12px; border: none; background: #fff; border-radius: 12px; cursor: pointer; font-weight: 600; color: var(--text-secondary); border: 2px solid var(--border); }
|
|
.range-btn:hover { border-color: var(--primary); }
|
|
|
|
.card-complete {
|
|
background: linear-gradient(135deg, rgba(0,216,167,0.1) 0%, rgba(0,216,167,0.05) 100%);
|
|
border-left: 4px solid var(--accent-green);
|
|
position: relative;
|
|
}
|
|
.card-incomplete {
|
|
background: linear-gradient(135deg, rgba(255,107,107,0.1) 0%, rgba(255,107,107,0.05) 100%);
|
|
border-left: 4px solid var(--danger);
|
|
position: relative;
|
|
}
|
|
.num-remain { color: var(--danger); font-weight: 700; }
|
|
.num-goal { color: var(--primary); font-weight: 700; }
|
|
.num-done { color: var(--accent-green); font-weight: 700; }
|
|
.flag {
|
|
position: absolute; right: 16px; top: 16px;
|
|
width: 56px; height: 56px;
|
|
background-size: contain; background-repeat: no-repeat; background-position: center;
|
|
mix-blend-mode: multiply;
|
|
}
|
|
|
|
/* 移动端适配 */
|
|
@media (max-width: 768px) {
|
|
.container { padding: 0 12px; }
|
|
.tool-tabs { flex-wrap: wrap; row-gap: 8px; }
|
|
.tab-btn { padding: 8px 12px; }
|
|
.grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; }
|
|
.card-header { flex-direction: column; align-items: flex-start; gap: 8px; }
|
|
.stat-value { font-size: 28px; }
|
|
}
|
|
@media (max-width: 480px) {
|
|
.card { padding: 16px; }
|
|
.data-table th, .data-table td { padding: 10px; }
|
|
.modal-content { width: 96%; }
|
|
}
|
|
|
|
/* 完成奖励红旗(使用本地图片) */
|
|
.card-complete::after {
|
|
content: '';
|
|
position: absolute;
|
|
right: 16px;
|
|
top: 16px;
|
|
width: 56px;
|
|
height: 56px;
|
|
background-image: url('images/qizi.png');
|
|
background-size: contain;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
mix-blend-mode: multiply;
|
|
}
|
|
.card-complete .flag { display: none; }
|