:root{--bg:#f6f7f9;--surface:#fff;--border:#d7dbe0;--border-strong:#b6bcc4;--text:#1a2129;--text-muted:#5b6472;--accent:#1f4e8c;--accent-soft:#e8eef7;--buy:#0a6e3d;--sell:#b3261e;--warn-bg:#fdf3e0;--warn-border:#d9a53f;--mono:"SF Mono", SFMono-Regular, ui-monospace, "Cascadia Mono", "Roboto Mono", Menlo, Consolas, monospace;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:14px;line-height:1.45}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.app{max-width:1080px;margin:0 auto;padding:24px 20px 80px}.app-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.header-actions{flex-wrap:wrap;gap:8px;display:flex}.settings-anchor{position:relative}.settings-popover{z-index:20;text-align:left;width:340px;max-width:90vw;position:absolute;top:calc(100% + 6px);right:0}.settings-popover .editor-card{box-shadow:0 10px 28px #1a21292e}.settings-popover-left{left:0;right:auto}.check-row-nested{padding-left:24px}.app-header h1{letter-spacing:-.01em;margin:0;font-size:22px;font-weight:650}.wordmark{width:auto;height:48px;display:block}.app-header .tagline{color:var(--text-muted);max-width:60ch;margin:4px 0 0}.tagline .how-title{margin:0;font-weight:550}.tagline .how-steps{margin:4px 0 0;padding-left:22px}.tagline .how-steps li{margin-top:2px}.tagline .how-privacy{margin:6px 0 0;font-size:13px}table,input[type=text],input[type=number],.num{font-variant-numeric:tabular-nums}h2{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin:32px 0 10px;font-size:15px;font-weight:650}.card{background:var(--surface);border:1px solid var(--border);border-radius:6px;margin-bottom:12px;padding:14px 16px}.account-heading{align-items:center;gap:8px;margin:0 0 10px;font-size:15px;font-weight:650;display:flex}.chip{border:1px solid var(--border-strong);color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em;border-radius:999px;padding:1px 7px;font-size:11px;font-weight:550}.chip-taxable{color:#7a5c1e;border-color:#c9a86a}.table-scroll{overflow-x:auto}table{border-collapse:collapse;width:100%}th,td{text-align:left;white-space:nowrap;padding:5px 10px}thead th{text-transform:uppercase;letter-spacing:.03em;color:var(--text-muted);border-bottom:1px solid var(--border-strong);font-size:12px;font-weight:550}tbody th[scope=row]{font-weight:550}tbody tr{border-bottom:1px solid var(--border)}tbody tr:last-child{border-bottom:none}.num-col{text-align:right;font-family:var(--mono);font-size:13px}thead .num-col{font-family:var(--sans);font-size:12px}.total-row{border-top:1.5px solid var(--border-strong);font-weight:650}.total-row .cash-in{color:var(--text-muted);font-weight:400}.on-target{color:var(--text-muted)}.trade-list{margin:0;padding:0;list-style:none}.trade{border-bottom:1px solid var(--border);grid-template-columns:52px minmax(0,1fr) auto;grid-template-areas:"action fund amount"".reason reason";align-items:baseline;gap:2px 12px;padding:10px 0;display:grid}.trade:last-child{border-bottom:none}.trade-action{font-family:var(--mono);border-radius:4px;grid-area:action;justify-self:start;padding:1px 6px;font-size:12px;font-weight:700}.trade-buy .trade-action{color:var(--buy);background:#e4f3ea}.trade-sell .trade-action{color:var(--sell);background:#fbe9e7}.trade-fund{grid-area:fund;min-width:0}.trade-fund strong{font-family:var(--mono);font-size:13.5px}.trade-fund-name{color:var(--text-muted);margin-left:8px}.trade-amount{font-family:var(--mono);grid-area:amount;font-size:14px;font-weight:650}.trade-buy .trade-amount{color:var(--buy)}.trade-sell .trade-amount{color:var(--sell)}.trade-reason{color:var(--text-muted);grid-area:reason;max-width:72ch;margin:0}.empty-note{color:var(--text-muted)}.status-bar{flex-wrap:wrap;align-items:center;gap:6px 16px;margin:20px 0 -8px;display:flex}.status-options{color:var(--text-muted);font-size:13px}.recompute-status{color:var(--text-muted);align-items:center;gap:6px;min-width:105px;font-size:12px;display:flex}.recompute-status .spinner{border:2px solid var(--border-strong);border-top-color:var(--accent);border-radius:50%;width:11px;height:11px;animation:.6s linear infinite recompute-spin}.recompute-status .status-check{color:var(--buy);font-weight:600}@keyframes recompute-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.recompute-status .spinner{border-top-color:var(--border-strong);border-left-color:var(--accent);animation:none}}.editor-grid{grid-template-columns:minmax(0,1fr);align-items:start;gap:12px;display:grid}@media (width>=1000px){.editor-grid{grid-template-columns:minmax(0,11fr) minmax(0,13fr)}}.editor-card{margin-bottom:0}.editor-card h3{margin:0 0 2px;font-size:15px;font-weight:650}.editor-hint{color:var(--text-muted);margin:0 0 8px;font-size:12.5px;font-weight:400;display:block}.field-row .editor-hint,.check-row .editor-hint{margin-bottom:0}.field-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:5px 0;display:flex}.field-row:last-child{border-bottom:none}.field-label{font-weight:550}.check-row{border-bottom:1px solid var(--border);align-items:baseline;gap:8px;padding:5px 0;font-weight:550;display:flex}.amount-input{color:var(--text-muted);align-items:center;gap:4px;display:inline-flex}.amount-input input,select{font:inherit;font-family:var(--mono);text-align:right;border:1px solid var(--border-strong);background:var(--surface);width:110px;color:var(--text);border-radius:4px;padding:4px 8px;font-size:13px}select{font-family:var(--sans);text-align:left;width:auto}.amount-input.invalid input{border-color:var(--sell);background:#fdf0ef}.results-placeholder{margin:32px 0 0}.section-hint{max-width:72ch;margin:-6px 0 12px}.app-footer{border-top:1px solid var(--border);color:var(--text-muted);max-width:78ch;margin-top:56px;padding-top:16px;font-size:12.5px;line-height:1.55}.app-footer p{margin:0 0 8px}.app-footer strong{color:var(--text)}.app-footer a{color:var(--text-muted);text-underline-offset:2px;text-decoration:underline}.app-footer a:hover{color:var(--accent)}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}button{font:inherit;border:1px solid var(--border-strong);background:var(--surface);color:var(--text);cursor:pointer;border-radius:4px;padding:5px 12px;font-size:13px;font-weight:550}button:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}button:disabled{color:var(--text-muted);opacity:.6;cursor:default}.remove-button{color:var(--text-muted);padding:3px 8px}.remove-button:hover:not(:disabled){border-color:var(--sell);color:var(--sell)}.field-row input[type=text]{font:inherit;border:1px solid var(--border-strong);background:var(--surface);min-width:0;color:var(--text);border-radius:4px;flex:1;padding:4px 8px;font-size:13.5px}.field-row input[type=text].ticker-input{font-family:var(--mono);text-transform:uppercase;flex:0 0 62px;padding:4px 5px}.class-row{border-bottom:1px solid var(--border);grid-template-columns:minmax(0,1fr) auto 96px 34px;align-items:center;gap:8px;padding:5px 0;display:grid}.class-row input[type=text]{font:inherit;border:1px solid var(--border-strong);background:var(--surface);min-width:0;color:var(--text);border-radius:4px;padding:4px 8px;font-size:13.5px}.class-row .amount-input input{width:68px}.class-row-header{text-transform:uppercase;letter-spacing:.03em;color:var(--text-muted);border-bottom:1px solid var(--border-strong);font-size:12px;font-weight:550}.class-target-heading{justify-self:end;padding-right:18px}.class-row-total{border-top:1.5px solid var(--border-strong);border-bottom:none;font-weight:650}.class-total-value{white-space:nowrap;grid-column:2/4;justify-self:end;padding-right:18px}.class-row-total.total-ok .class-total-value{color:var(--buy)}.class-row-total.total-bad .class-total-value{color:var(--sell)}.class-row-total.total-pending .class-total-value{color:var(--text-muted)}.fund-block{border-bottom:1px solid var(--border)}.fund-block .field-row,.fund-block:last-of-type{border-bottom:none}.fund-block .field-row select,.blend-summary{flex:none;width:150px}.fund-block .field-row{gap:8px}.blend-summary{white-space:nowrap;justify-content:space-between;align-items:center;gap:6px;padding:4px 8px;font-size:13px;font-weight:500;display:inline-flex}.blend-caret{flex:none;width:10px;height:6px;transition:transform .12s}.blend-summary[aria-expanded=true] .blend-caret{transform:rotate(180deg)}.blend-editor{border-left:2px solid var(--accent-soft);margin:0 0 8px 84px;padding:6px 10px}.blend-row{grid-template-columns:minmax(0,1fr) 118px 34px;align-items:center;gap:8px;padding:3px 0;display:grid}.blend-row select{justify-self:start;min-width:0;max-width:100%}.blend-row .amount-input input{width:90px}.blend-row-footer{padding-top:6px}.blend-total{white-space:nowrap;grid-column:2/4;justify-self:end;padding-right:18px;font-size:12.5px;font-weight:650}.blend-total.total-ok{color:var(--buy)}.blend-total.total-bad{color:var(--sell)}.add-row{flex-wrap:wrap;align-items:center;gap:8px;padding-top:10px;display:flex}.add-row input[type=text]{font:inherit;border:1px solid var(--border-strong);background:var(--surface);min-width:140px;color:var(--text);border-radius:4px;flex:1;padding:4px 8px;font-size:13.5px}.account-card{margin-bottom:12px}.account-card-header{align-items:center;gap:8px;margin-bottom:8px;display:flex}.account-card-header input[type=text]{font:inherit;border:1px solid var(--border-strong);background:var(--surface);min-width:0;color:var(--text);border-radius:4px;flex:1;padding:4px 8px;font-size:15px;font-weight:650}.fund-rows{margin:0;padding:0;list-style:none}.fund-row{border-bottom:1px solid var(--border);background:var(--surface);grid-template-columns:74px minmax(0,1fr) auto 34px;align-items:center;gap:10px;padding:4px 0;display:grid}.fund-list-header{text-transform:uppercase;letter-spacing:.03em;color:var(--text-muted);border-bottom:1px solid var(--border-strong);font-size:12px;font-weight:550}.fund-value-heading{justify-self:end;padding-right:44px}.fund-row-label{font-family:var(--mono);font-size:13px;font-weight:550}.fund-row-label .editor-hint-inline{font-family:var(--sans);color:var(--text-muted);font-weight:400}.fund-value-cell{justify-self:end}.drag-cell{align-items:center;gap:6px;display:inline-flex}.drag-cell .rank{color:var(--text-muted);min-width:22px;font-size:12px}.drag-handle{cursor:grab;touch-action:none;color:var(--text-muted);padding:2px 7px;font-size:13px;line-height:1.2}.drag-handle:active{cursor:grabbing}.fund-row-dragging{z-index:1;border-bottom-color:#0000;border-radius:4px;position:relative;box-shadow:0 3px 10px #1a21292e}.add-fund-row{padding-top:8px}.contribution-row{border-top:1.5px solid var(--border-strong);grid-template-columns:minmax(0,1fr) auto 34px;align-items:center;gap:10px;margin-top:10px;padding:8px 0 2px;display:grid}.add-fund-row select{color:var(--text-muted);font-weight:550}.solve-error{border-color:var(--sell);margin-top:24px}.solve-error h3{color:var(--sell);margin:0 0 4px;font-size:15px}.solve-error p{margin:0}.warnings{background:var(--warn-bg);border:1px solid var(--warn-border);border-radius:6px;margin-top:24px;padding:12px 16px}.warnings h2{color:#7a5c1e;margin:0 0 6px}.warnings ul{margin:0;padding-left:20px}@media (width<=560px){.trade{grid-template-columns:52px minmax(0,1fr);grid-template-areas:"action amount""fund fund""reason reason"}.trade-amount{justify-self:end}}
