html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{min-width:320px;margin:0}#root{min-height:100dvh}:root{--bg:#f4f6f8;--surface:#fff;--text:#1a1d21;--muted:#6b7280;--border:#e5e7eb;--green:#e61a27;--green-dark:#b01018;--green-soft:#fde8ea;--brand:#e61a27;--brand-dark:#b01018;--brand-mid:#ff3b45;--brand-soft:#fde8ea;--amber:#f59e0b;--red:#b01018;--shadow:0 8px 28px #0f172a0f;--radius:16px;--safe-bottom:env(safe-area-inset-bottom,0px);color:var(--text);background:var(--bg);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;line-height:1.5}*{box-sizing:border-box}html,body,#root{background:var(--bg);min-height:100%;margin:0}button,input,textarea{font:inherit}.app{max-width:520px;min-height:100dvh;padding-bottom:calc(72px + var(--safe-bottom));flex-direction:column;margin:0 auto;display:flex}.app-header{z-index:10;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);background:#f4f6f8e0;flex-direction:column;gap:10px;padding:14px 18px 10px;display:flex;position:sticky;top:0}.brand{align-items:center;gap:12px;display:flex}.habit-switcher{flex-direction:column;gap:8px;display:flex}.habit-tabs{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.habit-tab{background:#eef2f7;border-radius:999px;align-items:center;display:inline-flex;overflow:hidden}.habit-tab.active{background:var(--green)}.habit-tab-btn{cursor:pointer;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;max-width:140px;padding:6px 12px;font-size:.8rem;font-weight:600;overflow:hidden}.habit-tab.active .habit-tab-btn{color:#fff}.habit-tab-close{color:#ffffffe6;cursor:pointer;background:0 0;border:none;padding:4px 8px 4px 0;font-size:1rem;line-height:1}.habit-tab-add{border:1px dashed var(--border);cursor:pointer;width:30px;height:30px;color:var(--muted);background:#fff;border-radius:50%;font-size:1.1rem;line-height:1}.habit-add-form{align-items:center;gap:6px;display:flex}.habit-add-form input{border:1px solid var(--border);background:#fff;border-radius:10px;flex:1;min-width:0;padding:8px 10px}.brand-dot{background:var(--green);width:12px;height:12px;box-shadow:0 0 0 6px var(--green-soft);border-radius:50%}.brand h1{margin:0;font-size:1.15rem;font-weight:700}.brand p{color:var(--muted);flex-wrap:wrap;align-items:center;gap:8px;margin:2px 0 0;font-size:.8rem;display:flex}.sync-pill{color:var(--muted);background:#eef2f7;border-radius:999px;padding:2px 8px;font-size:.7rem;font-weight:700}.sync-pill.sync-synced{background:var(--green-soft);color:var(--green-dark)}.sync-pill.sync-syncing{color:#c2410c;background:#fff7ed}.sync-pill.sync-error,.sync-pill.sync-offline{color:var(--red);background:#fef2f2}.sync-status{margin:0 0 10px;font-size:.88rem;font-weight:600}.sync-status.sync-synced{color:var(--green-dark)}.sync-status.sync-error,.sync-status.sync-offline{color:var(--red)}.app-main{flex-direction:column;flex:1;gap:16px;padding:16px;display:flex}.coin-summary{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px}.goal-badge{color:#b01018;background:#fde8ea;border:1px solid #e61a272e;border-radius:999px;align-items:center;gap:4px;margin-bottom:14px;padding:6px 12px;font-size:.82rem;font-weight:600;display:inline-flex}.goal-badge .muted{color:var(--muted);background:0 0;font-weight:500}.goal-note{opacity:.85;font-weight:500}.coin-cards{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.coin-card{text-align:center;border:1px solid var(--border);background:#fafafa;border-radius:12px;padding:12px 6px}.coin-label{color:var(--muted);margin-bottom:6px;font-size:.72rem}.coin-value{letter-spacing:-.02em;font-size:1.15rem;font-weight:700}.coin-value.earned{color:var(--green-dark)}.coin-value.remaining{color:var(--amber)}.coin-value.target{color:var(--text)}.progress-wrap{margin-top:14px}.progress-bar{background:#eef2f7;border-radius:999px;height:8px;overflow:hidden}.progress-fill{border-radius:inherit;background:linear-gradient(90deg,#ff3b45,#b01018);height:100%;transition:width .35s}.progress-text{color:var(--muted);text-align:right;margin-top:6px;font-size:.78rem}.streak-row{color:var(--muted);border-top:1px dashed var(--border);justify-content:space-between;gap:12px;margin-top:12px;padding-top:10px;font-size:.82rem;display:flex}.streak-row strong{color:var(--text)}.checkin-block{text-align:center}.checkin-btn{color:#fff;cursor:pointer;background:linear-gradient(135deg,#e61a27,#b01018);border:none;border-radius:14px;width:100%;padding:16px 20px;font-size:1.05rem;font-weight:700;transition:transform .12s,box-shadow .12s;box-shadow:0 10px 24px #e61a2752}.checkin-btn:hover:not(:disabled){transform:translateY(-1px)}.checkin-btn:active:not(:disabled){transform:translateY(1px)}.checkin-btn.checked{box-shadow:none;color:#fff;cursor:default;background:linear-gradient(135deg,#ff8a90,#e61a27)}.checkin-hint{color:var(--muted);justify-content:center;align-items:center;gap:10px;margin:10px 0 0;font-size:.85rem;display:flex}.link-btn{color:#2563eb;cursor:pointer;background:0 0;border:none;padding:0;text-decoration:underline}.calendar-section{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px}.calendar-toolbar{flex-direction:column;gap:12px;display:flex}.mode-switch{background:#f1f5f9;border-radius:10px;align-self:flex-start;padding:3px;display:inline-flex}.mode-switch button{color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:8px;padding:6px 14px;font-size:.85rem;font-weight:600}.mode-switch button.active{color:var(--text);background:#fff;box-shadow:0 1px 4px #0000000f}.nav-row{align-items:center;gap:8px;display:flex}.calendar-title{text-align:center;flex:1;margin:0;font-size:1.05rem}.icon-btn{border:1px solid var(--border);cursor:pointer;background:#fff;border-radius:10px;width:36px;height:36px;font-size:1.25rem;line-height:1}.text-btn{background:var(--green-soft);color:var(--green-dark);cursor:pointer;border:none;border-radius:8px;padding:6px 10px;font-size:.8rem;font-weight:600}.calendar-stats{color:var(--muted);margin:12px 0;font-size:.88rem}.calendar-stats strong{color:var(--text)}.weekday-row,.days-grid{grid-template-columns:repeat(7,1fr);gap:4px;display:grid}.weekday{text-align:center;color:var(--muted);padding:6px 0;font-size:.75rem;font-weight:600}.day-cell{aspect-ratio:1;cursor:pointer;color:var(--text);background:0 0;border:none;border-radius:10px;font-size:.9rem;transition:background .12s}.day-cell:hover:not(:disabled){background:#f1f5f9}.day-cell.out{visibility:hidden}.day-cell.future{color:#cbd5e1;cursor:not-allowed}.day-cell.today:not(.checked){box-shadow:inset 0 0 0 2px var(--green);font-weight:700}.day-cell.checked{background:var(--green);color:#fff;font-weight:700}.calendar-legend{color:var(--muted);align-items:center;gap:6px;margin:12px 0 0;font-size:.78rem;display:flex}.dot.checked{background:var(--green);border-radius:3px;width:10px;height:10px;display:inline-block}.year-grid{grid-template-columns:1fr 1fr;gap:10px;display:grid}.year-month-card{border:1px solid var(--border);background:#fafafa;border-radius:12px;padding:10px}.year-month-header{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.year-month-title{cursor:pointer;color:var(--text);background:0 0;border:none;padding:0;font-weight:700}.year-month-title:hover{color:var(--green-dark)}.year-month-count{color:var(--muted);font-size:.72rem}.mini-days{flex-wrap:wrap;gap:2px;display:flex}.mini-day{text-align:center;color:#94a3b8;border-radius:3px;width:14px;height:14px;font-size:8px;line-height:14px}.mini-day.checked{background:var(--green);color:#fff;font-weight:700}.panel{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px}.panel-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;display:flex}.panel-header h2{margin:0;font-size:1.1rem}.panel-desc{color:var(--muted);margin:0 0 16px;font-size:.88rem}.badge{background:var(--green-soft);color:var(--green-dark);border-radius:999px;justify-content:center;align-items:center;min-width:28px;height:28px;padding:0 8px;font-size:.85rem;font-weight:700;display:inline-flex}.empty-state{text-align:center;color:var(--text);padding:36px 12px}.empty-state .muted,.muted{color:var(--muted);font-size:.88rem}.goal-form{border:1px solid var(--border);background:#fafafa;border-radius:12px;flex-direction:column;gap:12px;margin-bottom:16px;padding:14px;display:flex}.goal-form h3{margin:0;font-size:.95rem}.goal-form label{color:#374151;flex-direction:column;gap:6px;font-size:.85rem;font-weight:600;display:flex}.goal-form input{border:1px solid var(--border);background:#fff;border-radius:10px;padding:10px 12px;font-weight:500}.goal-form input:focus{outline:2px solid var(--green-soft);border-color:var(--green)}.form-hint{color:var(--muted);margin:0;font-size:.8rem;font-weight:400}.form-actions{justify-content:flex-end;gap:8px;display:flex}.primary-btn,.ghost-btn{cursor:pointer;border:none;border-radius:10px;padding:10px 14px;font-weight:600}.primary-btn{background:var(--green);color:#fff}.primary-btn.sm{padding:8px 12px;font-size:.85rem}.ghost-btn{border:1px solid var(--border);color:var(--text);background:#fff}.ghost-btn.sm{padding:6px 10px;font-size:.8rem}.ghost-btn.danger,.goal-actions .danger{color:var(--red)}.goal-list,.completed-list{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.goal-item{border:1px solid var(--border);background:#fff;border-radius:14px;overflow:hidden}.goal-item.active{border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}.goal-main{text-align:left;cursor:pointer;background:#fff;border:none;width:100%;padding:14px}.goal-top{justify-content:space-between;gap:8px;font-weight:700;display:flex}.goal-target{color:var(--green-dark);white-space:nowrap}.goal-sub{color:var(--muted);margin-top:4px;font-size:.82rem}.mini-progress{background:#eef2f7;border-radius:999px;height:6px;margin-top:10px;overflow:hidden}.mini-progress>div{background:var(--green);height:100%}.goal-meta{color:var(--muted);margin-top:6px;font-size:.78rem}.goal-actions{border-top:1px solid var(--border);background:#fafafa;display:flex}.goal-actions button{cursor:pointer;color:#374151;background:0 0;border:none;flex:1;padding:10px;font-size:.82rem;font-weight:600}.goal-actions button+button{border-left:1px solid var(--border)}.completed-item{border:1px solid var(--border);background:linear-gradient(#fff5f5,#fff);border-radius:14px;align-items:flex-start;gap:12px;padding:14px;display:flex}.completed-icon{background:var(--green);color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-weight:700;display:flex}.completed-body{flex:1;min-width:0}.completed-name{font-weight:700}.completed-meta,.completed-note{color:var(--muted);margin-top:2px;font-size:.82rem}.stats-cards{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px;display:grid}.stats-cards.three{grid-template-columns:repeat(3,1fr)}.backup-box,.danger-box{border:1px solid var(--border);background:#fafafa;border-radius:12px;margin-top:12px;padding:14px}.backup-box h3,.danger-box h3{margin:0 0 6px;font-size:.9rem}.backup-actions{flex-wrap:wrap;gap:8px;margin:10px 0;display:flex}.import-label{color:#374151;flex-direction:column;gap:6px;font-size:.85rem;font-weight:600;display:flex}.import-label textarea{border:1px solid var(--border);resize:vertical;background:#fff;border-radius:10px;padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;font-weight:400}.danger-box{background:#fef2f2;border-color:#fecaca}.toast-stack{left:50%;bottom:calc(80px + var(--safe-bottom));z-index:50;pointer-events:none;flex-direction:column;gap:8px;width:min(480px,100% - 24px);display:flex;position:fixed;transform:translate(-50%)}.toast{pointer-events:auto;text-align:left;cursor:pointer;border:none;border-radius:12px;padding:12px 16px;font-size:.88rem;font-weight:600;animation:.22s toast-in;box-shadow:0 12px 32px #0f172a2e}.toast-success{color:#fff;background:#8b0a12}.toast-info{color:#fff;background:#1e293b}.toast-warn{color:#fff;background:#9a3412}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.stat-card{border:1px solid var(--border);text-align:center;background:#f8fafc;border-radius:12px;padding:16px}.stat-value{color:var(--green-dark);font-size:1.35rem;font-weight:800}.stat-label{color:var(--muted);margin-top:4px;font-size:.78rem}.about-box{border:1px dashed var(--border);background:#f8fafc;border-radius:12px;margin-top:8px;padding:14px}.about-box h3{margin:0 0 6px;font-size:.9rem}.about-box p{color:var(--muted);margin:0;font-size:.82rem}.tab-bar{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--border);width:min(520px,100%);padding:6px 4px calc(6px + var(--safe-bottom));z-index:20;background:#fffffff0;grid-template-columns:repeat(4,1fr);display:grid;position:fixed;bottom:0;left:50%;transform:translate(-50%)}.tab-bar button{color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:10px;flex-direction:column;align-items:center;gap:2px;padding:8px 4px;font-size:.72rem;font-weight:600;display:flex}.tab-bar button.active{color:var(--green-dark);background:var(--green-soft)}.tab-icon{font-size:1.15rem;line-height:1}@media (width>=640px){.app-main{padding:20px}.coin-value{font-size:1.3rem}.year-grid{grid-template-columns:repeat(3,1fr)}}
