:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--page:#f9f9f7;--surface:#fcfcfb;--surface-2:#f3f2ef;--text:#0b0b0b;--text-2:#52514e;--muted:#898781;--grid:#e1e0d9;--axis:#c3c2b7;--border:#0b0b0b1a;--accent:#2a78d6;--accent-ink:#fff;--series-1:#2a78d6;--series-2:#eb6834;--income-text:#006300;--critical:#d03b3b;--hover:#0b0b0b0d;--radius:12px;font-family:system-ui,-apple-system,Segoe UI,sans-serif}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--page:#0d0d0d;--surface:#1a1a19;--surface-2:#232321;--text:#f0efec;--text-2:#c3c2b7;--muted:#898781;--grid:#2c2c2a;--axis:#383835;--border:#ffffff1a;--accent:#3987e5;--series-1:#3987e5;--series-2:#d95926;--income-text:#0ca30c;--critical:#e66767;--hover:#ffffff0f}}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--page:#0d0d0d;--surface:#1a1a19;--surface-2:#232321;--text:#f0efec;--text-2:#c3c2b7;--muted:#898781;--grid:#2c2c2a;--axis:#383835;--border:#ffffff1a;--accent:#3987e5;--series-1:#3987e5;--series-2:#d95926;--income-text:#0ca30c;--critical:#e66767;--hover:#ffffff0f}*{box-sizing:border-box}html,body{margin:0}body{background:var(--page);color:var(--text);font-size:14px;line-height:1.45}button,input,select{font:inherit;color:inherit}.num{font-variant-numeric:tabular-nums;white-space:nowrap}.shell{max-width:1240px;margin:0 auto;padding:0 16px 48px}.topbar{flex-wrap:wrap;align-items:center;gap:16px;padding:14px 0;display:flex}.brand{align-items:center;gap:8px;margin-right:auto;font-size:16px;font-weight:650;display:flex}.tabs{background:var(--surface-2);border-radius:10px;gap:4px;padding:3px;display:flex}.tab{cursor:pointer;color:var(--text-2);background:0 0;border:0;border-radius:8px;padding:6px 12px}.tab[aria-selected=true]{background:var(--surface);color:var(--text);box-shadow:0 0 0 1px var(--border)}.link{color:var(--text-2);cursor:pointer;background:0 0;border:0;padding:6px}.link:hover{color:var(--text)}.filters{flex-wrap:wrap;align-items:center;gap:8px;margin:4px 0 16px;display:flex}.segmented{border:1px solid var(--border);background:var(--surface);border-radius:8px;display:inline-flex;overflow:hidden}.segmented button{cursor:pointer;color:var(--text-2);background:0 0;border:0;padding:6px 12px}.segmented button[aria-pressed=true]{background:var(--accent);color:var(--accent-ink)}.control{border:1px solid var(--border);background:var(--surface);border-radius:8px;min-height:34px;padding:6px 10px}.control:focus,.tab:focus-visible,.segmented button:focus-visible,.btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.btn{background:var(--accent);color:var(--accent-ink);cursor:pointer;border:0;border-radius:8px;padding:8px 14px;font-weight:550}.btn:disabled{opacity:.55;cursor:default}.grid{grid-template-columns:repeat(12,1fr);gap:16px;display:grid}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);min-width:0;padding:16px}.card h2{color:var(--text);margin:0 0 12px;font-size:14px;font-weight:600}.card .hint{color:var(--muted);margin-left:6px;font-size:12px;font-weight:400}.span-12{grid-column:span 12}.span-8{grid-column:span 8}.span-6{grid-column:span 6}.span-4{grid-column:span 4}.span-3{grid-column:span 3}@media (width<=900px){.span-8,.span-6,.span-4{grid-column:span 12}.span-3{grid-column:span 6}}.tile .label{color:var(--text-2);font-size:13px}.tile .value{letter-spacing:-.01em;margin-top:4px;font-size:24px;font-weight:600}.tile .sub{color:var(--muted);margin-top:2px;font-size:12px}.income{color:var(--income-text)}.legend{color:var(--text-2);gap:14px;margin-bottom:8px;font-size:12px;display:flex}.legend i{vertical-align:-1px;border-radius:3px;width:10px;height:10px;margin-right:6px;display:inline-block}.tooltip{background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:8px 10px;font-size:12px;box-shadow:0 4px 16px #0000001f}.tooltip .t-title{color:var(--text-2);margin-bottom:4px}.tooltip .t-row{justify-content:space-between;gap:12px;display:flex}.empty{color:var(--muted);text-align:center;padding:24px 0}.bars{flex-direction:column;gap:8px;display:flex}.bar-row{border-radius:6px;grid-template-columns:minmax(90px,34%) 1fr auto;align-items:center;gap:10px;padding:2px 4px;display:grid}.bar-row:hover{background:var(--hover)}.bar-row .name{text-overflow:ellipsis;white-space:nowrap;color:var(--text);overflow:hidden}.bar-track{height:10px}.bar-fill{background:var(--series-1);border-radius:0 4px 4px 0;min-width:2px;height:10px}.bar-row .value{color:var(--text-2);font-size:13px}.accounts{flex-direction:column;gap:10px;display:flex}.account{cursor:pointer;border:1px solid #0000;border-radius:8px;justify-content:space-between;align-items:baseline;gap:8px;padding:8px 10px;display:flex}.account:hover{background:var(--hover)}.account[aria-pressed=true]{border-color:var(--accent)}.account .acc-name{font-weight:550}.account .acc-id{color:var(--muted);font-size:12px}.account .acc-balance{font-weight:600}table{border-collapse:collapse;width:100%}th{text-align:left;color:var(--text-2);border-bottom:1px solid var(--grid);white-space:nowrap;padding:8px;font-size:12px;font-weight:500}td{border-bottom:1px solid var(--grid);vertical-align:top;padding:8px}tr:hover td{background:var(--hover)}td.amount,th.amount{text-align:right}.desc{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;max-width:420px;font-size:12px;overflow:hidden}.payee{font-weight:500}.cat-select{background:0 0;border:1px solid #0000;border-radius:6px;max-width:190px;padding:3px 4px}.cat-select:hover,.cat-select:focus{border-color:var(--border);background:var(--surface)}.badge{color:var(--muted);margin-left:4px;font-size:11px}.table-wrap{overflow-x:auto}.pager{color:var(--text-2);justify-content:space-between;align-items:center;margin-top:12px;display:flex}.login{place-items:center;min-height:100vh;padding:16px;display:grid}.login form{flex-direction:column;gap:12px;width:min(360px,100%);display:flex}.login h1{margin:0 0 4px;font-size:20px}.error{color:var(--critical)}.dropzone{border:2px dashed var(--axis);border-radius:var(--radius);text-align:center;color:var(--text-2);cursor:pointer;padding:40px 16px}.dropzone[data-active=true]{border-color:var(--accent);background:var(--hover)}.results{flex-direction:column;gap:8px;margin-top:16px;display:flex}
