:root{--bg:#f6f7f9;--panel:#fff;--fg:#111827;--muted:#4b5563;--faint:#6b7280;--border:#e5e7eb;--line:#f0f1f3;--accent:#2563eb;--accent-soft:#eff4ff;--pos:#047857;--neg:#b91c1c;--row:#fafbfc;--shadow:0 1px 2px #1018280a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;font-family:Segoe UI,system-ui,-apple-system,Roboto,sans-serif;font-size:15px;line-height:1.45}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#0f1115;--panel:#161a22;--fg:#e5e7eb;--muted:#b4bcc8;--faint:#8b94a3;--border:#262c38;--line:#1f2430;--accent:#60a5fa;--accent-soft:#1b2638;--pos:#4ade80;--neg:#f87171;--row:#1b2029;--shadow:none}}*{box-sizing:border-box}body{background:var(--bg);color:var(--fg);margin:0}table,.card .value,.mix-legend,.allocation,.chart-panel{font-variant-numeric:tabular-nums}.panel,.table-wrap,.card,.asset-mix,.allocations{background:var(--panel);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:10px}.panel{padding:14px 16px}.layout{grid-template-columns:200px minmax(0,1fr);min-height:100vh;display:grid}main{width:100%;max-width:1280px;padding:20px 28px}h1{margin:0 0 16px;font-size:1.15rem}.sidebar{border-right:1px solid var(--border);background:var(--panel)}.sidebar-inner{flex-direction:column;gap:16px;height:100vh;padding:16px;display:flex;position:sticky;top:0}.topbar{align-items:center;gap:8px;display:flex}h1.brand{letter-spacing:-.01em;margin:0;font-size:1.1rem}.brand a{color:var(--fg);white-space:nowrap;align-items:center;gap:8px;text-decoration:none;display:flex}.brand img{flex:none}.brand .light{color:var(--faint);font-weight:400}.menu-toggle{border:1px solid var(--border);width:38px;height:38px;color:var(--fg);cursor:pointer;background:0 0;border-radius:8px;place-items:center;margin-left:auto;display:none}.nav-menu{flex-direction:column;flex:1;display:flex}.sidebar ul{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.sidebar ul a{color:var(--fg);border-radius:8px;align-items:center;gap:10px;padding:8px 10px;text-decoration:none;display:flex}.sidebar ul a .icon{color:var(--faint);flex:none}.sidebar ul a:hover{background:var(--row)}.sidebar ul a[aria-current=page]{background:var(--accent-soft);color:var(--accent);font-weight:600}.sidebar ul a[aria-current=page] .icon{color:var(--accent)}.sidebar footer{flex-direction:column;gap:4px;margin-top:auto;font-size:.8rem;display:flex}.sidebar footer .logout{align-items:center;gap:6px;display:inline-flex}.nav-backdrop{display:none}@media (width<=720px){.layout{grid-template-rows:auto 1fr;grid-template-columns:minmax(0,1fr)}.sidebar{border-right:0;border-bottom:1px solid var(--border);z-index:30;background:var(--panel);position:sticky;top:0}.sidebar-inner{gap:0;height:auto;padding:10px 16px;position:static}.topbar{z-index:2;position:relative}.menu-toggle{display:grid}.nav-menu{display:none}.nav-menu.open{z-index:2;background:var(--panel);border-bottom:1px solid var(--border);padding:8px;display:flex;position:absolute;top:100%;left:0;right:0;box-shadow:0 10px 24px #0000001f}.nav-menu.open ul a{gap:12px;padding:11px 12px;font-size:1.05rem}.nav-menu.open footer{border-top:1px solid var(--border);grid-template-columns:minmax(0,1fr) auto;gap:4px 12px;margin-top:6px;padding:10px 12px 4px;font-size:.85rem;display:grid}.nav-menu.open footer .logout{grid-row:span 2;align-self:center;font-size:1rem}.nav-backdrop{z-index:1;background:#1118274d;display:block;position:fixed;inset:0}main{padding:14px}}.view-header{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;display:flex}.view-title{letter-spacing:-.01em;margin:0 0 14px;font-size:1.6rem}.view-header>.muted{font-size:.9rem}.filters{flex-wrap:wrap;align-items:end;gap:12px;margin-bottom:12px;display:flex}.filter{color:var(--muted);flex-direction:column;gap:3px;font-size:.8rem;font-weight:600;display:flex}.filters select,.filters button{font:inherit;border:1px solid var(--border);background:var(--panel);color:var(--fg);border-radius:8px;padding:6px 10px;font-size:.9rem;font-weight:400}.filters button{cursor:pointer}.filters button:disabled{cursor:default;opacity:.5}table.static th{cursor:default}tr.group td{background:var(--row);border-top:1px solid var(--border);border-bottom:1px solid var(--border);font-weight:600}tr.total td{border-top:2px solid var(--fg);border-bottom:0;font-weight:700}td.indent{padding-left:26px}td.wrap{white-space:normal;min-width:160px}td.instrument{white-space:nowrap;text-overflow:ellipsis;width:100%;min-width:12rem;max-width:0;overflow:hidden}h2{letter-spacing:-.01em;margin:28px 0 10px;font-size:1.15rem}.muted{color:var(--muted)}.faint{color:var(--faint)}.pos{color:var(--pos)}.neg{color:var(--neg)}.cards{flex-wrap:wrap;gap:12px;display:flex}.card{flex:150px;min-width:150px;padding:14px 16px}.card .label{color:var(--muted);font-size:.85rem}.card .value{letter-spacing:-.01em;font-size:1.45rem;font-weight:600}table{border-collapse:collapse;width:100%;font-size:.94rem}th,td{border-bottom:1px solid var(--line);text-align:right;white-space:nowrap;padding:9px 8px}th:first-child,td:first-child,th.left,td.left{text-align:left}th{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;border-bottom:1px solid var(--border);padding-top:11px;font-size:.8rem;font-weight:600}tbody tr:hover{background:var(--row)}tbody tr:last-child td{border-bottom:0}td.pos:before,td.neg:before,.card .value.pos:before,.card .value.neg:before{vertical-align:.1em;margin-right:.3em;font-size:.7em}td.pos:before,.card .value.pos:before{content:"▲"}td.neg:before,.card .value.neg:before{content:"▼"}tr.selected td{background:color-mix(in srgb, var(--accent) 8%, transparent)}tr.selected td:first-child{box-shadow:inset 3px 0 0 var(--accent)}.flag{border:1px solid var(--border);background:var(--row);color:var(--muted);border-radius:10px;margin-left:4px;padding:1px 7px;font-size:.72rem;font-weight:500;display:inline-block}.range{gap:6px;margin-bottom:10px;display:flex}.range button{font:inherit;border:1px solid var(--border);background:var(--panel);color:var(--fg);cursor:pointer;border-radius:8px;padding:4px 12px;font-size:.9rem}.range button.active{background:var(--accent);color:#fff;border-color:var(--accent)}.table-wrap{padding:0 4px;overflow-x:auto}.error{color:var(--neg)}.status-ok{color:var(--pos)}.status-failed{color:var(--neg);font-weight:600}.sidebar .user{text-overflow:ellipsis;white-space:nowrap;color:var(--fg);overflow:hidden}button.link{color:var(--accent);cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;padding:0}.gate{text-align:center;max-width:420px;margin:15vh auto;padding:16px}.gate button{font:inherit;border:1px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer;border-radius:6px;padding:6px 14px}form.login{text-align:left;border:1px solid var(--border);background:var(--panel);box-shadow:var(--shadow);border-radius:10px;flex-direction:column;gap:12px;margin-top:16px;padding:20px;display:flex}form.login h2{margin:0}form.login p{margin:0;font-size:.9rem}.field{color:var(--muted);flex-direction:column;gap:4px;font-size:.85rem;display:flex}.field input{font:inherit;border:1px solid var(--border);background:var(--panel);color:var(--fg);border-radius:8px;padding:8px 10px;font-size:1rem}.field input:focus{outline:2px solid var(--accent);outline-offset:-1px}form.login button[type=submit]{padding:8px}form.login button.link{align-self:center;font-size:.9rem}.gate button.link{color:var(--accent);background:0 0;border:0;padding:0}.card .note{margin-top:2px;font-size:.75rem}tr.muted td{color:var(--muted)}.chart-panel{z-index:10;background:var(--panel);border-top:1px solid var(--border);flex-direction:column;padding:0 24px 8px;display:flex;position:fixed;bottom:0;left:200px;right:0;box-shadow:0 -4px 12px #00000014}.chart-panel-handle{cursor:ns-resize;touch-action:none;height:10px;margin:0 -24px;position:relative}.chart-panel-handle:after{content:"";background:var(--border);border-radius:2px;width:48px;height:4px;margin-left:-24px;position:absolute;top:3px;left:50%}.chart-panel-handle:hover:after{background:var(--muted)}.chart-panel-header{align-items:center;gap:12px;display:flex}.chart-panel-title{white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:600;overflow:hidden}.chart-panel-close{border:1px solid var(--border);color:var(--fg);cursor:pointer;background:0 0;border-radius:8px;padding:2px 8px}.chart-panel-body{flex-direction:column;flex:1;min-height:0;display:flex}.chart-panel-body .range{margin:4px 0}tr.clickable{cursor:pointer}@media (width<=720px){.chart-panel{padding:0 12px 8px;left:0}.chart-panel-handle{margin:0 -12px}}td .sub{color:var(--muted);padding-left:.75rem}button.link.expand{white-space:nowrap;font-size:.85rem}.allocations{grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr));gap:12px 32px;padding:14px 16px;display:grid}.allocation{min-width:0}.allocation h3{color:var(--muted);text-transform:uppercase;letter-spacing:.03em;margin:0 0 8px;font-size:.8rem;font-weight:600}.alloc-row{grid-template-columns:9rem minmax(40px,1fr) 3.5rem 9rem;align-items:center;gap:8px;padding:4px 0;font-size:.93rem;display:grid}.alloc-bar{background:var(--border);border-radius:5px;height:10px;overflow:hidden}.alloc-bar span{background:var(--accent);height:100%;display:block}.alloc-pct,.alloc-value{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;padding-right:8px}.allocation .alloc-value{color:var(--faint)}.skeleton,.skeleton-bar{background:var(--border);animation:1.4s ease-in-out infinite skeleton-pulse}.skeleton{border-radius:6px;width:100%}.skeleton-bar{vertical-align:middle;border-radius:4px;height:.8em;display:inline-block}tr.skeleton-row:hover{background:0 0}@keyframes skeleton-pulse{50%{opacity:.45}}@media (prefers-reduced-motion:reduce){.skeleton,.skeleton-bar{animation:none}}.chart-message{justify-content:center;align-items:center;display:flex}.chart-skeleton{background:repeating-linear-gradient(to bottom, transparent 0 calc(25% - 1px), var(--border) calc(25% - 1px) 25%);border-radius:8px;position:relative;overflow:hidden}.chart-skeleton svg{width:100%;height:calc(100% - 12px);position:absolute;inset:12px 0 0}.chart-skeleton .area{fill:color-mix(in srgb, var(--accent) 9%, transparent)}.chart-skeleton .line{fill:none;stroke:color-mix(in srgb, var(--accent) 35%, transparent);stroke-width:2px}.chart-skeleton:after{content:"";background:linear-gradient(100deg, transparent 20%, color-mix(in srgb, var(--panel) 75%, transparent) 50%, transparent 80%);animation:1.6s ease-in-out infinite chart-sweep;position:absolute;inset:0;transform:translate(-100%)}@keyframes chart-sweep{to{transform:translate(100%)}}.chart-frame{position:relative}.chart-busy{background:color-mix(in srgb, var(--panel) 55%, transparent);border-radius:6px;place-items:center;display:grid;position:absolute;inset:0}.chart-busy .spinner{border-width:3px;width:28px;height:28px;margin:0}.spinner{vertical-align:-.1em;width:.8em;height:.8em;color:var(--accent);border:2px solid;border-right-color:#0000;border-radius:50%;margin-right:6px;animation:.7s linear infinite spin;display:inline-block}.range button.active .spinner{color:#fff}@keyframes spin{to{transform:rotate(360deg)}}.range button:disabled{cursor:progress}.range button:disabled:not(.active){opacity:.5}@media (prefers-reduced-motion:reduce){.chart-skeleton:after{animation:none}.spinner{animation-duration:2s}}.card .value .skeleton-bar{width:7rem;height:1em}tr.closed td{color:var(--muted)}td .ccy{color:var(--muted);font-weight:400}.asset-mix{margin-top:12px;padding:14px 16px}.mix-bar{background:var(--border);border-radius:7px;gap:2px;height:14px;display:flex;overflow:hidden}.mix-bar span{height:100%;display:block}.mix-legend{flex-wrap:wrap;gap:4px 20px;margin:10px 0 0;padding:0;font-size:.92rem;list-style:none;display:flex}.mix-legend .muted{color:var(--faint)}.mix-legend li{white-space:nowrap;align-items:center;gap:6px;display:flex}.mix-dot{border-radius:50%;width:10px;height:10px;display:inline-block}.mix-SHARES{background:var(--accent)}.mix-BONDS{background:#f59e0b}.mix-CASH{background:#10b981}.mix-OTHER{background:#a78bfa}@media (width<=720px){td.instrument{min-width:12rem}.cards{gap:8px}.card{flex-basis:calc(50% - 4px);min-width:0;padding:10px 12px}.card .value{font-size:1.05rem}.table-wrap{padding:0}th,td{padding:8px 10px}.panel,.asset-mix,.allocations{padding:12px}.card .label,.card .note{font-size:.75rem}.mix-legend{gap:4px 14px;font-size:.85rem}.alloc-row{grid-template-columns:minmax(0,8rem) minmax(30px,1fr) 3.5rem}.alloc-value{display:none}.alloc-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}}button.primary,.modal-footer button,.view-header button.primary{font:inherit;border:1px solid var(--border);background:var(--panel);color:var(--fg);cursor:pointer;border-radius:8px;padding:7px 14px;font-size:.92rem}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}button.primary:disabled{opacity:.7;cursor:progress}button.primary .spinner{color:#fff}button.danger{font:inherit;border:1px solid var(--neg);background:var(--neg);color:#fff;cursor:pointer;border-radius:8px;padding:6px 12px}button.danger-link{font:inherit;color:var(--neg);cursor:pointer;background:0 0;border:0;padding:0}.view-header button.primary{align-self:center}.toast{z-index:40;background:color-mix(in srgb, var(--pos) 12%, var(--panel));border:1px solid color-mix(in srgb, var(--pos) 35%, transparent);max-width:min(420px,100vw - 40px);color:var(--fg);border-radius:8px;margin:0;padding:10px 14px;position:fixed;bottom:20px;right:20px;box-shadow:0 8px 24px #00000026}.modal-backdrop{z-index:50;background:#11182759;place-items:start center;padding:6vh 16px;display:grid;position:fixed;inset:0;overflow-y:auto}.modal{background:var(--panel);border:1px solid var(--border);border-radius:12px;flex-direction:column;gap:14px;width:min(640px,100%);padding:18px 20px;display:flex;box-shadow:0 20px 50px #0003}.modal-header{justify-content:space-between;align-items:center;display:flex}.modal-header h2{margin:0;font-size:1.2rem}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 14px;display:grid}.form-field{color:var(--muted);flex-direction:column;gap:4px;min-width:0;font-size:.85rem;font-weight:600;display:flex}.form-field.wide,.form-grid .wide{grid-column:1/-1}.form-field small{font-weight:400}.modal input,.modal select{font:inherit;border:1px solid var(--border);background:var(--panel);color:var(--fg);border-radius:8px;width:100%;min-width:0;padding:8px 10px;font-size:.97rem;font-weight:400}.modal input:focus,.modal select:focus{outline:2px solid var(--accent);outline-offset:-1px}.new-instrument{border:1px dashed var(--border);border-radius:10px;flex-direction:column;gap:8px;margin:0;padding:10px 12px 12px;display:flex}.new-instrument legend{color:var(--muted);padding:0 4px;font-size:.85rem;font-weight:600}.new-instrument .inline{gap:8px;display:flex}.new-instrument .inline button{font:inherit;border:1px solid var(--border);background:var(--panel);color:var(--fg);cursor:pointer;border-radius:8px;padding:6px 14px}.form-summary{background:var(--row);font-variant-numeric:tabular-nums;border-radius:8px;margin:0;padding:10px 12px}.modal-footer{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.modal-footer .spacer{flex:1}.modal-footer .confirm{color:var(--neg);align-items:center;gap:6px;display:inline-flex}@media (width<=720px){.modal-backdrop{place-items:stretch stretch;padding:0}.modal{border:0;border-radius:0;min-height:100%;padding:14px}.form-grid{grid-template-columns:minmax(0,1fr)}.modal-footer{background:var(--panel);border-top:1px solid var(--border);padding:10px 0 4px;position:sticky;bottom:0}}.with-currency{gap:6px;display:flex}.with-currency input{flex:1}.modal .with-currency select{flex:none;width:auto}tr.base-row td{color:var(--muted);border-top:0;font-size:.9em}.topbar{flex-wrap:wrap}.add-tx{flex-basis:100%;margin-top:4px}@media (width<=720px){button.add-tx{flex-basis:auto;width:38px;height:38px;margin:0 0 0 auto;padding:0;font-size:1.5rem;font-weight:500;line-height:1}.add-tx .label{display:none}.topbar .menu-toggle{margin-left:0}.toast{max-width:none;bottom:12px;left:12px;right:12px}}
