:root{--bg: #f4f5f9;--surface: #ffffff;--surface-2: #eceef8;--surface-3: #e2e3ea;--text: #15172d;--text-2: #56596c;--text-3: #9b9caa;--line: #e4e5ee;--primary: #545bfe;--primary-ink: #383ca3;--primary-soft: #e2e3ff;--primary-contrast: #ffffff;--positive: #02bc79;--positive-ink: #01744e;--positive-soft: #dff6ec;--negative: #bf2e3b;--negative-ink: #912333;--negative-soft: #fdd7d3;--caution: #f6c91d;--caution-ink: #6d5600;--caution-soft: #fdf3d2;--zero-soft: #eceef8;--zero-ink: #56596c;--shadow: 0 1px 2px rgba(21, 23, 45, .08), 0 8px 24px -12px rgba(21, 23, 45, .25);--nav-h: 60px;--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-top: env(safe-area-inset-top, 0px);--radius: 12px;color-scheme:light}:root[data-theme=dark]{--bg: #111228;--surface: #1a1c32;--surface-2: #23254a;--surface-3: #2c2e4a;--sheet-bg: #20223c;--text: #e8e9f4;--text-2: #a7a9be;--text-3: #8b8da0;--line: #2c2e4a;--primary: #7583ff;--primary-ink: #a3acff;--primary-soft: #23255a;--primary-contrast: #ffffff;--positive: #41d298;--positive-ink: #6be9b8;--positive-soft: #133d33;--rta-bg: #0f8c62;--negative: #e48585;--negative-ink: #faada5;--negative-soft: #4c1a20;--caution: #f8d655;--caution-ink: #fbe48e;--caution-soft: #3a3005;--zero-soft: #2c2e4a;--zero-ink: #a7a9be;--shadow: 0 1px 2px rgba(0, 0, 0, .35), 0 8px 24px -12px rgba(0, 0, 0, .6);color-scheme:dark}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #111228;--surface: #1a1c32;--surface-2: #23254a;--surface-3: #2c2e4a;--sheet-bg: #20223c;--text: #e8e9f4;--text-2: #a7a9be;--text-3: #8b8da0;--line: #2c2e4a;--primary: #7583ff;--primary-ink: #a3acff;--primary-soft: #23255a;--primary-contrast: #ffffff;--positive: #41d298;--positive-ink: #6be9b8;--positive-soft: #133d33;--rta-bg: #0f8c62;--negative: #e48585;--negative-ink: #faada5;--negative-soft: #4c1a20;--caution: #f8d655;--caution-ink: #fbe48e;--caution-soft: #3a3005;--zero-soft: #2c2e4a;--zero-ink: #a7a9be;--shadow: 0 1px 2px rgba(0, 0, 0, .35), 0 8px 24px -12px rgba(0, 0, 0, .6);color-scheme:dark}}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:Roboto,Segoe UI,system-ui,-apple-system,sans-serif;font-size:15px;line-height:1.4;overscroll-behavior-y:none;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}button{background:none;border:0;padding:0;cursor:pointer}a{color:inherit;text-decoration:none}h1,h2,h3,p{margin:0}.num{font-variant-numeric:tabular-nums}.app{height:100%;display:flex;flex-direction:column;max-width:640px;margin:0 auto;background:var(--bg);position:relative}.screen{flex:1;display:flex;flex-direction:column;min-height:0}.content{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:calc(var(--nav-h) + var(--safe-bottom) + 24px)}.content.has-fab{padding-bottom:calc(var(--safe-bottom) + 96px)}.content.no-nav{padding-bottom:calc(var(--safe-bottom) + 32px)}.topbar{display:flex;align-items:center;gap:8px;min-height:56px;padding:calc(var(--safe-top) + 4px) 8px 4px;background:var(--surface);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}.topbar.plain{background:var(--bg);border-bottom:0}.topbar-title{flex:1;min-width:0;font-size:19px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-title small{display:block;font-size:12px;font-weight:400;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-title.center{text-align:center}.iconbtn{width:44px;height:44px;border-radius:22px;display:inline-flex;align-items:center;justify-content:center;color:var(--text);flex:0 0 auto}.iconbtn:active{background:var(--surface-2)}.iconbtn.primary{color:var(--primary)}.textbtn{color:var(--primary);font-weight:600;padding:8px 12px;border-radius:8px;white-space:nowrap}.textbtn:disabled{color:var(--text-3)}.textbtn.danger{color:var(--negative)}.bottomnav{position:absolute;left:0;right:0;bottom:0;height:calc(var(--nav-h) + var(--safe-bottom));padding-bottom:var(--safe-bottom);background:var(--surface);border-top:1px solid var(--line);display:flex;z-index:6}.bottomnav a{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:11px;font-weight:500;color:var(--text-2)}.bottomnav a .ico{width:100%;max-width:44px;height:30px;border-radius:15px;display:flex;align-items:center;justify-content:center}.bottomnav a.active{color:var(--primary-ink)}.bottomnav a.active .ico{background:var(--primary-soft);color:var(--primary-ink)}.nav-add{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:11px;font-weight:500;color:var(--primary-ink)}.nav-add-btn{width:50px;height:30px;border-radius:15px;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px -4px #545bfe99}.nav-add:active .nav-add-btn{transform:scale(.95)}.row-title.wrap,.row-sub.wrap{white-space:normal}.todo-row .btn.sm{min-width:96px}.fab{position:absolute;left:50%;transform:translate(-50%);bottom:calc(var(--safe-bottom) + 16px);height:48px;padding:0 18px 0 14px;border-radius:24px;background:var(--primary);color:var(--primary-contrast);display:flex;align-items:center;justify-content:center;gap:6px;font-weight:600;font-size:15px;box-shadow:0 6px 16px -4px #545bfe8c;z-index:6;white-space:nowrap}.fab:active{transform:translate(-50%) scale(.96)}.card{background:var(--surface);border-radius:var(--radius);margin:12px 16px;overflow:hidden;border:1px solid var(--line)}.card.flat{border:0}.section-title{font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-2);padding:18px 16px 6px}.row{display:flex;align-items:center;gap:12px;padding:12px 16px;min-height:52px;border-bottom:1px solid var(--line);width:100%;text-align:left;background:var(--surface)}.row:last-child{border-bottom:0}.row:active{background:var(--surface-2)}.row.static:active{background:var(--surface)}.row-main{flex:1;min-width:0}.row-title{font-size:15px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row-sub{font-size:12.5px;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}.row-sub.warn{color:var(--caution-ink)}.row-sub.bad{color:var(--negative)}.row-sub.good{color:var(--positive-ink)}.row-end{text-align:right;flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:3px}.chev{color:var(--text-3);flex:0 0 auto}.amt{font-variant-numeric:tabular-nums;font-weight:500;white-space:nowrap}.amt.pos{color:var(--positive-ink)}.amt.neg{color:var(--negative)}.amt.muted{color:var(--text-2)}.pill{display:inline-block;padding:4px 10px;border-radius:999px;font-variant-numeric:tabular-nums;font-weight:600;font-size:14px;line-height:1.2;white-space:nowrap}.pill.positive{background:var(--positive-soft);color:var(--positive-ink)}.pill.zero{background:var(--zero-soft);color:var(--zero-ink)}.pill.negative{background:var(--negative-soft);color:var(--negative-ink)}.pill.cautious_credit,.pill.cautious_upcoming,.pill.cautious_goal,.pill.caution{background:var(--caution-soft);color:var(--caution-ink)}.cat-row .pill{min-width:96px;text-align:center}.cleared-glyph{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;flex:0 0 auto;font-weight:700;border:1.5px solid var(--text-3);color:var(--text-3);background:transparent}.cleared-glyph.cleared{border-color:var(--positive);background:var(--positive);color:#fff}.cleared-glyph.reconciled{border-color:transparent;background:var(--surface-3);color:var(--text-2)}.chips{display:flex;flex-wrap:nowrap;gap:8px;padding:6px 16px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}.chips::-webkit-scrollbar{display:none}.chips.fade{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 36px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 36px),transparent);padding-right:40px}.nowrap{white-space:nowrap}input::placeholder,textarea::placeholder{color:var(--text-3);opacity:1}.chip{flex:0 0 auto;min-height:40px;padding:8px 14px;border-radius:999px;background:var(--surface);border:1px solid var(--line);font-size:13px;font-weight:500;color:var(--text-2);display:inline-flex;align-items:center;gap:6px}.chip.on{background:var(--primary-soft);border-color:transparent;color:var(--primary-ink)}.chip-count{background:var(--primary);color:#fff;border-radius:999px;font-size:11px;padding:1px 6px}.needs-strip{margin:6px 16px 4px;display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:12px;background:var(--caution-soft);color:var(--caution-ink);width:calc(100% - 32px);text-align:left}.needs-strip b{font-variant-numeric:tabular-nums}.needs-strip .chev{color:var(--caution-ink)}.decision{margin:12px 16px;padding:16px;border-radius:16px;background:var(--surface);border:1px solid var(--line)}.decision h3{font-size:18px;font-weight:700;margin-bottom:4px}.decision p{color:var(--text-2);font-size:14px}.decision .btnrow{padding:12px 0 0}.row.danger .row-title{color:var(--negative)}.field .val-sub{display:block;font-size:12px;color:var(--text-2)}.sheet-head{display:flex;align-items:center;padding:0 8px 0 20px}.sheet-head .sheet-title{flex:1;text-align:left;padding-left:0}.sheet-close{width:40px;height:40px}.bar.neutral .funded{background:var(--surface-3)}.group-head.plain{position:static}.pill.primary{background:var(--primary-soft);color:var(--primary-ink)}.bar{display:flex;height:5px;border-radius:3px;overflow:hidden;background:var(--surface-3);margin-top:6px}.bar>span{display:block;height:100%}.bar .funded{background:var(--positive)}.bar .spent{background:var(--primary)}.bar .over{background:var(--negative)}.bar .credit{background:var(--caution)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:10px 18px;border-radius:12px;font-weight:600;font-size:15px;background:var(--surface-2);color:var(--text);width:100%}.btn:active{filter:brightness(.95)}.btn:disabled{opacity:.5}.btn.primary{background:var(--primary);color:var(--primary-contrast)}.btn.positive{background:var(--rta-bg, var(--positive));color:#fff}.btn.outline{background:transparent;border:1.5px solid var(--line)}.btn.danger{background:var(--negative-soft);color:var(--negative-ink)}.btn.sm{min-height:36px;padding:6px 14px;font-size:14px;width:auto;border-radius:10px}.btnrow{display:flex;gap:10px;padding:12px 16px}.field{display:flex;align-items:center;gap:12px;padding:10px 16px;min-height:56px;border-bottom:1px solid var(--line);background:var(--surface);width:100%;text-align:left}.field:last-child{border-bottom:0}.field label,.field .lbl{flex:0 0 110px;color:var(--text-2);font-size:14px}.field .val{flex:1;min-width:0;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.field .val.placeholder{color:var(--text-3)}.field input[type=text],.field input[type=number],.field input[type=date],.field textarea,.field select{flex:1;min-width:0;background:transparent;border:0;outline:none;text-align:right;padding:6px 0}.field textarea{text-align:left;resize:none;min-height:60px}.input{width:100%;background:var(--surface-2);border:1.5px solid transparent;border-radius:10px;padding:12px 14px;outline:none}.input:focus{border-color:var(--primary);background:var(--surface)}.switch{width:46px;height:26px;border-radius:13px;background:var(--surface-3);position:relative;flex:0 0 auto;transition:background .15s}.switch:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:10px;background:#fff;box-shadow:0 1px 3px #0000004d;transition:left .15s}.switch.on{background:var(--primary)}.switch.on:after{left:23px}.seg{display:flex;background:var(--surface-2);border-radius:10px;padding:3px;margin:12px 16px}.seg button{flex:1;padding:8px;border-radius:8px;font-weight:600;color:var(--text-2)}.seg button.on{background:var(--primary-soft);color:var(--primary-ink);box-shadow:var(--shadow)}.bottombar{position:absolute;left:0;right:0;bottom:0;padding:10px 16px calc(10px + var(--safe-bottom));background:var(--surface);border-top:1px solid var(--line);z-index:6;display:flex;gap:10px}.field .val-sub{white-space:normal}.sticky-save{position:sticky;bottom:0;padding:10px 16px calc(10px + var(--safe-bottom));background:var(--bg);border-top:1px solid var(--line);z-index:3}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:#06060f73;z-index:20;display:flex;align-items:flex-end;justify-content:center}.sheet{width:100%;max-width:640px;max-height:92vh;background:var(--sheet-bg, var(--surface));border-radius:20px 20px 0 0;padding-bottom:var(--safe-bottom);display:flex;flex-direction:column;animation:sheet-in .18s ease-out}@keyframes sheet-in{0%{transform:translateY(40px);opacity:.6}to{transform:none;opacity:1}}@media(prefers-reduced-motion:reduce){.sheet{animation:none}}.sheet-grip{width:36px;height:4px;border-radius:2px;background:var(--surface-3);margin:10px auto 4px}.sheet-title{font-size:17px;font-weight:600;padding:10px 20px 8px;text-align:center}.sheet-body{overflow-y:auto;min-height:0;padding-bottom:8px}.sheet .row{background:transparent}.dialog{align-items:center;padding:24px}.dialog .sheet{border-radius:16px;max-width:400px;padding:20px;gap:8px}.dialog h3{font-size:18px;font-weight:600}.dialog p{color:var(--text-2);font-size:14px}.dialog .actions{display:flex;justify-content:flex-end;gap:4px;margin-top:12px}.keypad{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:8px 12px calc(12px + var(--safe-bottom));background:var(--surface-2)}.keypad button{height:50px;border-radius:10px;background:var(--surface);font-size:20px;font-weight:500}.keypad button:active{background:var(--surface-3)}.keypad button.op{background:var(--surface-3);color:var(--primary-ink)}.keypad button.done{background:var(--primary);color:#fff;grid-row:span 2;height:auto}.keypad-display{padding:14px 20px 6px;text-align:right;font-size:34px;font-weight:600;font-variant-numeric:tabular-nums;min-height:60px;overflow:hidden;white-space:nowrap}.keypad-display small{display:block;font-size:13px;font-weight:400;color:var(--text-2)}.month-nav{display:flex;align-items:center;justify-content:center;gap:4px;padding:6px 8px 0}.month-nav .month{min-width:170px;text-align:center;font-size:17px;font-weight:600}.rta{margin:10px 16px 6px;border-radius:16px;padding:14px 16px;display:flex;align-items:center;gap:12px;color:#fff;background:var(--rta-bg, var(--positive))}.rta.zero{background:var(--primary)}.rta.negative{background:var(--negative)}.rta .big{font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.1}.rta .lbl{font-size:12.5px;opacity:.92;margin-top:2px}.rta .btn{width:auto;background:#ffffff38;color:#fff;min-height:38px;padding:6px 14px}.group-head{display:flex;align-items:center;gap:8px;padding:10px 16px 6px;background:var(--bg);position:sticky;top:0;z-index:2}.group-head .name{flex:1;text-align:left;font-size:13px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text-2)}.group-head .tot{font-size:12.5px;color:var(--text-2);font-variant-numeric:tabular-nums}.cat-row{display:flex;align-items:center;gap:10px;padding:10px 16px;background:var(--surface);border-bottom:1px solid var(--line);width:100%;text-align:left}.cat-row:last-child{border-bottom:0}.cat-row:active{background:var(--surface-2)}.cat-row .main{flex:1;min-width:0}.cat-row .name{font-size:15px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cat-row .sub{font-size:12px;color:var(--text-2);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cat-row .sub.warn{color:var(--caution-ink)}.cat-row .sub.good{color:var(--positive-ink)}.cat-row .sub.bad{color:var(--negative)}.assign-row{gap:8px;flex-wrap:wrap}.assign-row .main{flex:1 1 140px;min-width:0}.assign-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.spotlight{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;margin-top:10px}.spotlight .k{font-size:12px;color:var(--text-2)}.spotlight .v{font-size:17px;font-weight:600}.empty{text-align:center;padding:48px 32px;color:var(--text-2)}.empty h3{color:var(--text);font-size:18px;margin-bottom:8px}.help{font-size:13px;color:var(--text-2);padding:6px 16px 10px;line-height:1.45}.stat{display:flex;justify-content:space-between;align-items:baseline;padding:8px 16px;font-size:14px}.stat .k{color:var(--text-2)}.center{text-align:center}.spacer{height:16px}.toast{position:absolute;left:16px;right:16px;bottom:calc(var(--nav-h) + var(--safe-bottom) + 16px);background:var(--text);color:var(--bg);padding:12px 16px;border-radius:10px;z-index:30;font-size:14px;box-shadow:var(--shadow)}.chart{width:100%;height:auto;display:block}.legend{display:flex;gap:16px;padding:4px 16px 12px;font-size:12.5px;color:var(--text-2)}.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}.flag-dot{width:10px;height:18px;border-radius:3px;flex:0 0 auto}.checkbox{width:22px;height:22px;border-radius:6px;border:2px solid var(--text-3);display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:#fff}.search{display:flex;align-items:center;gap:8px;margin:8px 16px;padding:8px 12px;border-radius:12px;background:var(--surface-2)}.search input{flex:1;border:0;background:transparent;outline:none;min-width:0}.keypad button.done:disabled{opacity:.45;cursor:default}.row-title.clamp2,.row-sub.clamp2{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.cleared-glyph{position:relative}.cleared-glyph:before{content:"";position:absolute;top:-9px;right:-9px;bottom:-9px;left:-9px}.btn:disabled{opacity:.5;cursor:default}.checkbox{width:22px;height:22px;border-radius:6px;border:2px solid var(--text-3);display:inline-flex;align-items:center;justify-content:center;color:#fff;flex:0 0 auto}.checkbox.on{background:var(--primary);border-color:var(--primary)}.row.selected{background:var(--primary-soft)}.row.dim{opacity:.55}
