:root{--bg:#f7f7f5;--panel:#fff;--ink:#1c2733;--muted:#66707c;--line:#e3e4e0;--accent:#0e5a8a;--accent-soft:#e8f1f7;--revenue:#1a6b4a;--expense:#8a3d0e;--danger:#b3372f;--radius:6px;font-family:Segoe UI,system-ui,-apple-system,sans-serif}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);margin:0;font-size:14px}#root{flex-direction:column;min-height:100vh;display:flex}.topbar{background:var(--accent);color:#fff;align-items:center;gap:24px;height:48px;padding:0 20px;display:flex}.topbar .brand{letter-spacing:.02em;font-weight:600}.topbar nav{gap:4px;display:flex}.topbar nav a{color:#d5e5f0;border-radius:var(--radius);padding:6px 12px;text-decoration:none}.topbar nav a.active{color:#fff;background:#ffffff2e}.topbar nav a:hover{color:#fff}.topbar .who{color:#bcd3e2;margin-left:auto;font-size:12px}.page{width:100%;max-width:1600px;margin:0 auto;padding:20px}.page h1{margin:0 0 16px;font-size:20px}.page h2{margin:24px 0 8px;font-size:16px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:16px;padding:16px}.toolbar{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;display:flex}.toolbar label{color:var(--muted);font-size:13px}.seg{flex-wrap:wrap;align-items:center;gap:4px;display:inline-flex}.seg>.seg-label{color:var(--muted);font-size:13px}.seg button{font-variant-numeric:tabular-nums}.seg button.active{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.seg button.active:hover{color:#fff;filter:brightness(1.1)}.muted{color:var(--muted)}.error{color:var(--danger)}select,input[type=text],input[type=number]{border:1px solid var(--line);border-radius:var(--radius);font:inherit;color:var(--ink);background:#fff;padding:5px 8px}select:focus,input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}button{border:1px solid var(--line);border-radius:var(--radius);color:var(--ink);font:inherit;cursor:pointer;background:#fff;padding:6px 12px}button:hover{border-color:var(--accent);color:var(--accent)}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.primary:hover{filter:brightness(1.1);color:#fff}button.danger{color:var(--danger)}button:disabled{opacity:.5;cursor:default}button.small{padding:2px 8px;font-size:12px}table.data{border-collapse:collapse;background:var(--panel);font-variant-numeric:tabular-nums;width:100%}table.data th,table.data td{border:1px solid var(--line);text-align:left;padding:4px 8px}table.data th{white-space:nowrap;z-index:2;background:#eef0ee;font-size:12px;font-weight:600;position:sticky;top:0}table.data td.num,table.data th.num{text-align:right}table.data tr.subtotal td{background:#f3f4f1;font-weight:600}table.data tr.grand td{background:var(--accent-soft);font-weight:700}table.data tr.section td{text-transform:uppercase;letter-spacing:.04em;background:#e9edf0;font-size:12px;font-weight:700}.scroll-x{overflow-x:auto}.ws input.cell{text-align:right;border:1px solid var(--line);font-variant-numeric:tabular-nums;background:#fff;border-radius:3px;width:78px;padding:3px 4px}.ws input.cell:hover{border-color:var(--accent)}.ws input.cell:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft);background:#fff}.ws input.cell.computed{color:var(--muted);background:#f3f4f1;border-color:#0000}.ws input.cell.computed:hover{border-color:var(--line)}.ws input.cell.annual{width:90px;font-weight:600}.ws td.acct{vertical-align:middle}.ws .acct-line{align-items:baseline;gap:6px;display:flex}.ws .acct-name{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.ws .acct-line .items-link{flex:none}.ws .code{color:var(--muted);margin-right:6px;font-size:12px}.ws td.cmp{color:var(--muted);background:#fafaf8}.ws .rev{color:var(--revenue)}.ws .exp{color:var(--expense)}.page.wide{max-width:none}.ws td,.ws th{padding:2px 4px}.ws input.cell{width:58px;padding:2px;font-size:12px}.ws input.cell.annual{width:72px}.ws td.num,.ws td.cmp,.ws th.num{font-size:12px}.ws th.acctcol,.ws td.acct{width:var(--acct-w,220px);min-width:var(--acct-w,220px);max-width:var(--acct-w,220px);z-index:2;box-shadow:1px 0 0 var(--line);background:#fff;position:sticky;left:0}.ws thead th.acctcol{z-index:4;background:#eef0ee;padding-right:10px}.ws th.modecol,.ws td.modecol{width:var(--mode-w,210px);min-width:var(--mode-w,210px);max-width:var(--mode-w,210px);white-space:nowrap;overflow:hidden}.ws th.modecol{padding-right:10px;position:relative}.ws th.acctcol .col-resizer,.ws th.modecol .col-resizer{cursor:col-resize;-webkit-user-select:none;user-select:none;width:7px;height:100%;position:absolute;top:0;right:0}.ws th.acctcol .col-resizer:hover,.ws th.modecol .col-resizer:hover{background:var(--accent);opacity:.4}.mode-btn{border:1px solid var(--line);cursor:pointer;color:var(--muted);background:#fff;border-radius:3px;padding:1px 6px;font-size:11px}.mode-btn.auto{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}.items-link{color:var(--accent);white-space:nowrap;font-size:12px;text-decoration:none}.note-btn{cursor:pointer;color:var(--line);background:0 0;border:none;padding:0 2px;font-size:12px}.note-btn:hover,.note-btn.has-note{color:var(--accent)}.notes-row td{background:var(--accent-soft);padding:4px 10px;font-size:12px}.notes-row input{border:1px solid var(--line);border-radius:4px;width:min(480px,60%);padding:3px 8px;font-size:12px}.save-state{color:var(--muted);white-space:nowrap;margin-left:4px;font-size:11px}.save-state.saving{color:var(--accent)}.save-state.error{color:var(--danger)}.chip{background:#fff8e1;border:1px solid #e5d28a;border-radius:12px;align-items:center;gap:8px;padding:2px 10px;font-size:12px;display:inline-flex}.chip button{color:var(--accent);border:none;padding:0;text-decoration:underline}.grid-hint{color:var(--muted);margin:0 0 8px;font-size:12px}.grid-hint kbd{font:inherit;border:1px solid var(--line);background:#fff;border-bottom-width:2px;border-radius:3px;padding:0 4px}.grid-note{border-radius:var(--radius);border:1px solid var(--line);background:var(--panel);align-items:center;gap:8px;margin:0 0 8px;padding:6px 10px;font-size:13px;display:flex}.grid-note.ok{background:#eef7f1;border-color:#bcd9c8}.grid-note.warn{background:#fff8e1;border-color:#e5d28a}.grid-note.error{color:var(--danger);background:#fdefee;border-color:#e0b0ac}.grid-note button{margin-left:auto}.steps{gap:8px;margin-bottom:16px;display:flex}.steps .step{color:var(--muted);background:#eee;border-radius:12px;padding:4px 12px;font-size:12px}.steps .step.active{background:var(--accent);color:#fff}.steps .step.done{background:var(--accent-soft);color:var(--accent)}.dropzone{border:2px dashed var(--line);border-radius:var(--radius);text-align:center;color:var(--muted);cursor:pointer;padding:40px}.dropzone:hover,.dropzone.drag-over{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.raw-preview td,.raw-preview th{text-overflow:ellipsis;white-space:nowrap;max-width:160px;font-size:12px;overflow:hidden}tr.header-candidate{cursor:pointer}tr.header-candidate:hover td{background:var(--accent-soft)}tr.header-chosen td{background:var(--accent-soft);font-weight:600}.tiles{flex-wrap:wrap;gap:16px;margin-bottom:16px;display:flex}.tile{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);min-width:180px;padding:12px 20px}.tile .label{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px}.tile .value{font-variant-numeric:tabular-nums;margin-top:4px;font-size:22px;font-weight:700}.tile .value.rev{color:var(--revenue)}.tile .value.exp{color:var(--expense)}:root{--viz-grid:#e1e0d9;--viz-axis:#c3c2b7;--viz-budget:#0e5a8a;--viz-actual:#eb6834;--viz-fav:#2a78d6;--viz-unfav:#b3372f}.charts{grid-template-columns:repeat(auto-fit,minmax(440px,1fr));align-items:start;gap:16px;display:grid}.charts .panel{margin-bottom:0}.chart-title{margin:0 0 8px;font-size:13px;font-weight:600}.chart-plot{position:relative}.chart-svg{width:100%;height:auto;display:block;overflow:visible}.chart-svg:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.chart-legend{flex-wrap:wrap;align-items:center;gap:14px;margin-bottom:8px;font-size:12px;display:flex}.chart-legend .key{align-items:center;gap:6px;display:inline-flex}.chart .grid-line{stroke:var(--viz-grid);stroke-width:1px}.chart .axis-line,.chart .crosshair{stroke:var(--viz-axis);stroke-width:1px}.chart .tick{fill:var(--muted);font-size:11px}.chart .end-label{fill:var(--ink);font-size:11px;font-weight:600}.chart .end-label.inside{fill:var(--panel)}.chart .cat-label{fill:var(--ink);font-size:12px}.chart .num{font-variant-numeric:tabular-nums}.chart .line{fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.chart .line.budget{stroke:var(--viz-budget)}.chart .line.actual{stroke:var(--viz-actual)}.chart .mark.budget{fill:var(--viz-budget)}.chart .mark.actual{fill:var(--viz-actual)}.chart .mark.fav{fill:var(--viz-fav)}.chart .mark.unfav{fill:var(--viz-unfav)}.chart .mark.ringed{stroke:var(--panel);stroke-width:2px}.chart .hit{fill:#0000}.chart .bar-row.active .hit{fill:var(--accent-soft)}.chart-tip{pointer-events:none;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);white-space:nowrap;z-index:3;padding:6px 10px;font-size:12px;position:absolute;top:2px;box-shadow:0 2px 8px #1c27331f}.chart-tip .tip-head{color:var(--muted);margin-bottom:4px;font-size:11px}.chart-tip .tip-row{align-items:center;gap:6px;display:flex}.chart-tip .tip-val{font-variant-numeric:tabular-nums;font-weight:600}.chart-tip .swatch{border-radius:2px;width:14px;height:3px;display:inline-block}.chart-tip .swatch.budget{background:var(--viz-budget)}.chart-tip .swatch.actual{background:var(--viz-actual)}.chart-table{margin-top:10px;font-size:12px}.chart-table summary{cursor:pointer;color:var(--accent)}.chart-table table.data{margin-top:6px}.chart-table table.data th{position:static}.charts.stale{opacity:.55;transition:opacity .12s linear}.tabs{border-bottom:2px solid var(--line);gap:2px;margin-bottom:16px;display:flex}.tabs button{color:var(--muted);background:0 0;border:none;border-radius:0;padding:8px 16px}.tabs button.active{color:var(--accent);border-bottom:2px solid var(--accent);margin-bottom:-2px;font-weight:600}.view-tabs{margin-bottom:12px}.view-tabs button:disabled{color:var(--muted);border-bottom-color:#0000}table.data th.group{text-align:center;border-bottom:1px solid var(--line);font-weight:600}form.inline{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.login-wrap{justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex}.login{flex-direction:column;gap:12px;width:320px;display:flex}.login h1{margin:0;font-size:20px}.login label{color:var(--muted);flex-direction:column;gap:4px;font-size:13px;display:flex}.login input{font-size:14px}.login button{margin-top:4px}.topbar .logout{color:#eaf2f8;background:0 0;border-color:#fff6;margin-left:12px}.topbar .logout:hover{color:#fff;border-color:#fff}
