:root{--bg:#f4f6fa;--bg-tint:#eef1f8;--card:#fff;--text:#171a21;--muted:#676e7d;--line:#e5e8ef;--soft:#f1f3f8;--accent:#3b6cf6;--accent-soft:#eaf0ff;--accent-ink:#fff;--good:#11875a;--warn:#bf7a00;--bad:#d23c3c;--need:#3b6cf6;--want:#e08a1e;--saving:#11875a;--radius:16px;--radius-sm:10px;--shadow-sm:0 1px 2px #1018280d;--shadow:0 1px 3px #1018280f, 0 8px 24px -12px #10182824;--shadow-lg:0 2px 6px #10182812, 0 24px 48px -20px #10182838;--ease-out:cubic-bezier(.23, 1, .32, 1);--ease-in-out:cubic-bezier(.77, 0, .175, 1);--fast:.16s;--mid:.22s;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#0d0f14;--bg-tint:#10131a;--card:#171a21;--text:#e9ebf0;--muted:#949bab;--line:#262a34;--soft:#1e222b;--accent:#6b92ff;--accent-soft:#1b2440;--accent-ink:#0b0d12;--good:#3cc68a;--warn:#f0b441;--bad:#ff6b6b;--need:#6b92ff;--want:#f0b441;--saving:#3cc68a;--shadow-sm:0 1px 2px #0000004d;--shadow:0 1px 3px #0006, 0 8px 24px -12px #0009;--shadow-lg:0 2px 6px #00000073, 0 24px 48px -20px #000000b3;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);background-image:radial-gradient(1200px 600px at 12% -10%, var(--accent-soft), transparent 60%);color:var(--text);-webkit-font-smoothing:antialiased;letter-spacing:-.006em;background-attachment:fixed;font:15px/1.55 ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}h2,h3{letter-spacing:-.02em;margin:0;line-height:1.22}h3{margin-bottom:.7rem;font-size:1.02rem;font-weight:640}p{margin:.4rem 0}code{background:var(--soft);border-radius:6px;padding:1px 6px;font-size:.9em}.muted{color:var(--muted)}.good{color:var(--good)}.bad{color:var(--bad)}.nowrap{white-space:nowrap}.grow{flex:1}::selection{background:color-mix(in srgb, var(--accent) 25%, transparent)}.topbar{z-index:20;background:color-mix(in srgb, var(--card) 78%, transparent);-webkit-backdrop-filter:blur(14px)saturate(1.4);backdrop-filter:blur(14px)saturate(1.4);border-bottom:1px solid color-mix(in srgb, var(--line) 80%, transparent);flex-wrap:wrap;align-items:center;gap:1.75rem;padding:.7rem max(1rem,50vw - 570px);display:flex;position:sticky;top:0}.logo{-webkit-user-select:none;user-select:none;align-items:center;gap:.6rem;display:inline-flex}.logo-mark{box-shadow:var(--shadow-sm);border-radius:11px;display:block}.logo-text{letter-spacing:-.028em;font-size:1.02rem;font-weight:680}.logo-text-accent{color:var(--accent)}.logo-line{stroke-dasharray:34;animation:draw .7s var(--ease-out) .12s both}.logo-coin{transform-box:fill-box;transform-origin:50%;animation:coin .52s var(--ease-out) .38s both}@keyframes draw{0%{stroke-dashoffset:34px;opacity:0}to{stroke-dashoffset:0;opacity:1}}@keyframes coin{0%{opacity:0;transform:scale(.4)}to{opacity:1;transform:scale(1)}}.tabs{scrollbar-width:none;max-width:100%;position:relative;overflow-x:auto}.tabs::-webkit-scrollbar{display:none}.tabs-row{gap:.2rem;width:max-content;display:flex}.tabs-row button{color:var(--muted);font:inherit;cursor:pointer;white-space:nowrap;font-variant-ligatures:none;transition:color var(--fast) ease, background-color var(--fast) ease;background:0 0;border:0;border-radius:999px;padding:.42rem .8rem;font-size:.92rem;font-weight:500}.tabs-active{pointer-events:none;transition:clip-path .3s var(--ease-out);position:absolute;inset:0}.tabs-active button{background:var(--text);color:var(--card)}main{max-width:1140px;margin:0 auto;padding:1.4rem 1rem 5rem}.stack{gap:1rem;display:grid}.grid-2{grid-template-columns:1.35fr 1fr;align-items:start;gap:1rem;display:grid}@media (max-width:820px){.grid-2{grid-template-columns:1fr}}.panel{animation:panel-in .26s var(--ease-out) both}@keyframes panel-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);min-width:0;box-shadow:var(--shadow-sm);padding:1.35rem}.card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.8rem;display:flex}.card-head h3{margin:0}.monthbar{align-items:center;gap:.4rem;margin-bottom:1.1rem;display:flex}.monthbar h2{text-align:center;min-width:11ch;font-size:1.4rem}.monthbar .ghost{width:2.2rem;padding:.35rem 0;font-size:1.1rem;line-height:1}.monthbar .small{width:auto;padding:.35rem .7rem;font-size:.85rem}button,.button{font:inherit;cursor:pointer;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--card);color:var(--text);transition:transform var(--fast) var(--ease-out), background-color var(--fast) ease, border-color var(--fast) ease, opacity var(--fast) ease, box-shadow var(--fast) ease;justify-content:center;align-items:center;gap:.4rem;padding:.55rem 1rem;font-size:.92rem;font-weight:550;display:inline-flex}button:active:not(:disabled),.button:active{transform:scale(.97)}button:disabled{opacity:.45;cursor:not-allowed}.primary{background:var(--accent);color:var(--accent-ink);box-shadow:var(--shadow-sm);border-color:#0000;font-weight:600}.danger{color:var(--bad);border-color:color-mix(in srgb, var(--bad) 35%, var(--line))}.small{padding:.34rem .7rem;font-size:.85rem}.icon{color:var(--muted);background:0 0;border:0;border-radius:8px;padding:.1rem .5rem;font-size:1.2rem}.icon-spacer{width:2rem}@media (hover:hover) and (pointer:fine){.primary:hover:not(:disabled){background:color-mix(in srgb, var(--accent) 88%, #fff);box-shadow:var(--shadow)}.ghost:hover,.button:hover{background:var(--soft);border-color:color-mix(in srgb, var(--text) 14%, var(--line))}.danger:hover{background:color-mix(in srgb, var(--bad) 10%, transparent)}.icon:hover{color:var(--bad);background:color-mix(in srgb, var(--bad) 10%, transparent)}.tabs-row button:hover{color:var(--text)}.tx tbody tr:hover td{background:color-mix(in srgb, var(--soft) 65%, transparent)}}input,select,textarea{font:inherit;color:var(--text);background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);width:100%;min-width:0;transition:border-color var(--fast) ease, box-shadow var(--fast) ease, background-color var(--fast) ease;padding:.5rem .65rem}input:hover,select:hover{border-color:color-mix(in srgb, var(--text) 16%, var(--line))}input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3.5px color-mix(in srgb, var(--accent) 18%, transparent);outline:none}button:focus-visible,.button:focus-visible,.tabs-row button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}input[type=checkbox],input[type=radio]{width:auto;accent-color:var(--accent);cursor:pointer}input[type=color]{cursor:pointer;width:2.2rem;height:2.2rem;padding:2px}label{color:var(--muted);gap:.3rem;font-size:.83rem;font-weight:500;display:grid}label.inline{white-space:nowrap;align-items:center;gap:.4rem;display:inline-flex}form.card{align-content:start;gap:.75rem;display:grid}form.card h3{margin:0}.row{grid-template-columns:1fr 1fr;gap:.75rem;display:grid}.actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.5rem;margin-top:1rem;display:flex}.actions.left{justify-content:flex-start}.flash{color:var(--good);min-height:1.3em;transition:opacity var(--mid) ease, transform var(--mid) var(--ease-out);margin:0;font-size:.88rem}@starting-style{.flash{opacity:0;transform:translateY(-4px)}}.seg{background:var(--soft);border-radius:var(--radius-sm);padding:3px;display:inline-flex;position:relative}.seg label{cursor:pointer;color:var(--muted);transition:color var(--fast) ease, background-color var(--fast) ease, box-shadow var(--fast) ease;border-radius:8px;padding:.35rem .95rem;font-size:.89rem;font-weight:550;display:inline-flex}.seg label.on{background:var(--card);color:var(--text);box-shadow:var(--shadow-sm);font-weight:620}.seg input{opacity:0;pointer-events:none;position:absolute}.hero{background:radial-gradient(120% 140% at 100% 0%, color-mix(in srgb, var(--accent) 9%, transparent), transparent 62%), var(--card);align-content:start;gap:.3rem;display:grid}.eyebrow{text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin:0;font-size:.73rem;font-weight:640}.big{letter-spacing:-.035em;font-variant-numeric:tabular-nums;transition:color var(--mid) ease;font-size:clamp(2.3rem,6vw,3.3rem);font-weight:700;line-height:1.08}.stats{flex-wrap:wrap;gap:2.2rem;margin-top:.85rem;display:flex}.stats>div{display:grid}.stat{font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-size:1.28rem;font-weight:660}.stats .muted{font-size:.84rem}.meter{background:var(--soft);border-radius:99px;height:10px;margin:.6rem 0 .3rem;position:relative;overflow:hidden}.meter.thin{height:7px;margin:.4rem 0 .2rem}.meter>span{background:var(--accent);transform-origin:0;width:100%;height:100%;transition:transform .7s var(--ease-out), background-color var(--mid) ease;border-radius:99px;display:block}@starting-style{.meter>span{transform:scaleX(0)}}.meter>span.warn{background:var(--warn)}.meter>span.bad{background:var(--bad)}.meter.target{overflow:visible}.meter.target i{background:var(--text);opacity:.4;border-radius:1px;width:2px;position:absolute;top:-3px;bottom:-3px}.kind-need{background:var(--need)!important}.kind-want{background:var(--want)!important}.kind-saving{background:var(--saving)!important}.catbars{grid-template-columns:repeat(auto-fill,minmax(245px,1fr));gap:1.1rem 1.6rem;display:grid}.catbar-top{justify-content:space-between;gap:.75rem;font-size:.91rem;display:flex}.catbar-top>span:first-child{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.catbar-top>span:last-child{font-variant-numeric:tabular-nums;white-space:nowrap;flex:none}.catbar-sub{font-variant-numeric:tabular-nums;font-size:.79rem}.dot{vertical-align:1px;border-radius:50%;width:9px;height:9px;margin-right:.5rem;display:inline-block}.legend{color:var(--muted);gap:1rem;font-size:.79rem;display:flex}.legend .dot.spent{background:var(--accent)}.legend .dot.income{background:var(--good)}.legend .line{border-top:2px dashed var(--muted);vertical-align:3px;width:14px;margin-right:.4rem;display:inline-block}.trend{grid-template-columns:repeat(6,1fr);align-items:end;gap:.75rem;display:grid}.trend-bars{justify-content:center;align-items:flex-end;gap:4px;height:165px;display:flex;position:relative}.trend-bars .bar{transform-origin:bottom;width:min(26px,34%);min-height:3px;transition:height .6s var(--ease-out), background-color var(--mid) ease;border-radius:7px 7px 3px 3px}@starting-style{.trend-bars .bar{height:0}}.bar.spent{background:var(--accent)}.bar.spent.bad{background:var(--bad)}.bar.income{background:var(--good);opacity:.72}.trend-base{background:var(--line);border-radius:2px;height:2px;position:absolute;bottom:0;left:12%;right:12%}.trend-budget{border-top:2px dashed var(--muted);opacity:.6;transition:bottom .5s var(--ease-out);position:absolute;left:6%;right:6%}.trend-label{text-align:center;color:var(--muted);margin-top:.45rem;font-size:.8rem}.trend-value{text-align:center;font-variant-numeric:tabular-nums;font-size:.79rem}.trend-col.current .trend-label{color:var(--text);font-weight:620}.filters{flex-wrap:wrap;gap:.6rem;margin-bottom:1rem;display:flex}.filters>input{flex:200px}.filters>select{flex:0 190px}.table-wrap{border-radius:var(--radius-sm);overflow-x:auto}.table-wrap.tall{max-height:60vh;overflow-y:auto}table.tx{border-collapse:collapse;width:100%;font-size:.91rem}.tx th{text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);border-bottom:1px solid var(--line);background:var(--card);z-index:1;padding:.55rem .5rem;font-size:.73rem;font-weight:600;position:sticky;top:0}.tx td{border-bottom:1px solid var(--line);vertical-align:middle;transition:background-color var(--fast) ease;padding:.45rem .5rem}.tx tbody tr:last-child td{border-bottom:0}.tx td.note{min-width:200px;max-width:420px}.tx td select{border-left-width:4px;min-width:150px;padding:.3rem .5rem;font-size:.86rem}.tx .num{text-align:right;font-variant-numeric:tabular-nums}.tx tr.dim td{opacity:.45}.tx .empty{text-align:center;padding:2.5rem}.tag{background:var(--soft);color:var(--muted);vertical-align:1px;border-radius:99px;margin-left:.5rem;padding:.05rem .45rem;font-size:.7rem;font-weight:550;display:inline-block}.tag.warn{background:color-mix(in srgb, var(--warn) 16%, transparent);color:var(--warn)}.banner{border-radius:var(--radius-sm);background:var(--accent-soft);border:1px solid color-mix(in srgb, var(--accent) 28%, transparent);transition:opacity var(--mid) ease, transform var(--mid) var(--ease-out);flex-wrap:wrap;align-items:center;gap:.5rem;margin:1rem 0;padding:.65rem .9rem;font-size:.9rem;display:flex}@starting-style{.banner{opacity:0;transform:translateY(-6px)}}.banner input{flex:0 180px;width:auto;padding:.3rem .5rem}.dropzone{text-align:center;cursor:pointer;border:2px dashed var(--line);border-radius:var(--radius);min-height:140px;color:var(--muted);transition:border-color var(--fast) ease, background-color var(--fast) ease, transform var(--fast) var(--ease-out);justify-content:center;align-items:center;margin-top:.85rem;padding:1rem;font-size:.94rem;display:flex}.dropzone:hover{border-color:color-mix(in srgb, var(--accent) 55%, var(--line));background:color-mix(in srgb, var(--accent) 4%, transparent)}.dropzone.over{border-color:var(--accent);background:var(--accent-soft);transform:scale(1.01)}.mapgrid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.85rem;display:grid}.budgetlist{gap:.5rem;margin:1rem 0;display:grid}.budgetrow{grid-template-columns:auto 1fr 110px 140px auto;align-items:center;gap:.5rem;display:grid}.budgetrow .amount{text-align:right;font-variant-numeric:tabular-nums}@media (max-width:560px){.budgetrow{grid-template-columns:auto 1fr auto}.budgetrow select,.budgetrow .amount{grid-column:2}}.addcat{grid-template-columns:1fr 110px 140px auto;margin-top:.5rem}@media (max-width:560px){.addcat{grid-template-columns:1fr 1fr}}.totals{border-top:1px solid var(--line);flex-wrap:wrap;gap:1.6rem;margin-top:1.1rem;padding-top:1.1rem;display:flex}.totals>div{display:grid}.totals .muted{font-size:.79rem}.totals b{font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-size:1.1rem}.rules{flex-wrap:wrap;gap:.4rem;max-height:220px;margin:.85rem 0;display:flex;overflow-y:auto}.chip{border:1px solid var(--line);transition:background-color var(--fast) ease;border-left-width:4px;border-radius:8px;align-items:center;gap:.2rem;padding:.16rem .2rem .16rem .65rem;font-size:.82rem;display:inline-flex}.chip button{color:var(--muted);background:0 0;border:0;padding:0 .35rem;font-size:1rem}.card>.ghost.small{margin-top:.85rem}.insights{gap:.6rem;display:grid}.insight{border-radius:var(--radius-sm);border-left:4px solid var(--muted);background:var(--soft);animation:rise .38s var(--ease-out) both;padding:.8rem .95rem}.insight:nth-child(2){animation-delay:45ms}.insight:nth-child(3){animation-delay:90ms}.insight:nth-child(4){animation-delay:.135s}.insight:nth-child(n+5){animation-delay:.18s}.insight p{color:var(--muted);margin:.2rem 0 0;font-size:.91rem}.insight.good{border-left-color:var(--good);background:color-mix(in srgb, var(--good) 8%, var(--soft))}.insight.warn{border-left-color:var(--warn);background:color-mix(in srgb, var(--warn) 8%, var(--soft))}.insight.bad{border-left-color:var(--bad);background:color-mix(in srgb, var(--bad) 8%, var(--soft))}.insight.info{border-left-color:var(--accent)}.insight b{color:var(--text)}.splitrow{margin-top:.95rem}.payees{gap:.45rem;margin:0;padding-left:1.2rem;display:grid}.payees li{font-size:.91rem}.payees li>span{text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom;max-width:70%;display:inline-block;overflow:hidden}.payees li>b{float:right;font-variant-numeric:tabular-nums}.guide ol{gap:.6rem;margin:0;padding-left:1.2rem;display:grid}.guide li{color:var(--muted)}.guide li b{color:var(--text)}.rise{animation:rise .42s var(--ease-out) both}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.skeletons{gap:1rem;display:grid}.skeleton{border-radius:var(--radius);background:var(--card);border:1px solid var(--line);height:120px;position:relative;overflow:hidden}.skeleton.tall{height:230px}.skeleton:after{content:"";background:linear-gradient(90deg, transparent, color-mix(in srgb, var(--text) 5%, transparent), transparent);animation:1.3s linear infinite shimmer;position:absolute;inset:0}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;animation-delay:0s!important}.skeleton:after{animation:none}}
