:root{--ground:#f2f4f7;--surface:#fff;--raised:#eceef2;--hover:#e6e9ee;--border:#e3e6eb;--rule:#eef0f3;--control:#d4d7dd;--text:#0a0a0a;--muted:#6b6f76;--faint:#9a9ea6;--accent:#141414;--accent-ink:#fff;--positive:#2e7d32;--negative:#c4242a;--chart:#1d5fbf;--pill-positive-bg:#dcfae5;--pill-positive-ink:#04250e;--pill-neutral-bg:#eceef2;--pill-neutral-ink:#3d3d3d;--radius-card:8px;--radius-control:6px;--row-height:44px;--sidebar-width:256px;--gap:12px;--pad:20px;--control-height:36px;--fs-title:24px;--fs-section:15px;--fs-kpi:30px;--fs-body:14px;--fs-small:12px;--c-date:150px;--c-type:164px;--c-cat:172px;--c-amt:150px;--c-act:92px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:Geist,Inter,system-ui,-apple-system,sans-serif;font-size:var(--fs-body);color:var(--text);background:var(--ground);-webkit-font-smoothing:antialiased;line-height:1.45}@media (prefers-color-scheme:dark){:root{--ground:#0e1013;--surface:#16191d;--raised:#1f2328;--hover:#252a30;--border:#262a30;--rule:#1f2328;--control:#353a42;--text:#eceef1;--muted:#9399a3;--faint:#6c727b;--accent:#eceef1;--accent-ink:#0e1013;--positive:#57c26a;--negative:#f0686b;--chart:#5b93ea;--pill-positive-bg:#12301b;--pill-positive-ink:#a6e8b4;--pill-neutral-bg:#23272d;--pill-neutral-ink:#c4c8ce;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}body,h1,h2,p{margin:0}.num{font-variant-numeric:tabular-nums;text-align:right}.neg{color:var(--negative)}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.icon{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:16px;height:16px}input,select,button,.button{font:inherit;color:inherit;min-width:0}input,select{height:var(--control-height);border:1px solid var(--control);border-radius:var(--radius-control);background:var(--surface);padding:0 10px;transition:border-color .12s,box-shadow .12s}input::placeholder{color:var(--faint)}input:hover,select:hover{border-color:var(--faint)}input:focus-visible,select:focus-visible{border-color:var(--text);box-shadow:0 0 0 3px color-mix(in srgb, var(--text) 12%, transparent);outline:none}button,.button{height:var(--control-height);border-radius:var(--radius-control);cursor:pointer;white-space:nowrap;background:0 0;border:0;justify-content:center;align-items:center;gap:6px;padding:0 14px;font-weight:500;transition:background-color .12s,color .12s,transform 60ms;display:inline-flex}button:active,.button:active{transform:translateY(1px)}button:focus-visible,.button:focus-within{outline:2px solid var(--text);outline-offset:2px}.primary{background:var(--accent);color:var(--accent-ink)}.primary:hover{background:color-mix(in srgb, var(--accent) 82%, var(--ground))}.secondary{background:var(--raised)}.secondary:hover{background:var(--hover)}.ghost{color:var(--muted)}.ghost:hover{background:var(--raised);color:var(--text)}.icon-only{width:var(--control-height);padding:0}.block{justify-content:flex-start;width:100%}.link{height:auto;color:var(--text);text-underline-offset:3px;padding:0;text-decoration:underline}.segmented{border-radius:var(--radius-control);background:var(--raised);gap:2px;padding:3px;display:inline-flex}.segmented button,.segmented label span{height:28px;color:var(--muted);border-radius:4px;padding:0 10px;font-size:13px;font-weight:500}.segmented button:hover,.segmented label:hover span{color:var(--text)}.segmented button[aria-pressed=true],.segmented input:checked+span{background:var(--surface);color:var(--text);box-shadow:0 0 0 1px var(--border)}#app{grid-template-columns:var(--sidebar-width) minmax(0, 1fr);min-height:100vh;display:grid}.topbar{display:none}.sidebar{border-right:1px solid var(--border);flex-direction:column;height:100vh;padding:20px 12px;display:flex;position:sticky;top:0;overflow-y:auto}.brand{align-items:center;gap:10px;padding:0 8px 20px;display:flex}.brand-mark{border-radius:var(--radius-control);background:var(--accent);width:30px;height:30px;color:var(--accent-ink);place-items:center;font-size:11px;font-weight:700;display:grid}.brand-name{font-size:15px;font-weight:500}.side-actions{gap:6px;margin-bottom:24px;display:grid}.side-actions .button,.side-actions button{height:34px;padding:0 10px}.side-label{font-size:var(--fs-small);color:var(--muted);align-items:center;gap:6px;padding:0 8px 6px;font-weight:500;display:flex}.nav-list{margin:0;padding:0;list-style:none}.nav-item,.category-item{border-radius:var(--radius-control);text-align:left;align-items:center;gap:8px;width:100%;height:32px;margin-bottom:2px;padding:0 8px;font-weight:400;display:flex}.nav-item:hover,.category-item:hover{background:var(--raised)}.nav-item.active{background:var(--hover);font-weight:500}.nav-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.nav-meta{font-size:var(--fs-small);color:var(--muted)}.nav-meta.neg{color:var(--negative)}.nav-empty{color:var(--muted);padding:4px 8px}.side-group{margin-top:24px}.side-group summary{cursor:pointer;border-radius:var(--radius-control);margin-bottom:2px;padding-top:4px;padding-bottom:4px;list-style:none}.side-group summary::-webkit-details-marker{display:none}.side-group summary:after{content:"";border-bottom:1.5px solid;border-right:1.5px solid;width:6px;height:6px;margin-left:auto;transition:transform .15s;transform:rotate(-45deg)}.side-group[open] summary:after{transform:rotate(45deg)}.side-group summary:hover{color:var(--text)}.count{color:var(--faint);font-weight:400}.category-item .remove{width:24px;height:24px;margin-right:-4px;display:none}.category-item:hover .remove,.category-item .remove:focus-visible{display:inline-flex}.category-item:hover .nav-meta{display:none}.category-form{padding:4px 0 0}.category-form input{background:0 0;border-color:#0000;width:100%;height:32px;padding:0 8px}.category-form input:hover{border-color:var(--control)}.side-foot{font-size:var(--fs-small);color:var(--muted);margin-top:auto;padding:24px 8px 0}main{width:100%;max-width:1320px;padding:32px clamp(20px,3vw,40px) 64px}.page-head{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.page-title{flex:1;min-width:0}.page-title h1{font-size:var(--fs-title);letter-spacing:-.02em;font-weight:500}.page-title h1 input{width:100%;height:40px;font-weight:inherit;letter-spacing:inherit;background:0 0;border-color:#0000;margin-left:-8px;padding:0 8px}.page-title h1 input:hover{border-color:var(--control)}.page-meta{color:var(--muted);margin-top:2px;font-size:13px}.page-actions{gap:8px;display:flex}.finding{max-width:72ch;margin:16px 0 20px;font-size:15px}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-card);padding:var(--pad)}.panel h2{font-size:var(--fs-section);font-weight:500}.panel-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.overview{gap:var(--gap);margin-bottom:var(--gap);grid-template-columns:minmax(0,3fr) minmax(0,2fr);display:grid}.kpis{flex-wrap:wrap;align-items:flex-end;gap:40px;margin-bottom:24px;display:flex}.kpi{flex-direction:column;gap:2px;display:flex}.kpi-label{color:var(--muted);font-size:13px}.kpi-value{letter-spacing:-.01em;text-align:left;font-size:20px;font-weight:700}.kpi-main .kpi-value{font-size:var(--fs-kpi);letter-spacing:-.02em;line-height:1.1}.kpi-value.zero{color:var(--faint)}.sub-head{margin-bottom:12px}.chart{--plot-h:150px}.chart-plot{height:var(--plot-h);margin-left:44px;position:relative}.chart-tick{border-top:1px solid var(--rule);position:absolute;left:0;right:0}.chart-tick.zero{border-top-color:var(--faint)}.chart-tick span{color:var(--muted);font-variant-numeric:tabular-nums;font-size:11px;position:absolute;top:-8px;right:calc(100% + 8px)}.chart-bars,.chart-x{grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;gap:8px;display:grid}.chart-bars{position:absolute;inset:0}.chart-col{position:relative}.chart-bar{background:var(--chart);border-radius:2px;width:min(100%,40px);position:absolute;left:50%;transform:translate(-50%)}.chart-col:hover .chart-bar{filter:brightness(1.15)}.chart-bar.neg{background:var(--negative)}.chart-x{font-size:var(--fs-small);color:var(--muted);text-align:center;margin:8px 0 0 44px}.chart-x span{white-space:nowrap;overflow:hidden}.chart-empty{color:var(--muted);padding:24px 0}.bar-list{gap:14px;margin:0;padding:0;list-style:none;display:grid}.bar-row{justify-content:space-between;gap:12px;margin-bottom:6px;display:flex}.bar-row span:first-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bar-row small{min-width:48px;font-size:var(--fs-small);color:var(--muted);margin-left:8px;display:inline-block}.bar-track{background:var(--raised);border-radius:2px;height:4px}.bar-fill{background:var(--text);border-radius:2px;height:100%}.entries-panel{padding:var(--pad) 0 0}.entries-panel .panel-head{padding:0 var(--pad)}.entries-tools{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.search{align-items:center;display:flex;position:relative}.search .icon{color:var(--muted);pointer-events:none;position:absolute;left:10px}.search input{width:220px;padding:0 32px}.search kbd{background:var(--raised);color:var(--muted);font:inherit;pointer-events:none;border-radius:4px;padding:0 5px;font-size:11px;line-height:18px;position:absolute;right:8px}.search input:focus+kbd,.search input:not(:placeholder-shown)+kbd{display:none}.composer{grid-template-columns:calc(var(--c-date) - 8px) calc(var(--c-type) - 8px) calc(var(--c-cat) - 8px) minmax(0, 1fr) calc(var(--c-amt) - 8px) calc(var(--c-act) - 8px);padding:12px var(--pad);background:var(--ground);border-top:1px solid var(--border);border-bottom:1px solid var(--border);gap:8px;display:grid}.type-toggle{padding:3px}.type-toggle label{flex:1;display:flex}.type-toggle input{opacity:0;pointer-events:none;position:absolute}.type-toggle span{cursor:pointer;flex:1;justify-content:center;align-items:center;padding:0 6px;display:flex}.type-toggle input:focus-visible+span{outline:2px solid var(--text);outline-offset:1px}.composer button{padding:0 10px}.table-wrap{padding:0 calc(var(--pad) - 4px)}.entries{table-layout:fixed;border-collapse:collapse;width:100%}.c-date{width:var(--c-date)}.c-type{width:var(--c-type)}.c-cat{width:var(--c-cat)}.c-amt{width:var(--c-amt)}.c-act{width:var(--c-act)}.entries th{text-align:left;height:40px;font-size:var(--fs-small);color:var(--muted);border-bottom:1px solid var(--rule);padding:0 12px;font-weight:500}.entries th.num{text-align:right}.entries td{height:var(--row-height);border-bottom:1px solid var(--rule);padding:0 4px}.entries tbody tr:hover td{background:color-mix(in srgb, var(--ground) 60%, transparent)}.entries td input,.entries td select{background:0 0;border-color:#0000;width:100%;height:32px;padding:0 8px}.entries td input:hover,.entries td select:hover{border-color:var(--control)}.entries td input:focus-visible,.entries td select:focus-visible{background:var(--surface)}.entries input[type=date]{font-variant-numeric:tabular-nums}.entries td select{appearance:none}.entries input[type=date]::-webkit-calendar-picker-indicator{opacity:0}.entries input[type=date]:hover::-webkit-calendar-picker-indicator{opacity:.6}.entries input[type=date]:focus::-webkit-calendar-picker-indicator{opacity:.6}.entries td select.type-pill{width:auto;height:24px;font-size:var(--fs-small);appearance:none;cursor:pointer;border:0;border-radius:999px;margin-left:4px;padding:0 10px;font-weight:500}.type-pill.income{background:var(--pill-positive-bg);color:var(--pill-positive-ink)}.type-pill.expense{background:var(--pill-neutral-bg);color:var(--pill-neutral-ink)}.amount-cell{position:relative}.amount-cell.income input{color:var(--positive)}.entries td.amount-cell input{-moz-appearance:textfield;font-weight:500}.amount-cell input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.amount-cell input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.composer input[name=amount]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.composer input[name=amount]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.row-actions{text-align:right}.row-actions button{opacity:0;width:32px;height:32px}tr:hover .row-actions button,.row-actions button:focus-visible{opacity:1}.row-actions button:hover{color:var(--negative)}.empty-row td{text-align:center;height:96px;color:var(--muted);padding:0 12px}.entries-foot{padding:14px var(--pad);color:var(--muted);justify-content:space-between;gap:12px;display:flex}.entries-foot:empty{display:none}.entries-foot strong{color:var(--text);margin-left:8px;font-weight:700}.entries-foot strong.neg{color:var(--negative)}.welcome{text-align:center;max-width:520px;margin:18vh auto 0}.welcome h1{font-size:var(--fs-title);letter-spacing:-.02em;margin-bottom:12px;font-weight:500;line-height:1.15}.welcome p{color:var(--muted);font-size:15px}.welcome-actions{justify-content:center;gap:8px;margin:24px 0 16px;display:flex}.welcome .hint{font-size:13px}dialog{border:1px solid var(--border);background:var(--surface);width:min(400px,100vw - 32px);color:var(--text);border-radius:10px;padding:0;box-shadow:0 16px 48px #0000002e}dialog::backdrop{background:#0a0c1059}.dialog-body{gap:12px;padding:20px;display:grid}.dialog-body h2{font-size:16px;font-weight:500}.dialog-body p{color:var(--muted)}.dialog-actions{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.toast{z-index:20;background:var(--accent);max-width:calc(100vw - 32px);color:var(--accent-ink);border-radius:8px;align-items:center;gap:16px;padding:10px 10px 10px 16px;animation:.18s ease-out toast-in;display:flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 28px #0003}.toast[hidden]{display:none}.toast-action{height:28px;color:inherit;background:color-mix(in srgb, var(--accent-ink) 16%, transparent);padding:0 10px}.toast-action:hover{background:color-mix(in srgb, var(--accent-ink) 26%, transparent)}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,8px)}}.drop-overlay{z-index:30;border:2px dashed var(--text);background:color-mix(in srgb, var(--ground) 88%, transparent);border-radius:12px;place-items:center;font-size:18px;font-weight:500;display:grid;position:fixed;inset:12px}.drop-overlay[hidden]{display:none}.drop-overlay p{pointer-events:none}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}@media (width<=1100px){.overview{grid-template-columns:minmax(0,1fr)}}@media (width<=900px){#app{grid-template-columns:minmax(0,1fr)}.topbar{z-index:10;background:var(--ground);border-bottom:1px solid var(--border);align-items:center;gap:8px;height:52px;padding:0 8px;display:flex;position:sticky;top:0}.topbar-title{text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.sidebar{z-index:9;background:var(--ground);border-right:0;height:auto;display:none;position:fixed;inset:52px 0 0}.nav-open .sidebar{display:flex}.sidebar .brand{display:none}main{padding:20px 16px 96px}.page-head{flex-wrap:wrap}.entries-tools,.search,.search input,.entries-tools .segmented{width:100%}.entries-tools .segmented button{flex:1}.composer{grid-template-columns:1fr 1fr}.composer input[name=description]{order:-1;grid-column:1/-1}.composer input[name=amount]{text-align:left;order:-1;grid-column:1/-1;font-size:18px}.table-wrap{padding:0 8px}.entries thead{display:none}.entries,.entries tbody{display:block}.entries tbody tr:not(.empty-row){border-bottom:1px solid var(--rule);grid-template-columns:minmax(0,1fr) 118px auto 32px;grid-template-areas:"desc desc amt act""cat date type type";align-items:center;padding:6px 0;display:grid}.entries tbody tr:not(.empty-row) td{background:0 0;border:0;height:auto;padding:0}.entries td:first-child{grid-area:date}.entries td:nth-child(2){text-align:right;grid-area:type}.entries td:nth-child(3){grid-area:cat}.entries td:nth-child(4){grid-area:desc}.entries td:nth-child(5){grid-area:amt;width:120px}.entries td:nth-child(6){grid-area:act}.entries td:first-child input,.entries td:nth-child(3) select{color:var(--muted);font-size:13px}.entries td:nth-child(4) input{font-weight:500}.entries td:first-child input{padding:0 4px}.entries input[type=date]::-webkit-calendar-picker-indicator{display:none}.row-actions button{opacity:1}.entries .empty-row{display:block}.entries .empty-row td{height:auto;padding:32px 12px;display:block}}
