:root{color-scheme:light;--surface-1: #fcfcfb;--page: #f9f9f7;--text-primary: #0b0b0b;--text-secondary: #52514e;--text-muted: #898781;--grid: #e1e0d9;--axis: #c3c2b7;--border: rgba(11, 11, 11, .1);--series-1: #2a78d6;--series-2: #eb6834;--status-good: #0ca30c;--status-warning: #fab219;--status-critical: #d03b3b;--radius: 10px;--radius-sm: 6px;--shadow: 0 1px 2px rgba(11, 11, 11, .06), 0 8px 24px rgba(11, 11, 11, .04);--font: system-ui, -apple-system, "Segoe UI", sans-serif}@media (prefers-color-scheme: dark){:root:where(:not([data-theme=light])){color-scheme:dark;--surface-1: #1a1a19;--page: #0d0d0d;--text-primary: #ffffff;--text-secondary: #c3c2b7;--text-muted: #898781;--grid: #2c2c2a;--axis: #383835;--border: rgba(255, 255, 255, .1);--series-1: #3987e5;--series-2: #d95926;--shadow: 0 1px 2px rgba(0, 0, 0, .4)}}:root[data-theme=dark]{color-scheme:dark;--surface-1: #1a1a19;--page: #0d0d0d;--text-primary: #ffffff;--text-secondary: #c3c2b7;--text-muted: #898781;--grid: #2c2c2a;--axis: #383835;--border: rgba(255, 255, 255, .1);--series-1: #3987e5;--series-2: #d95926;--shadow: 0 1px 2px rgba(0, 0, 0, .4)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);background:var(--page);color:var(--text-primary);-webkit-font-smoothing:antialiased}a{color:var(--series-1);text-decoration:none}h1,h2,h3{margin:0;font-weight:650;letter-spacing:-.01em}h1{font-size:1.5rem}h2{font-size:1.05rem}.app{display:grid;grid-template-columns:232px 1fr;min-height:100vh}.sidebar{border-right:1px solid var(--border);background:var(--surface-1);padding:20px 14px;display:flex;flex-direction:column;gap:22px;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:10px;font-size:1.15rem;font-weight:700;padding:0 8px}.brand-mark{width:26px;height:26px;border-radius:8px;background:var(--series-1);display:grid;place-items:center;color:#fff;font-size:.8rem}.nav{display:flex;flex-direction:column;gap:2px}.nav a{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.92rem;font-weight:500}.nav a:hover{background:color-mix(in srgb,var(--series-1) 8%,transparent);color:var(--text-primary)}.nav a.active{background:color-mix(in srgb,var(--series-1) 14%,transparent);color:var(--text-primary);font-weight:600}.nav-badge{margin-left:auto;background:var(--status-critical);color:#fff;border-radius:999px;font-size:.7rem;padding:1px 7px;font-weight:700}.sidebar-footer{margin-top:auto;display:flex;flex-direction:column;gap:10px;font-size:.82rem;color:var(--text-muted);padding:0 8px}.main{padding:26px 30px 60px;max-width:1240px}.page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}.page-header p{margin:4px 0 0;color:var(--text-secondary);font-size:.9rem}.card{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow)}.card-title{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:4px}.card-subtitle{color:var(--text-muted);font-size:.8rem;margin:0 0 14px}.grid{display:grid;gap:16px}.grid-kpi{grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}.grid-2{grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}.stat-label{color:var(--text-secondary);font-size:.82rem;font-weight:500;margin-bottom:6px}.stat-value{font-size:1.6rem;font-weight:680;letter-spacing:-.02em;overflow-wrap:anywhere}.stat-value.hero{font-size:clamp(1.4rem,7vw,2.4rem)}.stat-hint{margin-top:6px;font-size:.78rem;color:var(--text-muted)}.stat-hint.good{color:var(--status-good)}.stat-hint.bad{color:var(--status-critical)}.filters{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin-bottom:16px}label{display:block;font-size:.78rem;color:var(--text-secondary);margin-bottom:4px;font-weight:500}input,select,textarea{font-family:inherit;font-size:1rem;padding:8px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--page);color:var(--text-primary);width:100%}input:focus,select:focus,textarea:focus{outline:2px solid color-mix(in srgb,var(--series-1) 55%,transparent);outline-offset:1px}button{font-family:inherit;font-size:.88rem;font-weight:600;padding:9px 14px;border-radius:var(--radius-sm);border:1px solid transparent;background:var(--series-1);color:#fff;cursor:pointer}button:hover{filter:brightness(1.06)}button:disabled{opacity:.55;cursor:not-allowed}button.secondary{background:transparent;border-color:var(--border);color:var(--text-primary)}button.ghost{background:transparent;color:var(--text-secondary);padding:6px 8px}button.danger{background:var(--status-critical)}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}table{width:100%;border-collapse:collapse;font-size:.9rem}th{text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-weight:600;padding:8px 10px;border-bottom:1px solid var(--border)}td{padding:10px;border-bottom:1px solid var(--border);color:var(--text-primary)}td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}tbody tr:hover td{background:color-mix(in srgb,var(--series-1) 5%,transparent)}.badge{display:inline-flex;align-items:center;gap:5px;font-size:.74rem;font-weight:650;padding:2px 8px;border-radius:999px;border:1px solid var(--border);color:var(--text-secondary)}.badge.income{color:var(--series-1);border-color:color-mix(in srgb,var(--series-1) 45%,transparent)}.badge.expense{color:var(--series-2);border-color:color-mix(in srgb,var(--series-2) 45%,transparent)}.badge.critical{color:var(--status-critical);border-color:color-mix(in srgb,var(--status-critical) 45%,transparent)}.badge.good{color:var(--status-good);border-color:color-mix(in srgb,var(--status-good) 45%,transparent)}.meter{height:8px;border-radius:999px;background:var(--grid);overflow:hidden}.meter-fill{height:100%;border-radius:999px;background:var(--series-1);transition:width .24s ease}.meter-fill.warning{background:var(--status-warning)}.meter-fill.critical{background:var(--status-critical)}.budget-row+.budget-row{margin-top:18px;padding-top:18px;border-top:1px solid var(--border)}.chart-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:.8rem;color:var(--text-secondary);margin-bottom:8px}.chart-legend span{display:inline-flex;align-items:center;gap:6px}.swatch{width:10px;height:10px;border-radius:3px;display:inline-block}.swatch-picker{display:flex;flex-wrap:wrap;gap:8px}.swatch-option{width:28px;height:28px;border-radius:50%;border:2px solid transparent;padding:0;cursor:pointer}.swatch-option.selected{border-color:var(--text-primary)}.icon-picker{display:flex;flex-wrap:wrap;gap:6px;max-height:110px;overflow-y:auto}.icon-option{width:36px;height:36px;font-size:1.1rem;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--page);cursor:pointer;display:flex;align-items:center;justify-content:center}.icon-option.selected{border-color:var(--series-1);background:color-mix(in srgb,var(--series-1) 15%,var(--page))}.tooltip{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 10px;box-shadow:var(--shadow);font-size:.82rem}.tooltip-label{color:var(--text-secondary);margin-bottom:4px;font-weight:600}.tooltip-row{display:flex;align-items:center;gap:6px;font-variant-numeric:tabular-nums}.empty{text-align:center;padding:34px 18px;color:var(--text-secondary);font-size:.9rem}.notice{border-radius:var(--radius-sm);padding:10px 12px;font-size:.85rem;border:1px solid var(--border);margin-bottom:14px}.notice.error{color:var(--status-critical);border-color:color-mix(in srgb,var(--status-critical) 45%,transparent);background:color-mix(in srgb,var(--status-critical) 8%,transparent)}.notice.info{color:var(--text-secondary);background:color-mix(in srgb,var(--series-1) 6%,transparent)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0b0b0b73;display:grid;place-items:center;padding:20px;z-index:20}.modal{background:var(--surface-1);border-radius:var(--radius);border:1px solid var(--border);width:min(520px,100%);max-height:90vh;overflow:auto;padding:20px;box-shadow:0 20px 60px #00000047}.modal h2{margin-bottom:14px}.modal .stack{display:flex;flex-direction:column;gap:12px}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.spinner{width:32px;height:32px;margin:4px auto 14px;border:3px solid var(--border);border-top-color:var(--series-1);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.progress-text{text-align:center;color:var(--text-secondary);margin-bottom:4px}.notification-item{display:flex;gap:12px;padding:14px 0;border-bottom:1px solid var(--border)}.notification-item.unread{background:color-mix(in srgb,var(--series-1) 5%,transparent);margin:0 -18px;padding:14px 18px}.dot{width:8px;height:8px;border-radius:999px;background:var(--status-critical);margin-top:6px;flex:none}.auth-shell{min-height:100vh;display:grid;place-items:center;padding:24px}.auth-card{width:min(400px,100%)}.auth-card .brand{margin-bottom:16px;padding:0}.auth-divider{display:flex;align-items:center;gap:10px;margin:14px 0;color:var(--text-muted);font-size:.78rem}.auth-divider:before,.auth-divider:after{content:"";flex:1;height:1px;background:var(--border)}.google-button{display:block;width:100%;box-sizing:border-box;text-align:center;text-decoration:none;font-family:inherit;font-size:.88rem;font-weight:600;padding:9px 14px;border-radius:var(--radius-sm);background:transparent;border:1px solid var(--border);color:var(--text-primary);cursor:pointer}.google-button:hover{filter:brightness(1.06)}.switch-auth{margin-top:14px;font-size:.85rem;color:var(--text-secondary);text-align:center}.switch-auth button{background:none;border:none;color:var(--series-1);padding:0;font-weight:600;cursor:pointer}.link-button{background:none;border:none;color:var(--series-1);padding:0;font-size:.82rem;font-weight:600;cursor:pointer;text-align:left;justify-self:start}@media (max-width: 820px){.app{grid-template-columns:1fr}.sidebar{position:static;height:auto;border-right:none;border-bottom:1px solid var(--border)}.main{padding:18px}}
