@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-wght-normal-CkhJZR-_.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-wght-normal-Dx4kXJAl.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg: #faf9f6;--surface: #ffffff;--surface-2: #f2f0ea;--border: #e5e2da;--ink: #20281f;--ink-2: #5c6459;--ink-3: #8a9186;--accent: #1a3c34;--accent-strong: #2d6a4f;--accent-soft: #e4efe7;--pos: #2d6a4f;--neg: #b0432c;--neg-soft: #f8e9e4;--warn: #9a6b1f;--focus: #2d6a4f;--viz-in: #178a50;--viz-out: #3a70cf;--viz-grid: #eceae4;--radius: 12px;--radius-sm: 8px;--shadow: 0 1px 2px rgba(32, 40, 31, .05), 0 4px 16px rgba(32, 40, 31, .05);--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s5: 20px;--s6: 24px;--s8: 32px;--s10: 40px;--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--text-lg: 1.125rem;--text-xl: 1.375rem;--text-2xl: 1.75rem}@media(prefers-color-scheme:dark){:root{--bg: #171a17;--surface: #1f231f;--surface-2: #262b26;--border: #333833;--ink: #e8eae6;--ink-2: #a8b0a4;--ink-3: #7c847a;--accent: #7fc8a9;--accent-strong: #6db897;--accent-soft: #24332b;--pos: #7fc8a9;--neg: #e08a71;--neg-soft: #362520;--warn: #d0a355;--focus: #7fc8a9;--shadow: none;--viz-in: #22a874;--viz-out: #4c8ce4;--viz-grid: #2c312c}}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--ink);font-family:Inter Variable,system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased}h1,h2,h3{margin:0;line-height:1.25}h1{font-size:var(--text-xl);font-weight:700;letter-spacing:-.01em}h2{font-size:var(--text-base);font-weight:600}h3{font-size:var(--text-sm);font-weight:600;color:var(--ink-2)}a{color:var(--accent-strong)}button,input,select,textarea{font:inherit;color:inherit}:is(button,input,select,textarea,a):focus-visible{outline:2px solid var(--focus);outline-offset:2px}.app{display:flex;min-height:100dvh}.sidebar{display:none;flex-direction:column;gap:var(--s1);width:220px;padding:var(--s6) var(--s3);border-right:1px solid var(--border);position:sticky;top:0;height:100dvh;flex-shrink:0}.sidebar .brand{display:flex;align-items:center;gap:var(--s2);font-weight:700;font-size:var(--text-lg);padding:0 var(--s3) var(--s5);color:var(--ink);text-decoration:none}.sidebar .brand img{width:28px;height:28px;border-radius:7px}.main{flex:1;min-width:0;padding:var(--s5) var(--s4) calc(76px + env(safe-area-inset-bottom));max-width:860px;margin:0 auto;width:100%}.tabbar{position:fixed;bottom:0;left:0;right:0;display:flex;background:var(--surface);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom);z-index:30}.navlink{display:flex;flex-direction:column;align-items:center;gap:2px;flex:1;padding:var(--s2) 0 var(--s2);font-size:var(--text-xs);font-weight:500;color:var(--ink-3);text-decoration:none}.navlink svg{width:22px;height:22px}.navlink.active{color:var(--accent-strong)}@media(min-width:800px){.sidebar{display:flex}.tabbar{display:none}.main{padding-bottom:var(--s10)}.navlink{flex-direction:row;justify-content:flex-start;gap:var(--s3);flex:none;font-size:var(--text-sm);padding:var(--s2) var(--s3);border-radius:var(--radius-sm)}.navlink.active{background:var(--accent-soft)}.navlink:hover:not(.active){background:var(--surface-2)}}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:var(--s4);box-shadow:var(--shadow)}.page-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);margin-bottom:var(--s4);flex-wrap:wrap}.stack{display:flex;flex-direction:column;gap:var(--s4)}.row{display:flex;align-items:center;gap:var(--s3)}.spread{display:flex;align-items:center;justify-content:space-between;gap:var(--s3)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);padding:10px var(--s4);border-radius:var(--radius-sm);border:1px solid transparent;background:var(--accent);color:#fff;font-weight:600;font-size:var(--text-sm);cursor:pointer;min-height:42px}@media(prefers-color-scheme:dark){.btn{color:#14201b}}.btn:hover{filter:brightness(1.1)}.btn:disabled{opacity:.5;cursor:default}.btn-secondary{background:var(--surface);color:var(--ink);border-color:var(--border)}.btn-secondary:hover{background:var(--surface-2);filter:none}.btn-danger{background:var(--neg);color:#fff}.btn-ghost{background:transparent;color:var(--accent-strong);border:none;min-height:36px;padding:6px var(--s2)}.btn-ghost:hover{background:var(--accent-soft);filter:none}.btn-sm{min-height:34px;padding:6px var(--s3);font-size:var(--text-xs)}.input,.select{width:100%;padding:10px var(--s3);border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);min-height:42px}.input::placeholder{color:var(--ink-3)}.field{display:flex;flex-direction:column;gap:var(--s1)}.field>label{font-size:var(--text-xs);font-weight:600;color:var(--ink-2)}.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:var(--text-xs);font-weight:500;background:var(--surface-2);color:var(--ink-2);border:none;cursor:pointer;white-space:nowrap}.chip.on{background:var(--accent-soft);color:var(--accent-strong)}.amount-pos{color:var(--pos);font-variant-numeric:tabular-nums;font-weight:600}.amount-neg{color:var(--ink);font-variant-numeric:tabular-nums;font-weight:600}.muted{color:var(--ink-2);font-size:var(--text-sm)}.small{font-size:var(--text-xs);color:var(--ink-3)}.error-text{color:var(--neg);font-size:var(--text-sm)}.empty{text-align:center;padding:var(--s10) var(--s4);color:var(--ink-2)}.empty .big{font-size:2rem;margin-bottom:var(--s2)}.txn-group-date{font-size:var(--text-xs);font-weight:600;color:var(--ink-3);text-transform:uppercase;letter-spacing:.04em;margin:var(--s4) 0 var(--s2)}.txn{display:flex;align-items:center;gap:var(--s3);width:100%;text-align:left;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--s3);margin-bottom:var(--s2);cursor:pointer}.txn:hover{background:var(--surface-2)}.txn .cat-dot{width:36px;height:36px;border-radius:10px;background:var(--surface-2);display:flex;align-items:center;justify-content:center;font-size:1.1rem;flex-shrink:0}.txn .desc{flex:1;min-width:0}.txn .desc .d1{font-weight:500;font-size:var(--text-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.txn .desc .d2{font-size:var(--text-xs);color:var(--ink-3);display:flex;align-items:center;gap:6px}.acct-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.bar{height:8px;border-radius:999px;background:var(--surface-2);overflow:hidden}.bar>div{height:100%;border-radius:999px;background:var(--accent-strong);transition:width .3s ease}.bar>div.over{background:var(--neg)}.bar>div.warn{background:var(--warn)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#14181473;z-index:50;display:flex;align-items:flex-end;justify-content:center}.modal{background:var(--surface);border-radius:var(--radius) var(--radius) 0 0;width:100%;max-width:560px;max-height:92dvh;overflow-y:auto;padding:var(--s5) var(--s4) calc(var(--s5) + env(safe-area-inset-bottom))}@media(min-width:800px){.modal-backdrop{align-items:center}.modal{border-radius:var(--radius);padding:var(--s6)}}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3)}.form-grid .full{grid-column:1 / -1}.table-wrap{overflow-x:auto}table.data{width:100%;border-collapse:collapse;font-size:var(--text-sm)}table.data th{text-align:left;font-size:var(--text-xs);color:var(--ink-3);font-weight:600;padding:var(--s2) var(--s3);border-bottom:1px solid var(--border);white-space:nowrap}table.data td{padding:var(--s2) var(--s3);border-bottom:1px solid var(--border)}table.data tr:last-child td{border-bottom:none}.num{text-align:right;font-variant-numeric:tabular-nums}.login-wrap{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:var(--s4)}.login-card{width:100%;max-width:400px;text-align:center}.login-card .logo{width:64px;height:64px;border-radius:16px;margin:0 auto var(--s4);display:block}.dropzone{border:2px dashed var(--border);border-radius:var(--radius);padding:var(--s10) var(--s4);text-align:center;color:var(--ink-2);cursor:pointer;transition:border-color .15s,background .15s}.dropzone.drag{border-color:var(--accent-strong);background:var(--accent-soft)}.badge-dupe{font-size:var(--text-xs);color:var(--warn);font-weight:600}.tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s3)}@media(max-width:500px){.tiles{grid-template-columns:1fr 1fr}.tiles .tile:first-child{grid-column:1 / -1}}.tile{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:var(--s4)}.tile .label{font-size:var(--text-xs);font-weight:600;color:var(--ink-2)}.tile .value{font-size:var(--text-2xl);font-weight:700;letter-spacing:-.02em;margin-top:2px}.tile .sub{font-size:var(--text-xs);color:var(--ink-3);margin-top:2px}
