div{background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:12px 0;text-align:center;box-shadow:var(--shadow-card)} .ho-num{font-size:20px;font-weight:800;color:var(--accent)} .ho-label{font-size:11px;color:var(--text-muted);margin-top:2px} .quick-actions{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px} .qa-btn{background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:14px 4px;display:flex;flex-direction:column;align-items:center;gap:5px;cursor:pointer;font-family:inherit;font-size:12px;font-weight:600;color:var(--text-secondary);box-shadow:var(--shadow-card);transition:all .2s} .qa-btn:hover{transform:translateY(-2px);box-shadow:var(--shadow-hover)} .qa-ico{font-size:18px} .home-task{position:relative;display:flex;align-items:center;gap:12px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:13px 15px;margin-bottom:10px;box-shadow:var(--shadow-card);cursor:pointer;transition:transform .12s} .home-task:active{transform:scale(.99)} .ht-main{flex:1;min-width:0} .ht-name{font-size:14px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .ht-sub{display:flex;align-items:center;gap:6px;margin-top:4px} .ht-streak{font-size:10px;font-weight:600;color:var(--xp-gold);display:inline-flex;align-items:center;gap:3px} .flame-ico{vertical-align:middle;flex-shrink:0} /* 难度控件(仅详情弹窗和新建弹窗使用) */ .diff-ctrl{display:inline-flex;align-items:center;gap:4px;background:var(--bg-page);border-radius:var(--radius-pill);padding:1px 5px} .diff-btn{width:20px;height:20px;border:none;background:var(--accent);color:#fff;border-radius:50%;font-size:13px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;font-family:inherit;transition:all .15s;flex-shrink:0} .diff-btn:hover{background:var(--accent-light)} .diff-val{font-size:10px;font-weight:700;color:var(--text-secondary);min-width:32px;text-align:center} .ht-check{width:26px;height:26px;border-radius:50%;border:2px solid var(--border-color);display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:700;flex-shrink:0;transition:all .2s} .ht-check.on{background:var(--accent);border-color:var(--accent)} .ht-del{width:26px;height:26px;border:none;background:transparent;color:var(--text-muted);font-size:20px;line-height:1;cursor:pointer;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-left:2px;transition:all .15s} .ht-del:hover{background:rgba(201,123,123,.12);color:var(--prio-red)} @keyframes taskShake{0%{transform:translateX(0)}15%{transform:translateX(-6px)}30%{transform:translateX(6px)}45%{transform:translateX(-4px)}60%{transform:translateX(4px)}75%{transform:translateX(-2px)}100%{transform:translateX(0)}} @keyframes taskGlow{0%{box-shadow:0 0 0 0 rgba(45,155,138,0)}40%{box-shadow:0 0 0 2px var(--accent),0 0 24px 6px rgba(45,155,138,.6)}100%{box-shadow:0 0 0 0 rgba(45,155,138,0)}} .home-task.just-done{animation:taskShake .5s ease, taskGlow .7s ease;border-color:var(--accent)} .home-task.dragging{opacity:.4;transform:scale(.98);box-shadow:none} .home-task.drag-over{border-color:var(--accent);border-style:dashed;background:var(--accent-bg)} .ht-spark{position:absolute;right:46px;top:50%;width:9px;height:9px;margin:-4.5px 0 0 -4.5px;border-radius:50%;background:var(--accent);opacity:0;pointer-events:none} .home-task.just-done .ht-spark{animation:spark .7s ease} /* 日记新条目震动 */ @keyframes diaryShake{0%{transform:translateX(0)}15%{transform:translateX(-6px)}30%{transform:translateX(6px)}45%{transform:translateX(-4px)}60%{transform:translateX(4px)}75%{transform:translateX(-2px)}100%{transform:translateX(0)}} .diary-entry.just-added{animation:diaryShake .5s ease} @keyframes spark{0%{opacity:0;box-shadow:0 0 0 0 rgba(45,155,138,0)}25%{opacity:1;box-shadow:0 0 18px 7px var(--accent)}100%{opacity:0;box-shadow:0 0 0 0 rgba(45,155,138,0)}} /* 统计页日历区 */ .cal-section{background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:14px 14px 12px;box-shadow:var(--shadow-card);margin-bottom:14px} .cal-tab-bar{display:flex;gap:6px;margin:8px 0 12px} .cal-tab-btn{flex:1;background:var(--bg-page);border:1px solid var(--border-color);color:var(--text-secondary);padding:7px 0;border-radius:var(--radius-pill);font-size:13px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .2s} .cal-tab-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)} /* 首页分类分组 */ .task-group{margin-bottom:14px} .task-group-title{font-size:13px;font-weight:800;color:var(--text-secondary);margin:2px 2px 8px;display:flex;align-items:center;gap:5px} /* 统计页日历紧凑化 */ .cal-section{padding:12px 12px 10px} .cal-section .heatmap-grid{gap:3px} .cal-section .hm-cell{border-radius:4px} .cal-section .hm-date-num{font-size:8px} .cal-section .hm-dot-row{margin-top:5px;gap:2px} .cal-section .week-row{gap:3px} .cal-section .day-circle{width:30px;height:30px;font-size:11px} .cal-section .day-label{font-size:9px} .cal-section .week-dots{gap:2px} .cal-section .day-col{gap:3px} /* 完成提示 toast */ .toast{position:fixed;left:50%;bottom:98px;transform:translateX(-50%) translateY(20px);background:var(--accent);color:#fff;padding:11px 18px;border-radius:var(--radius-pill);font-size:13px;font-weight:700;box-shadow:0 6px 22px rgba(45,155,138,0.35);opacity:0;pointer-events:none;transition:all .3s;z-index:400;display:flex;align-items:center;gap:8px;white-space:nowrap} .toast.show{opacity:1;transform:translateX(-50%) translateY(0)} .toast .t-ico{font-size:15px} .toast .t-xp{background:rgba(255,255,255,.22);padding:2px 10px;border-radius:var(--radius-pill);font-size:12px;font-weight:800} /* 通用弹窗(替代原生 alert/confirm) */ .gen-dialog{max-width:300px} .gen-ico{font-size:28px;background:linear-gradient(135deg,#f59e0b,#f97316)} .gen-reward{display:inline-flex;align-items:center;gap:5px;background:var(--xp-bg);padding:5px 14px;border-radius:var(--radius-pill);font-size:13px;font-weight:800;color:var(--xp-gold);margin-bottom:18px} /* 轻量自动弹窗(成功/奖励反馈,自动消失) */ .popup{position:fixed;left:50%;top:40%;transform:translate(-50%,-50%) translateY(16px) scale(.92);background:#fff;border-radius:24px;padding:22px 30px;text-align:center;box-shadow:0 18px 54px rgba(0,0,0,.24);z-index:500;opacity:0;pointer-events:none;transition:all .3s cubic-bezier(.34,1.56,.64,1);min-width:150px;max-width:78vw} .popup.show{opacity:1;transform:translate(-50%,-50%) translateY(0) scale(1)} .popup-ico{font-size:42px;margin-bottom:8px;line-height:1} .popup-title{font-size:17px;font-weight:800;color:var(--text-primary);margin-bottom:3px} .popup-sub{font-size:13px;color:var(--text-secondary);font-weight:600} /* 任务详情 */ .detail-card{position:relative;background:var(--bg-card);border-radius:var(--radius-lg);width:344px;max-width:92vw;max-height:84vh;overflow-y:auto;padding:18px 16px 20px;box-shadow:0 20px 50px rgba(0,0,0,.18)} .detail-close{position:absolute;top:12px;right:14px;width:28px;height:28px;border:none;background:var(--bg-page);border-radius:50%;color:var(--text-muted);font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-family:inherit} .detail-close:hover{background:var(--accent-bg);color:var(--accent)} .detail-head{display:flex;align-items:center;gap:10px;margin-bottom:6px;padding-right:28px} .detail-hicon{width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:19px;flex-shrink:0} .detail-hname{font-size:16px;font-weight:800} .detail-tags{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:8px 0 14px} .detail-metrics{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:14px} .dm-card{background:var(--bg-page);border-radius:var(--radius-md);padding:11px 6px;text-align:center} .dm-num{font-size:19px;font-weight:800;color:var(--accent)} .dm-label{font-size:10px;color:var(--text-muted);margin-top:2px} .detail-seg{display:flex;background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-pill);padding:4px;margin-bottom:12px} .detail-seg button{flex:1;border:none;background:transparent;color:var(--text-muted);padding:8px 0;border-radius:var(--radius-pill);font-size:13px;font-weight:600;cursor:pointer;font-family:inherit;transition:all .2s} .detail-seg button.active{background:var(--accent);color:#fff} .detail-table{width:100%;border-collapse:collapse;font-size:12px} .detail-table th{padding:6px 4px;color:var(--text-muted);font-weight:600;border-bottom:1px solid var(--border-color)} .detail-table td{padding:7px 4px;text-align:center;border-bottom:1px solid var(--border-color)} .detail-rate{display:inline-flex;align-items:center;gap:6px;justify-content:center} .detail-rate-bar{width:42px;height:6px;border-radius:3px;background:var(--border-color);overflow:hidden} .detail-rate-fill{height:100%;background:var(--accent);border-radius:3px} .detail-done{color:var(--accent);font-weight:700} .detail-undue{color:var(--text-muted)} /* ===== 详情格子热力图 ===== */ .detail-grid{display:flex;flex-wrap:wrap;gap:6px;padding:4px 0} .detail-grid-week{gap:5px} .detail-grid-month{gap:8px} .dg-cell{ display:flex;flex-direction:column;align-items:center;justify-content:center; border-radius:10px;font-size:11px;font-weight:600; transition:transform .15s,box-shadow .15s;cursor:default; position:relative;overflow:hidden; flex-shrink:0; } .dg-cell:hover{transform:scale(1.08);z-index:2;box-shadow:0 3px 12px rgba(0,0,0,.1)} /* 日格子 - 小方块 */ .dg-cell:not(.dg-week):not(.dg-month){ width:38px;height:46px;border-radius:10px; } .dg-dow{font-size:9px;color:inherit;opacity:.65;line-height:1.1;margin-bottom:1px} .dg-day{font-size:14px;font-weight:800;line-height:1.2} /* 周格子 */ .dg-week{width:62px;height:52px;border-radius:12px} .dg-label{font-size:9px;opacity:.7;margin-bottom:2px} .dg-rate{font-size:13px;font-weight:800} /* 月格子 */ .dg-month{width:calc(50% - 4px);height:64px;border-radius:14px} .dg-month .dg-label{font-size:12px;margin-bottom:3px} .dg-month .dg-stat{font-size:10px;opacity:.7;margin-bottom:1px} .dg-month .dg-rate{font-size:16px;font-weight:800} /* 颜色等级 */ .dg-done{background:linear-gradient(135deg,#d4edda,#b7e4c7);color:#1a7a3f;border:1px solid rgba(45,155,138,.25)} .dg-part{background:linear-gradient(135deg,#fff8e1,#ffecb3);color:#9c7000;border:1px solid rgba(212,184,122,.35)} .dg-miss{background:linear-gradient(135deg,#fce4ec,#f8bbd0);color:#a03c5a;border:1px solid rgba(201,123,123,.25)} .dg-zero{background:var(--bg-page);color:var(--text-muted);border:1px solid var(--border-color)} .dg-fut{background:linear-gradient(135deg,#e3f2fd,#bbdefb);color:#1565c0;border:1px solid rgba(100,150,200,.2);opacity:.55} .dg-skip{background:#f5f5f5;color:#bdbdbd;border:1px dashed #e0e0e0} /* 归档列表 */ .archive-item{background:var(--bg-page);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:12px 14px;margin-bottom:8px;display:flex;align-items:center;gap:10px;transition:all .2s} .archive-item:hover{border-color:var(--accent)} .archive-icon{width:30px;height:30px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0;background:var(--bg-card)} .archive-info{flex:1;min-width:0} .archive-name{font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .archive-meta{font-size:10px;color:var(--text-muted);margin-top:2px} .archive-actions{display:flex;gap:4px;flex-shrink:0} .archive-btn{width:28px;height:28px;border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:13px;transition:all .15s;font-family:inherit} .archive-btn.restore{background:var(--accent-bg);color:var(--accent)} .archive-btn.restore:hover{background:var(--accent);color:#fff} .archive-btn.purge{background:transparent;color:var(--text-muted)} .archive-btn.purge:hover{background:rgba(201,123,123,.12);color:var(--prio-red)}