Files
JiJin/recommend_fund.css
2025-11-18 14:25:00 +08:00

712 lines
14 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* 推荐基金页面专用样式 */
/* 容器样式 */
.recommend-container {
max-width: 880px;
margin: 0 auto;
padding: 20px;
}
/* 表单样式 */
.recommend-form {
background: white;
padding: 30px;
border-radius: 12px;
margin-bottom: 30px;
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
}
.recommend-form h2 {
margin-top: 0;
margin-bottom: 25px;
color: #374151;
font-size: 1.4rem;
}
.form-group {
margin-bottom: 25px;
}
.form-group label {
display: block;
margin-bottom: 10px;
font-weight: 600;
color: #4b5563;
font-size: 1rem;
}
.form-group input {
width: 100%;
padding: 12px 16px;
border: 2px solid #e5e7eb;
border-radius: 10px;
font-size: 1rem;
transition: all 0.3s ease;
background: #f9fafb;
}
.form-group input:focus {
outline: none;
border-color: #6366f1;
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
background: white;
}
.submit-btn {
background: linear-gradient(135deg, #6366f1, #8b5cf6);
color: white;
border: none;
padding: 12px 24px;
border-radius: 10px;
font-size: 1rem;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
display: inline-flex;
align-items: center;
gap: 8px;
}
.submit-btn:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(99, 102, 241, 0.3);
}
/* 消息提示样式 */
.message {
padding: 15px 20px;
margin-bottom: 20px;
border-radius: 10px;
font-weight: 600;
transition: all 0.3s ease;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.message.success {
background: linear-gradient(135deg, #d1fae5, #06d6a0);
color: #065f46;
border: none;
}
.message.error {
background: linear-gradient(135deg, #fee2e2, #ef4444);
color: #991b1b;
border: none;
}
/* 统计显示样式 */
.stats-display {
display: flex;
justify-content: space-between;
margin-bottom: 25px;
gap: 15px;
flex-wrap: wrap;
}
.stat-item {
text-align: center;
flex: 1;
min-width: 180px;
padding: 20px 15px;
background: white;
border-radius: 12px;
margin: 0;
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.stat-item:hover {
transform: translateY(-5px);
box-shadow: 0 8px 25px rgba(0,0,0,0.12);
}
.stat-item::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 100%;
background: linear-gradient(180deg, #6366f1, #8b5cf6);
}
.stat-number {
font-size: 2.2rem;
font-weight: 700;
color: #6366f1;
margin-bottom: 8px;
display: block;
}
.stat-label {
font-size: 0.95rem;
color: #6b7280;
font-weight: 500;
}
/* 信息框样式 */
.info-box {
background: linear-gradient(135deg, #dbeafe, #3b82f6);
color: #1e40af;
padding: 20px;
border-radius: 12px;
margin-bottom: 25px;
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
}
.info-box strong {
display: block;
margin-bottom: 12px;
font-size: 1.1rem;
}
.info-box ul {
margin: 0;
padding-left: 25px;
}
.info-box li {
margin-bottom: 6px;
font-weight: 500;
}
/* 警告框样式 */
.warning-box {
background: linear-gradient(135deg, #fef3c7, #f59e0b);
color: #92400e;
padding: 20px;
border-radius: 12px;
margin-bottom: 25px;
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
}
.warning-box strong {
display: block;
margin-bottom: 12px;
font-size: 1.1rem;
}
/* 基金列表样式 */
.fund-list {
background: white;
padding: 30px;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
margin-top: 30px;
}
.fund-list h3 {
margin-top: 0;
color: #374151;
margin-bottom: 25px;
font-size: 1.3rem;
position: relative;
padding-bottom: 12px;
}
.fund-list h3::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 60px;
height: 4px;
background: linear-gradient(90deg, #6366f1, #8b5cf6);
border-radius: 2px;
}
/* 下拉框容器 */
.dropdown-container {
margin-top: 0;
}
/* 下拉框项样式 */
.dropdown-item {
margin-bottom: 16px;
border: 2px solid #e5e7eb;
border-radius: 12px;
overflow: hidden;
transition: all 0.3s ease;
background: white;
}
.dropdown-item:hover {
border-color: #d1d5db;
box-shadow: 0 4px 12px rgba(0,0,0,0.05);
}
.dropdown-item.user-ip {
border-color: #6366f1;
background-color: #f8fafc;
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.15);
}
/* 下拉框头部 */
.dropdown-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 18px 20px;
background: linear-gradient(135deg, #f8fafc, #e2e8f0);
cursor: pointer;
transition: all 0.3s ease;
position: relative;
}
.dropdown-header:hover {
background: linear-gradient(135deg, #e2e8f0, #cbd5e1);
}
.dropdown-item.user-ip .dropdown-header {
background: linear-gradient(135deg, #eff6ff, #dbeafe);
}
.dropdown-item.user-ip .dropdown-header:hover {
background: linear-gradient(135deg, #dbeafe, #bfdbfe);
}
/* 下拉框信息 */
.dropdown-info {
display: flex;
flex-wrap: wrap;
gap: 25px;
align-items: center;
}
.dropdown-info > strong {
color: #6366f1;
font-size: 1.1rem;
}
.dropdown-time,
.dropdown-count,
.dropdown-total-change {
font-size: 0.95rem;
color: #4b5563;
font-weight: 500;
}
.dropdown-time strong,
.dropdown-count strong {
color: #374151;
}
.dropdown-total-change {
font-weight: 700;
padding: 6px 12px;
border-radius: 6px;
background: #f3f4f6;
transition: all 0.3s ease;
}
.dropdown-total-change.positive {
background: #dcfce7;
color: #166534;
}
.dropdown-total-change.negative {
background: #fee2e2;
color: #991b1b;
}
/* 下拉框箭头 */
.dropdown-arrow i {
transition: transform 0.3s ease;
font-size: 1.1rem;
color: #6366f1;
}
.dropdown-item.open .dropdown-arrow i {
transform: rotate(180deg);
}
/* 下拉框内容 */
.dropdown-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
background-color: white;
}
.dropdown-item.open .dropdown-content {
max-height: 800px;
}
/* 基金详情表格 */
.fund-details-table {
width: 100%;
border-collapse: collapse;
font-size: 0.95rem;
}
.fund-details-table th,
.fund-details-table td {
padding: 15px 20px;
text-align: left;
border-bottom: 1px solid #f1f5f9;
transition: all 0.3s ease;
}
.fund-details-table th {
background: #f8fafc;
font-weight: 600;
color: #374151;
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.fund-details-table tr:hover {
background: #f8fafc;
transform: translateX(2px);
}
.fund-details-table tr:last-child td {
border-bottom: none;
}
/* 基金涨幅样式 */
.fund-change {
font-weight: 700;
padding: 4px 8px;
border-radius: 4px;
transition: all 0.3s ease;
}
.fund-change.positive {
background: #fee2e2;
color: #dc2626;
}
.fund-change.negative {
background: #dcfce7;
color: #16a34a;
}
/* 错误状态样式 */
.fund-change.error {
background: #f3f4f6;
color: #6b7280;
font-style: italic;
box-shadow: 0 2px 5px rgba(107, 114, 128, 0.1);
}
.error-text {
color: #6b7280;
font-style: italic;
font-size: 0.9em;
display: flex;
align-items: center;
gap: 5px;
}
.error-text::before {
content: '⚠️';
font-size: 1em;
}
.error-row {
background: linear-gradient(90deg, #fffbeb, #fef3c7);
border-left: 3px solid #f59e0b;
transition: all 0.3s ease;
}
.error-row:hover {
background: linear-gradient(90deg, #fef3c7, #fde68a);
transform: translateX(2px);
}
.error-icon {
color: #f59e0b;
font-weight: bold;
font-size: 1.2em;
}
/* 返回按钮样式 */
.back-btn {
display: inline-block;
margin-bottom: 25px;
color: #000000ff;
text-decoration: none;
padding: 10px 20px;
border: 2px solid #0004d3;
border-radius: 10px;
transition: all 0.3s ease;
font-weight: 600;
display: inline-flex;
align-items: center;
gap: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.back-btn:hover {
background: linear-gradient(135deg, #6366f1, #8b5cf6);
color: white;
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(99, 102, 241, 0.3);
}
/* 加载指示器样式 */
.loading-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
backdrop-filter: blur(3px);
}
.loading-spinner {
background: white;
padding: 40px;
border-radius: 15px;
text-align: center;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
animation: fadeIn 0.3s ease;
}
.loading-spinner i {
font-size: 48px;
color: #6366f1;
margin-bottom: 20px;
display: block;
animation: spin 1s linear infinite;
}
.loading-spinner span {
font-size: 18px;
font-weight: 600;
color: #495057;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes fadeIn {
from {
opacity: 0;
transform: scale(0.9);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* 改进错误显示效果 */
.error-container {
background: linear-gradient(135deg, #fee2e2, #fecaca);
border: 2px solid #ef4444;
border-radius: 12px;
padding: 20px;
margin-bottom: 25px;
box-shadow: 0 4px 15px rgba(239, 68, 68, 0.15);
position: relative;
}
.error-container::before {
content: '⚠️';
position: absolute;
top: 15px;
right: 20px;
font-size: 24px;
}
.error-container h4 {
color: #991b1b;
margin-top: 0;
margin-bottom: 10px;
font-size: 1.2rem;
display: flex;
align-items: center;
gap: 8px;
}
.error-container p {
color: #7f1d1d;
margin: 0;
font-weight: 500;
}
/* 空状态样式 */
.empty-state {
text-align: center;
padding: 60px 20px;
color: #6b7280;
background: linear-gradient(135deg, #f9fafb, #f3f4f6);
border-radius: 12px;
border: 2px dashed #d1d5db;
}
.empty-state i {
font-size: 72px;
margin-bottom: 20px;
opacity: 0.3;
color: #6366f1;
}
.empty-state h3 {
font-size: 24px;
margin-bottom: 10px;
color: #4b5563;
}
.empty-state p {
font-size: 16px;
max-width: 400px;
margin: 0 auto;
}
/* 高亮动画样式 */
.highlight {
animation: highlight 0.3s ease-in-out;
}
@keyframes highlight {
0% { background-color: transparent; }
50% { background-color: rgba(255, 255, 0, 0.3); }
100% { background-color: transparent; }
}
/* ===== UI优化追加样式覆盖同名规则 ===== */
.stat-icon {
width: 40px;
height: 40px;
border-radius: 12px;
display: inline-flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, var(--primary), var(--primary-dark));
color: #fff;
margin-bottom: 10px;
box-shadow: 0 6px 18px rgba(99, 102, 241, 0.35);
}
.dropdown-total-change.neutral {
background: #f3f4f6;
color: #374151;
}
.fund-change.neutral {
background: #f3f4f6;
color: #374151;
}
.fund-change.highlight,
.dropdown-total-change.highlight {
box-shadow: 0 0 0 6px rgba(99,102,241,0.08) inset;
}
.back-btn {
color: var(--dark);
border: 2px solid var(--primary);
}
.ip-badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 10px;
border-radius: 999px;
background: linear-gradient(135deg, var(--info), var(--primary));
color: #fff;
font-size: 0.85rem;
font-weight: 600;
}
@media (max-width: 680px) {
.fund-details-table thead { display: none; }
.fund-details-table,
.fund-details-table tbody,
.fund-details-table tr,
.fund-details-table td { display: block; width: 100%; }
.fund-details-table tr {
background: #fff;
border: 1px solid var(--border);
border-radius: 12px;
margin-bottom: 12px;
box-shadow: 0 4px 12px rgba(0,0,0,0.05);
padding: 6px 0;
}
.fund-details-table td {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 16px;
border-bottom: none;
}
.fund-details-table td:nth-child(1)::before { content: '基金代码'; color: #6b7280; font-weight: 600; margin-right: 12px; }
.fund-details-table td:nth-child(2)::before { content: '推荐时间'; color: #6b7280; font-weight: 600; margin-right: 12px; }
.fund-details-table td:nth-child(3)::before { content: '基金名称'; color: #6b7280; font-weight: 600; margin-right: 12px; }
.fund-details-table td:nth-child(4)::before { content: '当前涨幅'; color: #6b7280; font-weight: 600; margin-right: 12px; }
}
/* 排序工具条样式 */
.sort-toolbar {
display: flex;
gap: 12px;
margin-bottom: 16px;
flex-wrap: wrap;
}
.sort-btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 14px;
border-radius: 10px;
border: 2px solid var(--border);
background: #fff;
color: var(--dark);
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
}
.sort-btn .order-indicator {
font-size: 0.9rem;
color: var(--gray);
}
.sort-btn:hover {
border-color: var(--primary);
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.15);
}
.sort-btn.active {
background: linear-gradient(135deg, var(--primary), var(--primary-dark));
color: #fff;
border-color: transparent;
}
.sort-btn.active .order-indicator {
color: #fff;
}
/* 重置按钮样式 */
.sort-reset {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 14px;
border-radius: 10px;
border: 2px solid var(--border);
background: #fff;
color: var(--dark);
font-weight: 600;
cursor: pointer;
transition: all 0.2s ease;
}
.sort-reset:hover {
border-color: var(--primary);
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.15);
}