:root{--bg:#f6f6f4;--bg-veil:none;--surface:#fff;--surface-2:#f1f1ee;--surface-3:#e7e7e3;--ink:#1d1d1b;--ink-2:#6c6b66;--ink-3:#a5a49e;--line:#e8e7e2;--accent:#0c7a5e;--accent-deep:#085c47;--accent-soft:#e4f2ec;--accent-ink:#0a5c47;--danger:#c2402f;--danger-soft:#faeae7;--warn:#9a6a12;--warn-soft:#f7efdb;--credit:#0c7a5e;--debit:#1d1d1b;--radius-lg:16px;--radius:12px;--radius-sm:9px;--shadow-1:0 1px 2px #1414120a;--shadow-2:0 4px 16px #14141214;--nav-h:64px;--font-ui:"Outfit", system-ui, -apple-system, "Segoe UI", sans-serif;--font-brand:"Fraunces", Georgia, serif}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#131312;--bg-veil:none;--surface:#1b1b1a;--surface-2:#242423;--surface-3:#2e2e2c;--ink:#f0efec;--ink-2:#a5a49e;--ink-3:#6c6b66;--line:#2b2b29;--accent:#3fbf97;--accent-deep:#63d4ae;--accent-soft:#12352a;--accent-ink:#7adcbb;--danger:#e5766a;--danger-soft:#3a1a15;--warn:#d9a943;--warn-soft:#35290e;--credit:#3fbf97;--debit:#f0efec;--shadow-1:0 1px 2px #0000004d;--shadow-2:0 4px 16px #00000059}}:root[data-theme=dark]{--bg:#131312;--bg-veil:none;--surface:#1b1b1a;--surface-2:#242423;--surface-3:#2e2e2c;--ink:#f0efec;--ink-2:#a5a49e;--ink-3:#6c6b66;--line:#2b2b29;--accent:#3fbf97;--accent-deep:#63d4ae;--accent-soft:#12352a;--accent-ink:#7adcbb;--danger:#e5766a;--danger-soft:#3a1a15;--warn:#d9a943;--warn-soft:#35290e;--credit:#3fbf97;--debit:#f0efec;--shadow-1:0 1px 2px #0000004d;--shadow-2:0 4px 16px #00000059}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);background-image:var(--bg-veil);color:var(--ink);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;background-attachment:fixed;margin:0;font-size:15px;line-height:1.5}h1,h2,h3{letter-spacing:-.015em;text-wrap:balance;margin:0;font-weight:600}h1{font-size:24px}h2{font-size:16px}h3{font-size:15px}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit}input,select,textarea{font:inherit;color:var(--ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.tnum{font-variant-numeric:tabular-nums}.brand{font-family:var(--font-brand);letter-spacing:0;font-style:italic;font-weight:600}.brand-mark{background:var(--accent);color:#fdfcf9;border-radius:9px;flex-shrink:0;justify-content:center;align-items:center;width:30px;height:30px;display:inline-flex}.brand-mark svg{width:18px;height:18px}.shell{min-height:100dvh;display:flex}.sidebar{background:var(--surface);border-right:1px solid var(--line);flex-direction:column;flex-shrink:0;gap:2px;width:228px;height:100dvh;padding:22px 14px;display:none;position:sticky;top:0}.main{min-width:0;padding:20px 16px calc(var(--nav-h) + 28px);flex:1;width:100%;max-width:1060px;margin:0 auto}.tabbar{height:var(--nav-h);background:color-mix(in srgb, var(--surface) 88%, transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);z-index:40;display:flex;position:fixed;bottom:0;left:0;right:0}.tabbar a{color:var(--ink-3);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:3px;font-size:10.5px;font-weight:500;transition:color .2s;display:flex;position:relative}.tabbar a.active{color:var(--accent)}.tabbar svg{width:22px;height:22px}.navlink{border-radius:var(--radius-sm);color:var(--ink-2);align-items:center;gap:11px;padding:10px 13px;font-weight:500;transition:background .18s,color .18s;display:flex}.navlink.active{background:var(--accent-soft);color:var(--accent-ink);font-weight:600}.navlink:hover:not(.active){background:var(--surface-2);color:var(--ink)}.navlink svg{width:19px;height:19px}@media (width>=900px){.sidebar{display:flex}.tabbar{display:none}.main{padding:30px 36px 56px}}.badge-dot{background:var(--danger);color:#fff;border-radius:8px;justify-content:center;align-items:center;min-width:16px;height:16px;padding:0 4px;font-size:10px;font-weight:700;display:flex;position:absolute;top:8px;right:calc(50% - 17px)}.badge-inline{background:var(--danger);color:#fff;border-radius:10px;justify-content:center;align-items:center;min-width:19px;height:19px;margin-left:auto;padding:0 5px;font-size:11px;font-weight:700;display:inline-flex}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-1);padding:16px;transition:box-shadow .25s}.tile-head{color:var(--ink-2);align-items:center;gap:6px;margin-bottom:6px;font-size:12px;font-weight:550;display:flex}.tile-head svg{opacity:.8;width:14px;height:14px}.chip{font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:3px;padding:1px 7px;font-size:11px;font-weight:650;display:inline-flex}.chip.up-bad,.chip.down-good.inverted{background:var(--danger-soft);color:var(--danger)}.chip.down-good,.chip.good{background:var(--accent-soft);color:var(--accent-ink)}.chip.flat{background:var(--surface-2);color:var(--ink-2)}.vs{color:var(--ink-3);font-size:11px}.nav-group{letter-spacing:.07em;text-transform:uppercase;color:var(--ink-3);padding:14px 13px 5px;font-size:10.5px;font-weight:650}.card.flush{padding:10px 18px}.card+.card,.stack>*+*{margin-top:14px}.hero{background:var(--surface);border:1px solid var(--line);color:var(--ink);border-radius:var(--radius-lg);box-shadow:var(--shadow-1);padding:20px 18px 16px;position:relative}.hero .big-number{color:var(--accent)}.row{align-items:center;gap:10px;display:flex}.row-between{justify-content:space-between;align-items:center;gap:10px;display:flex}.grid-2{grid-template-columns:1fr 1fr;gap:14px;display:grid}.grid-4{grid-template-columns:repeat(4,1fr);gap:10px;display:grid}@media (width<=560px){.grid-2.collapse{grid-template-columns:1fr}.grid-4{grid-template-columns:repeat(2,1fr)}}.muted{color:var(--ink-2)}.faint{color:var(--ink-3)}.small{font-size:13px}.tiny{letter-spacing:.01em;font-size:11.5px}.label{letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);font-size:11px;font-weight:600}.btn{border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:var(--radius-sm);cursor:pointer;justify-content:center;align-items:center;gap:6px;padding:8px 15px;font-weight:550;transition:background .18s,transform .1s,box-shadow .18s,border-color .18s;display:inline-flex}.btn:hover{background:var(--surface-2)}.btn:active{transform:scale(.97)}.btn.primary{background:var(--accent);color:#f6fbf9;box-shadow:0 3px 10px color-mix(in srgb, var(--accent) 35%, transparent);border-color:#0000}.btn.primary:hover{background:var(--accent-deep)}.btn.danger{color:var(--danger);background:var(--danger-soft);border-color:#0000}.btn.ghost{background:0 0;border-color:#0000}.btn.ghost:hover{background:var(--surface-2)}.btn.small{padding:5px 11px;font-size:13px}.btn:disabled{opacity:.5;cursor:default;transform:none}.btn svg{width:16px;height:16px}.field{flex-direction:column;gap:5px;margin-bottom:13px;display:flex}.field label{color:var(--ink-2);font-size:12.5px;font-weight:600}.field input,.field select,.field textarea{border:1.5px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);width:100%;padding:9px 12px;transition:border-color .18s}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent);outline:none}.seg{background:var(--surface-2);border-radius:var(--radius-sm);gap:2px;padding:3px;display:inline-flex}.seg button{color:var(--ink-2);cursor:pointer;background:0 0;border:0;border-radius:8px;padding:6px 14px;font-weight:550;transition:background .18s,color .18s}.seg button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-1)}.modal-back{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:60;background:#14100a80;justify-content:center;align-items:flex-end;animation:.18s fade-in;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:var(--radius-lg) var(--radius-lg) 0 0;width:100%;max-width:560px;max-height:88dvh;padding:22px 20px calc(22px + env(safe-area-inset-bottom));animation:.22s cubic-bezier(.2,.9,.3,1) rise;overflow-y:auto}@media (width>=640px){.modal-back{align-items:center}.modal{border-radius:var(--radius-lg)}}@keyframes fade-in{0%{opacity:0}}@keyframes rise{0%{opacity:.6;transform:translateY(26px)}}.list-row{border-bottom:1px solid var(--line);border-radius:6px;align-items:center;gap:12px;padding:11px 2px;transition:background .15s;display:flex}.list-row:last-child{border-bottom:0}a.list-row:hover,.list-row[role=button]:hover{background:var(--surface-2)}.cat-dot{border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;font-size:17px;display:flex}.pill{border-radius:7px;align-items:center;gap:4px;padding:2px 9px;font-size:11.5px;font-weight:600;display:inline-flex}.pill.good{background:var(--accent-soft);color:var(--accent-ink)}.pill.bad{background:var(--danger-soft);color:var(--danger)}.pill.warn{background:var(--warn-soft);color:var(--warn)}.pill.plain{background:var(--surface-2);color:var(--ink-2)}.meter{background:var(--surface-2);border-radius:4px;height:7px;overflow:hidden}.meter>div{background:var(--accent);border-radius:4px;height:100%;transition:width .5s cubic-bezier(.2,.8,.3,1)}.meter>div.over{background:var(--danger)}.meter>div.close{background:var(--warn)}.empty{text-align:center;color:var(--ink-2);padding:44px 20px}.empty .glyph{margin-bottom:10px;font-size:36px}.page-head{justify-content:space-between;align-items:center;gap:10px;margin-bottom:18px;display:flex}.amount-credit{color:var(--credit);font-weight:650}.amount-debit{color:var(--debit);font-weight:650}.delta-up{color:var(--danger);font-weight:600}.delta-down{color:var(--accent);font-weight:600}.error-banner{background:var(--danger-soft);color:var(--danger);border-radius:var(--radius-sm);padding:10px 12px;font-size:13.5px}.skeleton{border-radius:var(--radius);background:linear-gradient(100deg, var(--surface-2) 40%, var(--surface-3) 50%, var(--surface-2) 60%);background-size:200% 100%;animation:1.3s linear infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}.enter{animation:.35s cubic-bezier(.2,.8,.3,1) both enter}.enter:nth-child(2){animation-delay:40ms}.enter:nth-child(3){animation-delay:80ms}.enter:nth-child(4){animation-delay:.12s}.enter:nth-child(5){animation-delay:.16s}.enter:nth-child(6){animation-delay:.2s}@keyframes enter{0%{opacity:0;transform:translateY(10px)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
