:root{--bg: #f4f6f8;--card: #ffffff;--ink: #1f2329;--ink-2: #6b7280;--line: #e5e7eb;--accent: #00b578;--accent-weak: #e6f7f1;--accent-ink: #00895d;--danger: #ef4444;--income: #0e9f5e;--track: #edf1f4;--seg-bg: #edf1f4;--soft: #f6f8fa;--bar: #c9d4dc;--topbar-grad: linear-gradient(135deg, #00b578, #00915f);--radius: 14px;--shadow: 0 4px 16px rgba(15, 23, 42, .08)}[data-theme=blossom]{--bg: #fff5f8;--card: #ffffff;--ink: #3d2c35;--ink-2: #a07e8d;--line: #f7e0ea;--accent: #ff5c8a;--accent-weak: #ffeef4;--accent-ink: #d6336c;--income: #12a15c;--track: #fbe3ee;--seg-bg: #fbe3ee;--soft: #fff0f5;--bar: #f0c6d8;--topbar-grad: linear-gradient(135deg, #ff8fb1, #ff5c8a);--shadow: 0 4px 16px rgba(214, 51, 108, .1)}[data-theme=night]{--bg: #0b1220;--card: #16223a;--ink: #e6edf7;--ink-2: #93a3bd;--line: #2a3a58;--accent: #34d399;--accent-weak: #14342a;--accent-ink: #34d399;--danger: #f87171;--income: #34d399;--track: #1f2e4d;--seg-bg: #1f2e4d;--soft: #101a2c;--bar: #31456b;--topbar-grad: linear-gradient(135deg, #14735a, #0c4b3a);--shadow: 0 4px 16px rgba(0, 0, 0, .45)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;-webkit-font-smoothing:antialiased}button{font-family:inherit;cursor:pointer}input,select{font-family:inherit}.app{max-width:520px;margin:0 auto;min-height:100%;display:flex;flex-direction:column}.topbar{background:var(--topbar-grad);color:#fff;padding:18px 16px 14px;border-radius:0 0 18px 18px}.topbar h1{margin:0;font-size:20px;letter-spacing:.5px}.topbar p{margin:4px 0 0;font-size:12px;opacity:.85}main{flex:1;padding:12px 12px 96px}.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px;margin-bottom:12px}.muted{color:var(--ink-2);font-size:13px;margin:6px 0}.small{font-size:12px}.center{text-align:center}.danger-text{color:var(--danger)}.income-text{color:var(--income)}.month-nav{display:flex;align-items:center;justify-content:space-between;padding:6px 10px}.month-nav span{font-weight:600;font-size:15px}.month-nav button{border:none;background:transparent;font-size:22px;line-height:1;color:var(--ink-2);padding:4px 10px;border-radius:8px}.month-nav button:hover{background:var(--bg)}.summary .big{margin:2px 0 6px;font-size:32px;font-weight:700;letter-spacing:.5px}.summary-sub{display:flex;gap:14px;font-size:13px;color:var(--ink-2)}.budget{margin-top:12px}.budget-head{display:flex;justify-content:space-between;font-size:12px;color:var(--ink-2);margin-bottom:4px}.progress{height:8px;border-radius:6px;background:var(--track);overflow:hidden}.progress>div{height:100%;border-radius:6px;background:var(--accent);transition:width .3s}.progress>div.danger{background:var(--danger)}.day-head{display:flex;justify-content:space-between;align-items:center;padding:8px 6px 4px;font-size:13px;font-weight:600;color:var(--ink-2)}.tx-row{width:100%;display:flex;align-items:center;gap:12px;text-align:left;background:var(--card);border:none;border-radius:var(--radius);box-shadow:var(--shadow);padding:12px 14px;margin-bottom:8px;color:var(--ink)}.tx-row:active{transform:scale(.99)}.tx-icon{width:40px;height:40px;border-radius:12px;background:var(--accent-weak);display:flex;align-items:center;justify-content:center;font-size:20px;flex:none}.tx-mid{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.tx-title{font-size:15px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tx-sub{font-size:12px;color:var(--ink-2)}.tx-amount{font-size:16px;font-weight:700;flex:none}.tx-amount.expense{color:var(--ink)}.tx-amount.income{color:var(--income)}.empty{text-align:center;padding:26px 18px}.empty-title{font-size:16px;font-weight:600;margin:0 0 8px}.tabbar{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:min(520px,100%);background:var(--card);border-top:1px solid var(--line);display:flex;align-items:stretch;padding:4px 0 max(4px,env(safe-area-inset-bottom));z-index:30}.tab-btn{flex:1;border:none;background:transparent;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11px;color:var(--ink-2);padding:6px 0}.tab-btn.active{color:var(--accent);font-weight:600}.tab-icon{font-size:20px}.fab-holder{width:76px}.fab-wrap{position:fixed;bottom:14px;left:50%;transform:translate(-50%);z-index:40}.fab{width:60px;height:60px;border-radius:50%;border:none;background:var(--topbar-grad);color:#fff;font-size:30px;line-height:1;box-shadow:0 6px 20px #00000047;transition:transform .15s}.fab.open{transform:rotate(45deg)}.fab-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a40;z-index:35}.fab-menu{position:absolute;bottom:74px;left:50%;transform:translate(-50%);background:var(--card);border-radius:14px;box-shadow:0 10px 30px #0f172a33;overflow:hidden;min-width:180px}.fab-menu button{display:block;width:100%;padding:13px 18px;border:none;background:transparent;font-size:15px;text-align:left;color:var(--ink)}.fab-menu button+button{border-top:1px solid var(--line)}.fab-menu button:hover{background:var(--accent-weak)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;z-index:50;display:flex;align-items:flex-end;justify-content:center}.sheet{width:min(520px,100%);max-height:88vh;background:var(--card);border-radius:20px 20px 0 0;display:flex;flex-direction:column}.sheet-head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 10px;border-bottom:1px solid var(--line);flex:none}.sheet-head h3{margin:0;font-size:16px}.icon-btn{border:none;background:transparent;font-size:16px;color:var(--ink-2);padding:4px 8px}.sheet-body{padding:14px 16px calc(18px + env(safe-area-inset-bottom));overflow-y:auto}.type-toggle{display:flex;background:var(--seg-bg);border-radius:10px;padding:3px;margin-bottom:12px}.type-toggle button{flex:1;border:none;border-radius:8px;padding:8px 0;font-size:14px;background:transparent;color:var(--ink-2);font-weight:600}.type-toggle button.active.expense{background:var(--card);color:#e0533d;box-shadow:0 1px 4px #0000001f}.type-toggle button.active.income{background:var(--card);color:var(--income);box-shadow:0 1px 4px #0000001f}.amount-box{display:flex;align-items:baseline;gap:8px;padding:4px 2px 2px}.amount-box .cny{font-size:26px;color:var(--ink-2)}.amount-box input{border:none;outline:none;font-size:34px;font-weight:700;width:100%;padding:4px 0;background:transparent;letter-spacing:.5px}.amount-box input::placeholder{color:#c3cad3}.field-label{font-size:12px;color:var(--ink-2);margin:12px 0 6px}.chip-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.chip{border:1.5px solid var(--line);background:var(--card);border-radius:10px;padding:8px 4px;font-size:12px;color:var(--ink);display:flex;flex-direction:column;align-items:center;gap:3px}.chip.active{border-color:var(--accent);background:var(--accent-weak);color:var(--accent-ink);font-weight:600}.chip-icon{font-size:18px}.chip.static{display:inline-flex;flex-direction:row;gap:6px;padding:5px 10px;align-items:center;margin:0 6px 6px 0}.chip-x{border:none;background:transparent;color:var(--ink-2);font-size:14px;padding:0 2px;line-height:1}.chip-x:disabled{opacity:.3;cursor:default}.manage-chips{display:flex;flex-wrap:wrap;margin-bottom:8px}.text-input{border:1.5px solid var(--line);border-radius:10px;padding:9px 12px;font-size:14px;width:100%;outline:none;background:var(--card);color:var(--ink)}.text-input:focus{border-color:var(--accent)}.row2{display:flex;gap:10px;margin-top:12px}.row2 label{flex:1;font-size:12px;color:var(--ink-2);display:flex;flex-direction:column;gap:4px}.row2 input{border:1.5px solid var(--line);border-radius:10px;padding:8px 10px;font-size:14px;outline:none}.form-actions{display:flex;gap:10px;margin-top:16px;align-items:center}.form-actions .spacer{flex:1}.btn{border:1.5px solid var(--line);background:var(--card);color:var(--ink);border-radius:10px;padding:9px 14px;font-size:14px;font-weight:500}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.btn.primary:disabled,.btn:disabled{opacity:.55;cursor:default}.btn.ghost{border-color:transparent;color:var(--ink-2)}.btn.danger-ghost{border-color:var(--danger);color:var(--danger);background:var(--card)}.btn-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.btn-grid .btn{text-align:center}.inline-form{display:flex;gap:8px;margin-top:8px}.inline-form .text-input{flex:1}.inline-form .icon-input{flex:0 0 56px;text-align:center}.inline-form select{flex:0 0 84px}.stack-form{display:flex;flex-direction:column;gap:10px;margin-top:8px}.stack-form label{font-size:12px;color:var(--ink-2);display:flex;flex-direction:column;gap:4px}.file-btn{position:relative;overflow:hidden;display:inline-flex;align-items:center;justify-content:center}.file-btn input[type=file]{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer}.settings-section .section-title{margin:0 0 6px;font-size:15px}.section-title{font-size:15px;margin:0 0 10px}.tips{margin:4px 0 0;padding-left:18px;color:var(--ink-2);font-size:13px;line-height:1.7}.tips b{color:var(--ink)}.img-preview{width:100%;max-height:260px;object-fit:contain;border-radius:10px;background:var(--soft);display:block}.import-actions{display:flex;gap:8px;margin:12px 0;flex-wrap:wrap}.hint-chips{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 10px}.hint-chip{background:var(--accent-weak);color:var(--accent-ink);font-size:12px;border-radius:999px;padding:4px 10px}.rawtext{margin-top:10px}.rawtext summary{font-size:12px;color:var(--ink-2);cursor:pointer}.rawtext pre{background:var(--soft);border-radius:8px;padding:10px;font-size:12px;max-height:160px;overflow:auto;white-space:pre-wrap;word-break:break-all}.mic-wrap{text-align:center;padding:10px 0 4px}.mic-btn{width:84px;height:84px;border-radius:50%;border:none;background:var(--topbar-grad);color:#fff;font-size:34px;box-shadow:0 8px 24px #00000040;margin-bottom:10px}.mic-btn.listening{animation:pulse 1.2s ease-in-out infinite}@keyframes pulse{0%{box-shadow:0 0 #00b57873}70%{box-shadow:0 0 0 22px #00b57800}to{box-shadow:0 0 #00b57800}}.partial{color:var(--ink-2);font-size:14px;min-height:20px;margin:4px 0}.transcript-box{margin:10px auto 4px;padding:10px 14px;background:var(--bg);border-radius:10px;font-size:15px;display:inline-block}.donut-wrap{display:flex;flex-direction:column;gap:12px}.donut{width:170px;height:170px;margin:0 auto}.donut-label{font-size:11px;fill:var(--ink-2)}.donut-total{font-size:20px;font-weight:700;fill:var(--ink)}.legend{list-style:none;margin:0;padding:0}.legend li{display:flex;align-items:center;gap:8px;font-size:13px;padding:5px 0;border-bottom:1px dashed var(--line)}.legend li:last-child{border-bottom:none}.legend .dot{width:10px;height:10px;border-radius:50%;flex:none}.legend-name{flex:1}.bars{display:flex;align-items:flex-end;gap:10px;height:130px;padding:6px 2px 0}.bar-col{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;gap:4px}.bar-track{flex:1;width:100%;display:flex;align-items:flex-end;justify-content:center}.bar{width:60%;max-width:34px;border-radius:6px 6px 2px 2px;background:var(--bar);min-height:2px}.bar.cur{background:var(--accent)}.bar-label{font-size:11px;color:var(--ink-2)}.err{color:var(--danger);font-size:13px;margin:6px 0}.toast{position:fixed;bottom:96px;left:50%;transform:translate(-50%);background:#1f2329eb;color:#fff;font-size:14px;padding:10px 18px;border-radius:999px;z-index:60;white-space:nowrap;box-shadow:0 6px 20px #00000040}.toolbar{display:flex;flex-direction:column;gap:8px}.toolbar .text-input{width:100%}.seg{display:flex;background:var(--seg-bg);border-radius:10px;padding:3px}.seg button{flex:1;border:none;border-radius:8px;padding:7px 0;font-size:13px;background:transparent;color:var(--ink-2);font-weight:600}.seg button.active{background:var(--card);color:var(--accent);box-shadow:0 1px 4px #0000001f}.stat-seg{margin-bottom:10px}.hint-line{font-size:12px;color:#00895d;margin:6px 0 0}.amount-box.attention{background:#fff7ed;border-radius:12px;padding:6px 10px;margin:2px -10px 0;animation:blink 1.6s ease-in-out 2}@keyframes blink{0%,to{background:#fff7ed}50%{background:#ffe9c7}}.wish-new .inline-form{margin-bottom:10px}.wish-add{width:100%}.wish-card.done{opacity:.75}.wish-head{display:flex;align-items:center;gap:12px;margin-bottom:10px}.wish-icon{width:44px;height:44px;border-radius:12px;background:var(--accent-weak);display:flex;align-items:center;justify-content:center;font-size:22px;flex:none}.wish-mid{flex:1;min-width:0}.wish-name{margin:0;font-weight:600;font-size:15px}.wish-badge{margin-left:8px;font-size:11px;color:var(--accent-ink);background:var(--accent-weak);border-radius:999px;padding:2px 8px}.wish-amounts{margin:2px 0 0;font-size:12px;color:var(--ink-2)}.wish-del{flex:none}.wish-foot{display:flex;justify-content:space-between;align-items:center;margin-top:8px;gap:8px}.wish-actions{display:flex;gap:6px}.btn.small{padding:6px 10px;font-size:12px;border-radius:8px}.card-row{display:flex;justify-content:space-between;align-items:center}.no-margin{margin:0}.theme-seg{margin-bottom:10px}.streak-line{font-size:12px;color:var(--accent-ink);margin:10px 0 0}.celebrate-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:70;background:#0f172a8c;display:flex;align-items:center;justify-content:center;padding:16px}.celebrate-card{width:min(320px,86vw);background:var(--card);border-radius:24px;padding:30px 24px;text-align:center;animation:pop .35s cubic-bezier(.34,1.56,.64,1)}.celebrate-emoji{font-size:64px;margin:0;line-height:1}.celebrate-title{font-size:18px;font-weight:700;margin:14px 0 6px}.celebrate-actions{display:flex;gap:10px;justify-content:center;margin-top:18px}@keyframes pop{0%{transform:scale(.7);opacity:0}to{transform:scale(1);opacity:1}}.report-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:70;background:#0f172a99;display:flex;align-items:center;justify-content:center;padding:16px}.report-card{position:relative;width:min(340px,90vw);background:var(--topbar-grad);color:#fff;border-radius:24px;padding:26px 22px 20px;box-shadow:0 20px 60px #00000059;animation:pop .35s cubic-bezier(.34,1.56,.64,1)}.report-close{position:absolute;top:12px;right:12px;border:none;background:#ffffff40;color:#fff;border-radius:50%;width:28px;height:28px;font-size:13px}.report-month{margin:0;font-size:16px;font-weight:600;opacity:.95}.report-label{margin:14px 0 2px;font-size:12px;opacity:.85}.report-big{margin:0;font-size:40px;font-weight:800;letter-spacing:1px}.report-row{display:flex;gap:12px;font-size:12px;opacity:.92;margin-top:8px;flex-wrap:wrap}.report-divider{height:1px;background:#ffffff4d;margin:16px 0 4px}.report-top{list-style:none;margin:4px 0 0;padding:0}.report-top li{display:flex;justify-content:space-between;font-size:14px;padding:5px 0}.report-comment{margin-top:16px;background:#ffffff38;border-radius:12px;padding:10px 12px;font-size:13px;line-height:1.6}.report-brand{margin:14px 0 0;font-size:11px;opacity:.75;text-align:center}.report-actions{display:flex;justify-content:center;margin-top:14px}.report-btn{border:none;background:#ffffff40;color:#fff;border-radius:999px;padding:8px 18px;font-size:13px;font-weight:600}.toolbar-row{display:flex;gap:8px;align-items:center;margin-top:10px}.grow{flex:1}.field-label.tight{margin-top:0}.topbar{position:relative}.topbar-search{position:absolute;right:16px;top:20px;border:none;background:#ffffff38;color:#fff;width:34px;height:34px;border-radius:50%;font-size:15px}.topbar-text{padding-right:44px}.chip-row{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px}.tpl-chip{flex:none;display:flex;align-items:center;gap:8px;border:1.5px solid var(--line);background:var(--card);border-radius:12px;padding:8px 12px;text-align:left}.tpl-chip:active{transform:scale(.96)}.tpl-icon{font-size:18px}.tpl-text{display:flex;flex-direction:column}.tpl-name{font-size:13px;font-weight:600;color:var(--ink)}.tpl-amount{font-size:11px;color:var(--accent-ink);font-weight:600}.recurring-row{display:flex;align-items:center;gap:10px;padding:8px 0}.rec-icon{width:36px;height:36px;border-radius:10px;background:var(--accent-weak);display:flex;align-items:center;justify-content:center;font-size:17px;flex:none}.rec-mid{flex:1;min-width:0;display:flex;flex-direction:column}.rec-name{font-size:13px;font-weight:600}.rec-sub{font-size:11px;color:var(--ink-2)}.cal-head{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:6px}.cal-head span{text-align:center;font-size:11px;color:var(--ink-2)}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.cal-cell{aspect-ratio:1;border-radius:10px;border:1.5px solid transparent;background:var(--soft);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:2px}.cal-cell .d{font-size:12px;font-weight:600;color:var(--ink)}.cal-cell .e{font-size:9px;color:var(--ink-2);max-width:100%;overflow:hidden;white-space:nowrap}.cal-cell .i{font-size:9px;color:var(--income)}.cal-cell.has{background:var(--accent-weak)}.cal-cell.today{border-color:var(--accent)}.cal-cell.selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.cal-detail{margin-top:14px}.cal-detail .day-head{display:flex;justify-content:space-between;align-items:center;font-size:13px;font-weight:600;margin-bottom:4px}.heatmap{display:flex;gap:3px;overflow-x:auto;padding:4px 2px 8px}.heatmap-col{display:flex;flex-direction:column;gap:3px}.heat-cell{width:11px;height:11px;border-radius:3px;background:var(--track);display:inline-block;flex:none}.heat-cell.empty{background:transparent}.heat-legend{display:flex;justify-content:space-between;align-items:center;gap:6px}.heat-legend .heat-cell{width:10px;height:10px;margin:0 2px}.insight-list{margin:0;padding-left:4px;list-style:none}.insight-list li{font-size:13px;line-height:1.7;padding:3px 0}.catbudget-row{margin-bottom:12px}.cb-head{display:flex;justify-content:space-between;font-size:12px;margin-bottom:4px}.catbudget-edit{display:flex;align-items:center;gap:10px;margin-bottom:6px}.catbudget-edit span{flex:none;width:90px;font-size:13px}.catbudget-edit input{max-width:140px}.queue-row{display:flex;gap:8px;overflow-x:auto;padding:4px 0}.queue-thumb{position:relative;flex:none;width:64px;height:64px;border-radius:10px;overflow:hidden;border:2px solid var(--line);padding:0}.queue-thumb.active{border-color:var(--accent)}.queue-thumb img{width:100%;height:100%;object-fit:cover;display:block}.queue-badge{position:absolute;right:2px;bottom:2px;background:#0000008c;color:#fff;border-radius:8px;font-size:10px;padding:1px 4px}
