.fmodal-mask[data-v-046934dd]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;background:#0f172a59;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center}.fmodal[data-v-046934dd]{background:var(--surface);border-radius:14px;min-width:340px;max-width:92vw;max-height:90vh;overflow:auto;box-shadow:0 20px 60px #0000004d}.fmodal-head[data-v-046934dd]{padding:20px 22px 0}.fmodal-head h3[data-v-046934dd]{margin:0;font-size:18px;text-align:center}.fmodal-body[data-v-046934dd]{padding:18px 22px}.fmodal-foot[data-v-046934dd]{padding:0 22px 20px;display:flex;gap:12px;justify-content:center}.gate-tip[data-v-6d3ec2dc]{margin:0 0 16px;font-size:14px;color:var(--text-light);text-align:center;line-height:1.6}.gate-books[data-v-6d3ec2dc]{display:flex;flex-direction:column;gap:10px}.gate-book[data-v-6d3ec2dc]{padding:12px 16px;border:1px solid var(--border);border-radius:10px;background:var(--surface);font-size:15px;cursor:pointer;font-family:inherit;transition:.2s}.gate-book[data-v-6d3ec2dc]:hover{border-color:var(--primary);background:var(--primary-light);color:var(--primary-dark)}.gate-form[data-v-6d3ec2dc]{display:flex;flex-direction:column;gap:10px}.gate-form input[data-v-6d3ec2dc]{padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;font-family:inherit;width:100%;box-sizing:border-box}.gate-err[data-v-6d3ec2dc]{color:var(--expense);font-size:13px;text-align:center}.btn[data-v-6d3ec2dc]{padding:10px 20px;border:0;border-radius:8px;cursor:pointer;font-size:14px;font-family:inherit}.btn.primary[data-v-6d3ec2dc]{background:var(--primary-solid);color:#fff;font-weight:600}.btn.primary[data-v-6d3ec2dc]:disabled{opacity:.7;cursor:wait}.layout[data-v-e17f9406]{display:flex;height:100vh;overflow:hidden}@supports (height: 100dvh){.layout[data-v-e17f9406]{height:100dvh}}.sidebar[data-v-e17f9406]{width:220px;background:var(--sidebar-bg);display:flex;flex-direction:column;flex-shrink:0}.logo[data-v-e17f9406]{padding:24px 26px 0;display:flex;align-items:center;justify-content:flex-start;gap:10px;color:#fff;font-size:17px;font-weight:600}.logo svg[data-v-e17f9406]{width:30px;height:30px;flex-shrink:0}.nav[data-v-e17f9406]{flex:1;padding:10px;overflow-y:auto}.nav-item[data-v-e17f9406]{display:flex;align-items:center;gap:12px;padding:14px 16px;margin-bottom:4px;color:#94a3b8;cursor:pointer;border-radius:var(--radius-md);transition:background-color .2s ease,color .2s ease;font-size:var(--fs-body);text-decoration:none}.nav-item[data-v-e17f9406]:hover{background:#ffffff0d;color:#fff}.nav-item.active[data-v-e17f9406]{background:var(--primary-solid);color:#fff}.nav-item svg[data-v-e17f9406]{width:20px;height:20px;flex-shrink:0}.nav-group-header[data-v-e17f9406]{padding:14px 16px;cursor:pointer;display:flex;align-items:center;gap:12px;color:#94a3b8;transition:background-color .2s ease,color .2s ease;border-radius:var(--radius-md);margin-bottom:4px;font-size:var(--fs-body);width:100%;border:0;background:none;font-family:inherit;text-align:left}.nav-group-header[data-v-e17f9406]:hover{background:#ffffff0d;color:#fff}.nav-group-header.active[data-v-e17f9406]{background:var(--primary-solid);color:#fff}.nav-group-header svg[data-v-e17f9406]{width:20px;height:20px;flex-shrink:0}.nav-group-header .arrow[data-v-e17f9406]{margin-left:auto;width:14px;height:14px;transition:transform .3s ease}.nav-group-header .arrow.open[data-v-e17f9406]{transform:rotate(180deg)}.nav-sub[data-v-e17f9406]{padding-left:20px;display:none}.nav-sub.show[data-v-e17f9406]{display:block}.nav-sub .nav-item[data-v-e17f9406]{padding:8px 16px 8px 32px;font-size:var(--fs-sm)}.main[data-v-e17f9406]{flex:1;display:flex;flex-direction:column;min-width:0}.topbar[data-v-e17f9406]{background:var(--surface);padding:12px 24px;display:flex;align-items:center;gap:16px;border-bottom:1px solid var(--border);flex-shrink:0}.topbar h1[data-v-e17f9406]{font-size:var(--fs-h2);font-weight:600;margin:0;flex:none;white-space:nowrap}.menu-btn[data-v-e17f9406]{display:none;width:40px;height:40px;flex:none;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text);font-size:18px;line-height:1;cursor:pointer;align-items:center;justify-content:center}.home-greeting[data-v-e17f9406]{flex:1 1 auto;min-width:0;text-align:center;overflow:hidden}.greet-hi[data-v-e17f9406]{font-size:15px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.greet-slogan[data-v-e17f9406]{font-size:var(--fs-caption);color:var(--text-light);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-actions[data-v-e17f9406]{display:flex;align-items:center;gap:16px;flex:none}.theme-btn[data-v-e17f9406]{width:40px;height:40px;flex:none;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-secondary);cursor:pointer;transition:background-color .2s ease,color .2s ease,border-color .2s ease}.theme-btn[data-v-e17f9406]:hover{color:var(--primary);border-color:var(--primary)}.theme-btn svg[data-v-e17f9406]{width:18px;height:18px}.book-dropdown[data-v-e17f9406]{display:flex;align-items:center}.book-dropdown select[data-v-e17f9406]{padding:6px 12px;border:1px solid var(--border);border-radius:var(--radius-md);font-size:var(--fs-body);background:var(--surface);color:var(--text);cursor:pointer;min-width:140px;font-family:inherit}.user-dropdown[data-v-e17f9406]{position:relative}.user-info[data-v-e17f9406]{display:flex;align-items:center;gap:8px;cursor:pointer;padding:6px 12px;border-radius:var(--radius-md);transition:background-color .2s ease;border:0;background:none;font-family:inherit;font-size:var(--fs-body);color:var(--text)}.user-info[data-v-e17f9406]:hover{background:var(--primary-light)}.user-avatar[data-v-e17f9406]{width:36px;height:36px;border-radius:50%;background:var(--primary-solid);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:600;font-size:15px;flex:none;overflow:hidden}.user-avatar-img[data-v-e17f9406]{width:100%;height:100%;object-fit:cover}.user-name[data-v-e17f9406]{white-space:nowrap}.chev[data-v-e17f9406]{color:var(--text-light)}.dropdown-menu[data-v-e17f9406]{position:absolute;top:50px;right:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);min-width:180px;display:none;z-index:100;overflow:hidden}.dropdown-menu.show[data-v-e17f9406]{display:block}.dropdown-item[data-v-e17f9406]{padding:12px 16px;cursor:pointer;font-size:var(--fs-body);display:flex;align-items:center;gap:8px;transition:background-color .2s ease;white-space:nowrap;width:100%;border:0;background:none;font-family:inherit;text-align:left;color:var(--text)}.dropdown-item[data-v-e17f9406]:hover{background:var(--primary-light)}.dropdown-item svg[data-v-e17f9406]{width:16px;height:16px}.dropdown-divider[data-v-e17f9406]{height:1px;background:var(--border)}.danger-item[data-v-e17f9406]{color:var(--income-text)}.danger-item[data-v-e17f9406]:hover{background:var(--income-bg)}.content[data-v-e17f9406]{flex:1;padding:20px 24px;overflow-y:auto}.sidebar-mask[data-v-e17f9406]{display:none}@media (max-width: 1024px){.home-greeting .greet-slogan[data-v-e17f9406]{display:none}}@media (min-width: 769px) and (max-width: 1024px){.sidebar[data-v-e17f9406]{width:72px}.logo[data-v-e17f9406]{padding:24px 0 0;justify-content:center}.logo span[data-v-e17f9406]{display:none}.nav[data-v-e17f9406]{padding:10px 8px;overflow:visible}.nav-group[data-v-e17f9406]{position:relative}.nav-item[data-v-e17f9406],.nav-group-header[data-v-e17f9406]{justify-content:center;padding:14px 0;gap:0}.nav-item span[data-v-e17f9406],.nav-group-header span[data-v-e17f9406],.nav-group-header .arrow[data-v-e17f9406]{display:none}.nav-sub[data-v-e17f9406]{display:none;position:absolute;left:64px;top:0;width:180px;padding:8px;background:var(--sidebar-bg);border-radius:0 var(--radius-lg) var(--radius-lg) 0;box-shadow:6px 0 24px #00000059;z-index:30}.nav-sub.show[data-v-e17f9406]{display:block}.nav-sub .nav-item[data-v-e17f9406]{justify-content:flex-start;padding:10px 14px}}@media (max-width: 768px){.sidebar[data-v-e17f9406]{position:fixed;top:0;bottom:0;left:0;z-index:1200;width:220px;transform:translate(-100%);transition:transform .25s ease;box-shadow:0 0 32px #0000004d}.sidebar.open[data-v-e17f9406]{transform:translate(0)}.sidebar-mask[data-v-e17f9406]{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1100;background:#0006;opacity:0;pointer-events:none;transition:opacity .25s ease}.sidebar-mask.show[data-v-e17f9406]{opacity:1;pointer-events:auto}.menu-btn[data-v-e17f9406]{display:inline-flex}.home-greeting[data-v-e17f9406]{display:none}.topbar[data-v-e17f9406]{padding:10px 16px}.content[data-v-e17f9406]{padding:16px}.user-name[data-v-e17f9406]{display:none}.book-dropdown select[data-v-e17f9406]{min-width:0}}@media (max-width: 576px){.topbar[data-v-e17f9406]{padding:8px 12px;gap:10px}.topbar h1[data-v-e17f9406]{font-size:var(--fs-h3)}.content[data-v-e17f9406]{padding:12px}.header-actions[data-v-e17f9406]{gap:8px}.book-dropdown select[data-v-e17f9406]{max-width:110px}}@media (prefers-reduced-motion: reduce){.sidebar[data-v-e17f9406],.sidebar-mask[data-v-e17f9406]{transition:none}}.login-welcome-toast[data-v-e17f9406]{position:fixed;top:24px;left:50%;transform:translate(-50%);background:var(--primary-solid);color:#fff;padding:12px 28px;border-radius:10px;font-size:15px;font-weight:500;box-shadow:0 8px 24px #0000002e;z-index:2000;max-width:min(80vw,560px);text-align:center}.login-welcome-toast.err[data-v-e17f9406]{background:var(--danger, #ef5350)}.welcome-toast-enter-active[data-v-e17f9406],.welcome-toast-leave-active[data-v-e17f9406]{transition:opacity .3s,transform .3s}.welcome-toast-enter-from[data-v-e17f9406],.welcome-toast-leave-to[data-v-e17f9406]{opacity:0;transform:translate(-50%) translateY(-10px)}:root{--blue-50: #eff6ff;--blue-100: #dbeafe;--blue-200: #bfdbfe;--blue-300: #93c5fd;--blue-400: #60a5fa;--blue-500: #3b82f6;--blue-600: #156bd4;--blue-700: #0f4e9e;--blue-800: #0b3a77;--blue-900: #082852;--primary: var(--blue-600);--primary-dark: var(--blue-700);--primary-solid: var(--blue-600);--primary-light: #d7e6fb;--secondary: #4c8dff;--link: var(--blue-600);--income: #ef5350;--income-bg: #ffebee;--income-text: #c62828;--income-solid: #c62828;--expense: #00bfa5;--expense-ink: #00806e;--expense-bg: #e0f7f4;--expense-text: #00705f;--expense-solid: #0f6e56;--expense-light: var(--expense-bg);--warn-bg: #fdf0e6;--warn-text: #8a4b0f;--danger: #c62828;--danger-dark: #a81f1f;--success: #1a7f4b;--bg: #f0f4f8;--card-bg: #fff;--text: #263238;--text-secondary: #5b7183;--text-light: var(--text-secondary);--muted: var(--text-secondary);--border: #e2e8f0;--shadow: 0 2px 12px rgba(0, 0, 0, .06);--sidebar-bg: #1a1f2e;--surface: var(--card-bg);--surface-sunken: var(--bg);--row-hover: #fafafa;--chip-bg: #eef2f7;--thead-bg: var(--primary-light);--thead-text: #0f172a;--focus-ring: rgba(21, 107, 212, .18);--mask-bg: rgba(0, 0, 0, .4);--skeleton: #e9edf2;--skeleton-hi: #f5f7fa;--alert-err-bg: #fdecea;--alert-err-text: #aa1122;--alert-err-border: #f5c6cb;--alert-ok-bg: #e9f7ef;--alert-ok-text: var(--success);--alert-ok-border: #bfe3cd;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 999px;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--sp-8: 32px;--sp-10: 40px;--fs-display: 24px;--fs-h2: 20px;--fs-h3: 16px;--fs-body: 14px;--fs-input: 16px;--fs-sm: 13px;--fs-caption: 12px;color-scheme:light}:root[data-theme=dark]{color-scheme:dark;--primary: #6aa6f8;--primary-dark: #8dbcfa;--primary-solid: #156bd4;--primary-light: #23324a;--secondary: #6aa6f8;--link: #8dbcfa;--income: #ff6b6b;--income-bg: #3d2327;--income-text: #ff9d9d;--income-solid: #b3261e;--expense: #2dd4bf;--expense-ink: #5eead4;--expense-bg: #123430;--expense-text: #7ee3d0;--expense-solid: #0f6e56;--warn-bg: #3a2c17;--warn-text: #f0c078;--danger: #ff6b6b;--danger-dark: #d94f4f;--success: #5ad19a;--bg: #14181f;--card-bg: #1c2230;--text: #e6edf6;--text-secondary: #a7b6c9;--border: #2c3646;--shadow: 0 2px 12px rgba(0, 0, 0, .35);--sidebar-bg: #11151d;--surface: var(--card-bg);--surface-sunken: #232a39;--row-hover: #232a39;--chip-bg: #26303f;--thead-bg: #23324a;--thead-text: #e6edf6;--focus-ring: rgba(106, 166, 248, .28);--mask-bg: rgba(0, 0, 0, .6);--skeleton: #26303f;--skeleton-hi: #2f3a4b;--alert-err-bg: #3d2327;--alert-err-text: #ff9d9d;--alert-err-border: #5c2f34;--alert-ok-bg: #123430;--alert-ok-text: #7ee3d0;--alert-ok-border: #1f4f47}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;color:var(--text);background:var(--bg);line-height:1.6}h1,h2,h3,h4{line-height:1.3}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.nav-item:focus-visible,.nav-group-header:focus-visible{outline:2px solid #fff;outline-offset:-2px}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.page-title{font-size:var(--fs-h2);margin:0 0 4px;font-weight:600}.page-sub{color:var(--muted);margin:0 0 16px;font-size:var(--fs-sm)}.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}.toolbar .spacer{flex:1}.card{background:var(--surface);border-radius:var(--radius-xl);padding:24px;box-shadow:var(--shadow)}table.base{width:100%;border-collapse:separate;border-spacing:0;background:var(--surface);border-radius:var(--radius-xl);overflow:hidden;box-shadow:var(--shadow)}table.base th,table.base td{padding:12px 16px;text-align:left;border-bottom:1px solid var(--border);font-size:var(--fs-body)}table.base th{background:var(--thead-bg);color:var(--thead-text);font-weight:600;font-size:var(--fs-sm)}table.base thead th{position:sticky;top:0;z-index:2}table.base tr:last-child td{border-bottom:none}table.base tr:hover td{background:var(--row-hover)}.field{display:flex;flex-direction:column;gap:5px;margin-bottom:12px}.field label{font-size:var(--fs-sm);color:var(--text-secondary)}.field input,.field select,.field textarea{padding:8px 12px;border:1px solid var(--border);border-radius:var(--radius-md);font-size:var(--fs-body);font-family:inherit;background:var(--surface);color:var(--text);transition:border-color .2s ease,box-shadow .2s ease}.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid var(--primary);outline-offset:1px;border-color:var(--primary);box-shadow:0 0 0 3px var(--focus-ring)}.field .hint{font-size:var(--fs-caption);color:var(--muted)}input[type=date],input[type=month],input[type=datetime-local],input[type=week],input[type=time]{cursor:pointer}select{color-scheme:light}option{color:#1f2733}:root[data-theme=dark] select{color-scheme:dark}:root[data-theme=dark] option{color:#e6edf6}.btn{padding:8px 16px;border-radius:var(--radius-md);border:1px solid var(--border);background:var(--surface);cursor:pointer;font-size:var(--fs-body);display:inline-flex;align-items:center;gap:6px;font-family:inherit;color:var(--text);transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .15s ease,box-shadow .2s ease}.btn:hover{border-color:var(--primary);color:var(--primary);transform:translateY(-1px)}.btn:active{transform:translateY(0) scale(.97)}.btn.primary{background:var(--primary-solid);color:#fff;border-color:var(--primary-solid)}.btn.primary:hover{background:var(--primary-dark);border-color:var(--primary-dark);color:#fff}.btn.danger{background:var(--danger);color:#fff;border-color:var(--danger)}.btn.danger:hover{background:var(--danger-dark);border-color:var(--danger-dark);color:#fff}.btn.ghost{background:transparent;border-color:transparent;color:var(--primary)}.btn.ghost:hover{background:var(--primary-light)}.btn.sm{padding:4px 12px;font-size:var(--fs-sm)}.btn:disabled{opacity:.6;cursor:not-allowed;transform:none;box-shadow:none}button.loading{position:relative;cursor:progress;opacity:.85;min-width:96px}button.loading:before{content:"";width:14px;height:14px;flex:none;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:btn-spin .7s linear infinite;display:inline-block}button.loading:hover{transform:none}@keyframes btn-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){button.loading:before{animation:none;border-top-color:currentColor;opacity:.5}}.muted{color:var(--muted)}.alert{padding:9px 12px;border-radius:var(--radius-md);margin-bottom:12px;font-size:var(--fs-sm)}.alert.err{background:var(--alert-err-bg);color:var(--alert-err-text);border:1px solid var(--alert-err-border)}.alert.ok{background:var(--alert-ok-bg);color:var(--alert-ok-text);border:1px solid var(--alert-ok-border)}.empty{padding:28px;text-align:center;color:var(--muted)}.badge{display:inline-block;padding:3px 12px;border-radius:var(--radius-full);font-size:var(--fs-caption);font-weight:500;background:var(--chip-bg);color:var(--primary)}.badge.income{background:var(--income-bg);color:var(--income-text)}.badge.expense{background:var(--expense-bg);color:var(--expense-text)}.badge.warn{background:var(--warn-bg);color:var(--warn-text)}.badge.gray{background:var(--chip-bg);color:var(--text-secondary)}.amount{font-weight:600;font-size:15px;font-variant-numeric:tabular-nums}.amount.income{color:var(--income-text)}.amount.expense{color:var(--expense-text)}.data-card{background:var(--surface);border-radius:var(--radius-xl);box-shadow:var(--shadow);overflow:hidden}.data-scroll{overflow:auto}.data-scroll.bounded{max-height:calc(100vh - 220px)}@supports (max-height: calc(100dvh - 220px)){.data-scroll.bounded{max-height:calc(100dvh - 220px)}}table.base.in-card{box-shadow:none;border-radius:0;min-width:var(--table-min, 720px)}.search-box{display:flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:var(--radius-md);padding:0 10px;background:var(--surface);height:38px}.search-box svg{color:var(--text-light);flex-shrink:0}.search-box input{border:none;outline:none;padding:0;font-size:var(--fs-body);width:100%;font-family:inherit;background:transparent;color:var(--text)}.search-box:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--focus-ring)}.pagination{display:flex;justify-content:space-between;align-items:center;padding:var(--sp-3) var(--sp-4);gap:var(--sp-3);flex-wrap:wrap}.pagination-left,.pagination-right{display:flex;align-items:center;gap:var(--sp-2)}.page-btn{padding:6px 12px;border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-md);cursor:pointer;font-size:var(--fs-sm);font-family:inherit;color:var(--text);transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .15s ease}.page-btn:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.page-btn:active:not(:disabled){transform:scale(.97)}.page-btn.active{background:var(--primary-solid);color:#fff;border-color:var(--primary-solid)}.page-btn:disabled{opacity:.5;cursor:not-allowed}.page-ellipsis{padding:0 4px;color:var(--text-light)}.type-badge{display:inline-block;padding:3px 12px;border-radius:var(--radius-sm);font-size:var(--fs-caption);font-weight:500;background:var(--chip-bg);color:var(--primary)}.row-actions{display:flex;gap:8px}.pager{display:flex;gap:12px;align-items:center;margin-top:12px}.pager .spacer{flex:1}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skeleton{background:var(--skeleton);border-radius:var(--radius-md);position:relative;overflow:hidden}.skeleton:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,var(--skeleton-hi),transparent);transform:translate(-100%);animation:skeleton-sweep 1.4s ease-in-out infinite}@keyframes skeleton-sweep{to{transform:translate(100%)}}@media (prefers-reduced-motion: reduce){.skeleton:after{animation:none}}.skeleton.text{height:14px}.skeleton.title{height:20px;width:40%}.skeleton.block{height:88px}.skeleton.round{border-radius:var(--radius-full)}@media (max-width: 768px){.field input,.field select,.field textarea{font-size:var(--fs-input)}}
