:root{--brand: #732ee4;--brand-2: #a855f7;--brand-soft: rgba(124, 58, 237, .1);--expense: #f43f5e;--income: #10b981;--bg: #faf8ff;--bg-elevated: #ffffff;--card: #ffffff;--surface-2: #edf0fc;--surface-3: #e2e7f8;--text: #131b2e;--text-2: #4a4455;--text-3: #857f92;--line: rgba(19, 27, 46, .08);--shadow: 0 4px 20px -2px rgba(15, 23, 42, .06);--primary-container: #7c3aed;--secondary: #4648d4;--secondary-container: #6063ee;--tertiary: #007650;--tertiary-container: #007650;--tertiary-fixed: #6ffbbe;--on-tertiary-fixed: #002113;--primary-fixed: #eaddff;--on-primary-fixed: #25005a;--primary-fixed-dim: #d2bbff;--secondary-fixed: #e1e0ff;--on-secondary-fixed: #07006c;--surface-container-lowest: #ffffff;--surface-container-low: #f2f3ff;--surface-container: #eaedff;--surface-container-high: #e2e7ff;--outline-variant: #ccc3d8;--on-surface-variant: #4a4455;--radius: 16px;--radius-sm: 10px;--tabbar-h: 72px;--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-top: env(safe-area-inset-top, 0px);--kb: 0px;--vvh: 100dvh}html[data-theme=dark]{--brand: #c4b5fd;--brand-2: #a78bfa;--brand-soft: rgba(196, 181, 253, .16);--bg: #0b1020;--bg-elevated: #141a2e;--card: #141a2e;--surface-2: #1b2338;--surface-3: #232d47;--text: #eef0ff;--text-2: #a6adc8;--text-3: #7c85a3;--line: rgba(255, 255, 255, .09);--shadow: 0 10px 28px rgba(0, 0, 0, .35);--primary-container: #7c3aed;--secondary: #a8b0ff;--secondary-container: #4d4fd0;--tertiary: #6ffbbe;--tertiary-container: #4edea3;--tertiary-fixed: #4edea3;--on-tertiary-fixed: #002113;--primary-fixed: #3b1d78;--on-primary-fixed: #eaddff;--primary-fixed-dim: #4c2d93;--secondary-fixed: #36359c;--on-secondary-fixed: #e1e0ff;--surface-container-lowest: #101728;--surface-container-low: #171e33;--surface-container: #1b2338;--surface-container-high: #232d47;--outline-variant: #4a4455;--on-surface-variant: #a6adc8}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;touch-action:pan-x pan-y;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}input,textarea,[contenteditable=true]{-webkit-user-select:text;user-select:text}html,body{margin:0;padding:0;min-height:100%}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;overscroll-behavior-y:none}#app{min-height:100vh}button{font:inherit;color:inherit;border:none;background:none;cursor:pointer}input,select,textarea{font:inherit;color:inherit}a{color:var(--brand);text-decoration:none}.app-shell{width:100%;max-width:560px;margin:0 auto;min-height:100vh;background:var(--bg);position:relative}.app-header{position:sticky;top:0;z-index:20;padding:calc(var(--safe-top) + 10px) 16px 10px;min-height:60px;background:var(--bg);display:flex;align-items:center;gap:10px;box-shadow:0 1px 8px #0f172a0d}.app-header h1{font-size:17px;margin:0;font-weight:600;flex:1;min-width:0;letter-spacing:-.01em}.header-back{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:var(--surface-2);color:var(--text-2);flex-shrink:0}.brand{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.brand-logo{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;color:#fff;flex-shrink:0;background:linear-gradient(135deg,#732ee4,#7c3aed);box-shadow:0 4px 12px -2px #630ed466}.brand-logo svg{width:18px;height:18px}.brand-name{display:flex;align-items:center;gap:6px;min-width:0}.brand-name strong{font-size:17px;font-weight:600;letter-spacing:-.01em;color:var(--text);white-space:nowrap}.version-badge{padding:2px 7px;border-radius:999px;background:var(--brand-soft);color:var(--brand);font-size:11px;font-weight:600;line-height:14px}.header-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.status-pill{height:28px;padding:0 10px;border-radius:999px;background:var(--surface-2);color:var(--text-2);font-size:12px;font-weight:500;display:flex;align-items:center;gap:6px;white-space:nowrap}.status-pill i{width:6px;height:6px;border-radius:50%;background:#4edea3;animation:pulse-dot 2s ease-in-out infinite}.status-pill.syncing i{background:#fbbf24}.status-pill.offline i{background:#94a3b8;animation:none}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.82)}}.avatar-btn{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;color:#fff;background:linear-gradient(140deg,#732ee4,#6063ee);box-shadow:0 2px 8px #630ed440;font-size:13px;font-weight:600;flex-shrink:0}.avatar-btn svg{width:18px;height:18px}.app-main{padding:14px 16px 24px}.app-main.has-tabbar{padding-bottom:calc(var(--tabbar-h) + var(--safe-bottom) + 20px)}.app-main.is-chat{height:calc(var(--vvh) - var(--header-h, 60px));padding-bottom:calc(var(--tabbar-h) + var(--safe-bottom));display:flex;flex-direction:column;overflow:hidden;overflow:clip}html.kb-open .tabbar{display:none}html.is-chat.kb-open,html.is-chat.kb-open body{height:var(--vvh);min-height:0;overflow:hidden}html.is-chat.kb-open #app,html.is-chat.kb-open .app-shell{height:100%;min-height:0}html.kb-open .app-main.is-chat{padding-bottom:0}html.kb-open .app-main:not(.is-chat){padding-bottom:calc(24px + var(--kb))}html.kb-open .app-main.has-tabbar:not(.is-chat){padding-bottom:calc(var(--tabbar-h) + var(--safe-bottom) + 20px + var(--kb))}html.kb-open .sheet{bottom:var(--kb);max-height:calc(var(--vvh) * .86);padding-bottom:16px}html.kb-open .toast-host{bottom:calc(var(--kb) + 16px)}.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-bottom:14px}.card.flat{box-shadow:none;border:1px solid var(--line)}.card-title{display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:600;margin-bottom:12px;color:var(--text)}.muted{color:var(--text-2);font-size:13px}.tiny{color:var(--text-3);font-size:12px}.expense-text{color:var(--expense)}.income-text{color:var(--income)}.row{display:flex;align-items:center;gap:10px}.row.between{justify-content:space-between}.col{display:flex;flex-direction:column;gap:10px}.grow{flex:1;min-width:0}.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:11px 16px;border-radius:12px;background:var(--brand-soft);color:var(--brand);font-weight:600;font-size:14px;transition:transform .12s ease,opacity .12s ease}.btn:active{transform:scale(.97)}.btn.primary{background:linear-gradient(135deg,var(--brand),var(--brand-2));color:#fff}.btn.block{width:100%}.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--text)}.btn.danger{background:#f43f5e1f;color:var(--expense)}.btn:disabled{opacity:.5}.chip{padding:6px 12px;border-radius:999px;background:var(--bg-elevated);border:1px solid var(--line);font-size:13px;color:var(--text-2);white-space:nowrap}.chip.active{background:var(--brand);border-color:var(--brand);color:#fff}.field{display:flex;align-items:center;gap:10px;padding:12px 14px;background:var(--bg-elevated);border:1px solid var(--line);border-radius:12px}.field input,.field select,.field textarea{flex:1;background:transparent;border:none;outline:none;min-width:0;font-size:15px}.field.label{flex-direction:column;align-items:stretch;gap:4px;padding:10px 14px}.field.label>span{font-size:12px;color:var(--text-3)}@media(max-width:600px){.field input,.field select,.field textarea{font-size:16px}}.list-item{display:flex;align-items:center;gap:12px;padding:13px 4px;border-bottom:1px solid var(--line)}.list-item:last-child{border-bottom:none}.list-item .icon{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:var(--brand-soft);font-size:19px;flex-shrink:0}.amount{font-variant-numeric:tabular-nums;font-weight:600}.divider{height:1px;background:var(--line);margin:12px 0}.empty{text-align:center;padding:38px 16px;color:var(--text-3)}.empty .emoji{font-size:34px;display:block;margin-bottom:10px}.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:30;max-width:560px;margin:0 auto;height:calc(var(--tabbar-h) + var(--safe-bottom));padding-bottom:var(--safe-bottom);display:grid;grid-template-columns:repeat(4,1fr);background:var(--card);box-shadow:0 -4px 20px #0f172a0f}.tabbar button{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:8px 0 6px;font-size:11px;color:var(--text-3);transition:color .15s ease}.tabbar button.active{color:var(--brand);font-weight:600}.tabbar .tab-icon{width:24px;height:24px;line-height:1}.tabbar .tab-icon svg{width:24px;height:24px}.tabbar .tab-center{justify-content:center;gap:3px;padding-top:8px}.tab-center-btn{width:46px;height:46px;margin-top:-22px;border-radius:50%;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,#6063ee,#7c3aed);box-shadow:0 8px 18px -4px #7c3aed80;transition:transform .15s ease}.tab-center-btn svg{width:22px;height:22px}.tab-center:active .tab-center-btn{transform:scale(.94)}.tabbar .tab-center.active{color:var(--brand)}.fab{position:fixed;right:calc(50% - 262px);bottom:calc(var(--tabbar-h) + var(--safe-bottom) + 18px);z-index:25;width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg,var(--brand),var(--brand-2));color:#fff;font-size:26px;display:grid;place-items:center;box-shadow:0 10px 24px #6366f16b}@media(max-width:600px){.fab{right:18px}}.sheet-mask{position:fixed;inset:0;background:#0f172a73;z-index:40;animation:fade .18s ease}.sheet{position:fixed;left:0;right:0;bottom:0;z-index:41;max-width:560px;margin:0 auto;background:var(--card);border-radius:20px 20px 0 0;padding:16px 16px calc(16px + var(--safe-bottom));max-height:86vh;overflow-y:auto;animation:slide-up .22s cubic-bezier(.22,.61,.36,1)}.sheet-title{font-size:16px;font-weight:600;margin-bottom:14px;text-align:center}@keyframes fade{0%{opacity:0}}@keyframes slide-up{0%{transform:translateY(100%)}}.toast-host{position:fixed;left:0;right:0;bottom:calc(var(--safe-bottom) + 84px);z-index:60;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}.toast{pointer-events:auto;max-width:88%;padding:10px 16px;border-radius:12px;background:#171b2beb;color:#fff;font-size:13px;box-shadow:var(--shadow);animation:slide-up-soft .2s ease}.toast.error{background:#be185df0}.toast.success{background:#059669f0}@keyframes slide-up-soft{0%{opacity:0;transform:translateY(8px)}}.bubble-wrap{display:flex;margin-bottom:12px}.bubble-wrap.me{justify-content:flex-end}.bubble{max-width:84%;padding:10px 14px;border-radius:16px;background:var(--card);box-shadow:var(--shadow);white-space:pre-wrap;word-break:break-word;font-size:14.5px}.bubble.me{background:linear-gradient(135deg,var(--brand),var(--brand-2));color:#fff;box-shadow:none}.bubble-time{font-size:11px;color:var(--text-3);margin-top:4px;text-align:right}.cat-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}.cat-item{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 2px;border-radius:12px;border:1px solid transparent;font-size:11px;color:var(--text-2)}.cat-item .emoji{font-size:21px}.cat-item.active{background:var(--brand-soft);border-color:var(--brand);color:var(--brand);font-weight:600}.keypad{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.keypad button{padding:14px 0;border-radius:12px;background:var(--bg-elevated);border:1px solid var(--line);font-size:19px;font-weight:500}.keypad button:active{background:var(--brand-soft)}.keypad .wide{grid-row:span 2;background:linear-gradient(135deg,var(--brand),var(--brand-2));color:#fff}.stat-hero{background:linear-gradient(150deg,var(--brand),var(--brand-2));color:#fff;border-radius:var(--radius);padding:18px;margin-bottom:14px;box-shadow:0 14px 30px #6366f147}.stat-hero .label{font-size:12.5px;opacity:.86}.stat-hero .value{font-size:32px;font-weight:700;letter-spacing:-.5px;font-variant-numeric:tabular-nums}.stat-hero .sub{display:flex;gap:22px;margin-top:14px;font-size:13px}.stat-hero .sub b{display:block;font-size:16px;font-variant-numeric:tabular-nums}.progress{height:8px;border-radius:999px;background:#ffffff47;overflow:hidden;margin-top:14px}.progress>i{display:block;height:100%;border-radius:999px;background:#fff}.bar-row{display:flex;align-items:center;gap:10px;padding:7px 0}.bar-track{flex:1;height:8px;border-radius:999px;background:var(--line);overflow:hidden}.bar-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--brand),var(--brand-2))}.bar-fill.income{background:linear-gradient(90deg,#34d399,#10b981)}.segmented{display:flex;gap:6px;padding:4px;background:var(--bg-elevated);border:1px solid var(--line);border-radius:12px}.segmented button{flex:1;padding:8px 0;border-radius:9px;font-size:13.5px;color:var(--text-2);font-weight:500}.segmented button.active{background:var(--card);color:var(--brand);font-weight:600;box-shadow:var(--shadow)}.month-nav{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}.month-nav .current{font-size:15px;font-weight:600}.icon-btn{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:var(--card);border:1px solid var(--line);font-size:15px}.day-group-title{display:flex;justify-content:space-between;font-size:12.5px;color:var(--text-3);padding:10px 4px 6px}.badge{font-size:11px;padding:2px 8px;border-radius:999px;background:var(--brand-soft);color:var(--brand)}.import-preview{max-height:44vh;overflow-y:auto;border:1px solid var(--line);border-radius:12px;padding:2px 12px}.import-preview .row{padding:9px 0;border-bottom:1px solid var(--line)}.import-preview .row:last-child{border-bottom:none}.badge.bad{background:#f43f5e1f;color:var(--expense)}.switch{width:46px;height:27px;border-radius:999px;background:var(--line);position:relative;transition:background .2s ease;flex-shrink:0}.switch.on{background:var(--brand)}.switch>i{position:absolute;top:3px;left:3px;width:21px;height:21px;border-radius:50%;background:#fff;transition:transform .2s ease}.switch.on>i{transform:translate(19px)}
