:root{--bg: #1a1a1a;--bg-panel: #232323;--bg-cell: #2a2a2a;--bg-cell-hover: #333;--bg-header: #1e1e1e;--fg: #e0e0e0;--fg-dim: #999;--fg-faint: #666;--border: #383838;--green: #4ade80;--green-dim: #22c55e33;--red: #f87171;--red-dim: #ef444433;--blue: #60a5fa;--blue-dim: #3b82f633;--yellow: #fbbf24;--orange: #fb923c;--header-h: 32px;--row-h: 28px;--label-w: 200px;--month-w: 120px;--sub-w: 60px;--font-mono: ui-monospace, "SF Mono", "Cascadia Code", "Source Code Pro", monospace;--font-ui: -apple-system, system-ui, sans-serif}*{margin:0;padding:0;box-sizing:border-box}body{font-family:var(--font-ui);background:var(--bg);color:var(--fg);font-size:13px;line-height:1.4;-webkit-font-smoothing:antialiased}button{font-family:var(--font-ui);font-size:12px;color:var(--fg);background:var(--bg-cell);border:1px solid var(--border);padding:4px 10px;border-radius:4px;cursor:pointer;transition:background .15s}button:hover{background:var(--bg-cell-hover)}button:active{background:var(--bg-panel)}button.active{background:var(--blue-dim);border-color:var(--blue)}input,select{font-family:var(--font-ui);font-size:13px;color:var(--fg);background:var(--bg);border:1px solid var(--border);padding:4px 8px;border-radius:3px;outline:none}input:focus,select:focus{border-color:var(--blue)}input[type=number]{font-family:var(--font-mono);text-align:right;-moz-appearance:textfield}input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none}.app-bar{display:flex;align-items:center;gap:12px;padding:8px 16px;background:var(--bg-panel);border-bottom:1px solid var(--border);height:48px}.app-bar h1{font-size:16px;font-weight:600;white-space:nowrap}.app-bar .spacer{flex:1}.toolbar{display:flex;align-items:center;gap:8px;padding:6px 16px;background:var(--bg-panel);border-bottom:1px solid var(--border)}.sheet-wrap{overflow:auto;flex:1}.sheet{border-collapse:collapse;table-layout:fixed;width:max-content;min-width:100%}.sheet th,.sheet td{border-right:1px solid var(--border);border-bottom:1px solid var(--border);height:var(--row-h);padding:0;vertical-align:middle}.sheet th{background:var(--bg-header);color:var(--fg-dim);font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.5px;position:sticky;top:0;z-index:5;text-align:center;height:var(--header-h);white-space:nowrap;overflow:hidden}.sheet th.label-col,.sheet td.label-col{width:var(--label-w);min-width:var(--label-w);left:0;z-index:4;text-align:left;padding:0 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:var(--bg-header);position:sticky}.sheet td.label-col{background:var(--bg-panel)}.sheet th.month-col{width:var(--month-w);min-width:var(--month-w)}.sheet th.sub-col{width:var(--sub-w);min-width:var(--sub-w);font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.5px;text-align:center;height:20px;padding:0}.sheet th.sub-budget{color:var(--blue)}.sheet th.sub-realized{color:var(--green)}.sheet td.sub-cell{width:var(--sub-w);min-width:var(--sub-w);max-width:var(--sub-w)}.sheet td.month-cell{text-align:right;padding:0 4px;background:var(--bg-cell);cursor:text}.sheet td.month-cell:hover{background:var(--bg-cell-hover)}.sheet td.month-cell input{width:100%;height:100%;border:none;background:transparent;text-align:right;padding:0 4px;font-family:var(--font-mono);font-size:10px;box-sizing:border-box}.sheet td.month-cell input:focus{background:var(--blue-dim);outline:1px solid var(--blue)}.sheet td.month-cell .display{display:block;padding:0 4px;font-family:var(--font-mono);font-size:10px;line-height:var(--row-h);color:var(--fg);cursor:text;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sheet td.month-cell.empty .display{color:var(--fg-faint)}.sheet td.reconciled{background:var(--green-dim)}.sheet td.reconciled:hover{background:#22c55e44}.sheet td.reconciled .display{color:var(--green)}.sheet td.cell-selected{outline:2px solid var(--blue);outline-offset:-2px;background:var(--blue-dim)!important}.sheet td.month-cell .display.pos{color:var(--green)}.sheet td.month-cell .display.neg{color:var(--red)}.sheet td.group-row{background:var(--bg-header);font-weight:600;font-size:12px;cursor:pointer;-webkit-user-select:none;user-select:none}.sheet td.group-row:hover{background:var(--bg-panel)}.sheet td.group-row .arrow{display:inline-block;width:14px;text-align:center}.sheet td.group-row .group-name{color:var(--fg)}.sheet td.group-cell-total{text-align:right;padding:0 8px;font-family:var(--font-mono);font-size:12px;background:var(--bg-header);color:var(--fg-dim)}.sheet td.cat-row{padding-left:24px}.sheet .recurring-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;margin-right:4px;font-size:14px;line-height:1;color:var(--fg-faint);background:transparent;border:none;border-radius:3px;cursor:pointer;padding:0;vertical-align:middle;transition:color .15s,background .15s}.sheet .recurring-icon:hover{color:var(--blue);background:var(--blue-dim)}.recurring-modal{max-width:420px}.radio-pill{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--fg);cursor:pointer;padding:2px 8px;border:1px solid var(--border);border-radius:4px;background:var(--bg-cell)}.radio-pill input{margin:0}.mini-btn{font-size:11px;padding:2px 8px}.recurring-months{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px;max-height:200px;overflow-y:auto}.month-chip{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--fg-dim);cursor:pointer;padding:3px 8px;border:1px solid var(--border);border-radius:4px;background:var(--bg-cell);-webkit-user-select:none;user-select:none}.month-chip.active{color:var(--blue);border-color:var(--blue);background:var(--blue-dim)}.month-chip input{display:none}.sheet td.add-row{cursor:pointer;color:var(--fg-faint);font-style:italic;background:var(--bg-panel)}.sheet td.add-row:hover{color:var(--blue);background:var(--bg-cell-hover)}.sheet td.cashflow-label{background:var(--bg-header);font-weight:700;font-size:10px;border-top:2px solid var(--border)}.sheet td.cashflow-cell{text-align:right;padding:0 4px;font-family:var(--font-mono);font-size:10px;font-weight:600;background:var(--bg-header);border-top:2px solid var(--border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sheet td.cashflow-cell.pos{color:var(--green)}.sheet td.cashflow-cell.neg{color:var(--red)}.sheet td.cashflow-cell.sub-budget{border-left:1px solid var(--border)}.sheet th .month-name{font-size:12px;text-transform:none;letter-spacing:0;color:var(--fg)}.sheet th .year-name{font-size:10px;color:var(--fg-faint)}.sheet th.current-month{border-bottom:2px solid var(--blue)}.sheet th.current-month .month-name{color:var(--blue)}.sheet th.month-col{cursor:pointer;position:relative}.sheet th.month-col:hover{background:var(--bg-cell-hover)}.sheet th.month-reconciled{border-bottom:2px solid var(--green)}.sheet th.month-reconciled .month-name{color:var(--green)}.sheet th.month-unreconciled{border-bottom:2px solid var(--orange)}.sheet th.month-unreconciled .month-name{color:var(--orange)}.sheet th .reconcile-dot{width:6px;height:6px;border-radius:50%;margin:2px auto 0}.sheet th .dot-reconciled{background:var(--green)}.sheet th .dot-unreconciled{background:var(--orange)}.type-income{color:var(--green)}.type-expense{color:var(--red)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;padding:20px;min-width:360px;max-width:500px}.modal h3{margin-bottom:12px;font-size:15px}.modal .field{margin-bottom:10px}.modal .field label{display:block;font-size:11px;color:var(--fg-dim);margin-bottom:4px;text-transform:uppercase;letter-spacing:.5px}.modal .field input,.modal .field select{width:100%}.modal .actions{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.modal .actions button{min-width:70px}.modal.info-modal{max-width:620px;max-height:80vh;overflow-y:auto}.info-body{font-size:13px;line-height:1.6;color:var(--fg)}.info-body p{margin:0}.info-spacer{height:8px}.dim{color:var(--fg-dim)}.muted{font-size:11px;color:var(--fg-faint)}.no-data{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;gap:16px}.no-data h2{font-size:18px;color:var(--fg-dim)}.no-data p{color:var(--fg-faint);max-width:400px}tr.dragging{opacity:.4}tr.drag-over-cat{border-top:2px solid var(--blue)}tr.drag-over-group>td.label-col{background:var(--blue-dim)}tr.drag-over-end>td.label-col{border-top:2px solid var(--blue);background:var(--blue-dim)}tr.group-dragging{opacity:.4}tr.group-drag-over>td.label-col{border-top:2px solid var(--blue)}.group-row{cursor:grab}.group-row:active{cursor:grabbing}.cat-row{cursor:grab}.cat-row:active{cursor:grabbing}.cloud-status{font-size:.8em;cursor:pointer;padding:2px 6px;border-radius:4px;white-space:nowrap}.cloud-status:hover{background:#ffffff1a}.version-list{max-height:250px;overflow-y:auto;border:1px solid var(--border, #333);border-radius:4px;padding:4px}.version-item{display:flex;align-items:center;gap:8px;padding:4px 8px;cursor:pointer}.version-item:hover{background:#ffffff0d}.version-item input[type=radio]{cursor:pointer}.form-group{margin-bottom:12px}.form-group label{display:block;font-size:.85em;margin-bottom:4px;color:#aaa}.form-group input{width:100%;padding:6px 8px;border:1px solid var(--border, #333);border-radius:4px;background:var(--bg-input, #1a1a1a);color:var(--text, #eee);box-sizing:border-box}
