:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--paper:#faf9f5;--paper-raised:#fff;--paper-sunken:#f2f0ea;--ink:#1a1c1f;--ink-2:#5b5e64;--ink-3:#8d9096;--line:#e5e2d9;--line-strong:#d3cfc2;--accent:#1d5c4f;--accent-soft:#e2efeb;--accent-ink:#0f3a30;--good:#1a7a4c;--good-soft:#e2f2e8;--bad:#b3392f;--bad-soft:#fbe9e6;--warn:#a15b1f;--warn-soft:#f6e8d7;--cat-business:#2a78d6;--cat-debt:#eb6834;--cat-expense:#e34948;--cat-income:#1baf7a;--cat-savings:#c98500;--cat-transfer:#4a3aa7;--shadow:0 1px 2px #1e190a0d, 0 10px 28px -14px #1e190a2e;--radius:14px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--paper:#15171b;--paper-raised:#1c1f24;--paper-sunken:#101214;--ink:#f1efe9;--ink-2:#b7b9bd;--ink-3:#83868c;--line:#2b2e33;--line-strong:#3a3d43;--accent:#52d6ba;--accent-soft:#173430;--accent-ink:#8ff0da;--good:#49c88a;--good-soft:#153327;--bad:#ef8078;--bad-soft:#3a201d;--warn:#e0a25a;--warn-soft:#3a2c17;--cat-business:#5fa2ec;--cat-debt:#e07a45;--cat-expense:#e97873;--cat-income:#3fce9d;--cat-savings:#dba327;--cat-transfer:#9085e9;--shadow:0 1px 2px #0000004d, 0 10px 28px -14px #00000080}}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--paper:#15171b;--paper-raised:#1c1f24;--paper-sunken:#101214;--ink:#f1efe9;--ink-2:#b7b9bd;--ink-3:#83868c;--line:#2b2e33;--line-strong:#3a3d43;--accent:#52d6ba;--accent-soft:#173430;--accent-ink:#8ff0da;--good:#49c88a;--good-soft:#153327;--bad:#ef8078;--bad-soft:#3a201d;--warn:#e0a25a;--warn-soft:#3a2c17;--cat-business:#5fa2ec;--cat-debt:#e07a45;--cat-expense:#e97873;--cat-income:#3fce9d;--cat-savings:#dba327;--cat-transfer:#9085e9;--shadow:0 1px 2px #0000004d, 0 10px 28px -14px #00000080}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);margin:0;padding-block:20px 48px;padding-inline:16px;font-family:Public Sans,-apple-system,system-ui,sans-serif;font-size:15px;line-height:1.5}h1,h2,h3{text-wrap:balance;margin:0;font-family:Fraunces,Georgia,serif}.mono,.num{font-variant-numeric:tabular-nums;font-family:IBM Plex Mono,ui-monospace,monospace}a{color:inherit}.wrap{max-width:1080px;margin-inline:auto}.pos{color:var(--good)}.neg{color:var(--bad)}.muted{color:var(--ink-3)}button,.btn{border:1px solid var(--line-strong);background:var(--paper-raised);color:var(--ink);cursor:pointer;border-radius:9px;padding:7px 12px;font-family:inherit;font-size:13px}button:disabled{opacity:.45;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:var(--paper);font-weight:600}button.link{color:var(--accent);font-size:inherit;background:0 0;border:none;padding:0;text-decoration:underline}input,select,textarea{border:1px solid var(--line-strong);background:var(--paper-raised);color:var(--ink);border-radius:9px;max-width:100%;padding:7px 10px;font-family:inherit;font-size:13px}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}header.top{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px 20px;margin-bottom:22px;display:flex}header.top h1{letter-spacing:-.01em;font-size:26px;font-weight:600}.subhead{color:var(--ink-2);margin-top:4px;font-size:13.5px}.header-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.accounts{flex-wrap:wrap;gap:6px;display:flex}.chip{background:var(--paper-raised);border:1px solid var(--line);color:var(--ink-2);white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:4px 10px;font-size:12px;display:inline-flex}.chip .dot{border-radius:50%;flex:none;width:6px;height:6px}.notice{background:var(--warn-soft);color:var(--ink);border-radius:12px;margin-bottom:18px;padding:12px 14px;font-size:13.5px}.notice strong{color:var(--warn)}.notice.ok{background:var(--good-soft)}.notice ul{margin:6px 0 0;padding-left:18px}.notice .row{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}.tiles{grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:26px;display:grid}@media (width<=760px){.tiles{grid-template-columns:repeat(2,1fr)}}.tile{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);min-width:0;padding:14px 16px}.tile .label{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);margin-bottom:6px;font-size:11.5px}.tile .value{font-variant-numeric:tabular-nums;overflow-wrap:anywhere;font-family:IBM Plex Mono,monospace;font-size:22px;font-weight:600}.tile .sub{color:var(--ink-2);margin-top:4px;font-size:12px}.tile.warn{background:var(--warn-soft);border-color:#0000}.tile.warn .value{color:var(--warn)}a.tile{text-decoration:none;display:block}@media (width<=420px){.tile .value{font-size:18px}}section{margin-bottom:30px}.section-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:12px;display:flex}.section-head h2{font-size:18px;font-weight:600}.section-head .hint{color:var(--ink-3);font-size:12.5px}.card{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px}@media (width<=480px){.card{padding:14px}}.card h3{color:var(--ink-2);margin-bottom:12px;font-family:Public Sans,sans-serif;font-size:13px;font-weight:600}svg.chart{touch-action:pan-y;width:100%;height:auto;display:block;overflow:visible}.axis-label{fill:var(--ink-3);font-family:IBM Plex Mono,monospace;font-size:10.5px}.tooltip{pointer-events:none;z-index:50;background:var(--ink);color:var(--paper);box-shadow:var(--shadow);white-space:nowrap;border-radius:8px;margin-top:-12px;padding:8px 10px;font-size:12px;line-height:1.4;position:fixed;transform:translate(-50%,-100%)}.legend{margin-top:6px}.barlist{flex-direction:column;gap:9px;display:flex}.barrow{grid-template-columns:160px 1fr 84px;align-items:center;gap:10px;display:grid}@media (width<=600px){.barrow{grid-template-columns:110px 1fr 76px;font-size:13px}}.barrow .name{color:var(--ink-2);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.barrow .track{background:var(--paper-sunken);border-radius:5px;height:10px;overflow:hidden}.barrow .fill{border-radius:5px;height:100%}.barrow .amt{text-align:right;font-family:IBM Plex Mono,monospace;font-size:12.5px}.twocol{grid-template-columns:1fr 1fr;gap:18px;display:grid}@media (width<=760px){.twocol{grid-template-columns:1fr}}.panel-note{color:var(--ink-3);border-top:1px dashed var(--line);margin-top:12px;padding-top:10px;font-size:12px}.sankey-card{-webkit-overflow-scrolling:touch;overflow-x:auto}svg.sankey{min-width:640px}.sankey-link{cursor:pointer;transition:opacity .12s}.sankey-node-label{fill:var(--ink-2);font-size:11px}.sankey-node-value{fill:var(--ink-3);font-family:IBM Plex Mono,monospace;font-size:10.5px}.sankey-col-label{text-transform:uppercase;letter-spacing:.06em;fill:var(--ink-3);font-size:11px;font-weight:600}.scroll-hint{color:var(--ink-3);margin-bottom:6px;font-size:11.5px;display:none}@media (width<=700px){.scroll-hint{display:block}}.bucketgrid{grid-template-columns:repeat(4,1fr);gap:10px;display:grid}.bucketgrid.five{grid-template-columns:repeat(5,1fr)}@media (width<=900px){.bucketgrid.five{grid-template-columns:repeat(3,1fr)}}@media (width<=760px){.bucketgrid,.bucketgrid.five{grid-template-columns:repeat(2,1fr)}}.bucketcard{background:var(--paper-sunken);border-radius:10px;min-width:0;padding:12px 14px}.bucketcard.placeholder{border:1px dashed var(--line-strong);background:0 0}.bucketcard .label{text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);align-items:center;gap:6px;margin-bottom:5px;font-size:11px;display:flex}.bucketcard .value{overflow-wrap:anywhere;font-family:IBM Plex Mono,monospace;font-size:17px;font-weight:600}.bucketcard .sub{color:var(--ink-3);margin-top:3px;font-size:11.5px}.bucketcard form{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.bucketcard form input{width:100%}.review-list{flex-direction:column;display:flex}.review-item{border-bottom:1px solid var(--line);padding:12px 16px}.review-item:last-child{border-bottom:none}.review-top{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.review-desc{overflow-wrap:anywhere;font-size:13.5px}.review-meta{color:var(--ink-3);margin-top:2px;font-size:12px}.review-actions{flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px;display:flex}.review-actions button.sugg{border-radius:999px;padding:5px 10px;font-size:12px}.review-rule{color:var(--ink-2);flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px;font-size:12.5px;display:flex}.review-rule input[type=text]{min-width:160px}.controls{flex-wrap:wrap;gap:8px;margin-bottom:14px;display:flex}.controls input{flex:1;min-width:160px}.controls select{color:var(--ink-2)}@media (width<=480px){.controls select{flex:45%}}.ledger-scroll{border:1px solid var(--line);border-radius:var(--radius);background:var(--paper-raised);max-height:640px;overflow:auto}table.ledger{border-collapse:collapse;width:100%;font-size:13px}table.ledger th{background:var(--paper-raised);text-align:left;z-index:1;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-3);border-bottom:1px solid var(--line-strong);white-space:nowrap;padding:8px;font-size:11px;font-weight:600;position:sticky;top:0}table.ledger th button{all:unset;cursor:pointer}table.ledger th.sorted{color:var(--accent-ink,var(--accent))}table.ledger td{border-bottom:1px solid var(--line);vertical-align:top;padding:8px}table.ledger tbody tr.row{cursor:pointer}table.ledger tbody tr.row:hover td,table.ledger tbody tr.open td{background:var(--paper-sunken)}table.ledger td.editor{background:var(--paper-sunken);cursor:default}.desc{max-width:280px}.desc .d1{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.desc .d2{color:var(--ink-3);margin-top:2px;font-size:11.5px}.typedot{border-radius:50%;flex:none;width:7px;height:7px;margin-top:6px;margin-right:6px;display:inline-block}.catcell{align-items:flex-start;display:flex}.catcell span.ct{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.edited{color:var(--ink-3);margin-left:4px;font-size:10.5px}.amtcell{text-align:right;white-space:nowrap;font-family:IBM Plex Mono,monospace}th.amtcell{text-align:right}.bucketpill{white-space:nowrap;border-radius:999px;padding:2px 8px;font-size:11px;display:inline-block}@media (width<=640px){table.ledger{table-layout:fixed;font-size:12px}table.ledger .col-account,table.ledger .col-bucket{display:none}table.ledger .col-date{width:17%}table.ledger .col-desc{width:39%}table.ledger .col-cat{width:26%}table.ledger .col-amt{width:18%;padding-left:2px}.wide-only{display:none}.desc{max-width:none}.desc .d1{white-space:normal;text-overflow:clip;overflow-wrap:anywhere;overflow:visible}.catcell span.ct{white-space:normal;text-overflow:clip;font-size:11.5px;overflow:visible}}.editor-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}@media (width<=640px){.editor-grid{grid-template-columns:1fr}}.editor-grid label{color:var(--ink-3);text-transform:uppercase;letter-spacing:.04em;flex-direction:column;gap:4px;font-size:11.5px;display:flex}.editor-grid .full{grid-column:1/-1}.editor-actions{flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px;display:flex}.history{color:var(--ink-3);margin-top:10px;font-size:12px}.history li{margin-bottom:2px}.error{color:var(--bad);font-size:12.5px}.pager{color:var(--ink-2);justify-content:space-between;align-items:center;gap:10px;margin-top:12px;font-size:12.5px;display:flex}.pager span:last-child{gap:6px;display:flex}table.simple{border-collapse:collapse;width:100%;font-size:13px}table.simple th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-3);border-bottom:1px solid var(--line);padding:6px 8px;font-size:11px;font-weight:600}table.simple td{border-bottom:1px solid var(--line);padding:6px 8px}table.simple input{width:110px}.login{text-align:center;max-width:420px;margin:12vh auto 0}.login h1{margin-bottom:8px;font-size:30px}.login p{color:var(--ink-2);font-size:14px}.login .card{text-align:left;margin-top:20px}footer{color:var(--ink-3);border-top:1px solid var(--line);margin-top:36px;padding-top:16px;font-size:12px}footer p{margin:0 0 8px}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}
