:root{--canvas:#f8fafc;--surface:#fff;--surface-hover:#f1f5f9;--border:#e2e8f0;--border-strong:#cbd5e1;--text:#0f172a;--text-secondary:#64748b;--text-muted:#94a3b8;--accent:#4f46e5;--accent-hover:#4338ca;--accent-soft:#4f46e51a;--positive:#10b981;--positive-text:#047857;--positive-tint:#ecfdf5;--positive-border:#10b98133;--negative:#f43f5e;--negative-text:#be123c;--negative-tint:#fff1f2;--negative-border:#f43f5e33;--shadow-card:none;--shadow-float:0 4px 12px -2px #0f172a0f, 0 2px 6px -1px #0f172a0a;--sans:"Inter", system-ui, "Segoe UI", Roboto, sans-serif;--mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", Consolas, monospace;font:14px/1.5 var(--sans);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:var(--text);background:var(--canvas);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"tnum" on, "zero" on}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}@media (prefers-color-scheme:dark){:root[data-theme=dark],:root:not([data-theme=light]){--canvas:#0a0b0d;--surface:#17181b;--surface-hover:#212226;--border:#26272b;--border-strong:#34353a;--text:#f2f2f3;--text-secondary:#8b8d93;--text-muted:#5f6166;--accent:#22c55e;--accent-hover:#16a34a;--accent-soft:#22c55e29;--positive:#22c55e;--positive-text:#4ade80;--positive-tint:#22c55e24;--positive-border:#22c55e4d;--negative:#ef4444;--negative-text:#f87171;--negative-tint:#ef444424;--negative-border:#ef44444d;--shadow-float:0 4px 16px -2px #0009, 0 2px 8px -1px #0006}}:root[data-theme=dark]{--canvas:#0a0b0d;--surface:#17181b;--surface-hover:#212226;--border:#26272b;--border-strong:#34353a;--text:#f2f2f3;--text-secondary:#8b8d93;--text-muted:#5f6166;--accent:#22c55e;--accent-hover:#16a34a;--accent-soft:#22c55e29;--positive:#22c55e;--positive-text:#4ade80;--positive-tint:#22c55e24;--positive-border:#22c55e4d;--negative:#ef4444;--negative-text:#f87171;--negative-tint:#ef444424;--negative-border:#ef44444d;--shadow-float:0 4px 16px -2px #0009, 0 2px 8px -1px #0006}*{box-sizing:border-box}body{background:var(--canvas);margin:0}h1,h2,h3{font-family:var(--sans);color:var(--text);margin:0;font-weight:600}.auth-shell{background:var(--canvas);justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;width:100%;max-width:360px;padding:28px}.auth-brand{color:var(--text);align-items:center;gap:10px;margin-bottom:24px;font-size:15px;font-weight:600;display:flex}.auth-card h2{margin-bottom:8px;font-size:17px}.auth-sub{color:var(--text-secondary);margin-bottom:16px;font-size:13px}.auth-card form{flex-direction:column;gap:10px;display:flex}.auth-card button{justify-content:center;margin-top:4px}.auth-error{color:var(--negative-text);margin:0;font-size:13px}.auth-card p.auth-sub:last-child{margin-top:4px;margin-bottom:0}.link-btn{color:var(--text);cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;font-weight:600;text-decoration:underline}.app-shell{flex-direction:column;min-height:100vh;display:flex}.app-header{background:var(--surface);border-bottom:1px solid var(--border);z-index:10;position:sticky;top:0}.app-header-inner{align-items:center;gap:32px;max-width:1280px;height:64px;margin:0 auto;padding:0 32px;display:flex}.brand{align-items:center;gap:10px;display:flex}.brand-name{letter-spacing:-.01em;color:var(--text);font-size:15px;font-weight:600}.tabs{flex:1;align-items:center;gap:4px;min-width:0;display:flex}.nav-toggle{flex-shrink:0;display:none}.nav-backdrop{display:none}.tab{color:var(--text-secondary);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:8px;padding:8px 14px;font-size:13.5px;font-weight:500;text-decoration:none;transition:color .15s,background .15s}.tab:hover{color:var(--text);background:var(--surface-hover)}.tab.active{color:#fff;background:var(--accent);font-weight:600}.header-actions{align-items:center;gap:10px;display:flex}.currency-select{background:var(--surface-hover);border:1px solid var(--border);font-family:var(--mono);color:var(--text);cursor:pointer;border-radius:8px;width:auto;padding:6px 28px 6px 10px;font-size:12.5px;font-weight:500}.currency-select:focus{box-shadow:none;border-color:var(--border-strong)}.icon-btn{border:1px solid var(--border);width:32px;height:32px;color:var(--text-secondary);background:0 0;border-radius:8px;justify-content:center;align-items:center;padding:0;text-decoration:none;display:flex}.icon-btn:hover{background:var(--surface-hover);color:var(--text);opacity:1}.icon-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.app-main{flex-direction:column;flex:1;gap:24px;width:100%;max-width:1280px;margin:0 auto;padding:32px;display:flex}.page-head{flex-direction:column;gap:4px;margin-bottom:4px;display:flex}.page-head h2{letter-spacing:-.02em;font-size:22px}.page-head p{color:var(--text-secondary);font-size:13.5px}.banner-error{background:var(--negative-tint);border:1px solid var(--negative-border);color:var(--negative-text);border-radius:10px;margin:16px 32px 0;padding:12px 16px;font-size:13.5px}.dashboard{flex-direction:column;gap:20px;display:flex}.overview-row{align-items:stretch;gap:16px;display:flex}.overview-row>.panel{flex:none}.overview-row.ring-only{display:block}.overview-row.ring-only>.panel{width:100%}.overview-row.ring-only .ring-wrap{aspect-ratio:1;width:min(420px,100%);height:auto}.stat-cards{flex:320px;grid-template-columns:repeat(2,1fr);gap:16px;display:grid}@media (width>=901px){.stat-cards-full{grid-template-columns:repeat(4,1fr)}}.view-toggle{background:var(--surface-hover);border:1px solid var(--border);border-radius:10px;flex-shrink:0;gap:4px;padding:3px;display:flex}.view-toggle-btn{color:var(--text-secondary);background:0 0;border:1px solid #0000;border-radius:7px;padding:7px 12px;font-size:13px;font-weight:600}.view-toggle-btn:hover{background:var(--surface);color:var(--text);border-color:#0000}.view-toggle-btn.active{background:var(--surface);color:var(--text);border-color:#0000;box-shadow:0 1px 2px #0f172a14}@media (width<=900px){.overview-row{flex-direction:column}.overview-row>.panel{align-self:stretch;width:100%;max-width:420px;margin:0 auto}.stat-cards{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.ring-wrap{aspect-ratio:1;width:100%;height:auto}}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;flex-direction:column;gap:12px;padding:18px 20px;display:flex}.stat-card-head{color:var(--text-secondary);justify-content:space-between;align-items:center;display:flex}.stat-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);font-size:11px;font-weight:600}.stat-value{font-family:var(--mono);letter-spacing:-.02em;color:var(--text);font-size:26px;font-weight:600}.stat-value.positive{color:var(--positive)}.stat-value.negative{color:var(--negative)}.stat-sub{font-family:var(--mono);color:var(--text-secondary);font-size:12px;font-weight:500}.chip{font-family:var(--mono);white-space:nowrap;border-radius:6px;align-items:center;gap:4px;padding:2px 8px;font-size:12px;font-weight:500;display:inline-flex}.chip.positive{background:var(--positive-tint);border:1px solid var(--positive-border);color:var(--positive-text)}.chip.negative{background:var(--negative-tint);border:1px solid var(--negative-border);color:var(--negative-text)}.chip.neutral{background:var(--surface-hover);border:1px solid var(--border);color:var(--text-secondary)}.badge{background:var(--surface-hover);border:1px solid var(--border);color:var(--text-secondary);white-space:nowrap;border-radius:6px;align-items:center;gap:5px;padding:3px 8px;font-size:12px;font-weight:500;display:inline-flex}.modal-overlay{z-index:100;background:#0f172a73;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal{width:100%;max-width:440px;box-shadow:var(--shadow-float)}.settings-subhead{margin:0 0 4px;font-size:13.5px;font-weight:600}.panel-grid{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px;display:grid}.panel{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px}.panel-head{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:16px;display:flex}.panel-head h3{font-size:15px;font-weight:600}.alloc-bar{background:var(--surface-hover);border-radius:6px;height:10px;margin-bottom:16px;display:flex;overflow:hidden}.alloc-bar.empty{height:10px}.alloc-seg{height:100%}.ring-wrap{width:380px;height:380px;margin:0 auto;position:relative}.ring-wrap svg{position:absolute;inset:0}.ring-center{pointer-events:none;text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:0 16%;display:flex;position:absolute;inset:0}.ring-center-value{font-family:var(--mono);letter-spacing:-.02em;color:var(--text);font-size:clamp(16px,5.5vw,22px);font-weight:700;line-height:1.15}.ring-center-pill{font-family:var(--mono);border-radius:999px;padding:5px 12px;font-size:clamp(11px,3vw,13px);font-weight:600;line-height:1.3}.ring-center-pill.positive{background:var(--positive-tint);color:var(--positive-text)}.ring-center-pill.negative{background:var(--negative-tint);color:var(--negative-text)}.ring-badge{align-items:center;display:flex;position:absolute;transform:translate(-50%,-50%)}.ring-logo{border:2px solid var(--surface);object-fit:cover;z-index:1;background:#fff;border-radius:50%;width:34px;height:34px;box-shadow:0 1px 3px #00000040}.ring-logo-fallback,.ring-logo-other{color:#fff;letter-spacing:.02em;background:#1a1a1e;justify-content:center;align-items:center;font-size:10px;font-weight:700;display:flex}.ring-badge-pct{color:#fff;font-family:var(--mono);white-space:nowrap;background:#1a1a1e;border-radius:999px;margin-left:-16px;padding:6px 10px 6px 22px;font-size:12.5px;font-weight:600}.alloc-legend{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.alloc-legend li{align-items:center;gap:10px;font-size:13.5px;display:flex}.swatch{border-radius:3px;flex-shrink:0;width:9px;height:9px}.legend-label{color:var(--text);font-weight:500}.legend-value{font-family:var(--mono);color:var(--text);margin-left:auto;font-size:13px}.legend-pct{font-family:var(--mono);color:var(--text-secondary);text-align:right;width:56px;font-size:12.5px}.empty-note{color:var(--text-secondary);padding:8px 0;font-size:13.5px}.error-note{color:var(--negative-text);margin:8px 0;font-size:13px}.table-wrap{margin:0 -20px -20px;padding:0 20px 4px;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:13.5px}th,td{text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;padding:12px}th{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;background:var(--canvas);font-size:11px;font-weight:600}td{color:var(--text)}tbody tr:hover{background:var(--surface-hover)}tbody tr:last-child td{border-bottom:none}.mono{font-family:var(--mono)}.dim{color:var(--text-secondary);font-weight:400}.positive{color:var(--positive-text)}.negative{color:var(--negative-text)}.inline-form{gap:8px;margin-bottom:16px;display:flex}.inline-form input{flex:1}.grid-form{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));align-items:center;gap:12px;margin-bottom:20px;display:grid}.holdings-form{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.form-actions{gap:8px;display:flex}.search-row{align-items:center;gap:8px;margin-bottom:16px;display:flex}.search-field{flex:1;max-width:320px;position:relative}.search-field svg{color:var(--text-muted);position:absolute;top:50%;left:11px;transform:translateY(-50%)}.search-field input{width:100%;padding-left:32px}label.field-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);margin-bottom:6px;font-size:11px;font-weight:600;display:block}input,select{font:inherit;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:9px;width:100%;padding:9px 12px;font-size:13.5px}input::placeholder{color:var(--text-muted)}input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent);outline:none}button{font:inherit;border:1px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer;border-radius:9px;align-items:center;gap:6px;padding:9px 16px;font-size:13.5px;font-weight:600;transition:background .15s,opacity .15s;display:inline-flex}button:hover{background:var(--accent-hover);border-color:var(--accent-hover)}button.secondary{background:var(--surface);border-color:var(--border);color:var(--text)}button.secondary:hover{background:var(--surface-hover);border-color:var(--border-strong)}button.danger{border-color:var(--border);color:var(--negative-text);background:0 0}button.danger:hover{background:var(--negative-tint);border-color:var(--negative-border)}.icon-only{justify-content:center;width:30px;height:30px;padding:0}.broker-cards{flex-direction:column;gap:12px;display:flex}.broker-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;flex-wrap:wrap;align-items:center;gap:18px;padding:18px 20px;display:flex}.broker-avatar{background:var(--accent-soft);width:40px;height:40px;color:var(--accent);border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;font-size:13px;font-weight:700;display:flex}.broker-info{flex-direction:column;flex:1;gap:6px;min-width:200px;display:flex}.broker-name{color:var(--text);font-size:14.5px;font-weight:600}.broker-accounts{flex-wrap:wrap;gap:6px;display:flex}.broker-value{text-align:right;flex-direction:column;gap:2px;min-width:130px;display:flex}.broker-value .label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);font-size:11px}.broker-value .value{font-family:var(--mono);color:var(--text);font-size:17px;font-weight:600}.totals-row td{background:var(--surface-hover);font-weight:600;font-family:var(--mono);border-top:1px solid var(--border-strong)}@media (width<=900px){.app-header-inner{gap:12px}.nav-toggle{order:-1;display:flex}.brand-name{display:none}.tabs{background:var(--surface);border-bottom:1px solid var(--border);box-shadow:var(--shadow-float);z-index:30;flex-direction:column;align-items:stretch;gap:2px;padding:8px;display:none;position:absolute;top:100%;left:0;right:0}.tabs.open{display:flex}.tab{text-align:left;border-radius:8px;padding:12px 14px;font-size:14.5px}.nav-backdrop{z-index:20;background:#0f172a59;display:block;position:fixed;inset:64px 0 0}.header-actions{gap:6px}.currency-select{padding:6px 22px 6px 8px;font-size:12px}.icon-btn,.nav-toggle{width:38px;height:38px}}@media (width<=720px){.app-header-inner{padding:0 max(12px, env(safe-area-inset-left)) 0 max(12px, env(safe-area-inset-right));gap:10px;height:56px}.nav-backdrop{top:56px}.app-main{padding:16px max(12px, env(safe-area-inset-right)) max(16px, env(safe-area-inset-bottom)) max(12px, env(safe-area-inset-left));gap:18px}.page-head{flex-direction:column!important;align-items:flex-start!important}.stat-cards{grid-template-columns:1fr 1fr;gap:10px}.stat-card{padding:14px}.stat-value{font-size:21px}.panel{border-radius:10px;padding:16px}.panel-head{flex-wrap:wrap}.broker-card{gap:12px;padding:14px}.broker-value{text-align:left;flex:100%;min-width:0}.modal{max-width:100%}input,select,textarea{font-size:16px}.inline-form{flex-direction:column;align-items:stretch}.form-actions{flex-wrap:wrap}.table-wrap.stack-mobile{margin:0;padding:0;overflow-x:visible}.stack-mobile table,.stack-mobile thead,.stack-mobile tbody,.stack-mobile th,.stack-mobile td,.stack-mobile tr{width:100%;display:block}.stack-mobile thead{display:none}.stack-mobile tbody tr{border:1px solid var(--border);background:var(--surface);border-radius:10px;margin-bottom:10px;padding:10px 12px}.stack-mobile tbody tr.totals-row{background:var(--surface-hover)}.stack-mobile tbody tr:last-child{margin-bottom:0}.stack-mobile td{text-align:right;border-bottom:1px dashed var(--border);white-space:normal;word-break:break-word;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;padding:7px 0;display:flex}.stack-mobile td>input,.stack-mobile td>select{flex:auto;width:auto;min-width:0;max-width:60%}.stack-mobile td:last-child{border-bottom:none}.stack-mobile td:before{content:attr(data-label);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;text-align:left;flex-shrink:0;font-size:11px;font-weight:600}.stack-mobile td:empty:before{content:none}.stack-mobile td:not([data-label]){justify-content:flex-end}.stack-mobile td.row-label{text-align:left;color:var(--text);border-bottom:1px solid var(--border-strong);margin-bottom:4px;padding-bottom:8px;font-weight:600;display:block}.stack-mobile td.row-label:before{content:none}}
