:root{--bg: #f7f6f2;--surface: #ffffff;--surface-sunken: #eeece6;--border: #e3e0d8;--text: #12211a;--text-dim: #5f6b64;--text-faint: #949c96;--accent: #0d6b45;--accent-ink: #0a5537;--accent-soft: #d8ece2;--good: #0d6b45;--over: #b3341f;--danger: #b3341f;--chrome: rgba(247, 246, 242, .78);--dock: rgba(255, 255, 255, .82);--scrim: rgba(12, 24, 18, .34);--edge: rgba(255, 255, 255, .55);--ease-out: cubic-bezier(.23, 1, .32, 1);--ease-in-out: cubic-bezier(.77, 0, .175, 1);--ease-drawer: cubic-bezier(.32, .72, 0, 1);--radius: 14px;--pad: 16px;--tap: 44px;--dock-h: 62px;--kb: 0px;font:100%/1.5 system-ui,-apple-system,sans-serif;color-scheme:light dark}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #0e1512;--surface: #16201b;--surface-sunken: #0a100d;--border: #26332c;--text: #eaf0ec;--text-dim: #97a49c;--text-faint: #626f68;--accent: #34b07a;--accent-ink: #4cc78f;--accent-soft: #16302a;--good: #34b07a;--over: #e0705a;--danger: #e0705a;--chrome: rgba(14, 21, 18, .78);--dock: rgba(22, 32, 27, .86);--scrim: rgba(0, 0, 0, .55);--edge: rgba(255, 255, 255, .09)}}:root[data-theme=dark]{--bg: #0e1512;--surface: #16201b;--surface-sunken: #0a100d;--border: #26332c;--text: #eaf0ec;--text-dim: #97a49c;--text-faint: #626f68;--accent: #34b07a;--accent-ink: #4cc78f;--accent-soft: #16302a;--good: #34b07a;--over: #e0705a;--danger: #e0705a;--chrome: rgba(14, 21, 18, .78);--dock: rgba(22, 32, 27, .86);--scrim: rgba(0, 0, 0, .55);--edge: rgba(255, 255, 255, .09)}*{box-sizing:border-box}html{overscroll-behavior-y:contain;overflow-x:clip;overflow-y:scroll}body{margin:0;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:contain;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}input,textarea,[contenteditable]{-webkit-user-select:text;user-select:text}button,input,label{touch-action:manipulation}button{-webkit-tap-highlight-color:transparent}.money{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.dim{color:var(--text-dim)}.faint{color:var(--text-faint)}.small{font-size:.8125rem}.ink{color:var(--text)}.over-ink{color:var(--over)}.good-ink{color:var(--good)}.app{max-width:640px;margin:0 auto;overflow-x:clip;padding:calc(12px + env(safe-area-inset-top)) var(--pad) calc(var(--dock-h) + 62px + env(safe-area-inset-bottom) + var(--kb))}.display{font-size:clamp(2.5rem,11vw,3.25rem);line-height:1;letter-spacing:-.035em;font-weight:680;margin:0}.h2{font-size:.75rem;font-weight:650;letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);margin:30px 0 12px}.page-head{position:relative;padding:14px 2px 6px}.back{position:absolute;left:-10px;top:4px;width:var(--tap);height:var(--tap);display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:12px;background:transparent;color:var(--accent);font-size:1.5rem;cursor:pointer;transition:transform .14s var(--ease-out)}.back:active{transform:scale(.92)}.page-head:has(.back){padding-left:38px}.month-nav{display:grid;grid-template-columns:var(--tap) 1fr var(--tap);align-items:center;margin:0}.month-nav>span{text-align:center}.month-nav .step:first-child{justify-self:start}.month-nav .step:last-child{justify-self:end}.month-nav .step{display:inline-flex;align-items:center;justify-content:center;width:var(--tap);height:var(--tap);margin:-10px 0;border:0;border-radius:12px;background:transparent;color:var(--text-dim);font-size:1.25rem;cursor:pointer;transition:transform .14s var(--ease-out)}.month-nav .step:active{transform:scale(.94)}.month-nav .step:disabled{opacity:.3}.month-nav .step:disabled:active{transform:none}.link-btn{padding:10px 2px;min-height:var(--tap);border:0;background:transparent;color:var(--accent);font:inherit;font-size:.875rem;font-weight:650;cursor:pointer}.link-btn.right{display:block;margin-left:auto}.row-link{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12px;min-height:52px;padding:12px 14px;margin-bottom:6px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);font:inherit;font-size:.9375rem;text-align:left;cursor:pointer;transition:transform .14s var(--ease-out)}.row-link:active{transform:scale(.985)}.hero{display:flex;justify-content:center;padding:18px 0 4px}.hero-empty{text-align:center;padding:32px 0}.hero-note{text-align:center;margin:4px 0 8px}.ring{position:relative}.ring-track{stroke:var(--surface-sunken)}.ring-fill{stroke:var(--accent);animation:ring-in .7s var(--ease-out) both}.ring-fill.over{stroke:var(--over)}@keyframes ring-in{0%{stroke-dashoffset:var(--circ)}}.ring-centre{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:0 34px}.ring-value{font-size:var(--ring-font, 2.1rem);font-weight:680;letter-spacing:-.035em;line-height:1;white-space:nowrap}.ring-currency{font-size:.55em;vertical-align:.42em;margin-right:1px}.ring-cents{font-size:.5em;vertical-align:.16em}.ring-caption{margin-top:6px;color:var(--text-dim)}.ring-sub{margin-top:5px;font-size:.6875rem;font-weight:550;font-variant-numeric:tabular-nums;color:var(--accent-ink)}.stat{display:block;width:100%;padding:16px;margin-bottom:10px;border:1px solid var(--border);border-radius:18px;background:var(--surface);color:var(--text);font:inherit;text-align:left;cursor:pointer;transition:transform .16s var(--ease-out)}.stat:active{transform:scale(.99)}.stat-label{color:var(--text-dim)}.stat-title{font-size:1.375rem;font-weight:500;letter-spacing:-.01em}.stat-value{margin-top:6px;font-size:2rem;font-weight:700;letter-spacing:-.03em;line-height:1.1}.stat-currency{font-size:.6em;vertical-align:.42em}.stat-cents{font-size:.55em;vertical-align:.14em}.stat-of{font-size:.5em;color:var(--text-faint);font-weight:500}.stat-more{display:block;margin-top:10px;color:var(--accent);font-weight:650}.search{position:sticky;top:0;z-index:15;padding:8px 0 10px;background:var(--chrome);backdrop-filter:blur(18px) saturate(180%);-webkit-backdrop-filter:blur(18px) saturate(180%);margin:0 calc(-1 * var(--pad));padding-left:var(--pad);padding-right:var(--pad)}.search-field{display:flex;align-items:center;gap:8px;min-height:var(--tap);padding:0 12px;border:1px solid var(--border);border-radius:12px;background:var(--surface);color:var(--text-faint);transition:border-color .14s var(--ease-out)}.search-field:focus-within{border-color:var(--accent);color:var(--accent)}.search-field input{flex:1;min-width:0;border:0;background:transparent;color:var(--text);font:inherit;font-size:1rem;padding:10px 0}.search-field input:focus{outline:none}.search-field input::-webkit-search-cancel-button{display:none}.search-clear{width:30px;height:30px;border:0;border-radius:8px;background:var(--surface-sunken);color:var(--text-dim);font-size:1.125rem;line-height:1;cursor:pointer}.filters{display:flex;gap:6px;margin-top:8px;overflow-x:auto;scrollbar-width:none;margin-inline:calc(-1 * var(--pad));padding-inline:var(--pad);scroll-padding-inline:var(--pad)}.filters::-webkit-scrollbar{display:none}.filter{flex:none;min-height:34px;padding:6px 13px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--text-dim);font:inherit;font-size:.8125rem;font-weight:550;white-space:nowrap;cursor:pointer;transition:transform .14s var(--ease-out),background .14s var(--ease-out),color .14s var(--ease-out),border-color .14s var(--ease-out)}.filter:active{transform:scale(.95)}.filter.on{background:var(--accent);border-color:var(--accent);color:#fff}.search-summary{padding:4px 2px 8px}.month-head{position:sticky;top:var(--search-h, 0px);z-index:12;display:flex;align-items:center;gap:8px;width:100%;padding:9px 12px;margin:14px 0 2px;border:0;border-radius:10px;background:var(--accent-soft);color:var(--accent-ink);font-family:inherit;font-size:.8125rem;font-weight:650;letter-spacing:.01em;text-align:left;cursor:pointer}.month-head .money{margin-left:auto}.month-chev{flex:none;transition:transform .2s var(--ease-out)}.month-group.is-collapsed .month-chev{transform:rotate(-90deg)}.month-group:first-of-type .month-head{margin-top:4px}.day-label{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.75rem;font-weight:650;letter-spacing:.05em;text-transform:uppercase;color:var(--text-faint);padding:18px 2px 6px;position:relative;isolation:isolate}.day-group.flash .day-label:before{content:"";position:absolute;top:12px;right:0;bottom:2px;left:0;z-index:-1;border-radius:8px;background:var(--accent-soft);animation:day-flash 1.8s ease-out forwards}@keyframes day-flash{0%,45%{opacity:1}to{opacity:0}}.swipe{position:relative;margin-bottom:6px;border-radius:var(--radius);overflow:hidden}.swipe-action{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:flex-end;padding-right:20px;background:var(--danger);color:#fff;font-size:.8125rem;font-weight:650;opacity:.55;transition:opacity .14s var(--ease-out)}.swipe-action.armed{opacity:1}.swipe-content{position:relative;touch-action:pan-y}.swipe-content.is-dragging{will-change:transform}.entry{display:flex;align-items:center;gap:10px;padding:11px 14px;min-height:64px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--border)}.entry-enter{animation:settle .12s var(--ease-out) both,entry-land 1.8s var(--ease-out) both}@keyframes settle{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes entry-land{0%,45%{background:var(--accent-soft);border-color:var(--accent-soft)}to{background:var(--surface);border-color:var(--border)}}.entry-pending{opacity:.55}.entry.muted{background:var(--surface-sunken)}.entry-body{flex:1;min-width:0}.entry-title{font-size:.9375rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.entry-meta{margin-top:6px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}.entry-amount{font-size:.9375rem;font-weight:600;white-space:nowrap}.entry-amount.credit{color:var(--good)}.entry.recurring{background:var(--surface-sunken);border-style:dashed}.row-delete{display:none}@media(hover:hover)and (pointer:fine){.row-delete{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border:0;border-radius:8px;background:transparent;color:var(--text-faint);font-size:1.125rem;cursor:pointer;opacity:0;transition:opacity .14s var(--ease-out),color .14s var(--ease-out)}.entry:hover .row-delete{opacity:1}.row-delete:hover{color:var(--danger);background:var(--surface-sunken)}}.chip{display:inline-flex;align-items:center;gap:4px;min-height:28px;padding:3px 10px;border:1px solid var(--border);border-radius:999px;background:var(--surface-sunken);color:var(--text-dim);font:inherit;font-size:.75rem;font-weight:550;cursor:pointer;transition:transform .14s var(--ease-out),border-color .14s var(--ease-out)}.chip:active{transform:scale(.96)}.chip.unconfirmed{border-style:dashed;border-color:var(--accent);color:var(--accent)}.chip.card{background:transparent;border-color:transparent;color:var(--text-faint);padding-inline:4px}.chip.card.none{font-style:italic}.popover{position:absolute;z-index:40;padding:8px;border:1px solid var(--border);border-radius:16px;background:var(--surface);box-shadow:0 12px 32px #00000029,0 2px 6px #00000014;transform-origin:var(--origin, top left);animation:pop .18s var(--ease-out) both}@keyframes pop{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.cat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}.cat-grid button{display:flex;justify-content:space-between;gap:6px;padding:9px 10px;border:0;border-radius:10px;background:transparent;color:var(--text);font:inherit;font-size:.8125rem;text-align:left;cursor:pointer}.cat-list{display:flex;flex-direction:column;gap:2px}.cat-list button{display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;min-height:52px;padding:0 16px;border:0;border-radius:12px;background:transparent;color:var(--text);font:inherit;font-size:1rem;text-align:left;cursor:pointer;transition:transform .14s var(--ease-out),background .14s var(--ease-out)}.cat-list button:active{transform:scale(.985);background:var(--surface-sunken)}.cat-grid button[aria-pressed=true],.cat-list button[aria-pressed=true]{background:var(--accent-soft);color:var(--accent-ink);font-weight:650}.learn{display:flex;flex-direction:column;gap:8px;padding:14px 16px 4px;border-top:1px solid var(--border);margin-top:6px}.cat-grid .learn{grid-column:1 / -1;padding:10px 10px 4px}.learn-toggle{display:flex;align-items:center;gap:10px;color:var(--text-dim);font-size:.875rem;cursor:pointer}.learn-toggle input{width:20px;height:20px;accent-color:var(--accent);flex:none}.learn-key,.learn-key-input{align-self:flex-start;max-width:100%;padding:7px 11px;border:1px dashed var(--border);border-radius:10px;background:var(--surface-sunken);color:var(--accent-ink);font:inherit;font-size:.8125rem;font-weight:600;cursor:pointer}.learn-key-input{border-style:solid;border-color:var(--accent);background:var(--surface);color:var(--text);cursor:text;min-width:170px}.learn-key-input:focus{outline:none}.sheet-layer{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60}.sheet-scrim{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--scrim);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);animation:scrim-in .24s var(--ease-out) both;transition:opacity .2s var(--ease-out)}@keyframes scrim-in{0%{opacity:0}to{opacity:1}}.sheet{position:absolute;left:0;right:0;bottom:0;max-height:86vh;overflow-y:auto;padding:6px 8px calc(16px + env(safe-area-inset-bottom));background:var(--surface);border-radius:22px 22px 0 0;box-shadow:0 -8px 40px #00000038;animation:sheet-in .38s var(--ease-drawer) both;touch-action:pan-y;overscroll-behavior:contain;will-change:transform}@keyframes sheet-in{0%{transform:translate3d(0,100%,0)}to{transform:translateZ(0)}}.sheet-grip{width:36px;height:4px;margin:6px auto 4px;border-radius:999px;background:var(--border)}.sheet-title{padding:6px 16px 10px;font-size:.75rem;font-weight:650;letter-spacing:.05em;text-transform:uppercase;color:var(--text-faint)}:root{--flow-invested: #b4531f;--seq-0: #eeece6;--seq-1: #d3e7dc;--seq-2: #a6cfba;--seq-3: #5da588;--seq-4: #0d6b45}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--flow-invested: #cf7539;--seq-0: #16201b;--seq-1: #17362a;--seq-2: #1d5540;--seq-3: #25815d;--seq-4: #34b07a}}:root[data-theme=dark]{--flow-invested: #cf7539;--seq-0: #16201b;--seq-1: #17362a;--seq-2: #1d5540;--seq-3: #25815d;--seq-4: #34b07a}.chart{margin:0 0 26px}.chart-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:10px}.bars{--plot-h: 132px;--label-h: 22px;position:relative}.bars-scroll{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}.bars-scroll::-webkit-scrollbar{display:none}.bars-track{display:flex;gap:6px;align-items:stretch;width:max-content}.bar-col{display:flex;flex:none;flex-direction:column;cursor:pointer;-webkit-tap-highlight-color:transparent}.bar-slot{position:relative;height:var(--plot-h)}.bar-mark{position:absolute;left:0;right:0;bottom:0;border-radius:6px 6px 0 0;background:linear-gradient(var(--seq-3),var(--seq-2));transform-origin:bottom;animation:grow-y .46s var(--ease-out) both;transition:background .16s var(--ease-out)}.bar-mark.zero{background:var(--border);border-radius:2px}.bar-col.active .bar-mark{background:linear-gradient(var(--seq-4),var(--seq-3))}.bar-col.active .bar-mark.zero{background:var(--text-faint)}@keyframes grow-y{0%{transform:scaleY(0)}to{transform:scaleY(1)}}.bar-label{height:var(--label-h);line-height:var(--label-h);text-align:center;font-size:.6875rem;font-weight:600;letter-spacing:.04em;color:var(--text-faint);transition:color .14s var(--ease-out)}.bar-col.active .bar-label{color:var(--text)}.bars-target em{position:absolute;right:0;top:3px;font-style:normal;color:var(--text-faint);background:var(--bg);padding-inline:4px}.meter{position:relative;height:9px;border-radius:999px;background:var(--surface-sunken);overflow:hidden}.meter.slim{height:6px;margin-top:10px}.meter-fill{height:100%;border-radius:999px;background:var(--accent);transform-origin:left center;animation:grow-x .52s var(--ease-out) both}.meter-fill.over{background:var(--over)}@keyframes grow-x{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.meter-wrap{position:relative}.meter-pace{position:absolute;top:-4px;bottom:-4px;width:2px;margin-left:-1px;border-radius:1px;background:var(--text);opacity:.45}.pace-note{display:flex;align-items:center;gap:7px;margin:-4px 2px 14px}.pace-key{flex:none;width:2px;height:13px;border-radius:1px;background:var(--text);opacity:.45}.cat-row{margin-bottom:18px}.cat-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:7px;font-size:.875rem}.cat-foot{margin-top:5px}.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.cal-dow{text-align:center;font-size:.6875rem;color:var(--text-faint);padding-bottom:2px}.cal-cell{aspect-ratio:1;border-radius:7px;display:flex;align-items:center;justify-content:center;font-size:.6875rem;font-variant-numeric:tabular-nums;color:var(--text-dim);background:var(--seq-0)}.cal-cell.step-1{background:var(--seq-1)}.cal-cell.step-2{background:var(--seq-2)}.cal-cell.step-3{background:var(--seq-3);color:#fff}.cal-cell.step-4{background:var(--seq-4);color:#fff}.cal-cell.is-today{outline:2px solid var(--text);outline-offset:1px}button.cal-cell{border:0;padding:0;font-family:inherit;font-weight:inherit}.cal-cell.tappable{cursor:pointer;transition:transform .14s cubic-bezier(.32,.72,0,1)}.cal-cell.tappable:active{transform:scale(.88)}.flow{display:flex;gap:2px;height:14px;border-radius:999px;overflow:hidden;background:var(--surface-sunken)}.flow-seg{height:100%;transform-origin:left center;animation:grow-x .52s var(--ease-out) both}.flow-seg.spent{background:var(--accent)}.flow-seg.invested{background:var(--flow-invested)}.flow-seg.left{background:var(--surface-sunken);box-shadow:inset 0 0 0 1px var(--border)}.flow-seg.left.over{background:var(--over)}.chart-legend{display:flex;align-items:center;gap:14px;margin-top:10px;font-size:.8125rem}.chart-legend.wrap{flex-wrap:wrap;gap:10px 14px}.chart-legend .key{display:inline-flex;align-items:center;gap:6px;color:var(--text-dim)}.chart-legend .key b{color:var(--text);font-weight:600}.swatch{width:10px;height:10px;border-radius:3px;flex:none;display:inline-block}.swatch.spent{background:var(--accent)}.swatch.invested{background:var(--flow-invested)}.swatch.left{background:var(--surface-sunken);border:1px solid var(--border)}.swatch.step-0{background:var(--seq-0);border:1px solid var(--border)}.swatch.step-1{background:var(--seq-1)}.swatch.step-2{background:var(--seq-2)}.swatch.step-3{background:var(--seq-3)}.swatch.step-4{background:var(--seq-4)}.dock{position:fixed;left:0;right:0;z-index:30;background:var(--dock);backdrop-filter:blur(22px) saturate(180%);-webkit-backdrop-filter:blur(22px) saturate(180%);border-top:1px solid var(--border);bottom:var(--kb, 0px);transition:bottom .18s var(--ease-out)}.dock-form{display:flex;flex-direction:column;gap:8px;max-width:640px;margin:0 auto;padding:12px var(--pad) 4px;animation:dock-in .26s var(--ease-drawer) both}@keyframes dock-in{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.dock-field{display:flex;align-items:center;gap:4px;padding-right:4px;border:1px solid var(--border);border-radius:12px;background:var(--surface);transition:border-color .14s var(--ease-out)}.dock-field:focus-within{border-color:var(--accent)}.dock-form input{flex:1;min-width:0;min-height:var(--tap);padding:12px 15px;border:0;border-radius:12px;background:transparent;color:var(--text);font:inherit;font-size:1rem}.dock-send{flex:none;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:0;border-radius:10px;background:var(--accent);color:#fff;cursor:pointer;transition:transform .14s var(--ease-out),opacity .14s var(--ease-out)}.dock-send:active{transform:scale(.9)}.dock-send:disabled{opacity:.3;cursor:default}.dock-send:disabled:active{transform:none}.dock-form input:focus{outline:none}.dock-form input::placeholder{color:var(--text-faint)}.dock-cards{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}.dock-cards::-webkit-scrollbar{display:none}.card-pill{flex:none;min-height:32px;padding:5px 12px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--text-dim);font:inherit;font-size:.75rem;font-weight:550;white-space:nowrap;cursor:pointer;transition:transform .14s var(--ease-out)}.card-pill:active{transform:scale(.95)}.card-pill.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}.dock-cats{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}.dock-cats::-webkit-scrollbar{display:none}.cat-pill{flex:none;display:flex;align-items:baseline;gap:5px;min-height:32px;padding:5px 12px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--text-dim);font-family:inherit;font-size:.75rem;font-weight:550;white-space:nowrap;cursor:pointer;transition:transform .14s cubic-bezier(.32,.72,0,1)}.cat-pill:active{transform:scale(.95)}.cat-pill.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}.cat-pill.auto{border-style:dashed}.cat-pill.auto.on{background:var(--surface);border-color:var(--text-faint);color:var(--text)}.cat-left{font-size:.6875rem;font-weight:500;font-variant-numeric:tabular-nums;opacity:.7}.cat-left.over{color:var(--over);opacity:1}.tabbar{display:flex;align-items:stretch;max-width:640px;margin:0 auto;height:var(--dock-h);padding-bottom:env(safe-area-inset-bottom);box-sizing:content-box}.tabbar-gap{width:78px;flex:none}.tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:var(--tap);border:0;background:transparent;color:var(--text-faint);font:inherit;font-size:.625rem;font-weight:600;letter-spacing:.02em;cursor:pointer;transition:color .14s var(--ease-out),transform .14s var(--ease-out)}.tab:active{transform:scale(.94)}.tab.on{color:var(--accent)}.fab{position:fixed;left:50%;bottom:calc(var(--dock-h) - 28px + env(safe-area-inset-bottom) + var(--kb));z-index:35;width:60px;height:60px;margin-left:-30px;display:flex;align-items:center;justify-content:center;border:4px solid var(--bg);border-radius:50%;background:var(--accent);color:#fff;cursor:pointer;box-shadow:0 6px 18px #0d6b4552;transition:transform .26s var(--ease-out),background .2s var(--ease-out),bottom .18s var(--ease-out),left .26s var(--ease-out),margin-left .26s var(--ease-out)}.fab:active{transform:scale(.93)}.fab.open{left:100%;margin-left:calc(-1 * (60px + var(--pad)));transform:rotate(45deg) scale(.86);background:var(--text)}.fab.open:active{transform:rotate(45deg) scale(.8)}.field{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:var(--tap);padding:8px 0;border-bottom:1px solid var(--border)}.field input{width:132px;min-height:var(--tap);padding:8px 12px;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--text);font:inherit;font-size:1rem;text-align:right;font-variant-numeric:tabular-nums}.field input:focus{outline:none;border-color:var(--accent)}.field.total{border-bottom:0;padding-top:16px;font-size:.9375rem}.alloc{margin-bottom:14px}.alloc .field{border-bottom:0;padding-bottom:4px}.alloc-foot{display:flex;justify-content:space-between;gap:8px;margin-top:6px}.btn{min-height:var(--tap);padding:12px 18px;border:0;border-radius:12px;background:var(--accent);color:#fff;font:inherit;font-weight:650;cursor:pointer;transition:transform .16s var(--ease-out),opacity .14s var(--ease-out)}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.4;cursor:default}.btn:disabled:active{transform:none}.btn.wide{display:block;width:100%;margin-top:18px}.btn.ghost{background:transparent;border:1px solid var(--border);color:var(--text)}.add-card{display:flex;flex-direction:column;gap:8px;margin-top:12px}.add-card input,.card-edit input{width:100%;min-height:var(--tap);padding:11px 14px;border:1px solid var(--border);border-radius:12px;background:var(--surface);color:var(--text);font:inherit;font-size:1rem}.add-card input:focus,.card-edit input:focus{outline:none;border-color:var(--accent)}.add-card-actions{display:flex;gap:8px}.add-card-actions .btn{flex:1}.card-edit{display:flex;flex-direction:column;gap:6px}.rule-key{display:inline-flex;align-items:center;gap:6px;padding:0;border:0;background:transparent;color:var(--text);font:inherit;font-size:.9375rem;font-weight:600;cursor:pointer;text-align:left}.rule-key span{color:var(--text-faint);font-size:.75rem}.empty{padding:48px 0;text-align:center;color:var(--text-faint);font-size:.9375rem}.toast{position:fixed;top:calc(12px + env(safe-area-inset-top));left:50%;z-index:50;display:flex;align-items:center;gap:12px;max-width:calc(100vw - 32px);padding:8px 10px 8px 16px;border-radius:999px;background:var(--surface);border:1px solid var(--border);box-shadow:0 8px 28px #0000002e;font-size:.875rem;transform:translate(-50%);animation:toast-in .22s var(--ease-out) both;pointer-events:none}.toast .chip{pointer-events:auto}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,-60%)}to{opacity:1;transform:translate(-50%)}}@media(hover:hover)and (pointer:fine){.chip:hover{border-color:var(--accent)}.tab:hover{color:var(--text-dim)}.filter:hover,.row-link:hover,.stat:hover{border-color:var(--accent)}.cat-grid button:hover,.cat-list button:hover{background:var(--surface-sunken)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-delay:0ms!important;transition-duration:.12s!important}.popover,.sheet,.dock-form{animation:fade .16s ease both!important}.entry-enter{animation:none!important;background:var(--accent-soft)}.day-group.flash .day-label:before{animation:none!important;opacity:1}.fab.open{transform:rotate(45deg)}@keyframes fade{0%{opacity:0}to{opacity:1}}}@media(prefers-reduced-transparency:reduce){.dock{background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none}.sheet-scrim{backdrop-filter:none;-webkit-backdrop-filter:none}}@media(prefers-contrast:more){:root{--border: #8b958e}.chip,.entry,.field input,.dock-form input{border-width:1px}}.bars-target{position:absolute;left:0;right:0;bottom:calc(var(--label-h) + var(--pct, 0) * var(--plot-h));z-index:2;border-top:1px dashed var(--text-faint);opacity:.6;pointer-events:none}.month-title{display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:4px 8px;margin:0 auto;border:0;border-radius:8px;background:transparent;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer;transition:transform .14s var(--ease-out)}.month-title:active{transform:scale(.96)}.yr-nav{display:grid;grid-template-columns:var(--tap) 1fr var(--tap);align-items:center;margin-bottom:12px;font-size:1.0625rem;font-weight:650}.yr-nav>span{text-align:center}.yr-nav .step{width:var(--tap);height:var(--tap);border:0;border-radius:12px;background:transparent;color:var(--text-dim);font-size:1.25rem;cursor:pointer}.yr-nav .step:disabled{opacity:.3}.mo-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding-bottom:8px}.mo{min-height:var(--tap);border:1px solid var(--border);border-radius:12px;background:var(--surface);color:var(--text);font-family:inherit;font-size:.875rem;font-weight:600;cursor:pointer;transition:transform .14s var(--ease-out)}.mo:active{transform:scale(.94)}.mo:disabled{opacity:.28;cursor:default}.mo:disabled:active{transform:none}.mo.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}.stat-foot{margin-top:8px}.fcf-line{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:12px 14px;margin-top:18px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);font-size:.875rem;font-weight:600}.fcf-card{padding:14px;margin-top:18px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.fcf-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:4px 0;font-weight:600}.note{margin:0 2px 8px;line-height:1.45}.entry-amount.as-btn{border:0;padding:0;background:transparent;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;cursor:pointer;transition:transform .14s var(--ease-out)}.entry-amount.as-btn:active{transform:scale(.94)}.edit-form{display:flex;flex-direction:column;gap:10px}.edit-form .field{display:flex;align-items:center;justify-content:space-between;gap:12px}.edit-form .field>span{flex:none;width:84px;font-size:.8125rem;color:var(--text-dim)}.edit-form input{flex:1;min-height:var(--tap);padding:8px 12px;border:1px solid var(--border);border-radius:12px;background:var(--surface);color:var(--text);font:inherit;font-size:1rem}.edit-actions{display:flex;justify-content:flex-end;align-items:center;gap:8px;padding-top:6px}.primary-btn{min-height:var(--tap);padding:10px 20px;border:0;border-radius:999px;background:var(--accent);color:#fff;font:inherit;font-size:.9375rem;font-weight:650;cursor:pointer;transition:transform .14s var(--ease-out)}.primary-btn:active{transform:scale(.96)}.goal{padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.goal-head{display:flex;align-items:center;gap:10px}.goal-name{flex:1;min-width:0;border:0;background:transparent;color:var(--text);font:inherit;font-size:.9375rem;font-weight:600;padding:4px 0}.goal-amt-btn,.goal-amt{flex:none;width:116px;min-height:36px;padding:4px 10px;border:1px solid transparent;border-radius:10px;background:transparent;color:var(--text);font:inherit;font-size:.9375rem;font-weight:650;font-variant-numeric:tabular-nums;text-align:right;cursor:pointer}.goal-amt{border-color:var(--accent);background:var(--surface);cursor:text}.goal-foot{margin-top:6px}.goal-add{display:flex;align-items:center;gap:8px;margin-top:10px}.goal-add input{min-width:0;min-height:var(--tap);padding:8px 12px;border:1px solid var(--border);border-radius:12px;background:var(--surface);color:var(--text);font:inherit;font-size:.9375rem}.goal-add input:first-child{flex:2}.goal-add input:nth-child(2){flex:1}.sv-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:11px 14px;margin-bottom:6px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);font-size:.9375rem}.goal.met{border-color:var(--accent)}.goal-rank{flex:none;width:20px;font-size:.75rem;font-weight:700;font-variant-numeric:tabular-nums;color:var(--text-faint)}.goal-met{flex:none;padding:2px 8px;border-radius:999px;background:var(--accent-soft);color:var(--accent-ink);font-size:.6875rem;font-weight:700;letter-spacing:.03em}.goal-move{display:flex;flex:none;gap:2px}.goal-move button{width:30px;height:30px;border:0;border-radius:8px;background:transparent;color:var(--text-dim);font-size:.875rem;cursor:pointer;transition:transform .14s var(--ease-out)}.goal-move button:active{transform:scale(.9)}.goal-move button:disabled{opacity:.25;cursor:default}.goal-move button:disabled:active{transform:none}.meter-fill.done{background:var(--accent)}.goal-foot{display:flex;justify-content:space-between;gap:10px;margin-top:6px}.sv-row.leftover{border-style:dashed;background:transparent;font-weight:600}.goal-target-btn,.goal-target{padding:1px 5px;border:1px solid transparent;border-radius:6px;background:transparent;color:inherit;font:inherit;font-variant-numeric:tabular-nums;cursor:pointer}.goal-target-btn{border-bottom-color:currentColor;border-bottom-style:dotted}.goal-target{width:92px;border-color:var(--accent);background:var(--surface);cursor:text}.goal.emergency{border-left:3px solid var(--accent)}.goal-name.as-text{flex:1;font-size:.9375rem;font-weight:600;padding:4px 0}.h2-note{font-weight:500;text-transform:none;letter-spacing:0}.sv-row.year{width:100%;border:1px solid var(--border);color:var(--text);font:inherit;font-size:.9375rem;font-weight:650;text-align:left;cursor:pointer}.sv-chev{display:inline-block;width:14px;margin-right:4px;color:var(--text-faint);transition:transform .2s var(--ease-out)}.sv-chev.open{transform:rotate(90deg)}.sv-row.month{margin-left:18px;border-style:dashed;background:transparent;font-size:.875rem}.em-top{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:8px}.em-covered{font-size:.9375rem;color:var(--text-dim)}.em-covered strong{font-size:1.125rem;font-weight:700;color:var(--text)}.em-pct{font-size:1.0625rem;font-weight:700;color:var(--text-dim)}.em-months{display:flex;gap:2px}.em-seg{flex:1;height:12px;overflow:hidden;background:var(--surface-sunken)}.em-seg:first-child{border-radius:999px 0 0 999px}.em-seg:last-child{border-radius:0 999px 999px 0}.em-seg-fill{height:100%;background:var(--accent);transform-origin:left center;transition:width .26s var(--ease-out)}.em-control{margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}.em-control-head{display:flex;justify-content:space-between;align-items:center;gap:10px}.em-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:22px;margin:4px 0 0;background:transparent;cursor:pointer}.em-slider::-webkit-slider-runnable-track{height:6px;border-radius:999px;background:linear-gradient(to right,var(--accent) 0 var(--fill, 0%),var(--surface-sunken) var(--fill, 0%) 100%)}.em-slider::-moz-range-track{height:6px;border-radius:999px;background:linear-gradient(to right,var(--accent) 0 var(--fill, 0%),var(--surface-sunken) var(--fill, 0%) 100%)}.em-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;margin-top:-7px;border:2px solid var(--surface);border-radius:50%;background:var(--accent);box-shadow:0 1px 4px #00000047}.em-slider::-moz-range-thumb{width:20px;height:20px;border:2px solid var(--surface);border-radius:50%;background:var(--accent);box-shadow:0 1px 4px #00000047}.em-slider:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.em-scale{display:flex;justify-content:space-between;margin-top:-2px}.goal.emergency{padding:14px}.goal.emergency .goal-foot{margin-top:8px;flex-wrap:wrap;row-gap:2px}.goal.emergency .goal-foot>span{white-space:nowrap}.yr-figs{display:flex;flex-direction:column;align-items:flex-end;gap:1px}.yr-detail{margin-bottom:10px}.yr-months{margin-top:8px}.yr-note{margin:6px 0 0 18px}.yr-tag{margin-left:8px;padding:1px 7px;border-radius:999px;background:var(--surface-sunken);color:var(--text-faint);font-size:.625rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.yr-tag.met{background:var(--accent-soft);color:var(--accent-ink)}.ess-tag{display:inline-block;margin-left:8px;padding:1px 7px;border-radius:999px;background:var(--accent-soft);color:var(--accent-ink);font-size:.625rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;vertical-align:1px}.home-bar{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:2px 0 0}.home-date{display:flex;flex-direction:column;gap:1px}.home-weekday{font-size:.6875rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--accent)}.home-full{font-size:1rem;font-weight:620;letter-spacing:-.006em;line-height:1.2;color:var(--text)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:var(--tap);height:var(--tap);margin-right:-10px;border:0;border-radius:12px;background:transparent;color:var(--text-dim);cursor:pointer;transition:transform .14s var(--ease-out),color .14s var(--ease-out)}.icon-btn:active{transform:scale(.9);color:var(--text)}.page-title{font-size:1.75rem;letter-spacing:-.02em;line-height:1.15;font-weight:680;margin:0}.seg{display:flex;gap:2px;padding:3px;border-radius:12px;background:var(--surface-sunken)}.seg-item{flex:1;min-height:38px;border:0;border-radius:9px;background:transparent;color:var(--text-dim);font-family:inherit;font-size:.875rem;font-weight:600;cursor:pointer;transition:background .16s var(--ease-out),color .16s var(--ease-out),transform .14s var(--ease-out)}.seg-item:active{transform:scale(.97)}.seg-item.on{background:var(--surface);color:var(--text);box-shadow:0 1px 3px #0000001f}.row-link .row-sub{display:block;margin-top:2px;font-weight:400}.row-end{display:inline-flex;align-items:center;gap:8px}.row-chev{color:var(--text-faint)}.theming,.theming body,.theming .app *:not(.meter-fill):not(.em-seg-fill){transition:background-color .3s ease,border-color .3s ease,color .3s ease}@media(prefers-reduced-motion:reduce){.theming,.theming body,.theming .app *{transition:none!important}}.ring-track.inner{stroke:var(--surface-sunken)}.ring-inner{stroke:var(--accent);opacity:.55;animation:ring-in-inner .7s 80ms var(--ease-out) both}.ring-inner.over{stroke:var(--over);opacity:1}@keyframes ring-in-inner{0%{stroke-dashoffset:var(--circ-inner)}}.ring-centre{padding:0 30px}.ring-key{display:flex;flex-direction:column;gap:6px;margin:14px 0 0;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.ring-key-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.ring-key dt{display:flex;align-items:center;gap:8px;font-size:.875rem;color:var(--text-dim)}.ring-key dd{margin:0;font-size:.9375rem}.key-arc{flex:none;width:13px;height:13px;border-radius:50%;border:3px solid var(--accent)}.key-arc.inner{border-width:2px;opacity:.55}.search-summary{display:flex;align-items:center;justify-content:space-between;gap:12px}.link-btn.compact{padding:6px 0;margin:-6px 0;min-height:32px;font-size:.8125rem}.screen{animation:screen-in .3s var(--ease-out) both}.screen.in-back{animation-name:screen-in-back}@keyframes screen-in{0%{transform:translate3d(14px,0,0);opacity:0}to{transform:none;opacity:1}}@keyframes screen-in-back{0%{transform:translate3d(-14px,0,0);opacity:0}to{transform:none;opacity:1}}@media(prefers-reduced-motion:reduce){.screen,.screen.in-back{animation:screen-fade .16s ease both!important}@keyframes screen-fade{0%{opacity:0}to{opacity:1}}}.sv-row.year:active,.month-head:active,.goal-amt-btn:active,.goal-target-btn:active,.link-btn:active,.search-clear:active{transform:scale(.97)}.sv-row.year,.month-head,.goal-amt-btn,.goal-target-btn,.link-btn,.search-clear{transition:transform .1s ease-out}.bar-col:active .bar-mark{opacity:.72}.bar-mark{transition:background .16s var(--ease-out),opacity .1s ease-out}.dock{border-top:1px solid var(--edge)}@media(prefers-contrast:more){:root{--border: #6a736d;--text-dim: #33403a;--text-faint: #4a554f;--chrome: var(--bg);--dock: var(--surface)}:root[data-theme=dark],:root:not([data-theme=light]){--border: #8f9c95;--text-dim: #cfd8d3;--text-faint: #b3bdb8}.dock,.search,.sheet-scrim{backdrop-filter:none;-webkit-backdrop-filter:none}.entry,.row-link,.stat,.goal,.sv-row,.fcf-card,.ring-key{border-width:2px}.cat-pill.on,.filter.on,.card-pill.on,.seg-item.on,.mo.on{outline:2px solid var(--accent);outline-offset:-2px}}
