:root{--font:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--text-xs:11px;--text-sm:12.5px;--text-md:13.5px;--text-lg:15px;--text-xl:21px;--text-2xl:27px;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--sp-7:48px;--radius-sm:10px;--radius:14px;--radius-lg:18px;--radius-pill:999px;--dur-fast:.14s;--dur:.26s;--dur-slow:.46s;--ease:cubic-bezier(.16, 1, .3, 1);--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--stream-personal:#7c5cff;--stream-personal-2:#6647d6;--stream-savings:#0b7a55;--stream-savings-2:#075c40;--stream-calendar:#1a6a9c;--stream-calendar-2:#154e86;--cat-1:#7c5cff;--cat-2:#2f6df0;--cat-3:#0d8a60;--cat-4:#a87a16;--cat-5:#b6539c;--cat-6:#c2410c;--cat-7:#1f7ab0;--cat-8:#7d8597}:root[data-theme=light]{--bg:#eef1f6;--bg-2:#e4e9f1;--panel:#fff;--panel-2:#f2f5f9;--line:#d5dce6;--text:#1f2430;--muted:#67718a;--accent:#7c5cff;--accent-2:#6647d6;--accent-text:#6647d6;--pos:#0d8a60;--neg:#d93a52;--gold:#a87a16;--warn:#a87a16;--ring-rest:#cbd3e0;--shadow:0 8px 24px #0f172a1a;--shadow-1:0 1px 2px #0f172a0d;--shadow-2:0 8px 24px #0f172a1a;--shadow-3:0 18px 40px #0f172a2e;--scrim:#10141e70}:root[data-theme=dark]{--bg:#0e1117;--bg-2:#161b25;--panel:#151a23;--panel-2:#1c222e;--line:#2a3240;--text:#e6ebf4;--muted:#8b97ab;--accent:#8b6dff;--accent-2:#6647d6;--accent-text:#b3a0ff;--pos:#34d399;--neg:#f87171;--gold:#d9a441;--warn:#d9a441;--ring-rest:#394152;--cat-1:#8b6dff;--cat-2:#60a5fa;--cat-3:#34d399;--cat-4:#d9a441;--cat-5:#d68ac4;--cat-6:#f0803c;--cat-7:#56b4e9;--cat-8:#8b97ab;--shadow:0 10px 30px #00000073;--shadow-1:0 1px 2px #0006;--shadow-2:0 10px 30px #00000073;--shadow-3:0 20px 44px #0009;--scrim:#0000009e}:root{--surface:var(--panel);--surface-2:var(--panel-2);--bg-elevated:var(--panel);--bg-sunken:var(--bg-2);--border:var(--line);--border-strong:color-mix(in srgb, var(--line) 70%, var(--muted));--ink:var(--text);--ink-2:color-mix(in srgb, var(--text) 75%, var(--muted));--on-accent:#fff}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%}body{font-family:var(--font);font-size:var(--text-md);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;overscroll-behavior-y:none;margin:0;line-height:1.5}h1,h2,h3,h4{letter-spacing:-.02em;margin:0;font-weight:650;line-height:1.2}h1{font-size:var(--text-xl)}h2{font-size:var(--text-lg)}h3{font-size:var(--text-md)}p{margin:0 0 var(--sp-3)}p:last-child{margin-bottom:0}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button{font:inherit;color:inherit;cursor:pointer}input,select,textarea{font:inherit;color:var(--ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}.money{font-variant-numeric:tabular-nums;white-space:nowrap}.money.pos{color:var(--pos)}.money.neg{color:var(--neg)}.muted{color:var(--muted)}.hint{color:var(--muted);font-size:var(--text-sm)}.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}.boot-splash{min-height:100dvh;padding:var(--sp-5);color:var(--muted);text-align:center;place-items:center;display:grid}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.btn,.ghost-btn{justify-content:center;align-items:center;gap:var(--sp-2);font-weight:600;font-size:var(--text-md);transition:transform var(--dur-fast) var(--ease), box-shadow var(--dur) var(--ease), border-color var(--dur) var(--ease), background-color var(--dur) var(--ease);border-radius:10px;display:inline-flex}.btn{background:linear-gradient(135deg, var(--accent), var(--accent-2));color:#fff;border:none;padding:10px 16px}.btn:hover:not(:disabled){box-shadow:var(--shadow);transform:translateY(-1px)}.btn:active:not(:disabled){transform:translateY(0)scale(.99)}.ghost-btn{background:var(--panel-2);color:var(--text);border:1px solid var(--line);padding:9px 14px}.ghost-btn:hover:not(:disabled){border-color:var(--accent)}.ghost-btn.danger{color:var(--neg)}.ghost-btn.danger:hover:not(:disabled){border-color:var(--neg)}.btn:disabled,.ghost-btn:disabled{opacity:.5;cursor:default;box-shadow:none;transform:none}.btn.tiny,.ghost-btn.tiny{padding:6px 12px;font-size:12px}.btn.full,.ghost-btn.full{width:100%}.link-btn{color:var(--accent-text);font-weight:600;font-size:inherit;text-underline-offset:3px;background:0 0;border:0;padding:0;text-decoration:underline}.btn-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.icon-btn{width:36px;height:36px;color:var(--text);font-size:var(--text-lg);transition:background-color var(--dur) var(--ease);background:0 0;border:0;border-radius:10px;place-items:center;display:grid}.icon-btn:hover{background:var(--panel-2)}.icon-btn.danger{color:var(--neg)}.field{margin-bottom:var(--sp-3);flex-direction:column;gap:5px;display:flex}.field>label{color:var(--muted);font-size:12px;font-weight:600}input,select,textarea{background:var(--bg-2);border:1px solid var(--line);color:var(--text);border-radius:9px;width:100%;padding:9px 11px;font-family:inherit;font-size:13px}input:focus,select:focus,textarea:focus{border-color:var(--accent);outline:none}input:disabled,select:disabled,textarea:disabled{opacity:.35;cursor:not-allowed}textarea{resize:vertical;min-height:80px}input[type=number]{-moz-appearance:textfield}input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=date],input[type=time],input[type=month]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark] input[type=date],:root[data-theme=dark] input[type=time],:root[data-theme=dark] input[type=month]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.field-error{color:var(--neg);font-size:12px;font-weight:600}.card{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:16px;padding:22px}.pill,.tag{font-size:var(--text-xs);border:1px solid var(--line);background:var(--panel-2);color:var(--muted);white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:3px 9px;font-weight:600;display:inline-flex}.pill-in,.tag.route-budget{background:color-mix(in srgb, var(--accent) 14%, transparent);color:var(--accent-text);border-color:color-mix(in srgb, var(--accent) 40%, transparent)}.pill-pos,.tag.route-appointment{background:color-mix(in srgb, var(--pos) 14%, transparent);color:var(--pos);border-color:color-mix(in srgb, var(--pos) 40%, transparent)}.pill-gold,.tag.route-logged,.tag-calendar,.tag-savings,.tag-unsaved{background:color-mix(in srgb, var(--gold) 14%, transparent);color:var(--gold);border-color:color-mix(in srgb, var(--gold) 40%, transparent)}.pill-neg,.tag-dupe{background:color-mix(in srgb, var(--neg) 12%, transparent);color:var(--neg);border-color:color-mix(in srgb, var(--neg) 38%, transparent)}.banner{align-items:flex-start;gap:var(--sp-2);background:color-mix(in srgb, var(--accent) 15%, transparent);border:1px solid var(--accent);color:var(--accent-text);margin-bottom:var(--sp-4);font-size:var(--text-md);border-radius:10px;padding:10px 14px;display:flex}.banner.ok{background:color-mix(in srgb, var(--pos) 13%, transparent);border-color:color-mix(in srgb, var(--pos) 45%, transparent);color:var(--pos)}.banner.warn{background:color-mix(in srgb, var(--gold) 13%, transparent);border-color:color-mix(in srgb, var(--gold) 45%, transparent);color:var(--gold)}.banner.bad{background:color-mix(in srgb, var(--neg) 12%, transparent);border-color:color-mix(in srgb, var(--neg) 45%, transparent);color:var(--neg)}.banner strong{color:inherit}.stat-tile{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);text-align:left;flex-direction:column;gap:5px;padding:13px 15px;display:flex;position:relative;overflow:hidden}.stat-tile:before{content:"";background:var(--accent);opacity:.85;width:3px;position:absolute;top:0;bottom:0;left:0}.stat-tile.tone-pos:before{background:var(--pos)}.stat-tile.tone-neg:before{background:var(--neg)}.stat-tile.tone-gold:before{background:var(--gold)}.stat-tile-label{font-size:var(--text-xs);letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}.stat-tile-value{letter-spacing:-.015em;font-size:20px;font-weight:680}.stat-tile.tone-pos .stat-tile-value{color:var(--pos)}.stat-tile.tone-neg .stat-tile-value{color:var(--neg)}.stat-tile-sub{color:var(--muted);font-size:12px}@keyframes rise-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.stagger>*{animation:rise-in var(--dur-slow) var(--ease) backwards;animation-delay:calc(var(--i,0) * 45ms)}.auth-screen{min-height:100dvh;padding:var(--sp-4);background:radial-gradient(1100px 620px at 12% -10%, color-mix(in srgb, var(--accent) 16%, transparent), transparent), radial-gradient(900px 520px at 110% 110%, color-mix(in srgb, var(--stream-savings) 14%, transparent), transparent), var(--bg);place-items:center;display:grid}.auth-card{width:100%;max-width:400px;box-shadow:var(--shadow-3)}.auth-card.wide{max-width:520px}.auth-title{font-size:var(--text-2xl);margin-bottom:var(--sp-2);background:linear-gradient(120deg, var(--accent), var(--stream-savings-2));color:#0000;-webkit-background-clip:text;background-clip:text}.auth-switch{justify-content:space-between;align-items:center;gap:var(--sp-3);margin-top:var(--sp-3);padding-top:var(--sp-3);border-top:1px solid var(--border);flex-wrap:wrap;display:flex}.preset-preview{gap:var(--sp-2);margin-bottom:var(--sp-2);flex-wrap:wrap;display:flex}.chip{align-items:center;gap:var(--sp-1);padding:var(--sp-1) var(--sp-3);border-radius:var(--radius-pill);background:var(--surface-2);border:1px solid var(--border);font-size:var(--text-sm);display:inline-flex}.shell{height:100dvh;display:flex}.sidebar{background:var(--bg-2);border-right:1px solid var(--line);width:232px;padding:18px 14px;padding-top:max(18px, env(safe-area-inset-top));flex-direction:column;flex-shrink:0;gap:18px;display:flex;overflow-y:auto}.brand{align-items:center;gap:11px;padding:4px 6px;display:flex}.brand-mark{background:linear-gradient(135deg, var(--accent), var(--accent-2));color:#fff;border-radius:11px;flex:none;place-items:center;width:38px;height:38px;font-size:20px;font-weight:700;display:grid}.brand-mark.small{border-radius:8px;width:28px;height:28px;font-size:15px}.brand-text{flex-direction:column;min-width:0;line-height:1.15;display:flex}.brand-text strong{text-overflow:ellipsis;white-space:nowrap;font-size:15px;overflow:hidden}.brand-text span{color:var(--muted);letter-spacing:2px;text-transform:uppercase;font-size:12px}.nav{flex-direction:column;gap:3px;margin:0;padding:0;list-style:none;display:flex}.nav-item{text-align:left;width:100%;color:var(--muted);transition:background-color var(--dur) var(--ease), color var(--dur) var(--ease);background:0 0;border:none;border-radius:10px;align-items:center;gap:10px;padding:10px 12px;font-size:14px;display:flex}.nav-item:hover{background:var(--panel);color:var(--text)}.nav-item.active{background:var(--panel-2);color:var(--text);box-shadow:inset 3px 0 0 var(--accent)}.nav-item.active[data-stream=personal]{box-shadow:inset 3px 0 0 var(--stream-personal)}.nav-item.active[data-stream=savings]{box-shadow:inset 3px 0 0 var(--stream-savings)}.nav-ico{flex:none;font-size:16px}.sidebar-actions{flex-direction:column;gap:8px;margin-top:auto;display:flex}.sidebar-foot{font-size:var(--text-xs);color:var(--muted);text-align:center}.topbar{padding:8px 12px;padding-top:max(8px, env(safe-area-inset-top));background:var(--bg-2);border-bottom:1px solid var(--line);flex:none;align-items:center;gap:10px;display:none}.topbar-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:15px;overflow:hidden}.save-status{font-size:var(--text-xs);color:var(--muted);white-space:nowrap;align-items:center;gap:5px;display:inline-flex}.save-status.error{color:var(--neg)}.save-status.readonly{color:var(--gold)}.body{flex-direction:column;flex:1;min-width:0;display:flex}.content{min-width:0;padding:22px 24px;padding-bottom:max(40px, env(safe-area-inset-bottom));flex:1;overflow-y:auto}.page{width:100%}.page-head{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:20px;display:flex}.page-head h1{margin:0 0 6px;font-size:24px}.page-head>div>p,.page-head>p{max-width:78ch;margin:0}.kv{grid-template-columns:minmax(120px,auto) 1fr;gap:8px 16px;max-width:640px;margin:0;display:grid}.kv dt{color:var(--muted);font-size:12px}.kv dd{margin:0;font-weight:600}.mono{font-family:var(--font-mono);font-size:var(--text-sm);overflow-wrap:anywhere}.scrim{display:none}@media (width<=900px){.shell{flex-direction:column}.topbar{display:flex}.sidebar{z-index:60;width:264px;transition:transform var(--dur) var(--ease);box-shadow:var(--shadow-3);position:fixed;top:0;bottom:0;left:0;transform:translate(-100%)}.sidebar.open{transform:translate(0)}.scrim{z-index:50;animation:fade-in var(--dur) var(--ease);background:#05080c8c;display:block;position:fixed;inset:0}.content{padding:16px}.page-head h1{font-size:20px}.save-text{clip:rect(0, 0, 0, 0);width:1px;height:1px;position:absolute;overflow:hidden}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.dev-flag{z-index:100;padding:var(--sp-2) var(--sp-4);background:repeating-linear-gradient(45deg, var(--warn), var(--warn) 12px, color-mix(in srgb, var(--warn) 78%, #000) 12px, color-mix(in srgb, var(--warn) 78%, #000) 24px);color:#1a1204;font-size:var(--text-sm);text-align:center;font-weight:650;position:sticky;top:0}.name-preview{margin-top:var(--sp-2)}.np-bar{padding:var(--sp-2) var(--sp-3);border:1px dashed var(--border-strong);border-radius:var(--radius-sm);background:var(--surface-2);font-size:var(--text-sm);text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.period-picker,.cycle-bar{align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-5);flex-wrap:wrap;display:flex}.period-label,.cycle-bar-title{text-align:center;min-width:10ch;font-weight:650}.cycle-bar-title{flex-direction:column;flex:1;align-items:center;gap:2px;min-width:0;display:flex}.cycle-bar-title .hint{font-weight:400}.seg{background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius-sm);gap:2px;margin-left:auto;padding:3px;display:inline-flex}.seg-btn{min-height:34px;color:var(--muted);font-size:var(--text-md);transition:background-color var(--dur) var(--ease), color var(--dur) var(--ease);background:0 0;border:0;border-radius:8px;padding:6px 16px;font-weight:570}.seg-btn:hover{color:var(--text)}.seg-btn.on{background:var(--accent);color:#fff}.ring-block{--ring-size:190px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-4);margin-bottom:var(--sp-4);flex-wrap:wrap;align-items:center;gap:28px;display:flex}.ring-wrap,.ring-empty{width:var(--ring-size);flex:none;place-items:center;max-width:100%;display:grid;position:relative}.ring-svg{width:100%;overflow:visible;transform:rotate(-90deg)}.ring-track{fill:none;stroke:var(--bg-sunken);stroke-width:11px}.ring-arc{fill:none;stroke-width:11px;cursor:pointer;transition:stroke-width var(--dur) var(--ease), opacity var(--dur) var(--ease), stroke-dasharray var(--dur-slow) var(--ease)}.ring-arc:hover{stroke-width:14px}.ring-arc.on{stroke-width:15px}.ring-arc.dim{opacity:.32}.ring-arc:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.ring-centre{text-align:center;pointer-events:none;flex-direction:column;justify-content:center;align-items:center;gap:2px;padding:0 19%;display:flex;position:absolute;inset:0}.ring-centre-label{font-size:calc(var(--ring-size,210px) * .057);color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-weight:650;line-height:1.2}.ring-centre-value{font-size:calc(var(--ring-size,190px) * .125);letter-spacing:-.02em;white-space:nowrap;font-weight:700}.ring-centre-sub{font-size:calc(var(--ring-size,210px) * .057);color:var(--muted);text-wrap:balance;flex-direction:column;line-height:1.35;display:flex}.ring-legend{flex:1;min-width:240px;margin:0;padding:0;list-style:none}.legend-item{border:0;border-bottom:1px solid var(--line);text-align:left;background:0 0;border-radius:9px;grid-template-columns:12px 1fr auto 42px;align-items:center;gap:10px;width:100%;min-height:44px;margin:0 -8px;padding:7px 8px;font-size:13px;transition:background-color .15s;display:grid}.ring-legend li:last-child .legend-item{border-bottom:none}.legend-item:hover{background:var(--panel-2)}.legend-item.on{background:color-mix(in srgb, var(--accent) 14%, transparent);font-weight:650}.legend-dot{border-radius:3px;width:10px;height:10px}.legend-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.legend-value{font-variant-numeric:tabular-nums}.legend-share{font-size:var(--text-xs);text-align:right;font-variant-numeric:tabular-nums}.page-actions{margin-bottom:var(--sp-5)}.rows,.cat-block{max-width:720px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-4);margin-bottom:var(--sp-4)}.panel>h2{margin:0 0 var(--sp-2);font-size:var(--text-lg)}.panel>.hint,.panel>p{max-width:78ch}.panel-head{justify-content:space-between;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3);flex-wrap:wrap;display:flex}.panel-head h2{font-size:var(--text-lg);margin:0}.empty{padding:var(--sp-7) 0;color:var(--muted);border-top:1px solid var(--border)}.rows{gap:var(--sp-2);flex-direction:column;display:flex}.row-grid{align-items:center;gap:var(--sp-3);display:grid}.income-row{grid-template-columns:1fr 140px 160px}.budget-row{grid-template-columns:1fr 140px}.row-label{align-items:center;gap:var(--sp-2);flex-wrap:wrap;font-weight:550;display:flex}.amount-field,.date-field{width:100%;min-height:44px;padding:0 var(--sp-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);font-variant-numeric:tabular-nums;transition:border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease)}.amount-field{text-align:right}.amount-field:focus,.date-field:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent);outline:none}.amount-field:disabled,.date-field:disabled{opacity:.55;cursor:not-allowed}.blocked-note{grid-column:2/-1}.cat-block{margin-bottom:var(--sp-5);animation:rise-in var(--dur-slow) var(--ease) backwards;animation-delay:calc(var(--i,0) * 45ms)}.cat-head{justify-content:space-between;align-items:baseline;gap:var(--sp-3);padding-bottom:var(--sp-2);margin-bottom:var(--sp-3);border-bottom:1px solid var(--border);font-weight:650;display:flex}.tag{padding:1px var(--sp-2);border-radius:var(--radius-pill);border:1px solid var(--border-strong);background:var(--surface-2);color:var(--ink-2);font-size:var(--text-xs);white-space:nowrap;align-items:center;gap:4px;font-weight:650;display:inline-flex}.tag.route-budget{border-color:color-mix(in srgb, var(--cat-1) 55%, var(--border));background:color-mix(in srgb, var(--cat-1) 12%, var(--surface))}.tag.route-logged{border-color:color-mix(in srgb, var(--cat-2) 55%, var(--border));background:color-mix(in srgb, var(--cat-2) 14%, var(--surface))}.tag.route-appointment{border-color:color-mix(in srgb, var(--cat-3) 55%, var(--border));background:color-mix(in srgb, var(--cat-3) 12%, var(--surface))}.tag-calendar,.tag-savings{border-color:color-mix(in srgb, var(--warn) 50%, var(--border));background:color-mix(in srgb, var(--warn) 12%, var(--surface))}.panel>.table-scroll{margin-top:var(--sp-3)}.table-scroll{-webkit-overflow-scrolling:touch;-webkit-overflow-scrolling:touch;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);overflow-x:auto}.ledger{border-collapse:collapse;width:100%;font-size:var(--text-sm);white-space:nowrap}.ledger th,.ledger td{text-align:right;vertical-align:middle;border-bottom:1px solid var(--line);border-right:0;padding:10px 12px}.ledger th:first-child,.ledger td:first-child{text-align:left;white-space:normal}.ledger thead th{z-index:1;background:var(--bg-2);color:var(--muted);font-weight:600;font-size:var(--text-xs);position:sticky;top:0}.ledger tbody tr:last-child th,.ledger tbody tr:last-child td{border-bottom:0}.ledger tbody tr:hover>*{background:var(--panel-2)}.ledger tr.current>*{background:color-mix(in srgb, var(--accent) 12%, var(--panel));font-weight:600}.ledger.roomy td{font-size:var(--text-md);padding:15px 16px}.ledger.roomy th{padding:12px 16px}.cell-sub{font-size:var(--text-xs);color:var(--muted);margin-top:1px;font-weight:400;display:block}.row-toggle{align-items:center;gap:var(--sp-2);text-align:left;min-height:44px;font:inherit;color:var(--ink);background:0 0;border:0;padding:0;font-weight:600;display:inline-flex}.chev{color:var(--muted);width:1em}.row-names{flex-direction:column;line-height:1.25;display:flex}.row-cat{font-size:var(--text-xs);font-weight:500}.row-tags{margin-left:var(--sp-2);flex-wrap:wrap;gap:4px;display:inline-flex}.row-main{animation:rise-in var(--dur-slow) var(--ease) backwards;animation-delay:calc(var(--i,0) * 30ms)}.row-detail>td{background:var(--bg-sunken);padding:var(--sp-3) var(--sp-4)}.items{gap:var(--sp-1);flex-direction:column;display:flex}.item{align-items:center;gap:var(--sp-3);padding:var(--sp-2);border-radius:var(--radius-sm);background:var(--surface);border:1px solid var(--border);grid-template-columns:100px 1fr auto auto;display:grid}.item-date{font-size:var(--text-xs);color:var(--muted);font-variant-numeric:tabular-nums}.item-note{align-items:center;gap:var(--sp-2);flex-wrap:wrap;min-width:0;display:flex}.item-amount{font-weight:650}.link-btn.danger{color:var(--neg)}.modal-scrim{z-index:200;padding:var(--sp-4);background:var(--scrim);animation:fade-in var(--dur) var(--ease);place-items:center;display:grid;position:fixed;inset:0}.modal-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;max-width:440px;max-height:88dvh;box-shadow:var(--shadow-3);animation:pop-in var(--dur) var(--ease-spring);flex-direction:column;display:flex}.modal-panel.wide{max-width:640px}.modal-head{justify-content:space-between;align-items:center;gap:var(--sp-3);padding:var(--sp-4) var(--sp-4) var(--sp-3);border-bottom:1px solid var(--border);display:flex}.modal-body{padding:var(--sp-4);overflow-y:auto}.modal-foot{justify-content:flex-end;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-top:1px solid var(--border);display:flex}@keyframes pop-in{0%{opacity:0;transform:translateY(12px)scale(.97)}to{opacity:1;transform:none}}@media (width<=720px){.seg-btn{min-height:44px}.ring-block{gap:var(--sp-3);grid-template-columns:1fr}.ring-svg{max-width:200px}.income-row{grid-template-columns:1fr 120px}.income-row .date-field{grid-column:1/-1}.item{row-gap:var(--sp-1);grid-template-columns:1fr auto}.item-date{grid-column:1/-1}.item-actions{grid-column:2}.seg{justify-content:space-between;width:100%;margin-left:0}.seg-btn{flex:1}.modal-panel{max-width:none;max-height:92dvh;padding-bottom:env(safe-area-inset-bottom);align-self:end}}.form-head{align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3);display:flex}.tag-unsaved{border-color:color-mix(in srgb, var(--warn) 55%, var(--border));background:color-mix(in srgb, var(--warn) 16%, var(--surface));color:var(--warn)}.form-section-title{margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:1px solid var(--border);font-size:var(--text-md);color:var(--ink-2)}.form-section-title:first-of-type{margin-top:var(--sp-4)}.form-summary{gap:var(--sp-3);padding:var(--sp-4);margin:var(--sp-4) 0;border-radius:var(--radius);background:var(--bg-sunken);grid-template-columns:repeat(auto-fit,minmax(140px,1fr));display:grid}.form-summary>div{flex-direction:column;gap:2px;display:flex}.form-summary span{font-size:var(--text-xs);font-weight:600}.form-summary strong{font-size:var(--text-lg);font-variant-numeric:tabular-nums}.modal-panel.wide .modal-body .cat-block:last-of-type{margin-bottom:var(--sp-3)}.cal-head,.cal-grid{grid-template-columns:repeat(7,1fr);gap:4px;display:grid}.cal-head{margin-bottom:var(--sp-2)}.cal-dow{padding:var(--sp-1) 0;text-align:center;font-size:var(--text-xs);color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-weight:700}.cal-day{min-height:74px;padding:var(--sp-2);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);text-align:left;transition:background-color var(--dur) var(--ease), border-color var(--dur) var(--ease), transform var(--dur-fast) var(--ease);animation:rise-in var(--dur-slow) var(--ease) backwards;animation-delay:calc(var(--i,0) * 8ms);flex-direction:column;align-items:flex-start;gap:2px;display:flex;position:relative}.cal-day:hover{background:var(--surface-2);border-color:var(--border-strong);transform:translateY(-1px)}.cal-day.weekend{background:var(--bg-sunken)}.cal-day.outside{opacity:.42}.cal-day.today{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.cal-num{font-size:var(--text-sm);font-variant-numeric:tabular-nums;font-weight:650}.cal-day.today .cal-num{color:var(--accent)}.cal-dots{flex-wrap:wrap;align-items:center;gap:3px;display:flex}.cal-dot{border-radius:50%;flex:none;width:9px;height:9px}.cal-dot.st-scheduled{border:2px solid var(--cat-1);background:0 0}.cal-dot.st-completed{background:var(--cat-3)}.cal-dot.st-cancelled{background:var(--muted);border-radius:1px;width:11px;height:3px}.cal-more{font-size:var(--text-xs);color:var(--muted);font-weight:650}.cal-cost{font-size:var(--text-xs);color:var(--ink-2);margin-top:auto;font-weight:650}.cal-flag{font-size:var(--text-xs);color:var(--warn);position:absolute;top:3px;right:4px}.cal-legend{gap:var(--sp-4);margin:var(--sp-4) 0 0;padding:var(--sp-3) 0 0;border-top:1px solid var(--border);font-size:var(--text-xs);color:var(--muted);flex-wrap:wrap;list-style:none;display:flex}.cal-legend li{align-items:center;gap:var(--sp-2);display:flex}.st-tag-scheduled{border-color:color-mix(in srgb, var(--cat-1) 55%, var(--border));background:color-mix(in srgb, var(--cat-1) 12%, var(--surface))}.st-tag-completed{border-color:color-mix(in srgb, var(--cat-3) 55%, var(--border));background:color-mix(in srgb, var(--cat-3) 12%, var(--surface))}.st-tag-cancelled{color:var(--muted);text-decoration:line-through}.tag-dupe{border-color:color-mix(in srgb, var(--warn) 60%, var(--border));background:color-mix(in srgb, var(--warn) 16%, var(--surface));color:var(--warn)}.item-btn{cursor:pointer;font:inherit;color:inherit;text-align:left;transition:background-color var(--dur) var(--ease), border-color var(--dur) var(--ease)}.item-btn:hover{background:var(--surface-2);border-color:var(--border-strong)}.field-row{gap:var(--sp-3);grid-template-columns:1fr 1fr;display:grid}.suggestions{align-items:center;gap:var(--sp-2);margin-top:var(--sp-2);flex-wrap:wrap;display:flex}.chip-btn{cursor:pointer;min-height:32px;transition:background-color var(--dur) var(--ease), border-color var(--dur) var(--ease)}.chip-btn:hover{background:var(--surface);border-color:var(--accent)}@media (width<=720px){.cal-day{min-height:58px;padding:var(--sp-1)}.cal-cost{display:none}.cal-head,.cal-grid{gap:2px}}.dupe-list{margin:var(--sp-2) 0;padding-left:var(--sp-4)}.dupe-list li{margin-bottom:2px}.cycle-step{justify-content:space-between;align-items:center;gap:var(--sp-3);padding:0 var(--sp-2);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);min-height:44px;display:flex}.close-sums{margin-bottom:var(--sp-3);max-width:520px}.close-sums tbody tr>:first-child,.close-sums thead th:first-child{padding-left:var(--sp-3)}.close-sums tbody tr>:first-child:before{content:none}.close-sums tbody tr>*{background:0 0!important}.close-sums .sum-row th,.close-sums .sum-row td{border-top:2px solid var(--border-strong)}.close-sums th{color:var(--ink-2);font-weight:500}.close-sums .sum-row th,.close-sums .sum-row td{border-top:2px solid var(--border-strong);padding-top:var(--sp-3);border-bottom:0;font-weight:700}.item-check{cursor:pointer;grid-template-columns:auto 100px 1fr auto}.item-check input[type=checkbox]{width:20px;height:20px;accent-color:var(--accent)}.panel .kv{max-width:640px}.panel .field{max-width:480px}.panel .btn-row{margin-top:var(--sp-3)}.content>.banner,.page>.banner{max-width:90ch}@media (width<=900px){.content{padding:0 var(--sp-4) var(--sp-6)}.page-head{padding:var(--sp-5) 0 var(--sp-4)}.panel{padding:var(--sp-5) 0}}@media (width<=700px){.ring-block{--ring-size:165px;gap:var(--sp-4);justify-content:center}.ring-legend{width:100%;min-width:0}}.ledger-filters{align-items:center;gap:var(--sp-3);margin:var(--sp-4) 0 var(--sp-3);flex-wrap:wrap;display:flex}.filter-search{flex:220px;max-width:320px;position:relative}.filter-search-icon{left:var(--sp-3);color:var(--muted);pointer-events:none;font-size:var(--text-lg);position:absolute;top:50%;transform:translateY(-50%)}.filter-search input{width:100%;min-height:40px;padding:0 var(--sp-3) 0 var(--sp-6);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);transition:border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease)}.filter-search input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent);outline:none}.filter-select{align-items:center;gap:var(--sp-2);font-size:var(--text-sm);display:inline-flex}.filter-label{color:var(--muted);white-space:nowrap;font-weight:600}.filter-select select{min-height:40px;padding:0 var(--sp-2);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:var(--text-sm)}.filter-select select[data-active]{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 8%, var(--surface));font-weight:650}.filter-count{font-size:var(--text-sm);color:var(--muted);white-space:nowrap;margin-left:auto}.ledger-empty{padding:var(--sp-6);text-align:center;color:var(--muted);border:1px dashed var(--border-strong);border-radius:var(--radius-sm)}@media (width<=720px){.filter-count{margin-left:0}.filter-select{flex:140px}.filter-select select{flex:1;min-width:0}}.filter-note{padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-sm);background:color-mix(in srgb, var(--accent) 8%, var(--surface));border:1px solid color-mix(in srgb, var(--accent) 30%, var(--border));font-size:var(--text-sm);color:var(--ink-2);flex:1 0 100%;margin:0}.stream-hero{border-radius:var(--radius-lg);color:#fff;background:linear-gradient(135deg, var(--s-accent), var(--s-accent-2));animation:rise-in var(--dur-slow) var(--ease) both;margin-bottom:18px;padding:20px 22px;position:relative;overflow:hidden;box-shadow:0 12px 32px #0f172a2e}.stream-hero[data-accent=personal]{--s-accent:var(--stream-personal);--s-accent-2:var(--stream-personal-2)}.stream-hero[data-accent=savings]{--s-accent:var(--stream-savings);--s-accent-2:var(--stream-savings-2)}.stream-hero[data-accent=calendar]{--s-accent:var(--stream-calendar);--s-accent-2:var(--stream-calendar-2)}.stream-hero-glow{pointer-events:none;background:radial-gradient(circle,#ffffff47,#0000 65%);border-radius:50%;width:380px;height:380px;position:absolute;inset:-60% -20% auto auto}.stream-hero-main{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px;display:flex;position:relative}.stream-hero-id{align-items:center;gap:14px;display:flex}.stream-hero-ico{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#ffffff2e;border-radius:15px;flex:none;place-items:center;width:54px;height:54px;font-size:30px;line-height:1;display:grid}.stream-hero h1{color:#fff;font-size:var(--text-xl);margin:0 0 3px}.stream-hero-sub{color:#ffffffed;font-size:var(--text-md);max-width:52ch;margin:0}.stream-hero-figure{text-align:right}.stream-hero-figure-label{font-size:var(--text-xs);letter-spacing:.09em;text-transform:uppercase;color:#ffffffd1;margin-bottom:2px;display:block}.stream-hero-figure-value{font-size:var(--text-2xl);letter-spacing:-.02em;font-weight:700}.stream-hero-extra{border-top:1px solid #ffffff38;margin-top:16px;padding-top:14px;position:relative}@media (width<=720px){.stream-hero{border-radius:15px;padding:16px}.stream-hero h1{font-size:18px}.stream-hero-figure{text-align:left}.stream-hero-figure-value{font-size:22px}}.ledger .group-row th{padding-top:var(--sp-1);padding-bottom:var(--sp-1);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--muted);text-align:center;border-bottom:1px solid var(--border)}.ledger .group-head{border-left:1px solid var(--line)}.ledger colgroup{background:0 0}.ledger thead th{white-space:normal;min-width:82px}.ledger thead tr:first-child th{min-width:0}.source-rows{gap:var(--sp-2);max-width:640px;margin:var(--sp-4) 0;flex-direction:column;display:flex}.source-row{align-items:center;gap:var(--sp-3);padding:var(--sp-2);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);grid-template-columns:1fr auto auto;display:grid}.source-row.retired{opacity:.6;background:var(--bg-sunken)}.source-name{min-height:40px;padding:0 var(--sp-3);border-radius:var(--radius-sm);transition:border-color var(--dur) var(--ease), background-color var(--dur) var(--ease);background:0 0;border:1px solid #0000;font-weight:600}.source-name:hover:not(:disabled){border-color:var(--border)}.source-name:focus{background:var(--surface);border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent);outline:none}.source-usage{font-size:var(--text-xs);color:var(--muted);white-space:nowrap}.source-actions{gap:var(--sp-3);display:flex}@media (width<=620px){.source-row{grid-template-columns:1fr auto}.source-usage{grid-column:1}.source-actions{grid-column:2}}.actions-col{white-space:nowrap;width:1%}.row-actions{gap:var(--sp-1);justify-content:flex-end;display:flex}.icon-action{border-radius:var(--radius-sm);width:34px;height:34px;font-size:var(--text-sm);opacity:.55;transition:opacity var(--dur) var(--ease), background-color var(--dur) var(--ease), border-color var(--dur) var(--ease);background:0 0;border:1px solid #0000;place-items:center;padding:0;line-height:1;display:grid}.ledger tbody tr:hover .icon-action,.icon-action:focus-visible{opacity:1}.icon-action:hover:not(:disabled){background:var(--surface);border-color:var(--border-strong)}.icon-action.danger:hover:not(:disabled){border-color:color-mix(in srgb, var(--neg) 45%, var(--border));background:color-mix(in srgb, var(--neg) 10%, var(--surface))}.icon-action:disabled{opacity:.25;cursor:not-allowed}@media (hover:none){.icon-action{opacity:1}}.over-note{font-size:var(--text-xs);color:var(--neg);display:block}.chart{margin:0}.chart-svg{vector-effect:non-scaling-stroke;width:100%;height:auto;overflow:visible}.chart-grid{stroke:var(--line);stroke-width:1px}.chart-axis{fill:var(--muted);font-variant-numeric:tabular-nums;font-size:11px}.chart-line{fill:none;stroke-width:2.5px;stroke-linejoin:round;stroke-linecap:round}.chart-line.dashed{stroke-dasharray:6 5;opacity:.9}.chart-series-label{font-size:11px;font-weight:700}.chart-cursor{stroke:var(--border-strong);stroke-width:1px;stroke-dasharray:3 3}.chart-dot{stroke:var(--panel);stroke-width:2px}.chart-readout{align-items:center;gap:var(--sp-2) var(--sp-4);margin-top:var(--sp-3);padding-top:var(--sp-3);border-top:1px solid var(--line);font-size:var(--text-sm);flex-wrap:wrap;min-height:40px;display:flex}.chart-readout-item{align-items:center;gap:var(--sp-2);display:inline-flex}.chart-swatch{border-radius:2px;flex:none;width:14px;height:3px}.chart-swatch.dashed{background-image:linear-gradient(90deg,currentColor 55%,#0000 55%);background-size:5px 3px}.chart-empty{padding:var(--sp-6);text-align:center;color:var(--muted);border:1px dashed var(--border-strong);border-radius:var(--radius-sm)}.now-strip{gap:var(--sp-3);margin-bottom:var(--sp-4);grid-template-columns:repeat(auto-fit,minmax(220px,1fr));display:grid}.now-item{padding:var(--sp-4);background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:var(--radius);flex-direction:column;gap:2px;display:flex}.now-label{font-size:var(--text-xs);color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-weight:650}.now-value{font-size:var(--text-xl);letter-spacing:-.02em;font-weight:700}.now-value.warn{color:var(--warn)}.now-note{font-size:var(--text-xs);color:var(--muted)}.dash-grid{gap:var(--sp-4);grid-template-columns:repeat(auto-fit,minmax(320px,1fr));align-items:start;display:grid}.summary-rows{margin:0}.summary-row{justify-content:space-between;align-items:baseline;gap:var(--sp-4);border-bottom:1px solid var(--line);padding:10px 0;display:flex}.summary-row:last-child{border-bottom:0}.summary-row dt{color:var(--ink-2)}.summary-row dd{font-variant-numeric:tabular-nums;margin:0;font-weight:650}.summary-row.strong{border-top:2px solid var(--border-strong);margin-top:var(--sp-2);padding-top:var(--sp-3)}.summary-row.strong dt,.summary-row.strong dd{font-weight:700}.summary-note{font-size:var(--text-xs);color:var(--muted);font-weight:500}.attention-list{gap:var(--sp-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.attention-item{justify-content:space-between;align-items:center;gap:var(--sp-3);width:100%;min-height:44px;padding:var(--sp-3);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg-2);text-align:left;font-size:var(--text-sm);transition:background-color var(--dur) var(--ease), border-color var(--dur) var(--ease);display:flex}.attention-item:hover{background:var(--panel-2);border-color:var(--accent)}.attention-go{color:var(--muted)}.forecast-controls{gap:var(--sp-3);margin-bottom:var(--sp-4);flex-wrap:wrap;display:flex}.forecast-controls .seg{margin-left:0}.forecast-note{margin-top:var(--sp-3)}.tag.conf-high{border-color:color-mix(in srgb, var(--pos) 50%, var(--line));background:color-mix(in srgb, var(--pos) 14%, var(--panel));color:var(--pos)}.tag.conf-medium{border-color:color-mix(in srgb, var(--warn) 50%, var(--line));background:color-mix(in srgb, var(--warn) 14%, var(--panel));color:var(--warn)}.tag.conf-low,.tag.conf-none{border-color:color-mix(in srgb, var(--neg) 45%, var(--line));background:color-mix(in srgb, var(--neg) 12%, var(--panel));color:var(--neg)}.pct{font-size:var(--text-xs);color:var(--muted)}.card-grid{gap:var(--sp-3);margin-top:var(--sp-3);grid-template-columns:repeat(auto-fill,minmax(210px,1fr));display:grid}.bcard{padding:var(--sp-3);border:1px solid var(--line);border-left:3px solid var(--muted);border-radius:var(--radius);background:var(--bg-2);text-align:left;transition:transform var(--dur-fast) var(--ease), border-color var(--dur) var(--ease), background-color var(--dur) var(--ease);animation:rise-in var(--dur-slow) var(--ease) backwards;animation-delay:calc(var(--i,0) * 40ms);flex-direction:column;align-items:stretch;gap:2px;display:flex}.bcard:hover{background:var(--panel-2);transform:translateY(-2px)}.bcard.st-open{border-left-color:var(--muted)}.bcard.st-spent{border-left-color:var(--pos)}.bcard.st-surplus{border-left-color:var(--accent)}.bcard.st-over{border-left-color:var(--neg)}.bcard-head{justify-content:space-between;align-items:flex-start;gap:var(--sp-2);display:flex}.bcard-name{font-weight:650;line-height:1.25}.bcard-status{font-size:var(--text-sm);flex:none}.bcard-status.st-over{color:var(--neg)}.bcard-status.st-spent{color:var(--pos)}.bcard-status.st-surplus{color:var(--accent)}.bcard-cat{font-size:var(--text-xs);margin-bottom:var(--sp-2)}.bcard-figure{font-size:var(--text-xl);letter-spacing:-.02em;font-weight:700}.bcard.st-over .bcard-figure{color:var(--neg)}.bcard-figure-label{font-size:var(--text-xs);color:var(--muted);margin-bottom:var(--sp-2)}.bcard-body{align-items:center;gap:var(--sp-3);margin:var(--sp-1) 0 var(--sp-2);display:flex}.bcard-figures{flex-direction:column;min-width:0;display:flex}.mini-ring{flex:none;place-items:center;display:inline-grid;position:relative}.mini-ring-svg{width:100%;height:100%;transform:rotate(-90deg)}.mini-ring-track{fill:none;stroke:var(--bg-sunken);stroke-width:12px}.mini-ring-arc{fill:none;stroke-width:12px;stroke-linecap:round;transition:stroke-dasharray var(--dur-slow) var(--ease)}.mini-ring-arc.tone-accent{stroke:var(--accent)}.mini-ring-arc.tone-pos{stroke:var(--pos)}.mini-ring-arc.tone-neg{stroke:var(--neg)}.mini-ring-centre{font-size:var(--text-xs);font-variant-numeric:tabular-nums;color:var(--ink-2);font-weight:700;position:absolute}.bcard-foot{margin-top:var(--sp-1);font-size:var(--text-xs);color:var(--muted);font-variant-numeric:tabular-nums}.decision-row{margin-top:var(--sp-4);padding-top:var(--sp-4);border-top:1px solid var(--line)}.quick-spend{margin-top:var(--sp-4);padding:var(--sp-3);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg-2)}.cell-stack{flex-direction:column;line-height:1.25;display:flex}.cell-stack .muted{font-size:var(--text-xs)}.ledger th.nowrap,.ledger td.nowrap,.nowrap{white-space:nowrap}
