@import "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap";:root{--text:#6b6375;--text-h:#08060d;--bg:#fff;--border:#e5e4e7;--code-bg:#f4f3ec;--accent:#aa3bff;--accent-bg:#aa3bff1a;--accent-border:#aa3bff80;--social-bg:#f4f3ec80;--shadow:#0000001a 0 10px 15px -3px, #0000000d 0 4px 6px -2px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;--heading:system-ui, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, Consolas, monospace;font:18px/145% var(--sans);letter-spacing:.18px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}@media (width<=1024px){:root{font-size:16px}}@media (prefers-color-scheme:dark){:root{--text:#9ca3af;--text-h:#f3f4f6;--bg:#16171d;--border:#2e303a;--code-bg:#1f2028;--accent:#c084fc;--accent-bg:#c084fc26;--accent-border:#c084fc80;--social-bg:#2f303a80;--shadow:#0006 0 10px 15px -3px, #00000040 0 4px 6px -2px}#social .button-icon{filter:invert()brightness(2)}}#root{text-align:center;border-inline:1px solid var(--border);box-sizing:border-box;flex-direction:column;width:1126px;max-width:100%;min-height:100svh;margin:0 auto;display:flex}body{margin:0}h1,h2{font-family:var(--heading);color:var(--text-h);font-weight:500}h1{letter-spacing:-1.68px;margin:32px 0;font-size:56px}@media (width<=1024px){h1{margin:20px 0;font-size:36px}}h2{letter-spacing:-.24px;margin:0 0 8px;font-size:24px;line-height:118%}@media (width<=1024px){h2{font-size:20px}}p{margin:0}code,.counter{font-family:var(--mono);color:var(--text-h);border-radius:4px;display:inline-flex}code{background:var(--code-bg);padding:4px 8px;font-size:15px;line-height:135%}:root{--font-display:"IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--shadow-1:0 1px 2px #0f172a0f, 0 1px 1px #0f172a0a;--shadow-2:0 8px 24px #0f172a14}:root,[data-theme=light]{--bg:#f5f6f8;--surface:#fff;--surface-alt:#fafbfc;--ink:#0f172a;--ink-soft:#182338;--border:#e2e6eb;--border-strong:#cbd2d9;--text:#12182b;--text-muted:#5b6472;--text-on-ink:#eef1f7;--text-on-ink-muted:#9aa6bd;--primary:#1d4ed8;--primary-hover:#1a3fbf;--focus:#2f6fed;--positive:#0e8f65;--positive-bg:#e3f7ee;--negative:#c4362c;--negative-bg:#fdebea;--ledger-rule:#0f172a0d}[data-theme=dark]{--bg:#0a0e17;--surface:#121826;--surface-alt:#0f141f;--ink:#060911;--ink-soft:#0c111c;--border:#232b3b;--border-strong:#303b4f;--text:#e7eaf0;--text-muted:#8d97a8;--text-on-ink:#eef1f7;--text-on-ink-muted:#7b8598;--primary:#6c93f5;--primary-hover:#86a6f7;--focus:#6c93f5;--positive:#34d399;--positive-bg:#34d3991f;--negative:#f87171;--negative-bg:#f871711f;--ledger-rule:#ffffff0b;--shadow-1:0 1px 2px #00000059;--shadow-2:0 10px 30px #00000073}*,:before,:after{box-sizing:border-box}body{font-family:var(--font-display);background:var(--bg);color:var(--text);margin:0;transition:background .2s,color .2s}.App{max-width:1000px;margin:0 auto;padding:0 20px 60px}.app-header{border-bottom:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:32px;padding:22px 4px;display:flex}.brand{flex-direction:column;gap:2px;display:flex}.brand-mark{font-family:var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:var(--primary);font-size:13px;font-weight:600}.brand-sub{color:var(--text-muted);font-size:13px}.header-actions{align-items:center;gap:10px;display:flex}.user-chip{color:var(--text-muted);padding:0 4px;font-size:13px}.header-signout{margin-top:0}.theme-toggle{background:var(--surface);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:999px;align-items:center;gap:8px;padding:8px 14px;font-size:13px;font-weight:500;transition:border-color .15s,transform .15s;display:inline-flex}.theme-toggle:hover{border-color:var(--border-strong);transform:translateY(-1px)}.theme-toggle:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.summary{grid-template-columns:1.4fr 1fr;gap:16px;margin-bottom:32px;display:grid}.hero-card{background:var(--ink);background-image:repeating-linear-gradient(to bottom, var(--ledger-rule) 0, var(--ledger-rule) 1px, transparent 1px, transparent 28px);border-radius:var(--radius-lg);color:var(--text-on-ink);box-shadow:var(--shadow-2);flex-direction:column;justify-content:center;min-height:148px;padding:28px 30px;display:flex}.hero-label{letter-spacing:.14em;text-transform:uppercase;color:var(--text-on-ink-muted);margin-bottom:10px;font-size:12px;font-weight:600}.hero-figure{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:40px;font-weight:600;line-height:1}.hero-rule{background:var(--primary);border-radius:2px;width:64px;height:3px;margin-top:16px}.stat-stack{flex-direction:column;gap:16px;display:flex}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-1);flex:1;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.stat-label{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);font-size:12px;font-weight:600}.stat-figure{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:20px;font-weight:600}.stat-card.income .stat-figure{color:var(--positive)}.stat-card.expense .stat-figure{color:var(--negative)}.stat-dot{border-radius:50%;width:8px;height:8px;margin-right:8px;display:inline-block}.stat-card.income .stat-dot{background:var(--positive)}.stat-card.expense .stat-dot{background:var(--negative)}.section-title{letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);margin:0 0 12px 2px;font-size:13px;font-weight:600}.form-title{margin:0 0 16px}form{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-1);margin-bottom:32px;padding:24px}.form-grid{grid-template-columns:repeat(4,1fr);align-items:end;gap:14px;display:grid}.field{flex-direction:column;gap:6px;display:flex}.field label{color:var(--text-muted);font-size:12px;font-weight:500}input,select{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface-alt);width:100%;color:var(--text);font-family:var(--font-display);padding:10px 12px;font-size:14px;transition:border-color .15s,box-shadow .15s}input[type=number]{font-family:var(--font-mono);font-variant-numeric:tabular-nums}input:focus,select:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px #2f6fed26}button{background:var(--primary);color:#fff;border-radius:var(--radius-sm);cursor:pointer;border:none;height:40px;padding:10px 20px;font-size:14px;font-weight:600;transition:background .15s,transform .1s}button:hover{background:var(--primary-hover)}button:active{transform:translateY(1px)}button:focus-visible{outline:2px solid var(--focus);outline-offset:2px}button:disabled{opacity:.55;cursor:not-allowed;transform:none!important}.banner{border-radius:var(--radius-md);border:1px solid #0000;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px;padding:12px 16px;font-size:13px;font-weight:500;animation:.15s banner-in;display:flex}@keyframes banner-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.banner-success{background:var(--positive-bg);color:var(--positive);border-color:var(--positive)}.banner-error{background:var(--negative-bg);color:var(--negative);border-color:var(--negative)}.banner-dismiss{color:inherit;opacity:.7;background:0 0;border:none;height:auto;padding:2px 4px;font-size:13px;line-height:1}.banner-dismiss:hover{opacity:1;background:0 0;transform:none}.field-error{background:var(--negative-bg);color:var(--negative);border:1px solid var(--negative);border-radius:var(--radius-sm);margin:0 0 14px;padding:8px 12px;font-size:13px;font-weight:500}.button-block{width:100%}.App>.theme-toggle{margin:0 0 12px auto;display:block}.auth-container{justify-content:center;align-items:center;min-height:70vh;padding:20px;display:flex}.auth-page{background:var(--bg);min-height:100vh;display:flex}.auth-side,.auth-sidebar{background:var(--ink);background-image:repeating-linear-gradient(to bottom, var(--ledger-rule) 0, var(--ledger-rule) 1px, transparent 1px, transparent 28px);max-width:480px;color:var(--text-on-ink);flex-direction:column;flex:0 0 44%;justify-content:center;padding:60px 48px;display:flex}.auth-side-content{flex-direction:column;gap:18px;max-width:340px;display:flex}.auth-side .brand-mark,.auth-sidebar .brand-mark{width:44px;height:44px;font-family:var(--font-mono);color:#7da2f5;background:#ffffff14;border:1px solid #ffffff24;border-radius:12px;justify-content:center;align-items:center;font-size:20px;font-weight:600;display:inline-flex}.auth-brand{color:var(--text-on-ink);margin:4px 0 0;font-size:26px;font-weight:700;line-height:1.3}.auth-tagline{color:var(--text-on-ink-muted);margin:0;font-size:14px;font-weight:400}.auth-features{flex-direction:column;gap:14px;margin:0;padding:0;list-style:none;display:flex}.auth-features li{color:var(--text-on-ink-muted);align-items:center;gap:10px;font-size:14px;display:flex}.feature-dot{background:#7da2f5;border-radius:50%;flex-shrink:0;width:6px;height:6px}.auth-side-footnote{color:var(--text-on-ink-muted);border-top:1px solid #ffffff1a;padding-top:18px;font-size:12px}.auth-main{flex:1;justify-content:center;align-items:center;padding:40px 20px;display:flex}.auth-card-header{text-align:center;flex-direction:column;align-items:center;gap:6px;margin-bottom:22px;display:flex}.auth-card-header h2{color:var(--text);margin:0;font-size:20px;font-weight:600}.mobile-brand-mark{display:none}.auth-divider{color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;align-items:center;gap:12px;margin:18px 0;font-size:11px;font-weight:600;display:flex}.auth-divider:before,.auth-divider:after{content:"";background:var(--border);flex:1;height:1px}@media (width<=900px){.auth-side,.auth-sidebar{display:none}.mobile-brand-mark{background:var(--ink);color:#7da2f5;width:40px;height:40px;font-family:var(--font-mono);border-radius:12px;justify-content:center;align-items:center;margin-bottom:8px;font-size:18px;display:inline-flex}}.link-button{color:var(--primary);cursor:pointer;background:0 0;border:none;height:auto;padding:0;font-weight:600;text-decoration:underline}.link-button:hover{color:var(--primary-hover);background:0 0;transform:none}.auth-card h1{color:var(--text);margin:0 0 6px;font-size:20px;font-weight:600}.auth-subtitle{color:var(--text-muted);margin:0 0 20px;font-size:13px}.auth-switch{color:var(--text-muted);text-align:center;margin-top:18px;font-size:13px}.auth-switch .button-secondary{margin-top:0}.app-header h1{color:var(--text);margin:0;font-size:20px;font-weight:600}.welcome-text{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin:0 0 2px;font-size:12px;font-weight:600}.auth-shell{justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;max-width:380px;box-shadow:var(--shadow-2);text-align:center;flex-direction:column;align-items:center;padding:32px;display:flex}.auth-card .brand-mark{font-size:15px}.auth-card .brand-sub{margin-bottom:20px}.auth-card form{width:100%;box-shadow:none;text-align:left;border:none;margin:0;padding:0}.auth-card .field-error{text-align:left;width:100%}.auth-toggle{border:1px solid var(--border);border-radius:var(--radius-md);width:100%;margin-bottom:20px;display:flex;overflow:hidden}.auth-toggle button{background:var(--surface-alt);color:var(--text-muted);border:none;border-radius:0;flex:1;padding:10px;font-size:13px;font-weight:600}.auth-toggle button.active{background:var(--primary);color:#fff}.auth-toggle button:hover:not(.active){background:var(--border);transform:none}.chart-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-1);margin-bottom:32px;padding:24px}.chart-body{flex-wrap:wrap;align-items:center;gap:32px;margin-top:8px;display:flex}.donut-wrap{flex-shrink:0;width:180px;height:180px;position:relative}.donut-svg{width:100%;height:100%}.donut-svg circle{transition:stroke-dasharray .3s}.donut-center{text-align:center;pointer-events:none;flex-direction:column;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.donut-center-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin-bottom:4px;font-size:11px;font-weight:600}.donut-center-figure{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--negative);font-size:17px;font-weight:600}.legend{flex-direction:column;flex:1;gap:10px;min-width:220px;margin:0;padding:0;list-style:none;display:flex}.legend-item{grid-template-columns:10px 1fr auto auto;align-items:center;gap:10px;font-size:13px;display:grid}.legend-swatch{border-radius:3px;width:10px;height:10px}.legend-name{color:var(--text);font-weight:500}.legend-pct{color:var(--text-muted);font-family:var(--font-mono);font-size:12px}.legend-amount{font-family:var(--font-mono);font-variant-numeric:tabular-nums;text-align:right;font-weight:600}.table-toolbar{border-bottom:1px solid var(--border);background:var(--surface-alt);gap:10px;padding:16px;display:flex}.search-input{flex:1;margin:0}.filter-select{width:auto;min-width:140px;margin:0}.col-date{color:var(--text-muted);font-family:var(--font-mono);white-space:nowrap;font-size:13px}.button-secondary{color:var(--text-muted);border:1px solid var(--border);background:0 0;margin-top:8px}.button-secondary:hover{background:var(--surface-alt);color:var(--text)}.row-actions{justify-content:flex-end;gap:8px;display:flex}.icon-button{color:var(--text-muted);border:1px solid var(--border);border-radius:var(--radius-sm);background:0 0;height:30px;padding:0 10px;font-size:12px;font-weight:500}.icon-button:hover{background:var(--surface-alt);color:var(--primary);border-color:var(--border-strong)}.icon-button.danger:hover{color:var(--negative)}.icon-button.danger{color:var(--negative);border-color:var(--negative-bg)}.icon-button.danger:hover{background:var(--negative-bg);border-color:var(--negative)}th.col-actions,td.col-actions{text-align:right;white-space:nowrap}.table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-1);overflow:hidden}table{border-collapse:collapse;width:100%}th{background:var(--surface-alt);color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase;text-align:left;border-bottom:1px solid var(--border);padding:12px 16px;font-size:12px;font-weight:600}th.col-amount{text-align:right}td{border-bottom:1px solid var(--border);padding:13px 16px;font-size:14px}td.col-amount{text-align:right;font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-weight:600}tr:last-child td{border-bottom:none}tr:hover td{background:var(--surface-alt)}.badge{letter-spacing:.02em;border-radius:999px;align-items:center;gap:6px;padding:4px 10px;font-size:12px;font-weight:600;display:inline-flex}.badge:before{content:"";border-radius:50%;width:6px;height:6px}.badge-income{background:var(--positive-bg);color:var(--positive)}.badge-income:before{background:var(--positive)}.badge-expense{background:var(--negative-bg);color:var(--negative)}.badge-expense:before{background:var(--negative)}.amount-income{color:var(--positive)}.amount-expense{color:var(--negative)}.empty-state{text-align:center;color:var(--text-muted);padding:48px 20px}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}@media (width<=720px){.summary{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr 1fr}}@media (width<=600px){.App{padding:0 14px 40px}.hero-figure{font-size:32px}.form-grid{grid-template-columns:1fr}table{white-space:nowrap;display:block;overflow-x:auto}.chart-body{flex-direction:column;align-items:flex-start}.table-toolbar{flex-direction:column}.filter-select{width:100%}}.modal-overlay{z-index:1000;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#00000073;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.logout-modal{text-align:center;background:var(--card-bg,#fff);width:min(420px,100%);color:var(--text-color,#222);border:1px solid var(--border-color,#e5e7eb);border-radius:18px;padding:32px;animation:.2s ease-out logoutModalIn;box-shadow:0 20px 50px #0003}.logout-icon{background:var(--surface-color,#f3f4f6);border-radius:50%;justify-content:center;align-items:center;width:52px;height:52px;margin:0 auto 16px;font-size:26px;display:flex}.logout-modal h2{margin:0 0 10px;font-size:24px}.logout-modal p{opacity:.75;max-width:320px;margin:0 auto 24px;line-height:1.6}.logout-actions{justify-content:center;gap:12px;display:flex}.logout-actions button{min-width:120px}.logout-confirm-button{font:inherit;cursor:pointer;color:#fff;background:#b42318;border:none;border-radius:10px;padding:11px 20px;font-weight:600;transition:transform .15s,opacity .15s}.logout-confirm-button:hover{opacity:.9;transform:translateY(-1px)}.logout-button{font-weight:600}@keyframes logoutModalIn{0%{opacity:0;transform:translateY(-8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}
