:root{--bg:#f6f7f9;--surface:#fff;--text:#1f2937;--text-muted:#6b7280;--border:#e5e7eb;--primary:#4f46e5;--primary-hover:#4338ca;--income:#10b981;--income-bg:#d1fae5;--expense:#ef4444;--expense-bg:#fee2e2;--transfer:#6b7280;--transfer-bg:#e5e7eb;--shadow-sm:0 1px 2px #0000000d;--shadow-md:0 4px 6px -1px #00000014, 0 2px 4px -2px #0000000d;--shadow-lg:0 10px 15px -3px #00000014, 0 4px 6px -4px #0000000d;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:15px;line-height:1.5}*{box-sizing:border-box}body{min-height:100vh;margin:0}h1,h2,h3{color:var(--text);margin:0;font-weight:600}button{font:inherit;cursor:pointer}input,select{font:inherit}.app{max-width:1100px;margin:0 auto;padding:32px 24px 64px}.app-loading{min-height:100vh;color:var(--text-muted);justify-content:center;align-items:center;display:flex}.login-screen{background:var(--bg);justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.login-card{background:var(--surface);border:1px solid var(--border);width:100%;max-width:380px;box-shadow:var(--shadow-md);border-radius:12px;padding:32px}.login-card h1{margin-bottom:8px;font-size:24px}.login-sub{color:var(--text-muted);margin-bottom:20px;font-size:14px}.login-card form label{color:var(--text-muted);margin-bottom:6px;font-size:13px;font-weight:500;display:block}.login-card form input{border:1px solid var(--border);border-radius:8px;width:100%;margin-bottom:12px;padding:10px 12px;font-size:14px}.login-card form input:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px #4f46e526}.login-card .primary{background:var(--primary);color:#fff;cursor:pointer;border:none;border-radius:8px;width:100%;padding:10px 16px;font-size:14px;font-weight:500;transition:background .15s}.login-card .primary:hover:not(:disabled){background:var(--primary-hover)}.login-card .primary:disabled{cursor:wait;background:#a5b4fc}.login-card .error{background:var(--expense-bg);color:var(--expense);border-radius:6px;margin-bottom:12px;padding:8px 12px;font-size:13px}.login-card .hint{color:var(--text-muted);margin-top:16px;font-size:12px}.link-btn{color:var(--primary);cursor:pointer;background:0 0;border:none;margin-top:12px;padding:8px 0;font-size:13px}.link-btn:hover{text-decoration:underline}.user-chip{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;background:#f3f4f6;border-radius:6px;align-items:center;gap:6px;max-width:200px;padding:6px 10px;font-size:12px;display:inline-flex;overflow:hidden}.sync-dot{background:var(--primary);border-radius:50%;width:6px;height:6px;animation:1.4s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:.4}50%{opacity:1}}.app-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:32px;display:flex}.app-header h1{letter-spacing:-.5px;font-size:28px}.header-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.header-actions button,.import-btn{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 14px;font-size:14px;transition:background .15s,border-color .15s}.header-actions button:hover,.import-btn:hover{background:#f3f4f6;border-color:#d1d5db}.import-btn{cursor:pointer;display:inline-block}.month-selector{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;padding:8px 12px;font-size:14px}.summary-cards{grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:24px;display:grid}.card{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-sm);border-radius:12px;padding:20px}.card-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px;font-size:13px}.card-value{letter-spacing:-.5px;font-size:28px;font-weight:600}.card-income .card-value{color:var(--income)}.card-expense .card-value{color:var(--expense)}.card-balance.positive .card-value{color:var(--income)}.card-balance.negative .card-value{color:var(--expense)}.chart-section{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-sm);border-radius:10px;margin-bottom:16px;padding:20px}.chart-header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.chart-header h2{font-size:16px;font-weight:600}.chart-toggle{width:220px}.chart-body{align-items:center;gap:24px;display:flex}.pie{flex-shrink:0;width:220px;height:220px}.pie path{cursor:pointer;transform-origin:50%;transition:opacity .15s,transform .15s}.pie.has-hover path:not(.hovered){opacity:.4}.pie path.hovered{transform:scale(1.03)}.chart-legend{flex:1;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:4px 16px;max-height:220px;margin:0;padding:0;list-style:none;display:grid;overflow-y:auto}.chart-legend li{cursor:pointer;border-radius:4px;grid-template-columns:14px 1fr auto auto;align-items:center;gap:8px;padding:4px 6px;font-size:13px;transition:background .15s;display:grid}.chart-legend li:hover,.chart-legend li.hovered{background:#f3f4f6}.chart-legend .swatch{border-radius:3px;width:12px;height:12px;display:inline-block}.chart-legend .cat-name{color:var(--text);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.chart-legend .cat-amt{color:var(--text);font-variant-numeric:tabular-nums;font-weight:500}.chart-legend .cat-pct{color:var(--text-muted);font-variant-numeric:tabular-nums;text-align:right;min-width:42px;font-size:12px}@media (width<=640px){.chart-header{flex-direction:column;align-items:stretch}.chart-toggle{width:100%}.chart-body{flex-direction:column;align-items:stretch}.pie{align-self:center}.chart-legend{grid-template-columns:1fr;max-height:none}}.controls{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.controls-left{flex-wrap:wrap;gap:8px;display:flex}.add-btn{background:var(--primary);color:#fff;border:none;border-radius:8px;padding:10px 18px;font-size:14px;font-weight:500;transition:background .15s}.add-btn:hover{background:var(--primary-hover)}.upload-btn{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:10px 18px;font-size:14px;font-weight:500;transition:background .15s,border-color .15s}.upload-btn:hover:not(:disabled){background:#f3f4f6;border-color:#d1d5db}.upload-btn:disabled{opacity:.6;cursor:wait}.upload-error{background:var(--expense-bg);color:var(--expense);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;padding:10px 14px;font-size:13px;display:flex}.upload-error button{color:var(--expense);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:20px;line-height:1}.filter-chips{background:var(--surface);border:1px solid var(--border);border-radius:10px;gap:6px;padding:4px;display:flex}.chip{color:var(--text-muted);background:0 0;border:none;border-radius:6px;padding:6px 14px;font-size:13px;font-weight:500;transition:background .15s,color .15s}.chip:hover{color:var(--text)}.chip.active{background:var(--primary);color:#fff}.table-wrap{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-sm);border-radius:12px;overflow:hidden}.entry-table{border-collapse:collapse;width:100%}.entry-table th,.entry-table td{text-align:left;border-bottom:1px solid var(--border);padding:12px 16px;font-size:14px}.entry-table th{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;background:#f9fafb;font-size:12px;font-weight:500}.entry-table tbody tr:last-child td{border-bottom:none}.entry-table tbody tr:hover{background:#fafbfc}.entry-table .num{text-align:right;font-variant-numeric:tabular-nums}.entry-table .amount{font-weight:600}.amount-income{color:var(--income)}.amount-expense{color:var(--expense)}.amount-transfer{color:var(--transfer)}.type-badge{text-transform:capitalize;border-radius:4px;padding:2px 8px;font-size:12px;font-weight:500;display:inline-block}.type-income{background:var(--income-bg);color:var(--income)}.type-expense{background:var(--expense-bg);color:var(--expense)}.type-transfer{background:var(--transfer-bg);color:var(--transfer)}.desc{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;max-width:240px;overflow:hidden}.actions{text-align:right;white-space:nowrap}.actions button{color:var(--text-muted);border:1px solid var(--border);background:0 0;border-radius:6px;margin-left:6px;padding:4px 10px;font-size:12px;transition:all .15s}.actions button:hover{color:var(--text);background:#f3f4f6}.empty{background:var(--surface);border:1px dashed var(--border);text-align:center;color:var(--text-muted);border-radius:12px;padding:64px 24px}.modal-backdrop{z-index:100;background:#11182780;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal{background:var(--surface);width:100%;max-width:440px;max-height:90vh;box-shadow:var(--shadow-lg);border-radius:12px;padding:24px;overflow-y:auto}.modal h2{margin-bottom:20px;font-size:20px}.form-row{margin-bottom:14px}.form-row label{color:var(--text-muted);margin-bottom:6px;font-size:13px;font-weight:500;display:block}.form-row input,.form-row select{border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text);border-radius:8px;padding:8px 12px;font-size:14px}.form-row input:focus,.form-row select:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px #4f46e526}.type-toggle{background:#f3f4f6;border-radius:8px;grid-template-columns:1fr 1fr;gap:6px;padding:4px;display:grid}.type-toggle-3{grid-template-columns:1fr 1fr 1fr}.type-toggle button{color:var(--text-muted);background:0 0;border:none;border-radius:6px;padding:8px;font-size:14px;font-weight:500;transition:background .15s,color .15s}.type-toggle button.active{background:var(--surface);color:var(--text);box-shadow:var(--shadow-sm)}.error{background:var(--expense-bg);color:var(--expense);border-radius:6px;margin-bottom:12px;padding:8px 12px;font-size:13px}.modal-actions{justify-content:flex-end;gap:8px;margin-top:20px;display:flex}.modal-actions button{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 16px;font-size:14px}.modal-actions button:hover{background:#f3f4f6}.modal-actions button.primary{background:var(--primary);color:#fff;border-color:var(--primary)}.modal-actions button.primary:hover{background:var(--primary-hover)}.modal-actions button.primary:disabled{cursor:not-allowed;background:#a5b4fc;border-color:#a5b4fc}.modal-wide{max-width:900px}.key-row{gap:6px;display:flex}.key-row input{border:1px solid var(--border);border-radius:8px;flex:1;padding:8px 12px;font-family:ui-monospace,Menlo,monospace;font-size:14px}.key-row button{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:13px}.key-row button:hover{background:#f3f4f6}.hint{color:var(--text-muted);margin-top:6px;font-size:12px;line-height:1.5}.hint a{color:var(--primary)}.hint code{background:#f3f4f6;border-radius:3px;padding:1px 4px;font-family:ui-monospace,Menlo,monospace;font-size:11px}.review-table-wrap{border:1px solid var(--border);border-radius:8px;max-height:60vh;margin-top:8px;overflow:auto}.review-table{border-collapse:collapse;width:100%;font-size:13px}.review-table th{text-align:left;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--border);background:#f9fafb;padding:8px 10px;font-size:11px;font-weight:500;position:sticky;top:0}.review-table td{border-bottom:1px solid var(--border);padding:6px 10px}.review-table tbody tr:last-child td{border-bottom:none}.review-table tr.excluded{opacity:.4}.review-table input,.review-table select{border:1px solid var(--border);background:var(--surface);border-radius:6px;width:100%;padding:6px 8px;font-size:13px}.review-table input[type=checkbox]{width:auto;margin:0}.review-table input[type=number]{text-align:right;font-variant-numeric:tabular-nums}.review-table .num{width:110px}.cat-section{margin-bottom:20px}.cat-section h3{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:10px;font-size:14px}.cat-list{flex-wrap:wrap;gap:6px;margin:0 0 10px;padding:0;list-style:none;display:flex}.cat-list li{background:#f3f4f6;border-radius:6px;align-items:center;gap:6px;padding:4px 4px 4px 10px;font-size:13px;display:inline-flex}.cat-list li button{width:20px;height:20px;color:var(--text-muted);background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:0;font-size:16px;line-height:1;display:flex}.cat-list li button:hover{background:var(--expense-bg);color:var(--expense)}.cat-add{gap:6px;display:flex}.cat-add input{border:1px solid var(--border);border-radius:8px;flex:1;padding:8px 12px;font-size:14px}.cat-add button{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:8px 14px;font-size:14px}.cat-add button:hover{background:#f3f4f6}@media (width<=640px){.app{padding:20px 12px 48px}.summary-cards{grid-template-columns:1fr}.card-value{font-size:24px}.entry-table th,.entry-table td{padding:10px 8px;font-size:13px}.entry-table .desc,.entry-table th:nth-child(5){display:none}.controls{flex-direction:column;align-items:stretch}.add-btn{width:100%}}
