:root{--page: #f9f9f7;--surface: #fcfcfb;--text: #0b0b0b;--text-2: #52514e;--muted: #898781;--grid: #e1e0d9;--axis: #c3c2b7;--border: rgba(11, 11, 11, .1);--fan-outer: #cde2fb;--fan-inner: #9ec5f4;--fan-median: #256abf;--path: #eb6834;--path-variant: #159e8c;--pos: #256abf;--neg: #d03b3b;--acct-rrsp: #256abf;--acct-nonreg: #159e8c;--acct-tfsa: #9ec5f4;--tax-rate: #eb6834;--good: #0ca30c;--warning: #fab219;--critical: #d03b3b;--accent: #2a78d6;color-scheme:light dark}@media (prefers-color-scheme: dark){:root{--page: #0d0d0d;--surface: #1a1a19;--text: #ffffff;--text-2: #c3c2b7;--muted: #898781;--grid: #2c2c2a;--axis: #383835;--border: rgba(255, 255, 255, .1);--fan-outer: #184f95;--fan-inner: #256abf;--fan-median: #6da7ec;--path: #d95926;--path-variant: #2bb9a5;--pos: #3987e5;--neg: #e66767;--acct-rrsp: #6da7ec;--acct-nonreg: #2bb9a5;--acct-tfsa: #9ec5f4;--tax-rate: #d95926;--good: #0ca30c;--warning: #fab219;--critical: #d03b3b;--accent: #3987e5}}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,sans-serif;background:var(--page);color:var(--text);font-size:14px}.loading-screen{display:grid;place-items:center;height:100vh;color:var(--text-2)}.app{min-height:100vh}.topbar{display:flex;align-items:center;gap:24px;padding:0 24px;height:56px;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10}.brand{font-weight:700;letter-spacing:-.01em}.nav{display:flex;gap:4px}.nav a{padding:8px 12px;border-radius:8px;color:var(--text-2);text-decoration:none;font-weight:500}.nav a:hover{background:var(--page)}.nav a.active{color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:12px}.save-badge{font-size:12px;font-weight:600}.pin-backup{font-size:12px;font-weight:600;padding:5px 12px;border-radius:6px;border:1px solid var(--border);background:var(--panel);color:var(--text);cursor:pointer}.pin-backup:hover:not(:disabled){border-color:var(--accent)}.pin-backup:disabled{cursor:default;opacity:.7}.pin-pinned{color:var(--good);border-color:var(--good)}.pin-error{color:var(--critical);border-color:var(--critical)}.save-saving{color:var(--muted)}.save-saved{color:var(--good)}.save-error{color:var(--critical)}.content{max-width:1180px;margin:0 auto;padding:24px}h1{font-size:22px;margin:0 0 4px}h2{font-size:16px;margin:24px 0 12px}.subtitle{color:var(--text-2);margin:0 0 20px}.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:20px}.row{display:flex;gap:16px;flex-wrap:wrap;align-items:flex-end}label.field{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--text-2);font-weight:600}input,select{font:inherit;padding:8px 10px;border:1px solid var(--axis);border-radius:8px;background:var(--surface);color:var(--text);min-width:120px}input:focus,select:focus{outline:2px solid var(--accent);outline-offset:-1px}button{font:inherit;font-weight:600;padding:9px 16px;border:1px solid var(--axis);border-radius:8px;background:var(--surface);color:var(--text);cursor:pointer}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button:disabled{opacity:.5;cursor:not-allowed}.btn-link{border:none;background:none;color:var(--accent);padding:2px 6px;cursor:pointer;font-weight:600}.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.tile{background:var(--page);border:1px solid var(--border);border-radius:10px;padding:12px 14px}.tile .label{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.tile .value{font-size:20px;font-weight:700;margin-top:4px}.bucket-grid{display:grid;grid-template-columns:1fr auto;gap:8px 16px;align-items:center}.bucket-grid .bucket-name{font-size:13px}.bucket-grid .overridden{color:var(--accent);font-weight:600}.bucket-amt{display:flex;align-items:center;gap:6px}.bucket-amt input{width:110px;min-width:0;text-align:right}.section-header{display:flex;justify-content:space-between;align-items:baseline;cursor:pointer;padding:10px 0;border-bottom:1px solid var(--border)}.section-total{color:var(--text-2);font-weight:600}table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}th,td{padding:6px 10px;text-align:right;border-bottom:1px solid var(--border);white-space:nowrap}th:first-child,td:first-child{text-align:left}thead th{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.03em;font-weight:600}tr.expandable{cursor:pointer}.table-scroll{overflow-x:auto}.table-scroll table{table-layout:fixed}.audit-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:4px 20px;padding:10px 14px;background:var(--page);font-size:12px}.audit-grid div{display:flex;justify-content:space-between;gap:8px;border-bottom:1px dotted var(--border);padding:3px 0}.audit-grid .k{color:var(--text-2)}.breakdown{padding:12px 14px;background:var(--page);font-size:12px;display:flex;flex-direction:column;gap:14px}.bd-title{font-weight:600;color:var(--text);text-transform:uppercase;letter-spacing:.03em;font-size:11px;margin-bottom:5px}.bd-kv{display:grid;grid-template-columns:minmax(140px,max-content) 1fr;column-gap:20px;row-gap:3px;align-items:baseline}.bd-kv .k{color:var(--text-2);border-bottom:1px dotted var(--border);padding:3px 0}.bd-kv .v{text-align:right;font-variant-numeric:tabular-nums;border-bottom:1px dotted var(--border);padding:3px 0}.bd-kv .k.sub{padding-left:14px}.bd-kv .k.sub2{padding-left:28px;color:var(--muted)}.bd-kv .v.bd-warn{color:var(--neg);font-weight:600}.bd-kv .bd-group{grid-column:1 / -1;font-weight:600;color:var(--text);margin-top:8px;border-bottom:none}.bd-kv .bd-group:first-child{margin-top:0}.bd-kv .bd-divider{grid-column:1 / -1;border-top:1px solid var(--border);margin:4px 0 2px;height:0}.bd-kv .bd-note{grid-column:1 / -1;color:var(--muted);font-style:italic;font-size:11px;margin-top:4px;border-bottom:none}.bd-kv .bd-details{grid-column:1 / -1;margin-top:4px}.bd-kv .bd-details summary{cursor:pointer;color:var(--text-2);font-size:11px}.bd-accounts,.bd-tax-table{width:100%;font-size:12px}.bd-accounts th,.bd-tax-table th{font-size:11px}.bd-accounts td.sub-label,.bd-tax-table td.sub-label{padding-left:22px;color:var(--muted)}.bd-accounts td.sub2,.bd-tax-table td.sub2{padding-left:32px;color:var(--muted)}.bd-account-header td{font-weight:600;border-bottom:none;padding-top:10px}.bd-account-header:first-child td{padding-top:0}.bd-account-end td{font-weight:600;border-top:1px dotted var(--border)}.bd-accounts tfoot td,.bd-tax-table tfoot td{border-top:1px solid var(--border);font-weight:600;padding-top:6px}.decile-links{display:flex;flex-wrap:wrap;gap:6px}.decile-links button{padding:6px 12px}.decile-links button.selected{background:var(--accent);border-color:var(--accent);color:#fff}.error{color:var(--critical);font-weight:600}.hint{font-size:12px;color:var(--muted)}.sum-ok{color:var(--good);font-weight:600}.sum-bad{color:var(--critical);font-weight:600}.chart-wrap{width:100%;height:340px}.chart-caption{font-size:12px;color:var(--muted);margin:4px 0 16px}.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--text-2);margin-bottom:8px}.legend .swatch{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:6px;vertical-align:-1px}.progress{height:8px;border-radius:4px;background:var(--page);overflow:hidden;border:1px solid var(--border)}.progress>div{height:100%;background:var(--accent);transition:width .3s}.strategy-list{display:flex;flex-direction:column;gap:12px}.strategy-card{border:1px solid var(--border);border-radius:10px;padding:14px 16px;background:var(--page)}.strategy-card.enabled{border-color:var(--accent)}.strategy-toggle{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:600}.strategy-name{font-size:14px}.strategy-desc{margin:6px 0 0}.strategy-layout{display:grid;grid-template-columns:220px 1fr;gap:20px}.strategy-nav{display:flex;flex-direction:column;gap:4px;border-right:1px solid var(--border);padding-right:12px}.strategy-nav-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;cursor:pointer;font-size:14px;font-weight:600;color:var(--text-2)}.strategy-nav-item:hover{background:var(--page)}.strategy-nav-item.active{background:var(--page);color:var(--text);box-shadow:inset 2px 0 0 var(--accent)}.strategy-detail{min-width:0}@media (max-width: 640px){.strategy-layout{grid-template-columns:1fr}.strategy-nav{border-right:none;border-bottom:1px solid var(--border);padding-right:0;padding-bottom:12px}.topbar{flex-wrap:wrap;height:auto;min-height:52px;gap:10px 12px;padding:8px 12px}.brand{font-size:14px}.nav{order:3;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:2px}.nav a{white-space:nowrap}.content{padding:16px 12px}.card{padding:14px}.bd-accounts,.bd-tax-table{display:block;overflow-x:auto;white-space:nowrap}.table-scroll table{table-layout:auto;width:max-content;min-width:100%}}.strategy-object{display:flex;flex-wrap:wrap;gap:16px;margin-top:12px}.strategy-array{display:flex;flex-direction:column;gap:10px;margin-top:4px;width:100%}.strategy-array-item{border-left:2px solid var(--border);padding-left:12px}.strategy-array-head{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--text-2)}input[type=checkbox]{min-width:auto;width:16px;height:16px;cursor:pointer}.bucket-picker{display:flex;flex-direction:column;gap:4px;max-height:340px;overflow-y:auto;border:1px solid var(--border);border-radius:6px;padding:8px}.bucket-picker-section-header{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-2);padding:6px 4px 2px;border-bottom:1px solid var(--border);margin-bottom:4px}.bucket-picker-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:3px 4px;border-radius:4px}.bucket-picker-row.checked{background:var(--bg-2, rgba(127, 127, 127, .08))}.bucket-picker-name{display:flex;align-items:center;gap:8px;cursor:pointer;flex:1;min-width:0}.bucket-picker-amount{width:130px;min-width:130px}.strategy-tags{display:flex;flex-wrap:wrap;gap:3px}.strategy-tag{display:inline-block;font-size:.7rem;padding:1px 6px;border-radius:4px;white-space:nowrap;font-weight:500;background:var(--muted);color:var(--text)}.strategy-tag[data-strategy=cpp-oas]{background:#d4edda;color:#155724}.strategy-tag[data-strategy=house-sale]{background:#ffe5cc;color:#7c3a00}.strategy-tag[data-strategy=phase-out-dependent]{background:#f8d7da;color:#721c24}.strategy-tag[data-strategy=spending-smile]{background:#e2d9f3;color:#432874}.strategy-tag[data-strategy=capex-deferral]{background:#cce5ff;color:#004085}.strategy-tag[data-strategy=opexplus-skip]{background:#fff3cd;color:#856404}.strategy-tag[data-strategy=dividend-aware-rrsp]{background:#d1ecf1;color:#0c5460}.strategy-tag[data-strategy=down-year-draw]{background:#e2e3e5;color:#383d41}.comparison-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:16px}.comparison-header h2{margin:0}.strategy-diff{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.strategy-diff-item{display:flex;align-items:baseline;gap:8px;padding:8px 12px;border-radius:8px;font-size:13px;border:1px solid var(--border);background:var(--page)}.diff-badge{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:1px 6px;border-radius:4px}.diff-badge.added{background:#d4edda;color:#155724}.diff-badge.removed{background:#f8d7da;color:#721c24}.diff-badge.changed{background:#fff3cd;color:#856404}.diff-badge.unchanged{background:var(--muted);color:var(--text);opacity:.6}.diff-params{margin:4px 0 0;padding-left:16px;font-size:12px;color:var(--text-2)}td.delta-pos{color:var(--good);font-weight:600}td.delta-neg{color:var(--critical);font-weight:600}td.delta-zero{color:var(--muted)}tr.diff-year td{background:color-mix(in srgb,var(--accent) 4%,transparent)}tr.diff-year:hover td{background:color-mix(in srgb,var(--accent) 8%,transparent)}.diff-dot{color:var(--warning);font-size:16px;line-height:1}.comparison-breakdown{display:grid;grid-template-columns:1fr 1fr;gap:20px;padding:16px;background:var(--page)}.breakdown-col h4{margin:0 0 8px;font-size:13px;color:var(--text-2);text-transform:uppercase;letter-spacing:.03em}@media (max-width: 800px){.comparison-breakdown{grid-template-columns:1fr}}.chart-tooltip{pointer-events:none;background:var(--text);color:var(--page);padding:6px 9px;border-radius:6px;font-size:11.5px;line-height:1.4;box-shadow:0 4px 16px var(--border);z-index:20;max-width:260px}.gantt-rowlab{position:sticky;left:0;background:var(--surface);padding:0 10px 0 4px;font-size:11.5px;display:flex;align-items:center;white-space:nowrap;color:var(--text-2);z-index:2}.heat-cell{height:16px;border-right:1px solid var(--grid);border-bottom:1px solid var(--grid);cursor:pointer}.heat-cell:hover{outline:2px solid var(--text);outline-offset:-2px;z-index:3}.axis-cell{font-size:10px;color:var(--muted);text-align:center;padding-top:4px}.gantt-scroll{overflow-x:auto}.gantt-row{display:flex;align-items:center;border-bottom:1px solid var(--grid)}.gantt-row .gantt-rowlab{width:150px;flex:none;padding:6px 10px 6px 4px}.gantt-lane{position:relative;flex:1;min-width:750px;height:38px}.gantt-baseline{position:absolute;left:0;right:0;top:44%;height:1px;background:var(--grid)}.gantt-bar{position:absolute;top:6px;height:12px;border-radius:4px;cursor:pointer;background:var(--warning)}.gantt-bar.open{background:repeating-linear-gradient(45deg,var(--muted),var(--muted) 3px,transparent 3px,transparent 7px)}.gantt-mark{position:absolute;top:2px;bottom:20px;width:9px;margin-left:-4.5px;border-radius:2px;cursor:pointer;box-shadow:0 0 0 2px var(--surface)}.gantt-fund{position:absolute;bottom:2px;width:6px;background:var(--muted);border-radius:1px;cursor:pointer;opacity:.65}.gantt-axis-tick{position:absolute;top:4px;font-size:10px;color:var(--muted);transform:translate(-50%)}
