:root{--background:#f5f7fb;--surface:#ffffff;--surface-muted:#f0f4f6;--text:#172026;--muted:#667085;--border:#d8dee7;--primary:#0f766e;--primary-strong:#115e59;--warning:#b7791f;--danger:#b42318;--up:#ff3b47;--down:#00a650;--shadow:0 16px 38px rgba(23,32,38,0.08)}*{box-sizing:border-box}body{margin:0;background:var(--background);color:var(--text);font-family:Inter,Microsoft YaHei,PingFang SC,Helvetica Neue,Arial,sans-serif}button,input,select{font:inherit}button{border:0;cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}.center-screen{align-items:center;display:flex;justify-content:center;padding:24px}.app-shell,.center-screen{min-height:100vh}.topbar{background:rgba(255,255,255,.94);border-bottom:1px solid var(--border);justify-content:space-between;min-height:64px;padding:0 28px;position:-webkit-sticky;position:sticky;top:0;z-index:10}.brand,.topbar{align-items:center;display:flex}.brand{gap:10px;font-size:18px;font-weight:700}.brand-mark{align-items:center;background:#e1f5f0;border:1px solid #a8ded0;border-radius:8px;color:var(--primary-strong);display:inline-flex;height:36px;justify-content:center;width:36px}.main{margin:0 auto;max-width:1480px;padding:24px}.compact-main{max-width:1480px;padding-top:20px}.toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-bottom:18px}.compact-toolbar{margin-bottom:12px}.toolbar-actions{align-items:center;display:flex;flex-wrap:wrap;gap:10px}.summary-grid{display:grid;grid-gap:14px;gap:14px;grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:18px}.login-card,.metric-card,.notice-card,.panel{background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow)}.metric-card{min-height:116px;padding:16px}.metric-label{color:var(--muted);font-size:13px}.metric-value{font-size:26px;font-weight:750;line-height:1.3;margin-top:12px;word-break:break-word}.metric-note,.muted,.status-text{color:var(--muted);font-size:13px}.panel{overflow:hidden}.panel-header{align-items:center;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;padding:16px}.panel-title{font-size:16px;font-weight:700;margin:0}.portfolio-summary{background:#ffffff;border:1px solid #eef1f5;display:grid;grid-gap:0;gap:0;grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:12px}.portfolio-summary-item{border-right:1px solid #eef1f5;min-width:0;padding:14px 18px}.portfolio-summary-item:last-child{border-right:0}.portfolio-summary-label{color:#8a91af;font-size:14px;line-height:1.35}.portfolio-summary-value{color:#00184a;font-size:24px;font-weight:700;line-height:1.25;margin-top:6px;overflow-wrap:anywhere}.portfolio-summary-note{color:#8589a8;font-size:13px;line-height:1.35;margin-top:4px}.holdings-board{background:#ffffff;border:1px solid #eef1f5;overflow:hidden}.fund-tabs{align-items:flex-end;border-bottom:1px solid #eef1f5;display:flex;gap:22px;min-height:56px;padding:0 18px}.real-tabs{background:#ffffff;border:1px solid #eef1f5;margin-bottom:12px;overflow-x:auto}.fund-tab{background:transparent;color:#8991b3;font-size:20px;height:56px;padding:0;position:relative}.fund-tab.active{color:#00184a;font-weight:800}.fund-tab.active:after{background:#2d6bff;border-radius:999px;bottom:0;content:"";height:4px;left:4px;position:absolute;right:4px}.new-watchlist-controls{align-items:center;display:flex;gap:8px;margin-left:auto;min-width:260px}.list-sort-row{background:#ffffff;border-bottom:1px solid #eef1f5;justify-content:flex-end;overflow-x:auto;padding:10px 16px}.list-sort-row,.sort-controls{align-items:center;display:flex}.sort-controls{gap:8px;white-space:nowrap}.sort-label{color:#8a91af;font-size:13px}.sort-button{align-items:center;background:#ffffff;border:1px solid #dce3ee;border-radius:6px;color:#536179;display:inline-flex;gap:6px;min-height:32px;padding:0 10px}.sort-button.active{border-color:#2d6bff;color:#00184a;font-weight:700}.sort-direction{color:#8a91af;font-size:12px;font-weight:500}.watchlist-panel{margin-top:0}.watchlist-header{gap:12px}.watchlist-add-row{align-items:center;border-bottom:1px solid var(--border);display:grid;grid-gap:10px;gap:10px;grid-template-columns:minmax(110px,.8fr) minmax(180px,1.4fr) minmax(140px,1fr) minmax(120px,.8fr) auto;padding:14px 16px}.watchlist-table{min-width:1320px}.compact-form-grid{gap:8px;margin-top:0}.portfolio-table-wrap{overflow-x:auto}.portfolio-table{border-collapse:collapse;min-width:1280px;width:100%}.portfolio-table td,.portfolio-table th{border-bottom:1px solid #edf0f5;padding:10px 16px}.portfolio-table th{background:#ffffff;color:#8a91af;font-size:15px;font-weight:500;line-height:1.3;text-align:right;vertical-align:middle;white-space:nowrap}.portfolio-table th span{display:block;font-size:15px;font-weight:400}.portfolio-table td:first-child,.portfolio-table th:first-child{text-align:left}.portfolio-table tbody td{font-size:18px;height:80px;text-align:right}.portfolio-table tbody tr:last-child td{border-bottom:0}.portfolio-fund-head{min-width:300px}.management-link{align-items:center;background:transparent;color:#8a91af;display:inline-flex;gap:8px;padding:0}.management-link:hover{color:#30436f}.portfolio-fund-cell{min-width:300px}.portfolio-fund-name{color:#00184a;font-size:22px;font-weight:500;line-height:1.22;word-break:break-word}.portfolio-fund-sub{align-items:center;color:#8589a8;display:flex;flex-wrap:wrap;font-size:18px;gap:8px;line-height:1.35;margin-top:4px}.portfolio-status{border:1px solid #a9bbff;border-radius:5px;color:#3564f5;font-size:13px;line-height:1;padding:3px 5px}.portfolio-status.failed,.portfolio-status.stale{border-color:#fed7aa;color:#9a3412}.portfolio-status.timing{border-color:#c7d2fe;color:#3846a8}.portfolio-primary{font-size:22px;font-weight:500;line-height:1.24}.portfolio-secondary{color:#8589a8;font-size:18px;font-weight:400;line-height:1.3;margin-top:3px;white-space:nowrap}.gain .portfolio-secondary,.loss .portfolio-secondary{color:inherit}.management-panel{margin-top:18px}.table-wrap{overflow-x:auto}table{border-collapse:collapse;min-width:1180px;width:100%}td,th{border-bottom:1px solid var(--border);font-size:14px;padding:12px;text-align:left;vertical-align:middle}th{background:var(--surface-muted);color:#344054;font-size:12px;font-weight:700;white-space:nowrap}tr:last-child td{border-bottom:0}.fund-name-cell{min-width:210px}.code-pill,.status-pill{border:1px solid var(--border);border-radius:999px;display:inline-flex;font-size:12px;padding:3px 8px}.code-pill{background:#eef2ff;color:#3730a3}.status-pill{background:#f8fafc;color:#475467}.status-pill.failed,.status-pill.stale{background:#fff7ed;border-color:#fed7aa;color:#9a3412}.status-pill.fresh,.status-pill.matched{background:#ecfdf3;border-color:#bbf7d0;color:#166534}.gain{color:var(--up)}.gain,.loss{font-weight:700}.loss{color:var(--down)}.button{align-items:center;background:var(--primary);border-radius:8px;color:#ffffff;display:inline-flex;gap:8px;height:38px;justify-content:center;padding:0 13px;white-space:nowrap}.button:hover{background:var(--primary-strong)}.button.secondary{background:#ffffff;border:1px solid var(--border);color:var(--text)}.button.secondary:hover{background:var(--surface-muted)}.button.danger{background:#fff1f2;border:1px solid #fecdd3;color:var(--danger)}.icon-button{align-items:center;display:inline-flex;height:34px;justify-content:center;width:34px}.icon-button,.input,.select{background:#ffffff;border:1px solid var(--border);border-radius:8px;color:var(--text)}.input,.select{height:38px;padding:0 10px;width:100%}.input:focus,.select:focus{border-color:var(--primary);outline:2px solid rgba(15,118,110,.14)}.compact-select{min-width:112px}.login-card{max-width:420px;padding:24px;width:100%}.login-title{font-size:22px;margin:0 0 6px}.form-grid{display:grid;grid-gap:12px;gap:12px;margin-top:18px}.form-label{color:#344054;display:grid;font-size:13px;grid-gap:6px;gap:6px}.alert{background:#fff7ed;border:1px solid #fed7aa;border-radius:8px;color:#9a3412}.alert,.success{font-size:13px;padding:10px 12px}.success{background:#ecfdf3;border:1px solid #bbf7d0;border-radius:8px;color:#166534}.notice-card{margin:24px auto;max-width:680px;padding:20px}.empty{color:var(--muted);padding:28px;text-align:center}.modal-backdrop{align-items:flex-start;background:rgba(15,23,42,.42);display:flex;inset:0;justify-content:center;overflow:auto;padding:42px 18px;position:fixed;z-index:40}.modal{background:#ffffff;border-radius:8px;box-shadow:0 24px 80px rgba(15,23,42,.28);max-width:1080px;width:100%}.modal-footer,.modal-header{align-items:center;display:flex;justify-content:space-between;padding:16px}.modal-header{border-bottom:1px solid var(--border)}.modal-footer{border-top:1px solid var(--border)}.modal-body{display:grid;grid-gap:14px;gap:14px;padding:16px}.upload-box{align-items:center;border:1px dashed #9ab0ba;border-radius:8px;display:flex;gap:12px;justify-content:space-between;padding:14px}.file-list{display:grid;grid-gap:8px;gap:8px}.file-row{background:#f8fafc;border:1px solid var(--border);border-radius:8px;justify-content:space-between;padding:10px 12px}.file-row,.inline-actions{align-items:center;display:flex}.inline-actions{gap:8px}.new-row{background:#fbfdff}@media (max-width:920px){.summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.main,.topbar{padding-left:16px;padding-right:16px}}@media (max-width:620px){.portfolio-summary,.summary-grid{grid-template-columns:1fr}.portfolio-summary-item{border-bottom:1px solid #eef1f5;border-right:0}.portfolio-summary-item:last-child{border-bottom:0}.topbar{align-items:flex-start;flex-direction:column;gap:10px;padding-bottom:12px;padding-top:12px}.modal-footer,.modal-header,.real-tabs,.toolbar,.toolbar-actions,.upload-box,.watchlist-header{align-items:stretch;flex-direction:column}.real-tabs{padding:10px 12px}.fund-tab{align-self:flex-start;height:40px}.new-watchlist-controls,.watchlist-add-row{grid-template-columns:1fr;margin-left:0;min-width:0;width:100%}.new-watchlist-controls{display:grid}.list-sort-row{justify-content:flex-start}.button{width:100%}}