/* 财务看板页样式 — 忠于 H5 原型,87.5% 缩放 */ /* ===== 三态 ===== */ .page-loading, .page-empty { display: flex; justify-content: center; align-items: center; height: 60vh; } /* ===== 看板 Tab 导航 ===== */ .board-tabs { display: flex; background: #ffffff; border-bottom: 2rpx solid #eeeeee; position: sticky; top: 0; z-index: 20; } .board-tab { flex: 1; text-align: center; padding: 24rpx 0; font-size: 26rpx; font-weight: 500; color: #8b8b8b; position: relative; } .board-tab--active { color: #0052d9; font-weight: 600; } .board-tab--active::after { content: ''; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 42rpx; height: 5rpx; background: linear-gradient(90deg, #0052d9, #5b9cf8); border-radius: 3rpx; } /* ===== 筛选区域 ===== */ .filter-bar { background: #f3f3f3; padding: 16rpx 28rpx; position: sticky; top: 70rpx; z-index: 15; } .filter-bar-inner { display: flex; align-items: center; gap: 14rpx; background: #ffffff; border-radius: 14rpx; padding: 10rpx; border: 2rpx solid #eeeeee; } .toc-btn { width: 70rpx; height: 70rpx; background: linear-gradient(135deg, #0052d9 0%, #5b9cf8 100%); border-radius: 14rpx; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .toc-btn:active { opacity: 0.85; } .filter-item { flex: 1; min-width: 0; } .compare-switch { display: flex; align-items: center; gap: 8rpx; padding: 0 8rpx; flex-shrink: 0; } .compare-label { font-size: 24rpx; color: #8b8b8b; } .compare-toggle { width: 78rpx; height: 42rpx; background: #dcdcdc; border-radius: 22rpx; position: relative; transition: background 0.3s; } .compare-toggle--active { background: #0052d9; } .compare-toggle-dot { position: absolute; width: 36rpx; height: 36rpx; background: #ffffff; border-radius: 50%; top: 3rpx; left: 3rpx; transition: left 0.3s; box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.2); } .compare-toggle--active .compare-toggle-dot { left: 39rpx; } /* ===== 滚动内容区 ===== */ .board-content { height: calc(100vh - 70rpx - 98rpx); } /* ===== 板块卡片通用 ===== */ .card-section { margin: 0 28rpx 28rpx; background: #ffffff; border-radius: 14rpx; overflow: hidden; border: 2rpx solid #e7e7e7; } .card-section:first-child { margin-top: 28rpx; } /* 深色板块(经营一览) */ .section-dark { background: #3a3a3a; color: #ffffff; border-color: transparent; } /* ===== 板块头 - 深色 ===== */ .card-header-dark { display: flex; align-items: flex-start; gap: 22rpx; padding: 28rpx 28rpx; background: #1a1a1a; } .card-header-emoji { font-size: 32rpx; line-height: 1; flex-shrink: 0; } .card-header-text { flex: 1; } .card-header-title-dark { font-size: 28rpx; font-weight: 600; color: #ffffff; display: block; } .card-header-desc-dark { font-size: 20rpx; color: rgba(255, 255, 255, 0.5); display: block; margin-top: 6rpx; } /* ===== 板块头 - 浅色(拟物灰色渐变) ===== */ .card-header-light { display: flex; align-items: flex-start; gap: 18rpx; margin: -2rpx -2rpx 0 -2rpx; padding: 22rpx 28rpx; background: linear-gradient(to bottom, #e8e8e8, #d8d8d8); border-bottom: 2rpx solid #c8c8c8; } .card-header-title-light { font-size: 24rpx; font-weight: 600; color: #222222; display: block; } .card-header-desc-light { font-size: 20rpx; color: #666666; display: block; margin-top: 4rpx; } /* ===== 板块正文容器 ===== */ .section-body { padding: 32rpx 28rpx; } /* ===== 子标题 ===== */ .sub-section-label { display: flex; align-items: center; gap: 14rpx; padding: 0rpx 28rpx 24rpx; } /* header-dark 后第一个子标题需要顶部间距(H5 summary-content padding-top=16px) */ .card-header-dark + .sub-section-label { padding-top: 28rpx; } .sub-label-text { font-size: 22rpx; color: rgba(255, 255, 255, 0.7); font-weight: 500; } .sub-label-desc { font-size: 20rpx; color: rgba(255, 255, 255, 0.4); } /* ===== 经营一览 - 3列网格 ===== */ .overview-grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 22rpx; padding: 0 28rpx 24rpx; } .overview-cell { text-align: center; } .cell-label-row { display: flex; align-items: center; justify-content: center; gap: 4rpx; margin-bottom: 8rpx; } .cell-label-light { font-size: 22rpx; color: rgba(255, 255, 255, 0.6); } .help-icon-light { display: inline-flex; align-items: center; justify-content: center; width: 28rpx; height: 28rpx; background: rgba(255, 255, 255, 0.2); border-radius: 50%; font-size: 18rpx; color: rgba(255, 255, 255, 0.7); flex-shrink: 0; } .cell-value-white { font-size: 36rpx; font-weight: 700; color: #ffffff; display: block; } .cell-value-red { font-size: 36rpx; font-weight: 700; color: rgba(227, 77, 89, 0.85); display: block; } .cell-value-gray { font-size: 36rpx; font-weight: 700; color: #c5c5c5; display: block; } /* ===== 环比数据行 ===== */ .compare-row { display: flex; align-items: center; justify-content: center; gap: 4rpx; margin-top: 6rpx; } .compare-text-up { font-size: 22rpx; color: #e34d59; } .compare-text-down { font-size: 22rpx; color: #00a870; } .compare-text-up-sm { font-size: 22rpx; color: #e34d59; } .compare-text-down-sm { font-size: 22rpx; color: #00a870; } .compare-text-up-xs { font-size: 20rpx; color: #e34d59; } .compare-text-down-xs { font-size: 20rpx; color: #00a870; } .compare-text-flat-xs { font-size: 20rpx; color: #a6a6a6; } .compare-row-inline { display: flex; align-items: center; gap: 2rpx; } /* ===== 确认收入行 ===== */ .confirmed-row { display: flex; justify-content: space-between; align-items: center; margin: 0 28rpx 24rpx; padding: 24rpx 24rpx; background: rgba(255, 255, 255, 0.1); border-radius: 22rpx; } .confirmed-left { display: flex; align-items: center; gap: 8rpx; } .confirmed-label { font-size: 26rpx; color: rgba(255, 255, 255, 0.7); } .confirmed-right { display: flex; align-items: center; gap: 12rpx; } .confirmed-value { font-size: 36rpx; font-weight: 700; color: #f0f0f0; } .section-divider-light { height: 1rpx; background: rgba(255, 255, 255, 0.1); margin: 28rpx 28rpx 32rpx; } /* ===== 经营一览 - 2列网格 ===== */ .overview-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 22rpx; padding: 0 28rpx 30rpx; } .overview-cell-bg { text-align: center; background: rgba(255, 255, 255, 0.05); border-radius: 22rpx; padding: 24rpx 16rpx; } .cell-value-white-sm { font-size: 32rpx; font-weight: 700; color: #f0f0f0; display: block; } .cell-value-gray-sm { font-size: 32rpx; font-weight: 700; color: #c5c5c5; display: block; } /* ===== AI 洞察 ===== */ .ai-insight-section { margin: 0 -2rpx -2rpx -2rpx; padding: 28rpx 28rpx; background: #505050; border-top: 1rpx dashed rgba(255, 255, 255, 0.25); } .ai-insight-header { display: flex; align-items: center; gap: 14rpx; margin-bottom: 22rpx; } .ai-insight-icon { width: 42rpx; height: 42rpx; background: linear-gradient(135deg, #667eea, #764ba2); border-radius: 14rpx; display: flex; align-items: center; justify-content: center; font-size: 24rpx; } .ai-insight-title { font-size: 24rpx; font-weight: 500; color: rgba(255, 255, 255, 0.8); } .ai-insight-body { display: flex; flex-direction: column; gap: 14rpx; } .ai-insight-line { font-size: 24rpx; color: rgba(255, 255, 255, 0.85); line-height: 1.5; } .ai-insight-dim { color: rgba(255, 255, 255, 0.5); } /* ===== 通用表格边框容器 ===== */ .table-bordered { border: 2rpx solid #e7e7e7; border-radius: 14rpx; overflow: hidden; } /* ===== 板块小标题 ===== */ .card-section-title { font-size: 24rpx; font-weight: 600; color: #393939; margin-bottom: 16rpx; display: block; } .card-section-title-sub { font-size: 22rpx; color: #8b8b8b; font-weight: 400; } /* ===== 预收资产 - 储值卡统计 ===== */ .table-row { display: flex; justify-content: space-between; align-items: center; padding: 20rpx 28rpx; border-bottom: 2rpx solid #f3f3f3; } .table-row:last-child { border-bottom: none; } .table-row--highlight { background: #fafafa; } .table-row--footer { background: #f0f0f0; } .table-row-left { display: flex; align-items: center; gap: 8rpx; } .table-row-right { display: flex; align-items: center; gap: 12rpx; text-align: right; } .table-row-label-bold { font-size: 26rpx; font-weight: 500; color: #4b4b4b; } .table-row-value-lg { font-size: 32rpx; font-weight: 700; color: #242424; } /* 帮助图标 - 深色版 */ .help-icon-dark { display: inline-flex; align-items: center; justify-content: center; width: 28rpx; height: 28rpx; background: rgba(0, 0, 0, 0.08); border-radius: 50%; font-size: 18rpx; color: #777777; flex-shrink: 0; } .help-icon-dark-sm { display: inline-flex; align-items: center; justify-content: center; width: 24rpx; height: 24rpx; background: rgba(0, 0, 0, 0.08); border-radius: 50%; font-size: 16rpx; color: #777777; flex-shrink: 0; } /* 储值卡 3列网格行 */ .table-row-grid3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12rpx; padding: 20rpx 28rpx; background: #ffffff; border-bottom: 2rpx solid #f3f3f3; } .grid-cell { text-align: center; } .cell-label-row-sm { display: flex; align-items: center; justify-content: center; gap: 4rpx; margin-bottom: 6rpx; } .cell-label-sm { font-size: 22rpx; color: #8b8b8b; } .cell-value-sm { font-size: 26rpx; font-weight: 500; color: #4b4b4b; display: block; } /* ===== 赠送卡表格 ===== */ .gift-table-header { display: grid; grid-template-columns: 1.2fr 1fr 1fr 1fr; gap: 4rpx; padding: 14rpx 28rpx; background: #f0f0f0; } .gift-col { text-align: right; font-size: 24rpx; color: #4b4b4b; } .gift-col--name { text-align: left; font-weight: 500; } .gift-table-header .gift-col { font-weight: 500; color: #393939; } .gift-table-row { display: grid; grid-template-columns: 1.2fr 1fr 1fr 1fr; gap: 4rpx; padding: 18rpx 28rpx; border-bottom: 2rpx solid #f3f3f3; align-items: start; } .gift-table-row:last-child { border-bottom: none; background: #fafafa; } .gift-row-label { font-size: 24rpx; font-weight: 500; color: #4b4b4b; display: block; } .gift-row-total { font-size: 24rpx; font-weight: 600; color: #393939; display: block; margin-top: 4rpx; } .gift-col-val { font-size: 24rpx; color: #8b8b8b; display: block; } .gift-table-row:last-child .gift-row-label { font-weight: 600; color: #242424; } .gift-table-row:last-child .gift-row-total { font-weight: 700; color: #242424; } .gift-table-row:last-child .gift-col-val { font-weight: 700; color: #242424; } /* ===== 全类别余额合计 ===== */ .total-balance-row { display: flex; justify-content: space-between; align-items: center; margin-top: 24rpx; padding: 20rpx 28rpx; background: #f0f0f0; border-radius: 14rpx; border: 2rpx solid #e7e7e7; } .total-balance-left { display: flex; flex-direction: column; gap: 4rpx; } .total-balance-label { font-size: 26rpx; font-weight: 500; color: #4b4b4b; display: flex; align-items: center; gap: 8rpx; } .total-balance-note { font-size: 18rpx; color: #a6a6a6; } .total-balance-right { display: flex; align-items: center; gap: 12rpx; text-align: right; } .total-balance-value { font-size: 36rpx; font-weight: 700; color: #242424; } /* ===== 应计收入 - 子标题行 ===== */ .sub-title-row { display: flex; align-items: center; gap: 12rpx; margin-bottom: 16rpx; } .sub-title-text { font-size: 26rpx; font-weight: 600; color: #4b4b4b; } .sub-title-desc { font-size: 22rpx; color: #a6a6a6; } /* ===== 收入结构表格 ===== */ .rev-table-header { display: grid; grid-template-columns: 1.3fr 1fr 1fr 1fr; gap: 4rpx; padding: 14rpx 28rpx; background: #f0f0f0; } .rev-table-header .rev-col { font-size: 22rpx; color: #5e5e5e; font-weight: 500; } .rev-col { text-align: right; } .rev-col--name { text-align: left; } .rev-table-row { display: grid; grid-template-columns: 1.3fr 1fr 1fr 1fr; gap: 4rpx; padding: 18rpx 28rpx; border-bottom: 2rpx solid #f3f3f3; align-items: start; } .rev-table-row:last-child { border-bottom: none; } .rev-table-row--sub { background: rgba(255, 255, 255, 0.5); } .rev-name { font-size: 26rpx; font-weight: 600; color: #393939; } .rev-name-sub { font-size: 24rpx; color: #8b8b8b; padding-left: 24rpx; } .rev-name-desc { font-size: 20rpx; color: #a6a6a6; display: block; margin-top: 2rpx; } .rev-val { font-size: 26rpx; color: #4b4b4b; } .rev-val--bold { font-weight: 600; color: #393939; } .rev-val--red { color: rgba(227, 77, 89, 0.85); } .rev-val--muted { color: #c5c5c5; } /* ===== 损益链流程 ===== */ .flow-header { padding: 16rpx 28rpx; background: #fafafa; } .flow-header--deduct { border-top: 2rpx solid #f3f3f3; } .flow-header-title { font-size: 26rpx; font-weight: 600; color: #4b4b4b; display: block; } .flow-header-desc { font-size: 20rpx; color: #8b8b8b; display: block; margin-top: 2rpx; } .flow-detail-list { padding: 16rpx 28rpx; margin: 8rpx 28rpx; border-left: 4rpx solid #c5c5c5; } .flow-detail-item { display: flex; justify-content: space-between; align-items: center; padding: 8rpx 0; } .flow-detail-name { font-size: 24rpx; color: #5e5e5e; } .flow-detail-name-group { display: flex; flex-direction: column; } .flow-detail-name-desc { font-size: 20rpx; color: #a6a6a6; margin-top: 2rpx; } .flow-detail-right { display: flex; align-items: center; gap: 8rpx; } .flow-detail-val { font-size: 24rpx; font-weight: 500; color: #4b4b4b; } .flow-detail-val--red { color: rgba(227, 77, 89, 0.85); } .flow-total-row { display: flex; justify-content: space-between; align-items: center; padding: 20rpx 28rpx; background: #f0f0f0; } .flow-total-row--accent { background: #e8f0fe; } .flow-total-left { display: flex; flex-direction: column; } .flow-total-label { font-size: 26rpx; font-weight: 600; color: #4b4b4b; } .flow-total-desc { font-size: 20rpx; color: #8b8b8b; } .flow-total-right { display: flex; align-items: center; gap: 12rpx; } .flow-total-value { font-size: 32rpx; font-weight: 600; color: #242424; } /* ===== 现金流入 - 流水项 ===== */ .flow-group-label { font-size: 22rpx; font-weight: 500; color: #8b8b8b; display: block; margin-bottom: 8rpx; } .flow-item-list { /* 无额外样式 */ } .flow-item { display: flex; justify-content: space-between; align-items: center; padding: 16rpx 0; border-bottom: 2rpx solid #f3f3f3; } .flow-item:last-child { border-bottom: none; } .flow-item-left { display: flex; flex-direction: column; } .flow-item-name { font-size: 26rpx; font-weight: 500; color: #4b4b4b; } .flow-item-desc { font-size: 20rpx; color: #a6a6a6; margin-top: 4rpx; } .flow-item-right { display: flex; flex-direction: column; align-items: flex-end; } .flow-item-value { font-size: 28rpx; font-weight: 600; color: #242424; } /* 合计行 */ .flow-sum-row { display: flex; justify-content: space-between; align-items: center; margin-top: 16rpx; padding: 20rpx 28rpx; background: #f0f0f0; border-radius: 14rpx; border-top: 2rpx solid #e7e7e7; } .flow-sum-label { font-size: 26rpx; font-weight: 600; color: #4b4b4b; } .flow-sum-right { display: flex; align-items: center; gap: 12rpx; } .flow-sum-value { font-size: 32rpx; font-weight: 700; color: #242424; } /* ===== 现金流出 - 网格 ===== */ .expense-group-label { font-size: 26rpx; font-weight: 500; color: #4b4b4b; display: block; margin-bottom: 12rpx; margin-top: 24rpx; } .expense-group-label:first-child { margin-top: 0; } .expense-group-note { font-size: 20rpx; color: #a6a6a6; display: block; margin-top: -8rpx; margin-bottom: 12rpx; } .expense-grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12rpx; margin-bottom: 8rpx; } .expense-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12rpx; margin-bottom: 8rpx; } .expense-cell { background: #fafafa; border: 2rpx solid #e7e7e7; border-radius: 14rpx; padding: 18rpx 16rpx; text-align: center; } .expense-cell-label { font-size: 22rpx; color: #8b8b8b; display: block; margin-bottom: 6rpx; } .expense-cell-value { font-size: 28rpx; font-weight: 600; color: #242424; display: block; } /* ===== 助教分析表格 ===== */ .coach-fin-header { display: grid; grid-template-columns: 1fr 1.2fr 1.2fr 1fr; gap: 4rpx; padding: 14rpx 24rpx; background: #f0f0f0; } .coach-fin-header .coach-fin-col { font-size: 22rpx; color: #5e5e5e; font-weight: 500; } .coach-fin-col { text-align: right; } .coach-fin-col--name { text-align: left; font-size: 24rpx; color: #5e5e5e; } .coach-fin-row { display: grid; grid-template-columns: 1fr 1.2fr 1.2fr 1fr; gap: 4rpx; padding: 16rpx 24rpx; border-bottom: 2rpx solid #f3f3f3; align-items: start; } .coach-fin-row:last-child { border-bottom: none; } .coach-fin-row--total { background: #fafafa; border-bottom: 2rpx solid #e7e7e7; } .coach-fin-bold { font-size: 26rpx; font-weight: 600; color: #242424; display: block; } .coach-fin-val { font-size: 26rpx; color: #5e5e5e; display: block; } .coach-fin-val-sm { font-size: 24rpx; color: #8b8b8b; display: block; } /* ===== 目录导航 ===== */ .toc-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.3); z-index: 1000; } .toc-panel { position: fixed; top: 200rpx; left: 32rpx; right: 32rpx; background: #ffffff; border-radius: 24rpx; box-shadow: 0 16rpx 64rpx rgba(0, 0, 0, 0.15); z-index: 1001; overflow: hidden; transform: scale(0.9); opacity: 0; pointer-events: none; transition: all 0.25s ease-out; } .toc-panel--show { transform: scale(1); opacity: 1; pointer-events: auto; } .toc-header { background: linear-gradient(135deg, #f8faff 0%, #ecf2fe 100%); padding: 24rpx 28rpx; border-bottom: 2rpx solid #e7e7e7; } .toc-header-text { font-size: 28rpx; font-weight: 600; color: #393939; } .toc-list { padding: 12rpx 0; } .toc-item { display: flex; align-items: center; gap: 20rpx; padding: 20rpx 28rpx; } .toc-item:active { background: #f8faff; } .toc-item--active { background: #ecf2fe; } .toc-item-emoji { font-size: 32rpx; flex-shrink: 0; } .toc-item-text { font-size: 26rpx; color: #4b4b4b; } .toc-item--active .toc-item-text { color: #0052d9; font-weight: 500; } /* ===== 指标说明弹窗 ===== */ .tip-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.3); z-index: 1999; } .tip-toast { position: fixed; bottom: 200rpx; left: 32rpx; right: 32rpx; background: #ffffff; border-radius: 24rpx; padding: 28rpx; box-shadow: 0 16rpx 64rpx rgba(0, 0, 0, 0.25); z-index: 2000; transform: translateY(120%); opacity: 0; transition: all 0.3s ease; } .tip-toast--show { transform: translateY(0); opacity: 1; } .tip-toast-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16rpx; } .tip-toast-title { font-size: 30rpx; font-weight: 600; color: #242424; } .tip-toast-close { padding: 8rpx; } .tip-toast-content { font-size: 24rpx; color: #4b4b4b; line-height: 1.6; white-space: pre-wrap; } /* ===== 底部安全区 ===== */ .safe-bottom { height: 200rpx; padding-bottom: env(safe-area-inset-bottom); }