:root{--bg:#0f1419;--bg-elevated:#1a222c;--bg-row:#151c24;--bg-group:#1e2833;--border:#2a3644;--text:#e8eef4;--muted:#8b9aab;--accent:#3d9cf0;--accent-hover:#5aadf5;--danger:#e85d5d;--ok:#3ecf8e;--input:#0c1015;--total:#c9a227;--shadow:0 8px 32px rgba(0,0,0,0.35);--radius:10px;--font:"Segoe UI",system-ui,-apple-system,sans-serif;--mono:"JetBrains Mono","SF Mono",ui-monospace,monospace}*{box-sizing:border-box}body,html{margin:0;padding:0;min-height:100%;background:var(--bg);color:var(--text);font-family:var(--font);font-size:14px;line-height:1.4}a{color:var(--accent);text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}.app-shell{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 20px;border-bottom:1px solid var(--border);background:var(--bg-elevated);position:-webkit-sticky;position:sticky;top:0;z-index:20}.ledger-nav{display:flex;gap:4px;margin-bottom:6px}.ledger-nav-link{font-size:13px;font-weight:600;color:var(--muted);text-decoration:none;padding:4px 10px;border-radius:6px;border:1px solid transparent}.ledger-nav-link:hover{color:var(--text);background:var(--input)}.ledger-nav-link.active{color:var(--text);background:var(--bg-row);border-color:var(--border)}.topbar h1{margin:0;font-size:17px;font-weight:650;letter-spacing:.01em}.topbar .meta{color:var(--muted);font-size:13px}.topbar-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.btn{border:1px solid var(--border);background:var(--bg-row);color:var(--text);border-radius:8px;padding:7px 12px;transition:background .15s,border-color .15s}.btn:hover{background:#1c2733}.btn-primary,.btn:hover{border-color:var(--accent)}.btn-primary{background:var(--accent);color:#061018;font-weight:600}.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn-ghost{background:transparent}.btn-danger{color:var(--danger);border-color:#5a2e2e}.btn:disabled{opacity:.5;cursor:not-allowed}.main{padding:16px 20px 40px;flex:1 1;overflow:auto}.login-page{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(ellipse at top,#1a2a3d 0,transparent 55%),var(--bg)}.login-card{width:min(400px,100%);background:var(--bg-elevated);border:1px solid var(--border);border-radius:14px;padding:28px 24px;box-shadow:var(--shadow)}.login-card h1{margin:0 0 6px;font-size:22px}.login-card p{margin:0 0 22px;color:var(--muted)}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.field label{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.field input,.field select,.field textarea{background:var(--input);border:1px solid var(--border);border-radius:8px;padding:10px 12px;outline:none}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent)}.error-banner{background:rgba(232,93,93,.12);border:1px solid rgba(232,93,93,.35);color:#ffb4b4;padding:10px 12px;border-radius:8px;margin-bottom:14px}.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}.toolbar select{background:var(--input);border:1px solid var(--border);border-radius:8px;padding:7px 10px}.grid-wrap{overflow:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-elevated)}table.expense-grid{border-collapse:collapse;width:max-content;min-width:100%}table.expense-grid td,table.expense-grid th{border-bottom:1px solid var(--border);border-right:1px solid var(--border);padding:6px 8px;white-space:nowrap;vertical-align:middle}table.expense-grid th{position:-webkit-sticky;position:sticky;top:0;background:#121920;z-index:5;font-weight:600;font-size:12px;color:var(--muted);text-align:center}table.expense-grid td.sticky-col,table.expense-grid th.sticky-col{position:-webkit-sticky;position:sticky;left:0;z-index:4;background:var(--bg-elevated);text-align:left;min-width:220px;max-width:280px}table.expense-grid th.sticky-col{z-index:6}table.expense-grid tr.group-row td{background:var(--bg-group);font-weight:650}table.expense-grid tr.group-row td.sticky-col{background:var(--bg-group)}table.expense-grid tr.child-row td{background:var(--bg-row)}table.expense-grid tr.child-row td.sticky-col{background:var(--bg-row);padding-left:22px}table.expense-grid tr.total-row td{background:#1a1f14;font-weight:650;color:var(--total)}table.expense-grid tr.total-row td.sticky-col{background:#1a1f14}.cell-input{width:88px;background:transparent;border:1px solid transparent;border-radius:6px;padding:4px 6px;text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-family:var(--mono);font-size:13px}.cell-input:hover{border-color:var(--border);background:var(--input)}.cell-input:focus{border-color:var(--accent);background:var(--input);outline:none}.cell-num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-family:var(--mono);font-size:13px;color:var(--muted)}.cell-num.strong{color:var(--text);font-weight:600}.has-comment{box-shadow:inset 0 -2px 0 var(--accent)}.row-actions{display:inline-flex;gap:4px;margin-left:8px;opacity:.35}tr:hover .row-actions{opacity:1}.icon-btn{border:none;background:transparent;color:var(--muted);padding:2px 5px;border-radius:4px;font-size:12px}.icon-btn:hover{color:var(--text);background:rgba(255,255,255,.06)}.modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.55);display:grid;place-items:center;z-index:50;padding:16px}.modal{width:min(440px,100%);background:var(--bg-elevated);border:1px solid var(--border);border-radius:12px;padding:18px;box-shadow:var(--shadow)}.modal h2{margin:0 0 12px;font-size:16px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.hint{color:var(--muted);font-size:12px;margin-top:4px}.cat-name{display:inline-flex;align-items:center;gap:6px;max-width:100%}.cat-comment{color:var(--muted);font-weight:400;font-size:12px}.badge{display:inline-block;font-size:11px;padding:1px 6px;border-radius:999px;background:rgba(61,156,240,.15);color:var(--accent)}.row-clickable{cursor:pointer}.row-clickable:hover td{filter:brightness(1.08)}.drill-hint{color:var(--accent);font-weight:700;margin-right:4px}.pick-list{list-style:none;margin:0 0 12px;padding:0;max-height:280px;overflow:auto;display:flex;flex-direction:column;gap:6px}.pick-item{width:100%;text-align:left;justify-content:flex-start}.flash-row td{outline:2px solid var(--accent);outline-offset:-2px;transition:outline .3s}a.btn{display:inline-flex;align-items:center;text-decoration:none}.cell-amount-btn{width:100%;min-width:72px;background:transparent;border:1px solid transparent;border-radius:6px;padding:4px 6px;text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-family:var(--mono);font-size:13px;color:var(--muted);cursor:pointer}.cell-amount-btn:hover{border-color:var(--border);background:var(--input);color:var(--text)}.cell-amount-btn.has-value{color:var(--text);font-weight:600}.cell-amount-btn.has-entries{box-shadow:inset 0 -2px 0 var(--accent)}.detail-summary{margin-bottom:12px;display:flex;flex-direction:column;gap:8px}.person-chips{display:flex;flex-wrap:wrap;gap:6px}.entries-table{width:100%;border-collapse:collapse;margin-bottom:14px;font-size:13px}.entries-table td,.entries-table th{text-align:left;padding:6px 8px;border-bottom:1px solid var(--border)}.entries-table th{color:var(--muted);font-weight:600;font-size:11px;text-transform:uppercase}.entry-comment{color:var(--muted);max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.person-tag{display:inline-block;padding:2px 8px;border-radius:999px;font-size:12px;font-weight:600}.entry-form{border-top:1px solid var(--border);padding-top:12px;margin-top:4px}.entry-form-title{margin:0 0 10px;font-size:14px}.modal{width:min(520px,100%)}.person-split-section{margin-top:8px}.person-donut-wrap{position:relative;margin:4px 0 16px}.person-donut-center,.person-donut-wrap{display:flex;justify-content:center;align-items:center}.person-donut-center{position:absolute;inset:0;flex-direction:column;pointer-events:none}.person-donut-total{font-size:16px;font-weight:700;letter-spacing:-.02em}.person-donut-label{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.person-split-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.person-split-row{display:grid;grid-template-columns:12px 56px 1fr auto;grid-gap:8px;gap:8px;align-items:center;font-size:13px}.person-split-name{font-weight:600}.person-split-bar-track{height:8px;background:#1e2832;border-radius:999px;overflow:hidden}.person-split-bar-fill{display:block;height:100%;border-radius:999px;min-width:0}.person-split-amt{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap}.charts-section{margin-top:28px;padding-top:8px}.charts-heading{margin:0 0 14px;font-size:16px;font-weight:650}.charts-grid{display:grid;grid-template-columns:minmax(260px,1fr) minmax(320px,1.6fr);grid-gap:14px;gap:14px}@media (max-width:960px){.charts-grid{grid-template-columns:1fr}}.chart-card{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px 16px}.chart-title{margin:0 0 12px;font-size:13px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.hbar-list{display:flex;flex-direction:column;gap:10px}.hbar-row{display:grid;grid-template-columns:110px 1fr minmax(90px,auto);grid-gap:8px;gap:8px;align-items:center}.hbar-label{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hbar-track{height:18px;background:var(--input);border-radius:6px;overflow:hidden;border:1px solid var(--border)}.hbar-fill{height:100%;border-radius:5px;min-width:2px;transition:width .35s ease}.hbar-value{font-family:var(--mono);font-size:12px;text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;white-space:nowrap}.hbar-share{display:block;color:var(--muted);font-size:11px}.vbar-wrap{overflow-x:auto;margin:0 -4px}.vbar-svg{width:100%;min-width:560px;height:auto;display:block}.chart-legend{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:10px 16px}.chart-legend li{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}.legend-swatch{width:10px;height:10px;border-radius:3px;flex-shrink:0}.legend-sum{margin-left:4px;font-family:var(--mono);font-size:11px;color:var(--text)}.scenario-flow{display:flex;flex-direction:column;gap:16px;max-width:1100px;position:relative;isolation:isolate}.scenario-flow>.chart-card,.scenario-flow>.verdict-bar{position:relative;z-index:0;flex-shrink:0;background:var(--bg-elevated)}.section-title{margin:0 0 6px;font-size:16px;font-weight:650}.section-lead{margin:0 0 14px;color:var(--muted);font-size:13px;line-height:1.45;max-width:62ch}.verdict-bar{border-radius:var(--radius);border:1px solid var(--border);padding:16px 18px 12px;background:var(--bg-elevated);position:relative;z-index:0;box-shadow:none}.verdict-bar.ok{border-color:rgba(62,207,142,.45);background:rgba(62,207,142,.1)}.verdict-bar.bad{border-color:rgba(232,93,93,.45);background:rgba(232,93,93,.1)}.verdict-status{font-size:13px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.verdict-amount{font-family:var(--mono);font-size:28px;font-weight:700;margin:4px 0 6px;letter-spacing:-.02em}.verdict-bar.ok .verdict-amount{color:var(--ok)}.verdict-bar.bad .verdict-amount{color:var(--danger)}.verdict-explain{margin:0 0 12px;color:var(--muted);font-size:13px}.verdict-metrics{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-gap:10px 14px;gap:10px 14px}.verdict-metrics span{display:block;font-size:11px;color:var(--muted);margin-bottom:2px}.verdict-metrics strong{font-family:var(--mono);font-size:14px}.verdict-source{margin:12px 0 0;font-size:12px}.save-bar-row{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;justify-content:space-between}.save-name{flex:1 1;min-width:200px;margin-bottom:0}.save-actions,.scenario-chips{display:flex;flex-wrap:wrap;gap:8px}.scenario-chips{align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.scenario-chip-wrap{display:inline-flex;align-items:center;gap:2px}.scenario-chip{border:1px solid var(--border);background:var(--bg-row);color:var(--text);border-radius:999px;padding:5px 12px;font-size:13px}.scenario-chip.active{border-color:var(--accent);background:rgba(61,156,240,.15)}.chip-x{border:none;background:transparent;color:var(--muted);padding:2px 6px;font-size:16px;line-height:1}.chip-x:hover{color:var(--danger)}.chip-compare{border:none;background:transparent;color:var(--muted);padding:2px 6px;font-size:14px;line-height:1}.chip-compare.active,.chip-compare:hover{color:var(--accent)}.verdict-thresholds{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.threshold-pill{border:1px solid var(--border,#334155);border-radius:999px;padding:4px 12px;font-size:13px;color:var(--muted)}.threshold-pill.ok{color:var(--ok,#34d399);border-color:var(--ok,#34d399)}.threshold-pill.bad,.warn-text{color:var(--danger,#f87171)}.compare-table td:not(:first-child),.compare-table th:not(:first-child){text-align:right;white-space:nowrap}.ladder-table{margin:10px 0;max-width:520px}.cost-history{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.intro-note{color:var(--muted);font-size:14px;line-height:1.5;margin:0 0 12px;max-width:720px}.scenario-rates{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));grid-gap:10px 14px;gap:10px 14px;margin-bottom:12px;align-items:end}.f-choice-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));grid-gap:10px;gap:10px;margin-bottom:8px}.f-choice{text-align:left;background:var(--bg-row);border:1px solid var(--border);border-radius:10px;padding:12px 14px;display:flex;flex-direction:column;gap:4px;color:var(--text)}.f-choice.active,.f-choice:hover{border-color:var(--accent)}.f-choice.active{background:rgba(61,156,240,.12);box-shadow:inset 0 0 0 1px var(--accent)}.f-choice-label{font-weight:650;font-size:13px}.f-choice-amt{font-family:var(--mono);font-size:16px;font-weight:700}.f-choice-hint{font-size:12px;color:var(--muted)}.check-row{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted);padding-bottom:10px}.direction-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));grid-gap:12px;gap:12px}.direction-card{background:var(--bg-row);border:1px solid var(--border);border-radius:10px;padding:14px}.direction-card h3{margin:0 0 12px;font-size:15px}.direction-card .field{margin-bottom:10px}.commission-field input[type=range]{width:100%;accent-color:var(--accent)}.range-ends{display:flex;justify-content:space-between;font-size:11px}.dir-mini-result{display:grid;grid-template-columns:1fr 1fr 1fr;grid-gap:8px;gap:8px;margin-top:8px;padding-top:10px;border-top:1px solid var(--border)}.dir-mini-result span{display:block;font-size:11px;color:var(--muted)}.dir-mini-result strong{font-family:var(--mono);font-size:13px}.linkish{border:none;background:none;color:var(--accent);padding:0 0 0 6px;font-size:12px;text-decoration:underline;cursor:pointer}.num-pos{color:var(--ok)!important}.num-neg{color:var(--danger)!important}.horizon-summary{display:flex;flex-wrap:wrap;gap:16px 28px;margin:8px 0 14px}.horizon-summary span{display:block;font-size:12px;color:var(--muted)}.horizon-summary strong{font-size:16px;font-family:var(--mono)}.horizon-table-wrap{margin-bottom:12px}.horizon-table td,.horizon-table th{white-space:nowrap}.horizon-table tr.row-ok td:first-child{box-shadow:inset 3px 0 0 var(--ok)}.horizon-table tr.row-bad td:first-child{box-shadow:inset 3px 0 0 var(--danger)}.horizon-bars{display:flex;align-items:flex-end;gap:6px;height:80px;padding:8px 4px 0;border-top:1px solid var(--border)}.hbar-col{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:4px;min-width:0}.hbar-col span{font-size:10px;color:var(--muted)}.hbar-col-fill{width:100%;max-width:28px;border-radius:4px 4px 0 0}.hbar-col-fill.ok{background:var(--ok)}.hbar-col-fill.bad{background:var(--danger);opacity:.75}.rates-scheme{background:var(--bg-row);border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:14px}.rates-scheme-title{margin:0 0 8px;font-weight:650;font-size:13px}.rates-scheme-steps{margin:0 0 10px;padding-left:18px;color:var(--muted);font-size:13px;line-height:1.45}.rates-scheme-steps li{margin-bottom:4px}.rates-formula{margin:0 0 8px;line-height:1.5}.rates-formula code{font-family:var(--mono);font-size:12px;color:var(--text);background:var(--input);padding:2px 6px;border-radius:4px}.rate-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));grid-gap:12px;gap:12px;margin-bottom:14px}.rate-card{background:var(--bg-row);border:1px solid var(--border);border-radius:10px;padding:12px 14px;display:flex;flex-direction:column;gap:8px}.rate-card .field{margin-bottom:0}.rate-card-how,.rate-card-what{margin:0;font-size:12px;line-height:1.45;color:var(--muted)}.rate-card-how strong,.rate-card-what strong{color:var(--text);font-weight:600}.rate-card-how em{color:var(--accent);font-style:normal;font-weight:600}.rates-footer{display:flex;flex-wrap:wrap;gap:12px 16px;align-items:flex-start}.cost-details{margin-top:10px;color:var(--muted);font-size:13px}.cost-details summary{cursor:pointer;margin-bottom:8px}.scenarios-layout{display:block}.scenario-tabs{display:flex;gap:6px;margin-bottom:4px}.scenario-tab{border:1px solid var(--border);background:var(--bg-row);color:var(--muted);border-radius:8px;padding:8px 14px;font-weight:600;font-size:13px}.scenario-tab.active,.scenario-tab:hover{color:var(--text);border-color:var(--accent)}.scenario-tab.active{background:rgba(61,156,240,.15)}.subhead{margin:4px 0 10px;font-size:13px;font-weight:650;color:var(--muted)}.bench-block{margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--border)}.bench-block:last-of-type{border-bottom:none}.bench-block h3{margin:0 0 6px;font-size:14px}.bench-peers{margin:6px 0 0;padding-left:18px;color:var(--muted);line-height:1.45}.bench-peers,.bench-peers a{font-size:12px}.bench-peer-row{display:grid;grid-template-columns:1.2fr .6fr 1.4fr 1.4fr .6fr auto;grid-gap:8px;gap:8px;align-items:end;margin-bottom:10px;padding-bottom:10px;border-bottom:1px dashed var(--border)}