@charset "UTF-8";@font-face{font-family:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url("./media/plus-jakarta-sans-cyrillic-ext-wght-normal-JQUONSEA.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:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url("./media/plus-jakarta-sans-vietnamese-wght-normal-TOS5SH3L.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:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url("./media/plus-jakarta-sans-latin-ext-wght-normal-UBEBQO7H.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:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url("./media/plus-jakarta-sans-latin-wght-normal-XZSBT77D.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{--color-bg: #f6f7fb;--color-surface: #ffffff;--color-surface-2: #f1f3f9;--color-border: #e5e8f0;--color-text: #1a1d29;--color-text-soft: #5b6478;--color-text-faint: #949cb0;--color-accent: #4f46e5;--color-accent-soft: #eef0fe;--color-income: #16a34a;--color-expense: #e11d48;--color-warn: #d97706;--radius-sm: 8px;--radius: 14px;--radius-lg: 20px;--shadow-sm: 0 1px 2px rgba(20, 25, 45, .06);--shadow: 0 6px 20px rgba(20, 25, 45, .08);--shadow-lg: 0 18px 50px rgba(20, 25, 45, .14);--space: 16px;--sidebar-w: 248px;--font: "Inter", "Segoe UI", system-ui, -apple-system, sans-serif;--font-display: "Plus Jakarta Sans Variable", var(--font);--duration: .2s;--ease: cubic-bezier(.16, 1, .3, 1)}.dark{--color-bg: #0e1017;--color-surface: #171a24;--color-surface-2: #1f2330;--color-border: #2a2f3d;--color-text: #eef1f8;--color-text-soft: #a3abbf;--color-text-faint: #6b7488;--color-accent: #7c78ff;--color-accent-soft: #23233a;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .4);--shadow: 0 6px 20px rgba(0, 0, 0, .45);--shadow-lg: 0 18px 50px rgba(0, 0, 0, .6)}*{box-sizing:border-box}html,body{margin:0;padding:0;min-height:100vh;font-family:var(--font);background:var(--color-bg);color:var(--color-text);-webkit-font-smoothing:antialiased}h1,h2,h3,h4{margin:0;font-weight:650;letter-spacing:-.02em}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.btn{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border:1px solid transparent;border-radius:var(--radius-sm);font-weight:600;font-size:.9rem;background:var(--color-surface-2);color:var(--color-text);transition:transform var(--duration) var(--ease),background var(--duration) var(--ease),box-shadow var(--duration) var(--ease)}.btn:hover{transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn-primary{background:var(--color-accent);color:#fff;box-shadow:var(--shadow-sm)}.btn-primary:hover{box-shadow:var(--shadow)}.btn-ghost{background:transparent}.btn-danger{background:transparent;color:var(--color-expense)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.input,.select{width:100%;padding:10px 12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text);font-size:.9rem;transition:border-color var(--duration) var(--ease),box-shadow var(--duration) var(--ease)}.range{width:100%;accent-color:var(--color-accent)}.input:focus,.select:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-soft)}.field{display:flex;flex-direction:column;gap:6px}.field label{font-size:.8rem;color:var(--color-text-soft);font-weight:600}.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:999px;font-size:.75rem;font-weight:600;background:var(--color-surface-2);color:var(--color-text-soft)}.badge.badge-ok{background:#16a34a22;color:#16a34a}.badge.badge-warn{background:#d9770622;color:#d97706}.pill-dot{width:9px;height:9px;border-radius:50%;display:inline-block}.income{color:var(--color-income)}.expense{color:var(--color-expense)}.page-title{font-size:1.6rem;margin-bottom:4px}.page-sub{color:var(--color-text-soft);font-size:.9rem}.grid{display:grid;gap:var(--space)}.table{width:100%;border-collapse:collapse}.table th{text-align:left;font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-faint);padding:10px 12px;border-bottom:1px solid var(--color-border)}.table td{padding:12px;border-bottom:1px solid var(--color-border);font-size:.9rem}.table tr:last-child td{border-bottom:none}.table tbody tr{transition:background var(--duration) var(--ease)}.table tbody tr:hover{background:var(--color-surface-2)}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.empty{text-align:center;padding:48px 24px;color:var(--color-text-faint)}.spinner{width:22px;height:22px;border:3px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:24px}.head-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}dialog.modal{border:0;padding:0;background:var(--color-surface);color:var(--color-text);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:calc(100% - 32px);max-width:440px;max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);animation:pop var(--duration) var(--ease)}dialog.modal.modal-sm{max-width:380px}dialog.modal.modal-lg{max-width:640px}dialog.modal.modal-xl{max-width:1040px}dialog.modal::backdrop{background:#0f121e80;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.modal-body{padding:24px}.modal-title{margin:0 0 4px;font-size:1.15rem}.modal-sub{margin:0 0 16px;color:var(--color-text-soft);font-size:.85rem}.modal-form{display:flex;flex-direction:column;gap:14px;margin-top:16px}.modal-form .two{display:grid;grid-template-columns:1fr 1fr;gap:12px}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.form-error{color:var(--color-expense);font-size:.85rem;margin:12px 0 0}.btn-danger-solid{background:var(--color-expense);color:#fff}@keyframes pop{0%{opacity:0;transform:scale(.96) translateY(6px)}}@media(hover:none){.hover-actions{opacity:1!important}}@media(max-width:600px){.page-title{font-size:1.35rem}.head{margin-bottom:16px}.btn{min-height:40px}.table th{padding:8px}.table td{padding:10px 8px;font-size:.85rem}dialog.modal{width:calc(100% - 16px)}.modal-body{padding:18px 16px}.modal-form .two{grid-template-columns:1fr}.modal-actions{flex-wrap:wrap}}@media(prefers-reduced-motion:reduce){.btn:hover,.btn:active{transform:none}dialog.modal{animation:none}}body.nav-lock{overflow:hidden}.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}
