@import "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,700&family=Outfit:wght@400;500;600;700&display=swap";:root{--ink:#14352f;--ink-soft:#3d5c54;--muted:#6a7f78;--paper:#f3f7f4;--surface:#ffffffb8;--line:#14352f1a;--accent:#1f6f5b;--accent-deep:#0f4a3c;--danger:#b42318;--shadow:0 18px 40px #14352f14;--radius:18px;color:var(--ink);background:var(--paper);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-family:Outfit,sans-serif;line-height:1.45}*,:before,:after{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0}button,input{font:inherit;color:inherit}button{cursor:pointer}.app-shell{isolation:isolate;max-width:520px;min-height:100vh;margin:0 auto;padding:28px 20px 48px;position:relative}.bg-wash{z-index:-2;background:radial-gradient(80% 50% at 10% -10%,#c8e6d8 0%,#0000 55%),radial-gradient(70% 45% at 100% 0,#e8dcc8 0%,#0000 50%),linear-gradient(165deg,#eef6f1 0%,#f7f4ee 48%,#e9f1ec 100%);position:fixed;inset:0}.bg-grain{z-index:-1;opacity:.35;pointer-events:none;mix-blend-mode:soft-light;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");position:fixed;inset:0}.hero{padding:8px 4px 20px;animation:.7s both rise}.brand{letter-spacing:-.03em;color:var(--ink);margin:0;font-family:Fraunces,serif;font-size:clamp(2.6rem,10vw,3.4rem);font-weight:700;line-height:1}.tagline{color:var(--ink-soft);margin:10px 0 0;font-size:.98rem}.hero-total{gap:6px;margin-top:28px;animation:.55s both amount-in;display:grid}.hero-label{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-size:.85rem;font-weight:500}.hero-amount{letter-spacing:-.03em;color:var(--accent-deep);font-family:Fraunces,serif;font-size:clamp(2.4rem,9vw,3.1rem);font-weight:700;line-height:1.05}.tabs{border:1px solid var(--line);background:#ffffff8c;border-radius:999px;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:18px;padding:4px;animation:.7s 80ms both rise;display:grid}.tabs-2{grid-template-columns:1fr 1fr}.tabs-3{grid-template-columns:1fr 1fr 1fr}.tab{color:var(--muted);background:0 0;border:0;border-radius:999px;padding:10px 12px;font-weight:600;transition:background .2s,color .2s,transform .2s}.tab.on{background:var(--ink);color:#f5faf7}.panel{background:var(--surface);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px 16px 20px}.fade-in{animation:.45s both rise}.date-nav{grid-template-columns:40px 1fr 40px;align-items:center;gap:8px;margin-bottom:16px;display:grid}.date-label{text-align:center;gap:4px;font-weight:600;display:grid}.icon-btn{border:1px solid var(--line);background:#ffffffb3;border-radius:12px;width:40px;height:40px;font-size:1.4rem;line-height:1;transition:transform .15s,background .15s}.icon-btn:hover{background:#fff;transform:translateY(-1px)}.text-btn{color:var(--accent);background:0 0;border:0;padding:0;font-size:.85rem;font-weight:500;text-decoration:none}.text-btn.danger{color:var(--danger);opacity:.85}.add-trigger{width:100%;color:var(--accent-deep);background:#1f6f5b0f;border:1.5px dashed #1f6f5b59;border-radius:14px;justify-content:center;align-items:center;gap:8px;margin-bottom:16px;padding:14px;font-weight:600;transition:background .2s,transform .2s;display:flex}.add-trigger:hover{background:#1f6f5b1a;transform:translateY(-1px)}.plus{font-size:1.15rem}.expense-form{border:1px solid var(--line);background:#ffffffbf;border-radius:14px;gap:14px;margin-bottom:18px;padding:14px;animation:.35s both rise;display:grid}.field{gap:8px;display:grid}.field>span{color:var(--ink-soft);font-size:.82rem;font-weight:600}.field input{border:1px solid var(--line);background:#fff;border-radius:12px;outline:none;width:100%;padding:12px 14px;transition:border-color .15s,box-shadow .15s}.field input:focus{border-color:#1f6f5b73;box-shadow:0 0 0 3px #1f6f5b1f}.chip-row{flex-wrap:wrap;gap:8px;display:flex}.chip{border:1px solid var(--line);color:var(--ink-soft);background:#fff;border-radius:999px;align-items:center;gap:6px;padding:7px 12px;font-size:.88rem;font-weight:500;transition:background .15s,color .15s,border-color .15s;display:inline-flex}.chip.on{background:color-mix(in srgb, var(--chip,var(--accent)) 18%, white);border-color:color-mix(in srgb, var(--chip,var(--accent)) 45%, white);color:var(--ink)}.form-actions{justify-content:flex-end;gap:8px;display:flex}.btn{border:0;border-radius:12px;padding:10px 16px;font-weight:600}.btn.primary{background:var(--accent);color:#f5faf7}.btn.secondary{color:var(--accent-deep);background:#1f6f5b1f}.btn.ghost{color:var(--muted);background:0 0}.empty-ledger{text-align:center;color:var(--muted);justify-items:center;gap:14px;padding:28px 12px;display:grid}.empty-ledger p{margin:0}.setup-start{gap:16px;display:grid}.setup-start>.btn.primary{justify-self:stretch}.template-list,.ledger-add{margin-bottom:22px}.template-card{border:1px solid var(--line);background:#ffffffb3;border-radius:14px;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;padding:12px 14px;display:flex}.template-name{font-weight:700}.template-desc{color:var(--muted);margin:4px 0 0;font-size:.82rem}.ledger-add{gap:12px;display:grid}.ledger-cat-body{gap:12px;padding:0 14px 14px;display:grid}.chip-row.manage{align-items:center}.chip-wrap{border:1px solid var(--line);background:#fff;border-radius:999px;align-items:center;gap:0;display:inline-flex;overflow:hidden}.chip-wrap .chip{background:0 0;border:0;border-radius:0}.chip-wrap.on{border-color:color-mix(in srgb, var(--chip,var(--accent)) 45%, white);background:color-mix(in srgb, var(--chip,var(--accent)) 18%, white)}.chip-wrap .chip-x{border-left:1px solid #0000;padding:6px 8px 6px 2px}.manage-chip{padding-right:6px}.chip-x{color:var(--muted);cursor:pointer;background:0 0;border:0;padding:0 2px 0 4px;font-size:1rem;line-height:1}.chip-x:hover{color:var(--danger)}.preset-add-row{grid-template-columns:1fr auto;gap:8px;display:grid}.preset-add-row input{border:1px solid var(--line);background:#fff;border-radius:12px;width:100%;padding:10px 12px}.error{color:var(--danger);margin:0;font-size:.88rem}.empty{text-align:center;color:var(--muted);margin:8px 0 0;padding:24px 8px}.expense-list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.expense-row{background:#ffffffb3;border:1px solid #0000;border-radius:14px;grid-template-columns:8px 1fr auto;align-items:start;gap:12px;padding:12px;animation:.4s both rise;display:grid}.row-actions{flex-direction:column;align-items:flex-end;gap:4px;display:flex}.btn-row{gap:8px;margin-bottom:14px;display:flex}.btn:disabled{opacity:.45;cursor:not-allowed}.expense-row:first-child{animation-delay:20ms}.expense-row:nth-child(2){animation-delay:50ms}.expense-row:nth-child(3){animation-delay:80ms}.cat-mark{border-radius:50%;width:8px;height:8px;margin-top:7px}.expense-top{align-items:baseline;gap:10px;display:flex}.expense-amount{font-size:1.05rem;font-weight:700}.expense-cat{color:var(--muted);font-size:.82rem}.badge{letter-spacing:.02em;color:var(--accent-deep);background:#1f6f5b1f;border-radius:999px;padding:2px 8px;font-size:.72rem;font-weight:600}.badge.soft{color:#3d5570;background:#5b7c9929}.inline-cat-form{border:1px dashed var(--line);background:#ffffffd9;border-radius:12px;gap:12px;margin-top:4px;padding:12px;display:grid}.cat-fold-head-row{grid-template-columns:1fr auto;align-items:center;gap:4px;display:grid}.cat-fold-head-row .cat-fold-head{min-width:0}.cat-del{flex-shrink:0;padding-right:12px}.cat-folds{gap:10px;display:grid}.cat-fold{border:1px solid var(--line);background:#ffffffa6;border-radius:14px;overflow:hidden}.cat-fold-head{text-align:left;background:0 0;border:0;justify-content:space-between;align-items:center;gap:10px;width:100%;padding:14px;display:flex}.cat-fold-title{align-items:center;gap:8px;font-weight:700;display:inline-flex}.cat-fold-meta{flex-shrink:0;align-items:center;gap:8px;display:inline-flex}.cat-fold-meta .amount{font-weight:700}.note-groups{gap:0;margin:0;padding:0 10px 12px;list-style:none;display:grid}.note-group{border-top:1px solid var(--line);margin-top:2px;padding-top:10px}.note-groups.summary .note-group{border-top:none;margin:0;padding:0}.note-groups.summary .note-group-head{border-radius:10px;padding:10px 8px}.note-groups.summary .note-group-head:hover{background:#14352f0a}.note-group-head{grid-template-columns:1fr auto auto;align-items:center;gap:8px;padding:0 4px 8px;font-size:.9rem;display:grid}.note-group-label{color:var(--ink-soft);font-weight:700}.note-group-head .amount{font-weight:700}.expense-list.nested{padding:0}.empty.compact{text-align:left;margin:0;padding:8px 14px 14px}.chip-tag{opacity:.85;font-size:.68rem;font-weight:700}.chip-tag.learned{color:#5b7c99;opacity:1}.ask-share{background:#b4530912;border:1px solid #b4530924;border-radius:14px;margin:0 0 14px;padding:12px 14px;animation:.45s both rise}.ask-kicker{letter-spacing:.06em;color:#b45309;margin:0;font-size:.72rem;font-weight:700}.ask-pcts{color:var(--ink-soft);margin:8px 0 0;font-size:.95rem;font-weight:700;line-height:1.45}.ask-actions{flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0 0;display:flex}.ask-actions .text-btn{padding:0}.month-insight{background:#1f6f5b14;border:1px solid #1f6f5b1f;border-radius:14px;margin:0 0 14px;padding:12px 14px;animation:.45s both rise}.insight-line{color:var(--ink-soft);margin:0;font-size:.92rem;font-weight:600;line-height:1.45}.insight-line+.insight-line{margin-top:6px}.insight-line.muted{color:var(--muted);font-size:.86rem;font-weight:500}.freq-blocks{gap:12px;padding:0 10px 12px;display:grid}.freq-block .note-groups{padding:0}.freq-label{letter-spacing:.04em;color:var(--accent-deep);text-transform:none;justify-content:space-between;align-items:baseline;gap:8px;margin:0 0 4px;padding:0 8px;font-size:.78rem;font-weight:700;display:flex}.chev{color:var(--muted);font-size:.85rem}.hint{color:var(--muted);margin:0 0 14px;font-size:.88rem}.hint.tight{margin:0;font-size:.8rem}.expense-note,.expense-date{color:var(--ink-soft);margin:4px 0 0;font-size:.88rem}.expense-date{color:var(--muted);font-size:.8rem}.month-stats{grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:20px;display:grid}.month-stats>div{border:1px solid var(--line);background:#ffffffa6;border-radius:14px;gap:4px;padding:12px 10px;display:grid}.stat-label{color:var(--muted);font-size:.75rem;font-weight:500}.stat-value{letter-spacing:-.02em;font-size:1.05rem;font-weight:700}.section-title{margin:0 0 12px;font-size:.95rem;font-weight:700}.breakdown{margin-bottom:20px}.breakdown ul{gap:12px;margin:0;padding:0;list-style:none;display:grid}.breakdown-head{grid-template-columns:10px 1fr auto auto;align-items:center;gap:8px;margin-bottom:6px;font-size:.9rem;display:grid}.breakdown-head .muted{color:var(--muted);font-size:.8rem}.breakdown-head .amount{font-weight:600}.dot{border-radius:50%;width:8px;height:8px}.bar-track{background:#14352f14;border-radius:999px;height:6px;overflow:hidden}.bar-fill{border-radius:inherit;transform-origin:0;height:100%;animation:.55s both grow}.footer{text-align:center;color:var(--muted);margin-top:24px;font-size:.8rem}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes amount-in{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes grow{0%{opacity:.4;transform:scaleX(.2)}to{opacity:1;transform:scaleX(1)}}@media (width<=420px){.month-stats{grid-template-columns:1fr}}
