:root{--bg:#f4f5f7;--surface:#fff;--surface-sunken:#edeff2;--fg:#16191d;--fg-2:#3a4149;--muted:#5a6270;--meta:#6e7684;--border:#e3e6ea;--border-soft:#eff1f4;--accent:#1f5673;--accent-hover:#17475f;--accent-soft:#e9eff3;--income:#0e7c5a;--warn:#a15c07;--danger:#c3352b;--mod-note:#1f5673;--mod-ledger:#0e7c5a;--mod-todo:#8a5a2b;--font-body:-apple-system, "PingFang SC", "HarmonyOS Sans SC", "Source Han Sans CN", "Noto Sans CJK SC", "Microsoft YaHei", sans-serif;--font-numeric:"DIN Alternate", "SF Pro Display", "Bahnschrift", -apple-system, "PingFang SC", sans-serif;--radius-md:8px;--radius-lg:12px}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{font-family:var(--font-body);color:var(--fg);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}#root{min-height:100vh}.num{font-family:var(--font-numeric);font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1, "lnum" 1;letter-spacing:.01em}button{cursor:pointer;background:0 0;border:none;font-family:inherit}input,textarea,select{color:var(--fg);font-family:inherit}a{color:inherit;text-decoration:none}.app-shell{min-height:100vh;display:flex}.sidebar{background:var(--surface);border-right:1px solid var(--border);flex-direction:column;flex:0 0 216px;width:216px;height:100vh;padding:20px 12px;display:flex;position:sticky;top:0}.brand{letter-spacing:-.01em;align-items:center;gap:10px;padding:4px 12px 20px;font-size:17px;font-weight:600;display:flex}.brand-ic{background:var(--accent);color:#fff;border-radius:9px;flex:0 0 32px;justify-content:center;align-items:center;width:32px;height:32px;display:flex}.nav{flex-direction:column;gap:2px;display:flex}.nav a{color:var(--muted);border-radius:10px;align-items:center;gap:12px;padding:10px 12px;font-size:14px;font-weight:500;transition:background 80ms;display:flex}.nav a:hover{background:var(--surface-sunken);color:var(--fg-2)}.nav a.active{background:var(--accent-soft);color:var(--accent)}.sidebar-foot{flex-direction:column;gap:8px;margin-top:auto;display:flex}.side-user{border-top:1px solid var(--border-soft);color:var(--meta);align-items:center;gap:10px;padding:8px 12px;font-size:12px;display:flex}.side-user b{color:var(--fg-2);font-size:13px;font-weight:500}.content{flex:1;min-width:0;max-width:1080px;padding:0 32px 64px}.page-title{letter-spacing:-.01em;padding:28px 0 4px;font-size:20px;font-weight:600}.capture{background:var(--surface);border:1px solid var(--border);border-radius:14px;align-items:center;gap:12px;margin-top:20px;padding:8px 8px 8px 18px;display:flex;box-shadow:0 2px 8px #16191d0a}.capture:focus-within{border-color:var(--accent)}.capture input{background:0 0;border:none;outline:none;flex:1;min-width:0;font-size:15px}.capture input::placeholder{color:var(--meta)}.capture .submit{background:var(--accent);color:#fff;border-radius:10px;align-items:center;gap:6px;height:38px;padding:0 22px;font-size:14px;font-weight:500;transition:background 80ms,transform 80ms;display:flex}.capture .submit:hover{background:var(--accent-hover)}.capture .submit:active{transform:scale(.98)}.capture .submit:disabled{opacity:.35;cursor:default}.type-chip{background:var(--surface-sunken);height:30px;color:var(--muted);white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:5px;padding:0 12px;font-size:12px;font-weight:500;display:inline-flex}.type-chip.on{background:var(--accent-soft);color:var(--accent)}.capture-hint{color:var(--meta);min-height:26px;padding:8px 4px 0;font-size:12px}.overview{background:var(--surface);border:1px solid var(--border);border-radius:12px;gap:24px;margin-top:20px;padding:18px 20px;display:flex}.ov-col{flex-direction:column;flex:1;gap:2px;display:flex}.ov-col+.ov-col{border-left:1px solid var(--border-soft);padding-left:24px}.ov-col .l{color:var(--meta);font-size:12px}.ov-col .v{color:var(--fg);letter-spacing:-.01em;font-size:24px;font-weight:600}.ov-col .v.s{font-size:20px}.ov-col .n{color:var(--meta);margin-top:2px;font-size:12px}.n-income{color:var(--income)}.n-warn{color:var(--warn)}.gt{justify-content:space-between;align-items:baseline;padding:24px 4px 8px;display:flex}.gt .name{color:var(--fg);font-size:16px;font-weight:600}.gt .name.warn{color:var(--warn)}.gt .sum{color:var(--meta);font-size:12px}.block{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden}.row{border-bottom:1px solid var(--border-soft);cursor:pointer;align-items:center;gap:12px;min-height:56px;padding:12px 18px;transition:background 80ms;display:flex;position:relative}.row:last-child{border-bottom:none}.row:hover{background:var(--surface-sunken)}.row .mod{width:2px;position:absolute;top:0;bottom:0;left:0}.row .ric{width:24px;color:var(--fg-2);flex:0 0 24px;justify-content:center;align-items:center;display:flex}.row .ric.income{color:var(--income)}.rmain{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.rtitle{color:var(--fg);white-space:nowrap;text-overflow:ellipsis;font-size:15px;font-weight:500;overflow:hidden}.rsub{color:var(--meta);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.ramt{color:var(--fg);flex:none;font-size:16px;font-weight:600}.ramt.inc{color:var(--income)}.row.done .rtitle{color:var(--meta);text-decoration:line-through}.row.done .rsub{color:var(--meta)}.chk{width:20px;height:20px;color:var(--fg-2);cursor:pointer;flex:0 0 20px;justify-content:center;align-items:center;display:flex}.chk.warn{color:var(--warn)}.chk.done{color:var(--meta)}.dot{background:var(--warn);border-radius:50%;flex:0 0 8px;width:8px;height:8px;margin-right:6px;display:inline-block}.sub-ic{color:var(--meta);vertical-align:-2px;margin-right:4px;display:inline-flex}.dialog-mask{z-index:900;background:#16191d73;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog{background:var(--surface);border-radius:16px;width:min(560px,100vw - 48px);max-height:84vh;padding:24px;overflow:auto}.dialog h3{margin-bottom:16px;font-size:17px;font-weight:600}.form-row{border-bottom:1px solid var(--border-soft);justify-content:space-between;align-items:center;padding:12px 0;font-size:14px;display:flex}.form-row .k{color:var(--muted)}.form-row input[type=text],.form-row input[type=number],.form-row textarea,.form-row select{border:1px solid var(--border);background:var(--surface);border-radius:8px;outline:none;max-width:320px;padding:8px 10px;font-size:14px}.form-row input:focus,.form-row textarea:focus{border-color:var(--accent)}.form-row textarea{resize:vertical;width:320px;min-height:88px}.seg2{background:var(--surface-sunken);border-radius:10px;padding:3px;display:inline-flex}.seg2 .opt{color:var(--muted);border-radius:8px;padding:7px 18px;font-size:13px}.seg2 .opt.on{color:var(--fg);background:var(--surface);font-weight:500;box-shadow:0 1px 3px #16191d1a}.catgrid{grid-template-columns:repeat(7,1fr);gap:8px;padding:12px 0;display:grid}.cat{background:var(--surface-sunken);color:var(--muted);border-radius:10px;justify-content:center;align-items:center;gap:6px;padding:10px 0;font-size:12px;display:flex}.cat.on{background:var(--accent-soft);color:var(--accent);font-weight:500}.dialog-actions{gap:12px;margin-top:20px;display:flex}.btn{background:var(--accent);color:#fff;border-radius:10px;flex:1;justify-content:center;align-items:center;gap:6px;height:42px;font-size:14px;font-weight:500;display:flex}.btn:hover{background:var(--accent-hover)}.btn.danger{border:1px solid var(--danger);color:var(--danger);background:0 0;flex:0 0 110px}.btn.ghost{border:1px solid var(--border);color:var(--fg-2);background:0 0}.btn:disabled{opacity:.4;cursor:default}.undo-toast{background:var(--fg);color:#fff;z-index:1000;border-radius:999px;align-items:center;gap:16px;padding:10px 20px;font-size:13px;display:flex;position:fixed;bottom:32px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #16191d3d}.undo-toast button{color:#9fc3d8;font-weight:500}.empty{color:var(--muted);flex-direction:column;align-items:center;gap:10px;padding:56px 0;font-size:13px;display:flex}.empty .ghost-btn{border:1px solid var(--border);color:var(--fg-2);background:var(--surface);border-radius:10px;margin-top:6px;padding:9px 22px;font-size:13px;font-weight:500}.empty .ghost-btn:hover{border-color:var(--accent);color:var(--accent)}.month-nav{align-items:center;gap:12px;padding:20px 0 8px;display:flex}.month-nav select{border:1px solid var(--border);background:var(--surface);border-radius:8px;padding:7px 10px;font-size:13px}.msum{color:var(--meta);flex-wrap:wrap;gap:18px;padding:6px 4px 0;font-size:12px;display:flex}.msum b{color:var(--fg);font-weight:500}.cat-bar-row{border-bottom:1px solid var(--border-soft);align-items:center;gap:12px;padding:8px 18px;font-size:13px;display:flex}.cat-bar-row:last-child{border-bottom:none}.cat-bar-track{background:var(--surface-sunken);border-radius:3px;flex:1;height:6px;overflow:hidden}.cat-bar-fill{background:var(--accent);border-radius:3px;height:100%}.signin{background:var(--bg);justify-content:center;align-items:center;min-height:100vh;display:flex}.signin-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;flex-direction:column;gap:16px;width:380px;padding:40px 36px;display:flex}.signin-card h1{align-items:center;gap:12px;font-size:22px;font-weight:600;display:flex}.signin-card .sub{color:var(--meta);margin-top:-8px;font-size:13px}.signin-card input{border:1px solid var(--border);border-radius:10px;outline:none;padding:11px 14px;font-size:14px}.signin-card input:focus{border-color:var(--accent)}.sso-btn{background:var(--accent);color:#fff;border-radius:10px;justify-content:center;align-items:center;gap:8px;height:46px;font-size:15px;font-weight:500;display:flex}.sso-btn:hover{background:var(--accent-hover)}.divider{text-align:center;color:var(--meta);font-size:12px}.form-error{color:var(--danger);min-height:16px;font-size:12px}.search-box{background:var(--surface);border:1px solid var(--border);border-radius:10px;align-items:center;gap:8px;height:36px;margin-bottom:4px;padding:0 12px;display:flex}.search-box input{background:0 0;border:none;outline:none;width:130px;font-size:13px}.loading-skel{padding:16px 4px}.skel-row{background:var(--surface-sunken);opacity:.7;border-radius:10px;height:52px;margin-bottom:10px}
