/** * more.vue — Daily Care · Stitch Modern WeChat UI (code.html) */ .more-page { /* 与 code.html .ambient-shadow (0 20px 30px -10px) 1:1 */ --mc-shadow-ambient: 0 40rpx 60rpx -20rpx rgba(0, 108, 73, 0.08); min-height: 100vh; background: var(--surface); color: var(--on-surface); padding-bottom: calc(48rpx + env(safe-area-inset-bottom)); } /* ===== 浇水特效(对应 code.html @keyframes fall / pulse-growth / shimmer / float-up-fade / fall-arrow) ===== */ .more-page .mc-rain { position: absolute; inset: 0; pointer-events: none; z-index: 4; } .more-page .mc-droplet { position: absolute; top: 0; width: 8rpx; height: 20rpx; background: #3b82f6; border-radius: 50%; animation: mc-fall 0.6s linear infinite; } @keyframes mc-fall { 0% { transform: translateY(-40rpx); opacity: 0; } 50% { opacity: 1; } 100% { transform: translateY(80rpx); opacity: 0; } } .more-page .mc-sparkle { position: absolute; font-size: 28rpx; pointer-events: none; z-index: 5; color: #4edea3; animation: mc-shimmer 1s ease-out forwards; } @keyframes mc-shimmer { 0% { opacity: 0; transform: scale(0) rotate(0deg); } 50% { opacity: 1; transform: scale(1.2) rotate(180deg); } 100% { opacity: 0; transform: scale(0) rotate(360deg); } } .more-page .mc-sugar-decrease-float { position: absolute; left: 50%; top: 8%; transform: translateX(-50%); color: #10b981; font-weight: 800; font-size: 48rpx; line-height: 1.2; pointer-events: none; z-index: 12; text-shadow: 0 8rpx 24rpx rgba(16, 185, 129, 0.3); animation: mc-float-up-fade-local 2s ease-out forwards; } @keyframes mc-float-up-fade-local { 0% { transform: translate(-50%, 40rpx); opacity: 0; } 20% { opacity: 1; } 80% { opacity: 1; } 100% { transform: translate(-50%, -200rpx); opacity: 0; } } .more-page .mc-sugar-particles { position: fixed; inset: 0; pointer-events: none; z-index: 90; overflow: hidden; } .more-page .mc-sugar-particle { position: absolute; top: 0; color: var(--primary-container); font-weight: 700; line-height: 1; animation: mc-fall-arrow 1.5s linear forwards; } .more-page .mc-sugar-particle.is-south { font-weight: 400; } @keyframes mc-fall-arrow { 0% { transform: translateY(-50vh) scale(0.5); opacity: 0; } 50% { opacity: 0.8; } 100% { transform: translateY(110vh) scale(1.2); opacity: 0; } } /* ===== Fixed green header ===== */ .more-page .mc-header { position: fixed; left: 0; right: 0; top: 0; z-index: 40; display: flex; align-items: flex-end; box-sizing: border-box; background: var(--primary); border-radius: 0 0 48rpx 48rpx; overflow: hidden; } .more-page .mc-header-inner { display: flex; align-items: center; justify-content: space-between; gap: 16rpx; width: 100%; padding: 0 var(--st-container-margin) 48rpx; box-sizing: border-box; } .more-page .mc-header-left { display: flex; align-items: center; gap: var(--st-inline-gap); flex: 1; min-width: 0; overflow: hidden; } .more-page .mc-header-back { width: 80rpx; height: 80rpx; border-radius: 50%; background: rgba(255, 255, 255, 0.12); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .more-page .mc-header-back:active { opacity: 0.85; transform: scale(0.98); } .more-page .mc-avatar { width: 80rpx; height: 80rpx; border-radius: 50%; border: 4rpx solid var(--on-primary); background: rgba(255, 255, 255, 0.15); display: flex; align-items: center; justify-content: center; flex-shrink: 0; overflow: hidden; } .more-page .mc-header-text { flex: 1; min-width: 0; overflow: hidden; } .more-page .mc-header-title { display: block; max-width: 100%; font-size: 36rpx; font-weight: 700; line-height: 1.25; color: var(--on-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .more-page .mc-header-name { display: block; margin-top: 4rpx; font-size: 28rpx; font-weight: 500; color: rgba(255, 255, 255, 0.85); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .more-page .mc-header-actions { display: flex; align-items: center; gap: 12rpx; flex-shrink: 0; margin-left: 8rpx; } .more-page .mc-header-pill { display: inline-flex; align-items: center; gap: 8rpx; padding: 12rpx 24rpx; border-radius: 999rpx; background: rgba(255, 255, 255, 0.12); color: var(--on-primary); font-size: 24rpx; font-weight: 600; line-height: 1; flex-shrink: 0; white-space: nowrap; } .more-page .mc-header-pill:active, .more-page .mc-header-icon-btn:active { opacity: 0.85; transform: scale(0.98); } .more-page .mc-header-icon-btn { width: 80rpx; height: 80rpx; border-radius: 50%; background: rgba(255, 255, 255, 0.12); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } /* ===== Main scroll area ===== */ .more-page .mc-main { padding-left: var(--st-container-margin); padding-right: var(--st-container-margin); display: flex; flex-direction: column; gap: 48rpx; } /* Range toggle */ .more-page .mc-range-toggle { display: flex; padding: 8rpx; border-radius: 999rpx; background: var(--surface-container-high); } .more-page .mc-range-opt { flex: 1; text-align: center; padding: 16rpx 0; border-radius: 999rpx; font-size: 24rpx; font-weight: 700; color: var(--on-surface-variant); transition: all 0.2s ease; } .more-page .mc-range-opt.active { background: var(--primary); color: var(--on-primary); box-shadow: 0 8rpx 16rpx rgba(0, 108, 73, 0.2); } /* Card base */ .more-page .mc-card { background: var(--surface-container-lowest); border-radius: var(--st-radius-2xl); padding: var(--st-card-padding); box-shadow: var(--mc-shadow-ambient); } .more-page .mc-card-head { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 32rpx; } .more-page .mc-card-title { display: block; font-size: 40rpx; font-weight: 700; color: var(--on-surface); } .more-page .mc-card-sub { display: block; margin-top: 4rpx; font-size: 28rpx; color: var(--outline); } /* Calendar — 与 code.html 同一 7 列 grid(星期 + 日期) */ .more-page .mc-cal-grid--full { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8rpx; text-align: center; margin-bottom: 32rpx; } .more-page .mc-cal-weekday { font-size: 24rpx; font-weight: 600; color: var(--outline); padding: 8rpx 0; } .more-page .mc-cal-weekday.is-weekend { color: var(--tertiary); } .more-page .mc-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8rpx; text-align: center; margin-bottom: 32rpx; } .more-page .mc-cal-cell { position: relative; padding: 16rpx 0; border-radius: var(--st-radius-lg); font-size: 28rpx; color: var(--on-surface); } .more-page .mc-cal-cell.off { color: rgba(108, 122, 113, 0.3); } .more-page .mc-cal-cell.future-off { color: rgba(108, 122, 113, 0.4); } .more-page .mc-cal-cell.in-range { color: var(--on-surface); } .more-page .mc-cal-cell.recorded { background: rgba(16, 185, 129, 0.12); color: var(--primary); font-weight: 700; } .more-page .mc-cal-cell.recorded-high { background: rgba(186, 26, 26, 0.12); color: var(--error); font-weight: 700; } .more-page .mc-cal-cell.today-empty { background: var(--tertiary-container); color: var(--on-tertiary); font-weight: 700; } .more-page .mc-cal-dot { position: absolute; bottom: 8rpx; left: 50%; transform: translateX(-50%); width: 8rpx; height: 8rpx; border-radius: 50%; background: var(--primary); } .more-page .mc-cal-dot.is-high { background: var(--error); } .more-page .mc-cal-foot { display: flex; align-items: center; justify-content: space-between; padding-top: 32rpx; border-top: 1rpx solid rgba(187, 202, 191, 0.3); } .more-page .mc-cal-foot-text { font-size: 28rpx; color: var(--outline); } .more-page .mc-cal-foot-btn { padding: 24rpx 48rpx; border-radius: 32rpx; background: var(--primary); color: var(--on-primary); font-size: 24rpx; font-weight: 700; } .more-page .mc-cal-foot-btn:active { opacity: 0.9; transform: scale(0.98); } /* Blood records */ .more-page .mc-blood-section { display: flex; flex-direction: column; gap: 32rpx; } .more-page .mc-section-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0; } .more-page .mc-blood-list { display: flex; flex-direction: column; gap: 32rpx; } .more-page .mc-section-count { font-size: 28rpx; color: var(--outline); } .more-page .mc-day-card { margin-bottom: 0; } .more-page .mc-day-card:last-child { margin-bottom: 0; } .more-page .mc-day-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 32rpx; } .more-page .mc-day-date { font-size: 40rpx; font-weight: 700; color: var(--on-surface); } .more-page .mc-day-weekday { font-size: 28rpx; color: var(--outline); } .more-page .mc-metric-stack { display: flex; flex-direction: column; gap: 16rpx; } .more-page .mc-metric-row { display: flex; align-items: center; justify-content: space-between; padding: 32rpx; margin-bottom: 0; border-radius: 32rpx; background: rgba(244, 251, 244, 0.55); border: 1rpx solid rgba(187, 202, 191, 0.2); } .more-page .mc-metric-row.is-abnormal-high { background: rgba(255, 218, 214, 0.22); border-color: rgba(186, 26, 26, 0.22); } .more-page .mc-metric-row.is-abnormal-low { background: rgba(219, 234, 254, 0.35); border-color: rgba(37, 99, 235, 0.22); } .more-page .mc-metric-row:last-child { margin-bottom: 0; } .more-page .mc-metric-label { font-size: 28rpx; color: var(--outline); } .more-page .mc-metric-value-wrap { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 8rpx 12rpx; text-align: right; } .more-page .mc-metric-badge { padding: 4rpx 12rpx; border-radius: 999rpx; font-size: 20rpx; font-weight: 700; line-height: 1.2; } .more-page .mc-metric-badge.is-high { color: var(--error); background: rgba(186, 26, 26, 0.12); } .more-page .mc-metric-badge.is-low { color: #1d4ed8; background: rgba(37, 99, 235, 0.12); } .more-page .mc-metric-value { font-size: 48rpx; font-weight: 800; color: var(--on-surface); } .more-page .mc-metric-value.is-high { color: var(--error); } .more-page .mc-metric-value.is-low { color: #1d4ed8; } .more-page .mc-metric-empty { text-align: right; } .more-page .mc-metric-empty-val { font-size: 40rpx; font-weight: 700; color: var(--outline-variant); } .more-page .mc-metric-empty-unit { font-size: 24rpx; font-weight: 600; color: var(--outline); } .more-page .mc-metric-value.is-empty { font-size: 40rpx; font-weight: 700; color: var(--outline-variant); } .more-page .mc-metric-unit { margin-left: 8rpx; font-size: 24rpx; font-weight: 600; color: var(--outline); } .more-page .mc-state-card { padding: 64rpx 32rpx; text-align: center; font-size: 28rpx; color: var(--outline); } /* Paradise */ .more-page .mc-paradise-card { overflow: hidden; position: relative; } .more-page .mc-paradise-head { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 48rpx; } .more-page .mc-points-badge { padding: 8rpx 24rpx; border-radius: var(--st-radius-xl); background: rgba(0, 108, 73, 0.1); text-align: center; flex-shrink: 0; } .more-page .mc-points-num { display: block; font-size: 48rpx; font-weight: 800; color: var(--primary); line-height: 1.1; } .more-page .mc-points-label { display: block; font-size: 20rpx; font-weight: 700; color: rgba(0, 108, 73, 0.7); } .more-page .mc-quick-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16rpx; margin-bottom: 64rpx; } .more-page .mc-quick-item { display: flex; flex-direction: column; align-items: center; gap: 8rpx; padding: 24rpx 12rpx; border-radius: 32rpx; background: var(--surface-container-low); } .more-page .mc-quick-item:active { transform: scale(0.98); opacity: 0.9; } .more-page .mc-quick-label { font-size: 24rpx; font-weight: 600; color: var(--on-surface); } .more-page .mc-tasks-title { font-size: 24rpx; font-weight: 700; color: var(--on-surface); margin-bottom: 16rpx; display: block; } .more-page .mc-tasks-section { margin-top: 40rpx; } .more-page .mc-tasks-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12rpx; margin-bottom: 0; } .more-page .mc-task-block { display: flex; flex-direction: column; gap: 8rpx; padding: 16rpx 12rpx; border-radius: 24rpx; background: var(--surface-container-low); border: 1rpx solid rgba(0, 108, 73, 0.08); } .more-page .mc-task-block:active { transform: scale(0.98); opacity: 0.92; } .more-page .mc-task-block.is-done { border-color: rgba(0, 108, 73, 0.18); } .more-page .mc-task-block-top { display: flex; align-items: center; justify-content: space-between; } .more-page .mc-task-block .mc-task-check { width: 32rpx; height: 32rpx; border-width: 3rpx; } .more-page .mc-task-block .mc-task-dot { width: 12rpx; height: 12rpx; } .more-page .mc-task-block-points { font-size: 20rpx; font-weight: 700; color: var(--primary); } .more-page .mc-task-block-body { display: flex; flex-direction: column; align-items: center; gap: 6rpx; padding: 4rpx 0; } .more-page .mc-task-block-name { font-size: 24rpx; font-weight: 600; color: var(--on-surface); text-align: center; line-height: 1.2; } .more-page .mc-task-block-status { align-self: center; font-size: 20rpx; font-weight: 700; font-style: italic; color: var(--outline); line-height: 1.2; } .more-page .mc-task-block-action { align-self: center; padding: 4rpx 20rpx; border-radius: 999rpx; background: var(--on-surface); color: var(--surface); font-size: 20rpx; font-weight: 700; line-height: 1.3; } .more-page .mc-task-block-action.is-water { background: var(--primary); color: var(--on-primary); } .more-page .mc-tasks-list { display: flex; flex-direction: column; gap: 24rpx; } .more-page .mc-task-row { display: flex; align-items: center; justify-content: space-between; } .more-page .mc-task-left { display: flex; align-items: center; gap: 24rpx; flex: 1; min-width: 0; } .more-page .mc-task-check { width: 40rpx; height: 40rpx; line-height: 40rpx; border-radius: 50%; border: 4rpx solid var(--primary); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .more-page .mc-task-check.pending { border-color: rgba(187, 202, 191, 0.3); } .more-page .mc-task-dot { width: 16rpx; height: 16rpx; border-radius: 50%; background: var(--outline-variant); } .more-page .mc-task-name { font-size: 28rpx; color: var(--on-surface); } .more-page .mc-task-right { display: flex; align-items: center; gap: 24rpx; flex-shrink: 0; } .more-page .mc-task-points { font-size: 24rpx; font-weight: 700; color: var(--primary); } .more-page .mc-task-done { font-size: 24rpx; font-weight: 700; font-style: italic; color: var(--outline); } .more-page .mc-task-btn { padding: 8rpx 32rpx; border-radius: 999rpx; background: var(--on-surface); color: var(--surface); font-size: 24rpx; font-weight: 700; line-height: 1.4; } .more-page .mc-tree-zone { margin-top: 0; padding: 35rpx; border-radius: var(--st-radius-2xl); background: linear-gradient(135deg, rgba(0, 108, 73, 0.05) 0%, rgba(0, 108, 73, 0.2) 100%); border: 1rpx solid rgba(0, 108, 73, 0.1); position: relative; overflow: visible; } .more-page .mc-tree-level-head { display: flex; align-items: flex-end; justify-content: space-between; margin-bottom: 48rpx; } .more-page .mc-tree-level-row { display: flex; align-items: center; gap: 16rpx; } .more-page .mc-tree-lv-badge { padding: 4rpx 16rpx; border-radius: 999rpx; background: var(--primary); color: var(--on-primary); font-size: 20rpx; font-weight: 800; } .more-page .mc-tree-stage-name { font-size: 32rpx; font-weight: 800; color: var(--primary); } .more-page .mc-tree-xp-hint { display: block; margin-top: 8rpx; font-size: 22rpx; color: rgba(0, 108, 73, 0.6); } .more-page .mc-tree-xp-bold { font-weight: 700; color: rgba(0, 108, 73, 0.85); } .more-page .mc-tree-xp-text { font-size: 24rpx; font-weight: 700; color: var(--primary); } .more-page .mc-tree-progress-track { width: 100%; height: 20rpx; border-radius: 999rpx; background: rgba(255, 255, 255, 0.5); border: 1rpx solid rgba(255, 255, 255, 0.2); overflow: hidden; margin-bottom: 64rpx; } .more-page .mc-tree-progress-bar { height: 100%; border-radius: 999rpx; background: linear-gradient(90deg, var(--primary) 0%, var(--primary-container) 100%); transition: width 0.5s ease; } .more-page .mc-tree-display { position: relative; display: flex; align-items: center; justify-content: center; min-height: 200rpx; padding: 64rpx 0; margin-bottom: 48rpx; overflow: visible; } .more-page .mc-tree-display-bg { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; opacity: 0.1; font-size: 240rpx; line-height: 1; pointer-events: none; } .more-page .mc-tree-emoji-wrap { position: relative; z-index: 2; transition: transform 0.3s ease; } .more-page .mc-tree-emoji-wrap.is-watering { animation: mc-growth-pulse 0.8s ease-out; } .more-page .mc-tree-emoji { font-size: 144rpx; line-height: 1; filter: drop-shadow(0 16rpx 32rpx rgba(0, 0, 0, 0.2)); } /* 对应 code.html pulse-growth:放大 + 绿色光晕 */ @keyframes mc-growth-pulse { 0% { transform: scale(1); filter: drop-shadow(0 0 0 rgba(78, 222, 163, 0)); } 50% { transform: scale(1.15); filter: drop-shadow(0 0 30rpx rgba(78, 222, 163, 0.6)); } 100% { transform: scale(1); filter: drop-shadow(0 0 0 rgba(78, 222, 163, 0)); } } .more-page .mc-tree-graphic { position: relative; z-index: 2; } .more-page .mc-float-reward { position: absolute; top: 20%; left: 50%; transform: translateX(-50%); font-size: 32rpx; font-weight: 800; color: var(--primary); z-index: 5; animation: mc-float-up 1.2s ease-out forwards; } @keyframes mc-float-up { 0% { opacity: 0; transform: translate(-50%, 20rpx); } 30% { opacity: 1; } 100% { opacity: 0; transform: translate(-50%, -80rpx); } } .more-page .mc-water-btn { width: 100%; padding: 32rpx 0; display: flex; align-items: center; justify-content: center; gap: 24rpx; border-radius: 32rpx; background: var(--primary); color: var(--on-primary); font-size: 32rpx; font-weight: 700; line-height: 1.2; box-shadow: 0 16rpx 32rpx rgba(0, 108, 73, 0.25); border: none; } .more-page .mc-water-btn.disabled { opacity: 0.5; } .more-page .mc-water-btn:active { transform: scale(0.96); background: var(--primary-container); } .more-page .mc-water-btn:active .tj-icon-wrap { transform: rotate(-12deg); } .more-page .mc-water-action { position: relative; z-index: 6; } .more-page .mc-water-btn.pulse { animation: mc-water-pulse 2s ease-in-out infinite; } @keyframes mc-water-pulse { 0%, 100% { box-shadow: 0 16rpx 32rpx rgba(0, 108, 73, 0.25); } 50% { box-shadow: 0 16rpx 48rpx rgba(0, 108, 73, 0.45); } } .more-page .mc-water-hint { display: block; margin-top: 24rpx; text-align: center; font-size: 22rpx; font-style: italic; color: var(--outline); } /* Social / encourage / cards */ .more-page .mc-social-card { display: flex; align-items: center; justify-content: space-between; gap: 24rpx; } .more-page .mc-social-left { display: flex; align-items: center; gap: 24rpx; flex: 1; min-width: 0; } .more-page .mc-social-icon { width: 80rpx; height: 80rpx; border-radius: 32rpx; background: rgba(252, 124, 120, 0.2); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .more-page .mc-social-title { display: block; font-size: 28rpx; font-weight: 700; color: var(--on-surface); } .more-page .mc-social-sub { display: block; margin-top: 4rpx; font-size: 24rpx; color: var(--outline); } .more-page .mc-encourage { display: flex; align-items: flex-start; gap: 24rpx; padding: 0 8rpx; } .more-page .mc-encourage-icon-wrap { width: 40rpx; height: 40rpx; display: flex; align-items: center; justify-content: center; flex-shrink: 0; margin-top: 4rpx; } .more-page .mc-encourage-icon { font-size: 40rpx; line-height: 1; color: var(--primary-container); } .more-page .mc-encourage-body { flex: 1; min-width: 0; } .more-page .mc-encourage-text { font-size: 28rpx; line-height: 1.5; color: var(--on-surface); } .more-page .mc-encourage-highlight { color: var(--primary); font-weight: 700; } .more-page .mc-encourage-tip { display: block; margin-top: 8rpx; font-size: 24rpx; color: var(--outline); } .more-page .mc-card-scroll { margin: 0 calc(-1 * var(--st-container-margin)); padding: 0 var(--st-container-margin) 8rpx; white-space: nowrap; } .more-page .mc-card-row { display: inline-flex; gap: 24rpx; } .more-page .mc-card-chip { display: inline-flex; align-items: center; gap: 8rpx; padding: 16rpx 24rpx; border-radius: var(--st-radius-xl); background: var(--surface-container-lowest); border: 1rpx solid rgba(187, 202, 191, 0.2); box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.04); font-size: 24rpx; font-weight: 700; color: var(--on-surface-variant); } .more-page .mc-card-chip-count-only { background: var(--surface-container-lowest); border: 1rpx solid rgba(187, 202, 191, 0.2); box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.04); color: var(--on-surface); } .more-page .mc-card-chip-num { font-weight: 800; color: var(--on-surface); } .more-page .mc-card-chip.active { background: var(--primary); color: var(--on-primary); border-color: var(--primary); box-shadow: 0 8rpx 20rpx rgba(0, 108, 73, 0.25); } .more-page .mc-card-chip-meta { font-size: 20rpx; font-weight: 600; padding: 2rpx 8rpx; border-radius: 8rpx; background: rgba(255, 255, 255, 0.2); } .more-page .mc-card-chip:not(.active) .mc-card-chip-meta { background: transparent; color: var(--outline); } .more-page .mc-card-chip-count { color: var(--outline); font-weight: 600; } .more-page .mc-card-chip:not(.active):not(.mc-card-chip-count-only) { background: var(--surface-container-high); border: 1rpx solid rgba(187, 202, 191, 0.3); color: var(--on-surface-variant); } .more-page .mc-footer-tip { margin-top: 64rpx; text-align: center; padding: 0 var(--st-container-margin) 96rpx; font-size: 22rpx; color: rgba(108, 122, 113, 0.6); }