:root{--ink:#e8e9ef;--ink-dim:#9a9db0;--ink-faint:#6b6e82;--bg:#12131a;--surface:#1b1d27;--surface-high:#242734;--line:#2f3342;--accent:#7c8cff;--accent-ink:#0d0f18;--ok:#4ade80;--warn:#fbbf24;--over:#f87171;--radius:14px;--radius-sm:9px;--pad:1rem;--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--font:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--numeral:ui-monospace, "SF Mono", "Cascadia Mono", Menlo, monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:var(--font);-webkit-font-smoothing:antialiased;overscroll-behavior-y:none;font-size:16px;line-height:1.5}h1,h2,h3{letter-spacing:-.01em;margin:0;font-weight:650}h1{font-size:1.35rem}h2{font-size:1.05rem}a{color:var(--accent)}.app{flex-direction:column;min-height:100dvh;display:flex}.topbar{z-index:20;padding:calc(var(--safe-top) + .7rem) var(--pad) .7rem;background:color-mix(in srgb, var(--bg) 88%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);align-items:center;gap:.75rem;display:flex;position:sticky;top:0}.topbar .grow{flex:1;min-width:0}.topbar h1{white-space:nowrap;text-overflow:ellipsis;font-size:1.05rem;overflow:hidden}.content{padding:var(--pad);padding-bottom:calc(var(--safe-bottom) + 6rem);flex:1;width:100%;max-width:760px;margin:0 auto}.stack{flex-direction:column;gap:.75rem;display:flex}.row{align-items:center;gap:.6rem;display:flex}.spread{justify-content:space-between;align-items:center;gap:.6rem;display:flex}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:.9rem}.card.tap{cursor:pointer;text-align:left;width:100%;color:inherit;font:inherit}.card.tap:active{background:var(--surface-high)}.muted{color:var(--ink-dim);font-size:.875rem}.faint{color:var(--ink-faint);font-size:.8rem}.empty{text-align:center;color:var(--ink-dim);padding:2.5rem 1rem}button,input,select,textarea{color:inherit;font-family:inherit;font-size:1rem}.btn{border:1px solid var(--line);background:var(--surface-high);color:var(--ink);border-radius:var(--radius-sm);cursor:pointer;min-height:44px;padding:.65rem .95rem}.btn:active{transform:translateY(1px)}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:650}.btn.ghost{background:0 0}.btn.primary-quiet{border-color:color-mix(in srgb, var(--accent) 45%, var(--line));color:var(--accent)}.btn.danger{color:var(--over);border-color:color-mix(in srgb, var(--over) 40%, var(--line));background:0 0}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.block{width:100%}.input{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);width:100%;min-height:44px;padding:.7rem .75rem}.input:focus,.btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}label.field{color:var(--ink-dim);flex-direction:column;gap:.3rem;font-size:.8rem;display:flex}.error{background:color-mix(in srgb, var(--over) 14%, transparent);border:1px solid color-mix(in srgb, var(--over) 35%, transparent);color:#ffd7d7;border-radius:var(--radius-sm);padding:.6rem .7rem;font-size:.875rem}.notice{background:color-mix(in srgb, var(--accent) 12%, transparent);border:1px solid color-mix(in srgb, var(--accent) 30%, transparent);border-radius:var(--radius-sm);padding:.6rem .7rem;font-size:.875rem}.amount{font-family:var(--numeral);font-variant-numeric:tabular-nums;font-weight:600}.total{font-family:var(--numeral);font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-size:2rem;font-weight:700}.meter{background:var(--surface-high);border-radius:999px;height:7px;margin-top:.5rem;overflow:hidden}.meter>span{background:var(--ok);border-radius:999px;height:100%;transition:width .2s;display:block}.meter.warn>span{background:var(--warn)}.meter.over>span{background:var(--over)}.badge{text-transform:uppercase;letter-spacing:.05em;border:1px solid var(--line);color:var(--ink-dim);white-space:nowrap;border-radius:999px;padding:.15rem .45rem;font-size:.7rem}.badge.owner{color:var(--accent);border-color:color-mix(in srgb, var(--accent) 45%, transparent)}.chips{flex-wrap:wrap;gap:.45rem;max-height:33dvh;display:flex;overflow-y:auto}.input.search{min-height:40px;padding:.5rem .7rem;font-size:.9rem}.chip{border:1px solid var(--line);background:var(--surface-high);color:var(--ink);cursor:pointer;border-radius:999px;min-height:40px;padding:.5rem .85rem}.chip[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:650}.pin{background:var(--surface-high);border:1px dashed var(--line);color:var(--ink-dim);border-radius:999px;align-items:center;gap:.4rem;max-width:100%;padding:.35rem .6rem;font-size:.8rem;display:inline-flex}.pin.found{color:var(--ink);border-style:solid}.pin .name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.pin button{color:var(--ink-faint);cursor:pointer;background:0 0;border:none;padding:0 .15rem;font-size:1rem;line-height:1}.fab{right:var(--pad);bottom:calc(var(--safe-bottom) + var(--pad));background:var(--accent);width:60px;height:60px;color:var(--accent-ink);cursor:pointer;z-index:30;border:none;border-radius:50%;font-size:2rem;line-height:1;position:fixed;box-shadow:0 8px 24px #00000073}.editing-what{border-bottom:1px solid var(--line);flex-direction:column;gap:.15rem;padding-bottom:.25rem;display:flex}.editing-what strong{font-family:var(--numeral);font-variant-numeric:tabular-nums;font-size:1.15rem}.editing-what .faint{text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;overflow:hidden}.sheet-overlay{z-index:40;background:#0000008c;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.sheet{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius) var(--radius) 0 0;width:100%;max-width:560px;max-height:88dvh;padding:1rem 1rem calc(var(--safe-bottom) + 1.25rem);border-bottom:none;overflow-y:auto}.amount-input{border:none;border-bottom:2px solid var(--line);width:100%;font-family:var(--numeral);font-variant-numeric:tabular-nums;letter-spacing:-.02em;text-align:center;background:0 0;border-radius:0;padding:.35rem 0;font-size:2.6rem;font-weight:700}.amount-input:focus{border-bottom-color:var(--accent);outline:none}.amount-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.amount-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.amount-input[type=number]{appearance:textfield}details.optional>summary{cursor:pointer;color:var(--ink-dim);padding:.35rem 0;font-size:.85rem;list-style:none}details.optional>summary::-webkit-details-marker{display:none}details.optional>summary:before{content:"▸ "}details.optional[open]>summary:before{content:"▾ "}.plan-figures{grid-template-columns:repeat(3,1fr);gap:.5rem;display:grid}.plan-figures .amount{font-size:1.05rem}.target-inputs{grid-template-columns:1fr 1fr;gap:.5rem;display:grid}.suffixed{align-items:center;gap:.3rem;display:flex}.input.pct{text-align:right;flex:1;min-width:0;min-height:38px;padding:.4rem .45rem}.track-wrap{flex-direction:column;gap:.4rem;display:flex}.track{background:var(--surface-high);border-radius:999px;height:12px;position:relative;overflow:hidden}.track-fill{background:var(--ok);border-radius:999px;transition:width .2s;position:absolute;inset:0 auto 0 0}.track.warn .track-fill{background:var(--warn)}.track.over .track-fill{background:var(--over)}.track-mark{width:2px;position:absolute;top:0;bottom:0;transform:translate(-1px)}.track-mark.budgeted{background:var(--ink-dim)}.track-mark.target{background:var(--ink);width:3px}.track-legend{color:var(--ink-dim);flex-wrap:wrap;gap:.25rem .85rem;font-size:.75rem;display:flex}.track-legend .key:before{content:"";vertical-align:baseline;border-radius:2px;width:9px;height:9px;margin-right:.3rem;display:inline-block}.track-legend .key.spent:before{background:var(--ok);border-radius:999px}.track-legend .key.budgeted:before{background:var(--ink-dim);border-radius:0;width:3px}.track-legend .key.target:before{background:var(--ink);border-radius:0;width:3px}.subcats{border-top:1px solid var(--line);flex-direction:column;gap:.3rem;padding-top:.6rem;display:flex}.subcat{border-bottom:1px solid color-mix(in srgb, var(--line) 45%, transparent);flex-direction:column;gap:.25rem;padding:.35rem 0;display:flex}.subcat:last-of-type{border-bottom:none}.subcat-head{align-items:baseline;gap:.45rem;display:flex}.subcat-head .subcat-name{flex:0 auto}.subcat-head .subcat-spent{margin-left:auto}.pay-share{color:var(--ink-faint);white-space:nowrap;font-size:.7rem}.subcat-legend{color:var(--ink-faint);padding-bottom:.2rem;font-size:.7rem}.subcat-controls{align-items:center;gap:.4rem;display:flex}.subcat-controls .suffixed{flex:none;width:6rem}.subcat-controls .input.limit{flex:none;width:6.5rem}.pin-note{text-transform:uppercase;letter-spacing:.04em;color:var(--accent);font-size:.7rem}.subcat-controls .row-delete{margin-left:auto}.subcat-name{text-overflow:ellipsis;white-space:nowrap;font-size:.9rem;overflow:hidden}.subcat-spent{text-align:right;color:var(--ink-dim);white-space:nowrap;font-size:.85rem}.input.limit{text-align:right;min-height:34px;padding:.3rem .4rem;font-size:.85rem}.subcat-add{grid-template-columns:1fr 4.5rem auto auto;align-items:center;gap:.35rem;padding-top:.35rem;display:grid}.subcat-add .btn{min-height:36px;padding:.35rem .6rem;font-size:.85rem}.btn.subcat-open{min-height:38px;color:var(--ink-dim);border-style:dashed;font-size:.85rem}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.table-wrap{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);-webkit-overflow-scrolling:touch;overflow-x:auto}table.tx{border-collapse:collapse;width:100%;min-width:340px;font-size:.85rem}table.tx th{text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-faint);border-bottom:1px solid var(--line);background:var(--surface);z-index:1;padding:.6rem .5rem;font-size:.7rem;font-weight:600;position:sticky;top:0}table.tx td{border-bottom:1px solid color-mix(in srgb, var(--line) 55%, transparent);vertical-align:top;padding:.6rem .5rem}table.tx tbody tr:last-child td{border-bottom:none}table.tx .num{text-align:right}table.tx td.amount{font-family:var(--numeral);font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600}table.tx td.day{white-space:nowrap;color:var(--ink-dim)}table.tx td.cat{min-width:5.5rem}table.tx td.cat .note{color:var(--ink-faint);text-overflow:ellipsis;white-space:nowrap;max-width:9rem;font-size:.75rem;display:block;overflow:hidden}table.tx td.where,table.tx td.who{color:var(--ink-dim);text-overflow:ellipsis;white-space:nowrap;max-width:6.5rem;overflow:hidden}table.tx.with-who th,table.tx.with-who td{padding-left:.3rem;padding-right:.3rem}table.tx.with-who td.cat{min-width:4.5rem}table.tx.with-who td.cat .note{max-width:5rem}table.tx.with-who td.where{max-width:4.5rem}table.tx.with-who td.who{max-width:3.25rem}table.tx.with-account th,table.tx.with-account td{padding-left:.3rem;padding-right:.3rem}table.tx.with-account td.cat{min-width:4.5rem}table.tx.with-account td.cat .note{max-width:5rem}table.tx.with-account td.where,table.tx.with-account td.who{max-width:4.5rem}table.tx td.where a{color:var(--ink-dim);text-underline-offset:2px;text-decoration:underline}.cat-edit{font:inherit;color:inherit;text-align:left;cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;margin:0;padding:0}.cat-edit:hover,.cat-edit:focus-visible{text-underline-offset:2px;text-decoration:underline}.cat-edit.unfiled{color:var(--ink-faint);font-style:italic}.row-delete{color:var(--ink-faint);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;padding:.35rem .4rem;font-size:1.15rem;line-height:1}.row-delete:hover,.row-delete:focus-visible{color:var(--over);background:color-mix(in srgb, var(--over) 12%, transparent)}.list{flex-direction:column;gap:.5rem;margin:0;padding:0;list-style:none;display:flex}.expense{grid-template-columns:1fr auto;align-items:baseline;gap:.15rem .75rem;display:grid}.expense .where{color:var(--ink-faint);grid-column:1/-1;align-items:center;gap:.3rem;font-size:.78rem;display:flex}.expense .where a{color:var(--ink-faint);text-underline-offset:2px;text-decoration:underline}@media (prefers-reduced-motion:reduce){*{transition:none!important}}.map-row{grid-template-columns:1fr 8.5rem;align-items:center;gap:.5rem;display:grid}.map-name{text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;overflow:hidden}.map-row .input{min-height:38px;padding:.35rem .4rem;font-size:.85rem}.hero{font-family:var(--numeral);font-variant-numeric:tabular-nums;letter-spacing:-.03em;font-size:2.75rem;font-weight:700;line-height:1.1}.recharts-wrapper:focus,.recharts-surface:focus{outline:none}
