@import"https://fonts.googleapis.com/css2?family=Manrope:wght@500;600;700;800&family=Noto+Sans+SC:wght@400;500;700&display=swap";:root{--color-bg: #ffffff;--color-surface: #f7f8fa;--color-border: #e6e8eb;--color-text-primary: #111827;--color-text-secondary: #6b7280;--color-text-tertiary: #9ca3af;--color-accent: #1d4ed8;--color-accent-strong: #1e3a8a;--color-success: #0f766e;--color-warning: #d97706;--color-error: #dc2626;--color-info: #0369a1;--chart-up: #dc2626;--chart-down: #0f766e;--chart-neutral: #64748b;--chart-grid: #e2e8f0;--chart-benchmark-up: #ef4444;--chart-benchmark-down: #14b8a6;--chart-user-up: #b91c1c;--chart-user-down: #0d9488;--font-size-h1: 24px;--line-height-h1: 32px;--font-size-h2: 18px;--line-height-h2: 24px;--font-size-body: 14px;--line-height-body: 20px;--font-size-caption: 12px;--line-height-caption: 16px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-6: 24px;--space-8: 32px;--radius-card: 12px;--radius-button: 10px;--radius-input: 8px;--shadow-elevation-1: 0 8px 20px rgba(15, 23, 42, .06);--shadow-elevation-2: 0 18px 38px rgba(15, 23, 42, .09)}:root{--bg: #eef3fb;--panel: var(--color-bg);--line: #d7e0ef;--text: var(--color-text-primary);--muted: #60708f;--brand: var(--color-accent);--brand-dark: var(--color-accent-strong);--green: var(--color-success);--red: var(--color-error);--warn: var(--color-warning);--shadow: var(--shadow-elevation-2)}*{box-sizing:border-box}body{margin:0;font-family:Noto Sans SC,Segoe UI,sans-serif;color:var(--text);background:radial-gradient(circle at 10% -10%,rgba(59,130,246,.15),transparent 42%),radial-gradient(circle at 90% -10%,rgba(14,165,233,.14),transparent 38%),var(--bg)}button,input,select{font-family:inherit}.numeric-tabular{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.page-shell{max-width:1480px;margin:0 auto;padding:20px 18px 56px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow)}.loading-panel{margin-top:18vh;text-align:center;padding:48px;font-size:22px;font-weight:700}.login-panel{max-width:520px;margin:10vh auto 0;padding:26px}.login-panel h2{margin:0;font-size:34px;font-family:Manrope,Noto Sans SC,sans-serif}.login-panel p{margin:8px 0 16px;color:var(--muted);font-size:18px}.auth-mode{display:flex;gap:10px;margin-bottom:14px}.auth-form{display:grid;gap:12px}.auth-form label{display:grid;gap:6px;font-size:16px}.auth-form input{border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:16px}.auth-message{border-radius:10px;padding:9px 11px;font-size:14px;font-weight:600;line-height:1.4}.auth-message-error{color:#b91c1c;border:1px solid #fecaca;background:#fef2f2}.auth-message-success{color:#0f766e;border:1px solid #99f6e4;background:#ecfeff}.top-toolbar{padding:12px 14px;display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:center}.brand-block{display:flex;gap:12px;align-items:center}.logo{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:linear-gradient(140deg,#3b82f6,#1d4ed8);color:#fff;font-family:Manrope,sans-serif;font-weight:800;font-size:19px}.brand-block h1{margin:0;font-size:28px;font-family:Manrope,Noto Sans SC,sans-serif;line-height:1.05}.brand-block p{margin:4px 0 0;color:var(--muted);font-size:15px}.toolbar-actions{display:grid;gap:8px}.toolbar-row{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px;font-size:14px}.toolbar-row-search{margin-bottom:2px}.toolbar-meta{color:var(--muted)}.toolbar-note{margin-left:auto;color:var(--muted);font-size:13px;line-height:1.4;text-align:right;max-width:860px}.toolbar-search{min-width:min(100%,460px);display:grid;gap:6px;position:relative}.toolbar-search span{color:var(--muted);font-size:13px;font-weight:600}.toolbar-search input{width:100%;border:1px solid var(--line);border-radius:10px;padding:8px 10px;font-size:14px;background:#fff}.toolbar-suggest{position:absolute;top:calc(100% + 6px);left:0;right:0;border:1px solid var(--line);border-radius:12px;background:#fff;box-shadow:0 12px 24px #0f172a1f;z-index:20;overflow:hidden}.suggest-item{width:100%;border:none;border-bottom:1px solid #edf2fb;background:#fff;padding:10px 12px;display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:left;cursor:pointer}.suggest-item:last-child{border-bottom:none}.suggest-item strong{font-size:14px;color:var(--text);font-weight:700}.suggest-item span{font-size:12px;color:var(--muted);font-family:Manrope,Noto Sans SC,sans-serif}.suggest-item.muted{color:var(--muted);font-size:13px;cursor:default}button{border:none;border-radius:10px;padding:8px 12px;font-weight:700;font-size:15px;cursor:pointer}button.primary{color:#fff;background:var(--brand)}button.ghost{color:var(--brand-dark);background:#e8efff}button.danger{color:#fff;background:#dc2626}button:hover{filter:brightness(.96)}button:disabled{opacity:.75;cursor:not-allowed}.status-pill{border-radius:999px;border:1px solid var(--line);padding:7px 12px;font-weight:600;font-size:14px}.status-info{color:#1d4ed8;background:#eef4ff}.status-success{color:#15803d;background:#ecfdf5}.status-error{color:#b91c1c;background:#fef2f2}.bottom-tabs{margin-top:14px;padding:8px;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.summary-grid{margin-top:16px;display:grid;gap:12px;grid-template-columns:repeat(4,minmax(0,1fr))}.summary-card{padding:14px}.summary-card h3{margin:0;color:var(--muted);font-size:15px}.summary-card strong{display:block;margin-top:8px;font-family:Manrope,Noto Sans SC,sans-serif;font-size:30px;line-height:1.2}.summary-card span{display:block;margin-top:4px;font-size:16px}.summary-card strong,.summary-card span,.dual-value .main,.dual-value .sub,.metric-main,.metric-sub,.watch-profit,.record-side strong,.chart-y-label,.chart-x-label{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.summary-skeleton{display:grid;gap:10px}.skeleton-line{border-radius:8px;background:linear-gradient(90deg,#edf2fb,#f7f9fe,#edf2fb);background-size:200% 100%;animation:skeleton 1.5s linear infinite}.skeleton-title{width:42%;height:14px}.skeleton-main{width:68%;height:28px}.skeleton-sub{width:36%;height:14px}@keyframes skeleton{0%{background-position:180% 0}to{background-position:-20% 0}}.holdings-main,.home-main{margin-top:16px;padding:16px}.perf-panel{margin-top:14px}.perf-grid,.todo-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.todo-card{border:1px solid var(--line);border-radius:12px;padding:14px;background:#f8fbff;display:grid;gap:10px}.todo-card h3{margin:0;font-size:18px}.todo-card p{margin:0;font-size:14px;color:var(--muted)}.watch-list{display:grid;gap:10px}.watch-item{border:1px solid var(--line);border-radius:12px;background:#f8fbff;padding:12px 14px;display:flex;align-items:center;justify-content:space-between}.watch-item h3{margin:0;font-size:16px}.watch-item p{margin:4px 0 0;color:var(--muted);font-size:13px}.watch-profit{font-size:20px;font-weight:800;font-family:Manrope,Noto Sans SC,sans-serif;font-variant-numeric:tabular-nums}.trade-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.trade-tip{margin:12px 0 0;color:var(--muted);font-size:14px}.trade-form{margin-top:12px;border:1px solid var(--line);border-radius:12px;background:#f8fbff;padding:12px;display:grid;grid-template-columns:1fr 1fr auto auto;gap:10px;align-items:end}.trade-form label{display:grid;gap:4px;font-size:13px;color:var(--muted)}.trade-form input[type=text],.trade-form input[type=number],.trade-form select{border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:14px;color:var(--text);background:#fff}.dca-plan-form{margin-top:8px;grid-template-columns:repeat(5,minmax(0,1fr))}.reminder-form{margin-top:8px;grid-template-columns:repeat(6,minmax(0,1fr))}.trade-check{display:flex!important;align-items:center;gap:6px;color:var(--text)}.trade-result{margin-top:10px;border:1px solid #b9ebd8;border-radius:12px;background:#f3fff9;padding:10px 12px}.trade-result strong{display:block;font-size:14px;color:#0f766e}.trade-result p{margin:4px 0 0;font-size:13px;color:#36506a}.state-showcase{margin-top:8px;padding:12px}.state-grid{display:grid;gap:10px;grid-template-columns:repeat(2,minmax(0,1fr))}.state-card{border:1px solid var(--line);border-radius:var(--radius-card);background:#fff;padding:12px;display:grid;gap:8px}.state-card h4{margin:0;font-size:var(--font-size-h2);line-height:var(--line-height-h2)}.state-actions{display:flex;flex-wrap:wrap;gap:8px}.demo-hover{filter:brightness(.96)}.state-field{display:grid;gap:4px;font-size:var(--font-size-body);line-height:var(--line-height-body);color:var(--text)}.state-field input{border:1px solid var(--line);border-radius:var(--radius-input);padding:8px 10px;font-size:14px}.state-input-error{border-color:var(--color-error)!important;background:#fff5f5}.state-error-text{color:var(--color-error);font-size:var(--font-size-caption);line-height:var(--line-height-caption)}.state-tags{display:flex;gap:8px;flex-wrap:wrap}.status-warning{color:#b45309;background:#fffbeb}.state-skeleton{border:1px solid var(--line);border-radius:10px;padding:10px;display:grid;gap:8px}.state-skeleton-line{height:12px}.trade-head{margin-top:18px}.plan-list{display:grid;gap:8px;margin-top:8px}.plan-item{border:1px solid var(--line);border-radius:12px;background:#f8fbff;padding:12px;display:grid;grid-template-columns:1fr auto;gap:10px}.plan-item h4{margin:0;font-size:15px}.plan-item p{margin:4px 0 0;color:var(--muted);font-size:12px}.plan-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end}.record-list{display:grid;gap:8px}.record-item{border:1px solid var(--line);border-radius:12px;background:#f8fbff;padding:12px;display:flex;align-items:center;justify-content:space-between;gap:12px}.record-item h4{margin:0;font-size:16px}.record-item p{margin:4px 0 0;color:var(--muted);font-size:12px}.record-side{display:grid;justify-items:end;gap:4px}.record-side strong{font-family:Manrope,Noto Sans SC,sans-serif;font-size:18px;font-variant-numeric:tabular-nums}.record-done,.record-pending{border-radius:999px;padding:2px 8px;font-size:12px;font-weight:700}.record-done{color:#0f766e;background:#e7fff8}.record-pending{color:#b45309;background:#fff7ed}.message-list{display:grid;gap:10px}.message-item{border:1px solid var(--line);border-radius:12px;background:#f8fbff;padding:12px;display:flex;align-items:center;justify-content:space-between;gap:12px}.message-item h4{margin:0;font-size:16px}.message-item p{margin:4px 0 0;color:var(--muted);font-size:14px}.message-warning{border-color:#f6cf9a;background:#fffaf1}.message-info{border-color:#c0d7ff;background:#f5f9ff}.message-success{border-color:#b9ebd8;background:#f3fff9}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:10px}.section-head h2,.section-head h3{margin:0;font-size:26px}.section-head span{color:var(--muted);font-size:14px}.holdings-section+.holdings-section{margin-top:20px}.table-wrap{border:1px solid var(--line);border-radius:14px;overflow:auto}.holdings-table{width:100%;min-width:1500px;border-collapse:collapse}.holdings-table th,.holdings-table td{padding:10px;border-bottom:1px solid #e8edf7;vertical-align:middle}.holdings-table th{background:#f6f9ff;color:#445672;font-size:13px;font-weight:700;white-space:nowrap}.holdings-table td{font-size:15px}.align-right{text-align:right}.th-button{border:none;background:transparent;color:inherit;display:inline-flex;gap:6px;align-items:center;padding:0;font-size:inherit;font-weight:inherit;cursor:pointer}.th-button.is-active{color:#1d4ed8}.sort-toggle{display:inline-grid;grid-template-rows:repeat(2,1fr);gap:2px;padding:1px 0;min-width:8px}.triangle{width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent}.triangle.up{border-bottom:6px solid #a3b0c7}.triangle.down{border-top:6px solid #a3b0c7}.triangle.active.up{border-bottom-color:#2563eb}.triangle.active.down{border-top-color:#2563eb}.fund-name{font-size:16px;font-weight:700}.fund-sub{margin-top:4px;display:flex;align-items:center;flex-wrap:wrap;gap:6px;color:var(--muted);font-size:13px}.fund-code{font-family:Manrope,sans-serif}.badge{border-radius:8px;padding:2px 6px;font-size:12px;font-weight:700}.badge-wait{color:#1d4ed8;background:#e8efff}.badge-updated{color:#0f766e;background:#e6fffa}.badge-error{color:#b91c1c;background:#fee2e2}.dual-value{display:grid;justify-items:end;gap:2px}.dual-value .main{font-size:16px;line-height:1.1;font-weight:700}.dual-value .sub{font-size:12px;color:var(--muted)}.table-input{width:110px;border:1px solid var(--line);border-radius:8px;padding:4px 6px;text-align:right;font-size:13px}.table-input[type=date]{width:132px}.text-btn{border:none;background:transparent;color:#1d4ed8;font-weight:700;padding:2px}.row-actions{display:inline-flex;gap:6px}.danger-text{color:#b91c1c}.row-selected{background:#edf4ff}.sparkline{width:100px;height:30px}.sparkline-empty{color:var(--muted);font-size:12px}.empty-row{text-align:center;color:var(--muted);padding:24px!important}.is-up{color:var(--red);font-weight:700}.is-down{color:var(--green);font-weight:700}.detail-panel{margin-top:16px;padding:16px}.detail-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.detail-head h3{margin:0;font-size:28px}.detail-head p{margin:6px 0 0;color:var(--muted)}.range-tabs{display:flex;gap:6px;flex-wrap:wrap}.metric-grid{margin-top:12px;display:grid;gap:10px;grid-template-columns:repeat(3,minmax(0,1fr))}.metric-item{border:1px solid var(--line);border-radius:12px;padding:10px;background:#f8fbff}.metric-item h4{margin:0;color:var(--muted);font-size:13px}.metric-main{margin-top:6px;font-size:24px;font-weight:700;font-family:Manrope,Noto Sans SC,sans-serif}.metric-sub{margin-top:2px;font-size:14px}.chart-panel{margin-top:14px}.chart-panel h4{margin:0 0 8px;font-size:17px}.chart-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}.chart-head h4{margin:0}.chart-hint{margin:0 0 8px;color:var(--muted);font-size:13px}.chart-wrap{border:1px solid var(--line);border-radius:12px;padding:6px;background:linear-gradient(180deg,#f9fbff,#f5f8ff)}.chart{width:100%;height:290px;display:block}.chart-y-label,.chart-x-label{fill:#64748b;font-size:11px}.chart-empty{border:1px dashed var(--line);border-radius:10px;color:var(--muted);text-align:center;padding:30px}.risk-panel{margin-top:16px;padding:16px}.risk-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.risk-card{border:1px solid var(--line);border-radius:12px;background:#f8fbff;padding:12px}.risk-card h4{margin:0 0 8px;font-size:16px}.risk-card p,.risk-card li{margin:4px 0;font-size:14px}.risk-card ul{margin:0;padding-left:18px}.settings-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a57;z-index:999;display:flex;justify-content:flex-end}.settings-drawer{width:min(540px,95vw);height:100%;background:#fff;border-left:1px solid var(--line);box-shadow:-10px 0 30px #0f172a26;padding:16px;overflow:auto}.settings-drawer header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.settings-drawer h3{margin:0;font-size:26px}.settings-group{border:1px solid var(--line);border-radius:12px;padding:12px;margin-bottom:10px;display:grid;gap:8px}.settings-group h4{margin:0;font-size:18px}.settings-group label{display:grid;gap:4px;font-size:14px}.settings-group input{border:1px solid var(--line);border-radius:8px;padding:8px;font-size:14px}.settings-group select{border:1px solid var(--line);border-radius:8px;padding:8px;font-size:14px;background:#fff}.settings-benchmark-actions{display:flex;justify-content:flex-start}.settings-benchmark-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 12px;font-size:13px;color:var(--text-subtle)}.settings-benchmark-list{display:grid;gap:8px;max-height:260px;overflow:auto}.settings-benchmark-item{border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:#fbfdff}.settings-benchmark-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.settings-benchmark-title .ok{color:#0f766e}.settings-benchmark-title .bad{color:#b91c1c}.settings-error{margin:0;font-size:13px;color:#b91c1c}.settings-drawer footer{position:sticky;bottom:0;background:#fff;padding-top:10px}@media (max-width: 1280px){.summary-grid,.todo-grid,.perf-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.trade-form{grid-template-columns:1fr 1fr}.dca-plan-form,.reminder-form{grid-template-columns:1fr 1fr 1fr}.metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.state-grid{grid-template-columns:1fr}}@media (max-width: 900px){.top-toolbar{grid-template-columns:1fr}.toolbar-row{justify-content:flex-start}.bottom-tabs{grid-template-columns:repeat(3,minmax(0,1fr))}.brand-block h1{font-size:32px}.todo-grid,.perf-grid,.trade-grid,.summary-grid,.risk-grid,.metric-grid,.trade-form,.dca-plan-form,.reminder-form,.plan-item{grid-template-columns:1fr}}
