:root{--bg:#f4f4f0;--card-bg:#fff;--text:#1c2024;--text-dim:#6b7280;--border:#e2e2dc;--grid-line:#ecece6;--tooltip-bg:#fff;--accent:#33707e;--accent-text:#fff;--spend:#d97742;--income:#2f9e77;--danger:#c0392b;--shadow:0 1px 3px #0000000f, 0 4px 16px #0000000a;--radius:12px;--nav-h:60px}@media (prefers-color-scheme:dark){:root{--bg:#101418;--card-bg:#1a2026;--text:#e8eaed;--text-dim:#98a1ab;--border:#2a323a;--grid-line:#232b33;--tooltip-bg:#232b33;--accent:#5aa3b0;--accent-text:#0d1418;--spend:#e08a5a;--income:#4db892;--danger:#e06050;--shadow:0 1px 3px #0006}}.dashboard[data-mood=ahead]{--mood-bg:color-mix(in srgb, var(--income) 12%, var(--card-bg));--mood-border:color-mix(in srgb, var(--income) 40%, var(--border));--mood-text:color-mix(in srgb, var(--income) 70%, var(--text))}.dashboard[data-mood=behind]{--mood-bg:color-mix(in srgb, var(--spend) 14%, var(--card-bg));--mood-border:color-mix(in srgb, var(--spend) 45%, var(--border));--mood-text:color-mix(in srgb, var(--spend) 72%, var(--text))}.dashboard[data-mood=even]{--mood-bg:var(--card-bg);--mood-border:var(--border);--mood-text:var(--text-dim)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,sans-serif;font-size:15px;line-height:1.45}h1,h2,h3,p{margin:0}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;padding:0}a{color:var(--accent);text-decoration:none}.boot{place-items:center;min-height:100dvh;display:grid}.shell{min-height:100dvh}.main{max-width:1080px;padding:16px 16px calc(var(--nav-h) + env(safe-area-inset-bottom) + 24px);margin:0 auto}.nav{z-index:40;background:color-mix(in srgb, var(--card-bg) 92%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom);position:fixed;bottom:0;left:0;right:0}.nav-brand{display:none}.nav-links{height:var(--nav-h);justify-content:space-around;display:flex}.nav-link{color:var(--text-dim);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;font-size:11px;font-weight:500;display:flex}.nav-link.on{color:var(--accent)}@media (width>=760px){.nav{border-top:none;border-bottom:1px solid var(--border);position:sticky;top:0;bottom:auto}.nav-links{justify-content:flex-end;gap:4px;max-width:1080px;height:56px;margin:0 auto;padding:0 16px}.nav-brand{letter-spacing:.02em;font-size:17px;font-weight:700;line-height:56px;display:block;position:absolute;top:0;left:max(16px,50% - 524px)}.nav-link{border-radius:8px;flex-direction:row;flex:none;gap:7px;margin:10px 0;padding:0 14px;font-size:14px}.nav-link.on{background:color-mix(in srgb, var(--accent) 12%, transparent)}.main{padding-bottom:48px}}.page-title{margin:8px 0 16px;font-size:22px;font-weight:700}.card{background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.pad{padding:16px}.section-title{color:var(--text-dim);align-items:center;gap:6px;margin:20px 0 8px;font-size:14px;font-weight:600;display:flex}.hint{color:var(--text-dim);margin:6px 0;font-size:13px}.dim{opacity:.55}.spacer{flex:1}.spinner{border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:28px;height:28px;margin:48px auto;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.btn{border:1px solid var(--border);background:var(--card-bg);color:var(--text);border-radius:10px;justify-content:center;align-items:center;gap:6px;padding:9px 16px;font-size:14px;font-weight:600;transition:filter .15s;display:inline-flex}.btn:hover{filter:brightness(.97)}.btn:disabled{opacity:.5;cursor:default}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.btn-danger-ghost{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 40%, var(--border))}.btn-block{width:100%}.btn-lg{border-radius:12px;padding:14px;font-size:16px}.btn-sm{border-radius:8px;padding:5px 12px;font-size:13px}.icon-btn{width:34px;height:34px;color:var(--text-dim);border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.icon-btn:hover{background:color-mix(in srgb, var(--text) 8%, transparent);color:var(--text)}.link-btn{color:var(--accent);align-self:flex-start;font-size:14px;font-weight:500}.input,.select{border:1px solid var(--border);background:var(--card-bg);width:100%;color:var(--text);font:inherit;border-radius:10px;padding:10px 12px}.input:focus,.select:focus,.pin-input:focus{outline:2px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:1px}.input-lg{padding:13px 14px;font-size:16px}.select{appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--text-dim) 50%), linear-gradient(135deg, var(--text-dim) 50%, transparent 50%);background-position:calc(100% - 16px) 55%,calc(100% - 11px) 55%;background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding-right:30px}.field{flex-direction:column;flex:1;gap:5px;display:flex}.field-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:600}.field-hint{color:var(--text-dim);font-size:12px}.form-grid{flex-direction:column;gap:14px;display:flex}.form-row{gap:12px;display:flex}.segmented{background:color-mix(in srgb, var(--text) 6%, transparent);border-radius:10px;gap:2px;padding:3px;display:inline-flex}.segmented button{color:var(--text-dim);border-radius:8px;padding:7px 14px;font-size:13px;font-weight:600}.segmented button.seg-on{background:var(--card-bg);color:var(--text);box-shadow:var(--shadow)}.money-wrap{border:1px solid var(--border);background:var(--card-bg);border-radius:10px;align-items:center;gap:6px;padding:0 12px;display:flex}.money-wrap input{color:var(--text);font:inherit;font-variant-numeric:tabular-nums;background:0 0;border:none;width:100%;padding:10px 0}.money-wrap input:focus{outline:none}.money-wrap:focus-within{outline:2px solid color-mix(in srgb, var(--accent) 55%, transparent);outline-offset:1px}.money-sign{color:var(--text-dim);font-weight:600}.money-big{padding:0 16px}.money-big input{padding:14px 0;font-size:34px;font-weight:700}.money-big .money-sign{font-size:24px}.chip-row{flex-wrap:wrap;gap:8px;display:flex}.chip{border:1.5px solid var(--border);background:var(--card-bg);color:var(--text);border-radius:999px;align-items:center;gap:6px;padding:7px 13px;font-size:13px;font-weight:500;display:inline-flex}.chip-on{background:color-mix(in srgb, var(--accent) 10%, var(--card-bg));border-color:var(--accent)}.color-dot{border-radius:50%;flex-shrink:0;width:10px;height:10px;display:inline-block}.capture-page{max-width:520px;margin:0 auto}.capture-form{flex-direction:column;gap:14px;padding-top:8px;display:flex}.capture-form .segmented{align-self:center}.capture-more{flex-direction:column;gap:12px;display:flex}.just-added{margin-top:12px}.tx-list{margin:0;padding:0;list-style:none}.tx-row{border-bottom:1px solid var(--border);text-align:left;align-items:center;gap:10px;width:100%;padding:11px 14px;display:flex}.tx-list li:last-child .tx-row,.tx-list li:last-child.tx-row{border-bottom:none}.tx-clickable:hover{background:color-mix(in srgb, var(--text) 4%, transparent)}.tx-main{flex-direction:column;flex:1;min-width:0;display:flex}.tx-what{text-overflow:ellipsis;white-space:nowrap;font-weight:550;overflow:hidden}.tx-meta{color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.tx-amount{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:650}.tx-amount.income{color:var(--income)}.tx-actions{gap:2px;display:flex}.date-group{margin-bottom:14px}.date-head{color:var(--text-dim);margin:0 0 6px 4px;font-size:13px;font-weight:600}.result-count{color:var(--text-dim);margin:0 0 10px 4px;font-size:13px}.filter-bar{flex-direction:column;gap:8px;margin-bottom:16px;display:flex}.filter-row{gap:8px;display:flex}.filter-row .select{flex:1}.login-page{place-items:center;min-height:100dvh;padding:20px;display:grid}.login-card{text-align:center;flex-direction:column;align-items:center;gap:12px;width:100%;max-width:320px;display:flex}.login-logo{background:var(--accent);width:56px;height:56px;color:var(--accent-text);border-radius:16px;place-items:center;display:grid}.login-card h1{font-size:24px}.login-sub{color:var(--text-dim)}.pin-input{text-align:center;letter-spacing:.4em;border:1px solid var(--border);background:var(--card-bg);width:100%;color:var(--text);border-radius:12px;padding:12px;font-size:26px}.login-error{color:var(--danger);font-size:14px}.dash-header{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;display:flex}.dash-header .page-title{flex:1;margin:8px 0}.dash-controls{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.dash-controls .select{width:auto}.custom-range{color:var(--text-dim);align-items:center;gap:6px;font-size:13px;display:flex}.custom-range .input{width:auto}.mood-banner{border:1px solid var(--mood-border);background:var(--mood-bg);color:var(--mood-text);border-radius:var(--radius);margin-bottom:14px;padding:12px 16px;font-weight:550}.stat-grid{grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:14px;display:grid}@media (width>=760px){.stat-grid{grid-template-columns:repeat(4,1fr)}}.stat{flex-direction:column;gap:2px;padding:13px 15px;display:flex}.stat-label{text-transform:uppercase;letter-spacing:.04em;color:var(--text-dim);font-size:12px;font-weight:600}.stat-value{font-variant-numeric:tabular-nums;align-items:center;gap:4px;font-size:21px;font-weight:700;display:flex}.stat-delta{color:var(--text-dim);font-size:12px}.stat-net.ahead .stat-value{color:var(--income)}.stat-net.behind .stat-value{color:var(--spend)}.chart-grid{grid-template-columns:1fr;gap:12px;display:grid}@media (width>=900px){.chart-grid{grid-template-columns:1fr 1fr}.chart-card.wide{grid-column:span 2}}.chart-card{padding:16px}.chart-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:10px;display:flex}.chart-head h2{font-size:15px;font-weight:650}.chart-sub{color:var(--text-dim);font-size:12px}.chart-canvas{height:220px;position:relative}.chart-empty{color:var(--text-dim);text-align:center;padding:24px 0;font-size:14px}.breakdown-grid{grid-template-columns:1fr;align-items:center;gap:14px;display:grid}@media (width>=640px){.breakdown-grid{grid-template-columns:220px 1fr}}.breakdown-list{flex-direction:column;gap:7px;margin:0;padding:0;list-style:none;display:flex}.breakdown-list li{align-items:center;gap:8px;font-size:13.5px;display:flex}.bd-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.bd-pct{color:var(--text-dim);font-variant-numeric:tabular-nums;text-align:right;width:38px}.bd-amount{font-variant-numeric:tabular-nums;text-align:right;width:90px;font-weight:600}.big-list,.upcoming-list{margin:0;padding:0;list-style:none}.big-list li,.upcoming-list li{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:9px 0;display:flex}.big-list li:last-child,.upcoming-list li:last-child{border-bottom:none}.big-main{flex-direction:column;flex:1;min-width:0;display:flex}.upcoming-right{flex-direction:column;align-items:flex-end;gap:2px;display:flex}.due-badge{background:color-mix(in srgb, var(--text-dim) 15%, transparent);color:var(--text-dim);border-radius:999px;padding:2px 8px;font-size:11px;font-weight:600}.due-badge.urgent{background:color-mix(in srgb, var(--spend) 18%, transparent);color:var(--spend)}.budget-list{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.budget-labels{justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:4px;display:flex}.budget-name{font-size:14px;font-weight:550}.budget-nums{font-variant-numeric:tabular-nums;font-size:13px}.budget-nums.over{color:var(--spend);font-weight:650}.budget-of{color:var(--text-dim);font-weight:400}.budget-track{background:color-mix(in srgb, var(--text) 8%, transparent);border-radius:999px;height:8px;overflow:hidden}.budget-fill{background:var(--income);border-radius:999px;height:100%;transition:width .4s}.budget-fill.near{background:color-mix(in srgb, var(--spend) 60%, var(--income))}.budget-fill.over{background:var(--spend)}.budget-amount{font-variant-numeric:tabular-nums;color:var(--text-dim);font-size:13px}.settings-section{margin-bottom:14px}.section-head{justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px;display:flex}.section-head h2{font-size:16px}.meta-list{margin:0;padding:0;list-style:none}.meta-list li{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:8px 0;display:flex}.meta-list li:last-child{border-bottom:none}.meta-name{flex:1;min-width:0;font-weight:500}.recurring-main{flex-direction:column;flex:1;min-width:0;display:flex}.archived-details summary{cursor:pointer;color:var(--text-dim);margin-top:8px;font-size:13px}.palette{flex-wrap:wrap;gap:8px;display:flex}.swatch{border:2px solid #0000;border-radius:50%;width:30px;height:30px}.swatch.on{border-color:var(--text);transform:scale(1.12)}.add-budget{max-width:320px;margin-top:10px}.file-input{color:var(--text-dim);margin:8px 0;font-size:13px}.csv-paste{resize:vertical;margin-bottom:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}.preview-line{color:var(--text);font-weight:550}.modal-backdrop{z-index:100;background:#00000073;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--card-bg);border:1px solid var(--border);border-radius:16px;flex-direction:column;width:100%;max-width:520px;max-height:min(86dvh,720px);display:flex;box-shadow:0 12px 48px #00000040}.modal-head{justify-content:space-between;align-items:center;padding:14px 16px 6px;display:flex}.modal-head h2{font-size:17px}.modal-body{padding:10px 16px 16px;overflow-y:auto}.modal-foot{border-top:1px solid var(--border);padding:12px 16px}.modal-actions{align-items:center;gap:8px;display:flex}.toast-host{bottom:calc(var(--nav-h) + env(safe-area-inset-bottom) + 12px);z-index:200;pointer-events:none;flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed;left:50%;transform:translate(-50%)}@media (width>=760px){.toast-host{bottom:24px}}.toast{background:var(--text);color:var(--bg);box-shadow:var(--shadow);border-radius:999px;max-width:90vw;padding:10px 18px;font-size:14px;font-weight:550;animation:.2s toast-in}.toast-error{background:var(--danger);color:#fff}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.empty-state{text-align:center;color:var(--text-dim);padding:48px 16px}.empty-title{color:var(--text);margin-bottom:4px;font-size:16px;font-weight:650}
