:root{--frm-primary: #6366f1;--frm-primary-hover: #4f46e5;--frm-primary-soft: #eef2ff;--frm-primary-border: #c7d2fe;--frm-primary-text: #4338ca;--frm-success: #15803d;--frm-success-soft: #ecfdf5;--frm-success-text: #15803d;--frm-warning: #c2410c;--frm-warning-soft: #fffbeb;--frm-warning-text: #c2410c;--frm-warning-border: #fde68a;--frm-danger: #dc2626;--frm-danger-soft: #fef2f2;--frm-danger-text: #dc2626;--frm-danger-border: #fecaca;--frm-bg: #f0f4f8;--frm-surface: #ffffff;--frm-surface-alt: #f8fafc;--frm-border: #e2e8f0;--frm-border-soft: #f1f5f9;--frm-text: #1e293b;--frm-text-muted: #5f6c7f;--frm-text-faint: #5b6b7f;--frm-pos-text: var(--frm-success);--frm-neg-text: var(--frm-danger);--frm-na-text: var(--frm-text-muted);--frm-pos-soft-2: #86efac;--frm-neg-soft-2: #fecaca;--frm-pos-deep-1: #0b6b3a;--frm-pos-deep-2: #064e3b;--frm-neg-deep-1: #b91c1c;--frm-neg-deep-2: #7f1d1d;--frm-pos-on-light: #14532d;--frm-neg-on-light: #7f1d1d;--frm-info: #2563eb;--frm-info-soft: #eff6ff;--frm-info-border: #bfdbfe;--frm-grade-aplus-bg: #4ade80;--frm-grade-aplus-fg: #052e16;--frm-grade-aplus-bar: #15803d;--frm-grade-a-bg: #86efac;--frm-grade-a-fg: #14532d;--frm-grade-a-bar: #16a34a;--frm-grade-bplus-bg: #60a5fa;--frm-grade-bplus-fg: #0b1f4d;--frm-grade-bplus-bar: #2563eb;--frm-grade-b-bg: #bfdbfe;--frm-grade-b-fg: #1e40af;--frm-grade-b-bar: #3b82f6;--frm-grade-c-bg: #fb923c;--frm-grade-c-fg: #4a1d00;--frm-grade-c-bar: #d97706;--frm-grade-d-bg: #f87171;--frm-grade-d-fg: #450a0a;--frm-grade-d-bar: #dc2626;--frm-grade-mid-bg: #facc15;--frm-grade-mid-fg: #422006;--frm-grade-mid-bar: #a16207;--frm-bar-sortino: #3b82f6;--frm-bar-ma: #16a34a;--frm-bar-momentum: #d97706;--frm-cat-return-bg: #f0fdf4;--frm-cat-return-fg: #166534;--frm-cat-mdd-bg: #fef2f2;--frm-cat-mdd-fg: #991b1b;--frm-cat-calmar-bg: #f5f3ff;--frm-cat-calmar-fg: #5b21b6;--frm-note-warn-bg: #fef9c3;--frm-note-warn-border:#fde047;--frm-accent-1: #9333ea;--frm-accent-2: #7c3aed;--frm-dark-text: #e2e8f0;--frm-dark-soft: #cbd5e1;--frm-dark-muted: #94a3b8;--frm-dark-accent: #818cf8;--frm-dark-border: #334155;--frm-dark-success: #22c55e;--frm-dark-danger: #f87171;--frm-dark-warning: #f59e0b;--frm-sidebar-bg: #111827;--frm-sidebar-active: var(--frm-primary);--frm-sidebar-text: rgba(255,255,255,.55);--frm-sidebar-hover: rgba(255,255,255,.07);--frm-shadow-sm: 0 1px 4px rgba(0,0,0,.06);--frm-shadow-md: 0 4px 14px rgba(0,0,0,.08);--frm-shadow-lg: 0 12px 40px rgba(0,0,0,.12);--frm-radius-sm: 6px;--frm-radius-md: 10px;--frm-radius-lg: 14px}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang TC,Noto Sans TC,Arial,sans-serif;background:var(--frm-bg);color:var(--frm-text);font-size:14px}.app-layout{display:flex;min-height:100vh}.sidebar{width:220px;min-width:220px;background:linear-gradient(180deg,#0f172a,#111827);display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow-y:auto;z-index:100;flex-shrink:0;box-shadow:4px 0 24px #00000014}.sidebar-brand{padding:22px 18px 18px;border-bottom:1px solid rgba(255,255,255,.08);background:linear-gradient(180deg,rgba(99,102,241,.08),transparent)}.brand-name{font-size:16px;font-weight:800;color:#fff;letter-spacing:.01em;background:linear-gradient(135deg,#fff,#c7d2fe);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.brand-sub{font-size:10.5px;color:#ffffff6b;margin-top:4px;letter-spacing:.04em}.sidebar-nav{flex:1;padding:12px 10px;display:flex;flex-direction:column;gap:2px}.sidebar-item{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:8px;border:none;background:transparent;color:#ffffff9e;font-size:13.5px;cursor:pointer;text-align:left;width:100%;transition:all .18s ease;white-space:nowrap;position:relative}.sidebar-item:hover{background:#ffffff0f;color:#fffffff2;transform:translate(2px)}.sidebar-item.active{background:linear-gradient(135deg,var(--frm-primary) 0%,var(--frm-primary-hover) 100%);color:#fff;font-weight:600;box-shadow:0 4px 12px #6366f159}.sidebar-item.active:before{content:"";position:absolute;left:-10px;top:25%;bottom:25%;width:3px;background:var(--frm-primary);border-radius:0 2px 2px 0}.sidebar-icon{width:18px;flex-shrink:0;font-size:14px;text-align:center}.sidebar-footer{padding:14px 18px;border-top:1px solid rgba(255,255,255,.08);font-size:11px;color:#ffffff59;background:#00000026}.app-content{flex:1;overflow:auto;background:#f0f4f8;min-width:0}.page-inner{max-width:1280px;margin:0 auto;padding:28px 28px 40px}.loading-state,.error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 20px;gap:14px;color:var(--frm-text-muted)}.spinner{width:32px;height:32px;border:3px solid var(--frm-border);border-top-color:var(--frm-primary);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.controls{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}.search-input{border:1px solid #e2e8f0;border-radius:8px;padding:8px 14px;font-size:14px;width:280px;outline:none;background:#fff;transition:border-color .18s,box-shadow .18s}.search-input:focus{border-color:var(--frm-primary);box-shadow:0 0 0 3px #6366f126}.fund-count{color:var(--frm-text-faint);font-size:13px}.table-wrapper{overflow-x:auto;border-radius:10px;border:1px solid #e2e8f0;background:#fff;box-shadow:0 1px 4px #0000000f}.fund-table{width:100%;border-collapse:collapse}.fund-table th{background:#f8fafc;padding:10px 12px;text-align:left;font-weight:600;font-size:11.5px;color:var(--frm-text-muted);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid #e2e8f0;white-space:nowrap}.fund-table td{padding:9px 12px;border-bottom:1px solid #f1f5f9;white-space:nowrap}.fund-table tbody tr:last-child td{border-bottom:none}.fund-row{cursor:pointer;transition:background .12s}.fund-row:hover{background:var(--frm-primary-soft)}.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.sortable:hover{color:var(--frm-primary)}.fund-name{max-width:280px;overflow:hidden;text-overflow:ellipsis}.fund-code{color:var(--frm-text-faint);font-size:11px;font-family:monospace}.nav-price{font-weight:600;font-variant-numeric:tabular-nums}.nav-date{color:var(--frm-text-faint);font-size:12px}.return-cell{text-align:right}.ret-pos{color:var(--frm-success);font-weight:600}.ret-neg{color:var(--frm-danger);font-weight:600}.ret-zero{color:var(--frm-text-muted)}.ret-na{color:var(--frm-text-faint)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a8c;display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px;animation:fadeIn .18s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-content{background:#fff;border-radius:14px;width:100%;max-width:820px;max-height:92vh;overflow-y:auto;padding:24px;box-shadow:0 24px 80px #00000040;animation:slideUp .2s ease}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:18px}.modal-header h2{font-size:17px;font-weight:700;line-height:1.4}.modal-code{font-size:12px;color:var(--frm-text-faint);font-family:monospace;margin-top:2px;display:block}.close-btn{background:#f1f5f9;border:none;font-size:16px;cursor:pointer;color:var(--frm-text-muted);padding:6px 10px;border-radius:6px;transition:all .15s;flex-shrink:0}.close-btn:hover{background:#e2e8f0;color:#1e293b}.nav-summary{display:flex;gap:20px;padding:14px 18px;background:#f8fafc;border-radius:8px;margin-bottom:18px;flex-wrap:wrap}.nav-item{display:flex;flex-direction:column;gap:2px}.nav-label{font-size:11px;color:var(--frm-text-faint);text-transform:uppercase;letter-spacing:.05em}.nav-value{font-size:22px;font-weight:700;font-variant-numeric:tabular-nums}.section-title{font-size:11.5px;font-weight:600;color:var(--frm-text-faint);text-transform:uppercase;letter-spacing:.05em;margin-bottom:10px}.perf-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:8px;margin-bottom:20px}.perf-item{display:flex;flex-direction:column;gap:3px;padding:10px 8px;background:#f8fafc;border-radius:8px;text-align:center;border:1px solid #f1f5f9}.perf-label{font-size:11px;color:var(--frm-text-faint)}.perf-value{font-size:14px;font-weight:700}.range-selector{display:flex;gap:4px;margin-bottom:12px;flex-wrap:wrap}.range-btn{background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;padding:5px 13px;font-size:12.5px;cursor:pointer;transition:all .15s;color:var(--frm-text-muted)}.range-btn:hover{border-color:var(--frm-primary);color:var(--frm-primary);background:var(--frm-primary-soft)}.range-btn.active{background:var(--frm-primary);border-color:var(--frm-primary);color:#fff;font-weight:600}.comp-controls{margin-bottom:20px}.fund-search-wrap{position:relative;display:inline-block;margin-bottom:12px}.fund-search-wrap .search-input{width:320px}.suggestions{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 8px 24px #0000001a;z-index:100;max-height:280px;overflow-y:auto}.suggestion-item{padding:9px 14px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:8px;transition:background .12s}.suggestion-item:hover{background:var(--frm-primary-soft)}.suggestion-item span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.suggestion-code{font-size:11px;color:var(--frm-text-faint);font-family:monospace;flex-shrink:0}.selected-funds{display:flex;flex-wrap:wrap;gap:8px}.fund-tag{display:flex;align-items:center;gap:6px;padding:5px 10px 5px 8px;border:2px solid;border-radius:20px;font-size:13px;background:#fff;max-width:240px}.fund-tag-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fund-tag button{background:none;border:none;cursor:pointer;color:var(--frm-text-faint);padding:0 2px;font-size:13px;flex-shrink:0;line-height:1}.fund-tag button:hover{color:#dc2626}.empty-state{text-align:center;padding:80px 20px;color:var(--frm-text-faint);font-size:15px}.chart-note{font-size:12px;color:var(--frm-text-faint);margin-bottom:8px}.comp-chart{background:#fff;border-radius:10px;border:1px solid #e2e8f0;padding:16px}.val-pos{color:var(--frm-pos-text)}.val-neg{color:var(--frm-neg-text)}.val-na{color:var(--frm-na-text)}.tile-pos{background:var(--frm-success-soft)}.tile-neg{background:var(--frm-danger-soft)}.tile-flat{background:var(--frm-surface-alt)}.chip-pos{background:var(--frm-pos-deep-1);color:#fff}.chip-neg{background:var(--frm-neg-deep-1);color:#fff}.heat-cell-na{background:#f1f5f9;color:var(--frm-na-text)}.heatmap-toolbar{display:flex;align-items:center;gap:20px;margin-bottom:14px;flex-wrap:wrap}.heatmap-legend{display:flex;align-items:center;gap:12px;font-size:12px;color:var(--frm-text-muted)}.legend-swatch{display:flex;align-items:center;gap:4px}.legend-bar{width:100px;height:12px;border-radius:6px;background:linear-gradient(to right,#7f1d1d,#b91c1c,#fecaca,#fee2e2,#f0fdf4,#86efac,#0b6b3a,#064e3b)}.legend-label{color:var(--frm-text-muted)}.legend-steps{display:flex;align-items:center;gap:1px}.legend-step{width:11px;height:12px;display:inline-block}.legend-steps .legend-step:first-child{border-radius:4px 0 0 4px}.legend-steps .legend-step:last-child{border-radius:0 4px 4px 0}.legend-step-gap{width:6px;background:transparent}.heat-tag,.frm-tag{display:inline-flex;align-items:center;min-height:30px;padding:6px 13px;font-size:12.5px;font-weight:600;line-height:1;border-radius:999px;cursor:pointer;background:var(--frm-surface);color:var(--frm-text-muted);border:1px solid var(--frm-border);transition:background .15s,border-color .15s,color .15s;white-space:nowrap}.heat-tag:hover,.frm-tag:hover{border-color:var(--frm-primary-border);color:var(--frm-primary-text)}.heat-tag-on,.frm-tag-on{background:var(--frm-primary-soft);color:var(--frm-primary-text);border-color:var(--frm-primary-border)}.div-badge{display:inline-block;margin-left:6px;padding:0 4px;font-size:10px;font-weight:700;line-height:15px;border-radius:4px;background:var(--frm-success-soft);color:var(--frm-success);vertical-align:1px}.heatmap-note{margin-top:8px;font-size:11.5px;line-height:1.6;color:var(--frm-text-muted)}.div-style-tag{display:inline-block;padding:1px 6px;border-radius:4px;font-size:10.5px;font-weight:700;white-space:nowrap;border:1px solid transparent}.div-style-fixed_amount{background:var(--frm-success-soft);color:var(--frm-success);border-color:var(--frm-success)}.div-style-fixed_rate{background:var(--frm-primary-soft);color:var(--frm-primary-text);border-color:var(--frm-primary-border)}.div-policy-namecell{display:flex;align-items:center;gap:6px;min-width:0;flex-wrap:wrap}.div-policy-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto}@media (max-width: 980px){.div-policy-name{flex:1 1 100%}}.div-boundary-note{font-size:10.5px;color:var(--frm-warning-text);white-space:nowrap}.div-cap-warn{font-size:10.5px;font-weight:700;white-space:nowrap;color:#fff;background:var(--frm-danger);border-radius:4px;padding:1px 7px}.div-style-floating{background:var(--frm-warning-soft);color:var(--frm-warning-text);border-color:var(--frm-warning)}.div-policy-row{display:grid;grid-template-columns:56px minmax(0,1fr) 150px 118px 92px 52px;align-items:center;gap:8px;font-size:12.5px;background:var(--frm-surface);border:1px solid var(--frm-border-soft);border-radius:8px;padding:6px 10px}@media (max-width: 980px){.div-policy-row{grid-template-columns:56px minmax(0,1fr) 52px;row-gap:3px}.div-policy-row>*:nth-child(3),.div-policy-row>*:nth-child(4),.div-policy-row>*:nth-child(5){grid-column:1 / 3;text-align:left!important}}.div-rec-btn{font-size:11px;padding:2px 7px;border-radius:6px;cursor:pointer;background:var(--frm-surface-2, transparent);border:1px solid var(--frm-border);color:var(--frm-text-muted)}.div-rec-btn:hover{color:var(--frm-text);border-color:var(--frm-text-muted)}@media (max-width: 980px){.div-rec-btn{min-height:34px;min-width:56px;padding:6px 10px;font-size:12.5px}}.div-rec-box{margin:4px 0 2px 56px;padding:8px 10px;border-radius:8px;background:var(--frm-surface-2, rgba(0,0,0,.02));border:1px solid var(--frm-border-soft);overflow-x:auto}.div-rec-table{width:100%;min-width:380px;border-collapse:collapse;font-size:11.5px}.div-rec-table th,.div-rec-table td{text-align:right;padding:2px 8px;border-bottom:1px solid var(--frm-border-soft);white-space:nowrap}.div-rec-table th:first-child,.div-rec-table td:first-child{text-align:left}.div-rec-table th{color:var(--frm-text-muted);font-weight:600}.div-alert-row{display:grid;grid-template-columns:60px minmax(0,1fr) 152px 192px 146px;align-items:center;gap:8px;font-size:12.5px;background:var(--frm-surface);border:1px solid var(--frm-border);border-radius:8px;padding:7px 10px}@media (max-width: 980px){.div-alert-row{grid-template-columns:56px minmax(0,1fr);row-gap:3px}.div-alert-row>*:nth-child(n+3){grid-column:1 / -1;text-align:left!important}}@media (max-width: 640px){.heat-tag,.frm-tag{min-height:36px;padding:9px 14px}}.heatmap-scroll{overflow-x:auto;border-radius:10px;border:1px solid #e2e8f0;box-shadow:0 1px 4px #0000000f}.heatmap-table{border-collapse:collapse;min-width:1100px;background:#fff;width:100%}.heatmap-table th{background:#f8fafc;padding:9px 10px;font-size:11.5px;font-weight:600;color:var(--frm-text-muted);border-bottom:2px solid #e2e8f0;white-space:nowrap}.heatmap-table tbody tr:nth-child(2n) td.heatmap-name-col{background:#fafafa}.heatmap-table tbody tr:hover td{opacity:.88}.heatmap-table tbody tr:hover td.heatmap-name-col{background:var(--frm-primary-soft)!important;opacity:1}.heatmap-table td{padding:6px 8px;border-bottom:1px solid rgba(0,0,0,.04)}.heatmap-name-col{min-width:220px;max-width:260px;position:sticky;left:0;background:#fff;z-index:1;border-right:1px solid #e2e8f0}.heatmap-th-name{position:sticky;left:0;background:#f8fafc;z-index:2;border-right:1px solid #e2e8f0}.heatmap-info-col{white-space:nowrap;padding:9px 8px;-webkit-user-select:none;user-select:none}.heatmap-info-cell{white-space:nowrap;padding:6px 8px}.heatmap-period-col{min-width:68px;text-align:center;cursor:pointer;-webkit-user-select:none;user-select:none}.heatmap-period-col:hover{color:var(--frm-primary-text)}.heatmap-period-col.sort-active{color:var(--frm-primary-text);background:var(--frm-primary-soft)}.heatmap-fund-name{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:260px}.heatmap-cell{text-align:center;font-size:11.5px;font-weight:600;transition:opacity .15s;font-variant-numeric:tabular-nums}.frm-card{background:var(--frm-surface);border:1px solid var(--frm-border);border-radius:var(--frm-radius-md);padding:16px;transition:box-shadow .18s,transform .18s,border-color .18s}.frm-card:hover{box-shadow:var(--frm-shadow-md);border-color:var(--frm-primary-border)}.frm-card-clickable:hover{transform:translateY(-2px);cursor:pointer}.frm-pill{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:999px;font-size:11px;font-weight:600;background:var(--frm-surface-alt);border:1px solid var(--frm-border);color:var(--frm-text-muted)}.frm-pill.success{background:var(--frm-success-soft);color:var(--frm-success-text);border-color:#a7f3d0}.frm-pill.warning{background:var(--frm-warning-soft);color:var(--frm-warning-text);border-color:#fde68a}.frm-pill.danger{background:var(--frm-danger-soft);color:var(--frm-danger-text);border-color:#fecaca}.frm-pill.primary{background:var(--frm-primary-soft);color:var(--frm-primary-text);border-color:var(--frm-primary-border)}.frm-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 18px;border-radius:var(--frm-radius-sm);font-size:13px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:all .15s ease;white-space:nowrap}.frm-btn-primary{background:var(--frm-primary);color:#fff;box-shadow:0 1px 3px #6366f14d}.frm-btn-primary:hover{background:var(--frm-primary-hover);box-shadow:0 4px 12px #6366f159;transform:translateY(-1px)}.frm-btn-ghost{background:var(--frm-surface);color:var(--frm-text);border-color:var(--frm-border)}.frm-btn-ghost:hover{background:var(--frm-primary-soft);border-color:var(--frm-primary-border);color:var(--frm-primary-text)}.frm-btn:disabled,.frm-btn[disabled]{opacity:.55;cursor:not-allowed;transform:none!important;box-shadow:none!important}.frm-page-title{font-size:22px;font-weight:800;color:var(--frm-text);letter-spacing:-.01em;line-height:1.2}.frm-page-sub{font-size:13px;color:var(--frm-text-muted);margin-top:4px}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:var(--frm-bg)}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:6px;border:2px solid var(--frm-bg)}::-webkit-scrollbar-thumb:hover{background:var(--frm-text-faint)}.frm-skeleton{background:linear-gradient(90deg,var(--frm-border-soft) 0%,var(--frm-border) 50%,var(--frm-border-soft) 100%);background-size:200% 100%;border-radius:var(--frm-radius-sm);animation:frm-shimmer 1.4s ease-in-out infinite;display:inline-block}@keyframes frm-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.frm-skeleton-line{display:block;height:14px;margin-bottom:8px}.frm-skeleton-line:last-child{margin-bottom:0}.frm-skeleton-card{background:var(--frm-surface);border:1px solid var(--frm-border);border-radius:var(--frm-radius-md);padding:16px}.frm-skeleton-row{display:flex;align-items:center;gap:12px;padding:10px 0}.frm-state-card{background:var(--frm-surface);border:1px solid var(--frm-border);border-radius:var(--frm-radius-md);padding:40px 24px;text-align:center;color:var(--frm-text-muted)}.frm-state-card .frm-state-icon{font-size:40px;margin-bottom:12px}.frm-state-card .frm-state-title{font-size:16px;font-weight:700;color:var(--frm-text);margin-bottom:6px}.frm-state-card .frm-state-desc{font-size:13px;line-height:1.6}.mobile-menu-btn{display:none;position:fixed;top:12px;left:12px;z-index:200;width:42px;height:42px;background:var(--frm-surface);border:1px solid var(--frm-border);border-radius:10px;box-shadow:var(--frm-shadow-md);cursor:pointer;align-items:center;justify-content:center;font-size:20px;transition:all .15s ease}.mobile-menu-btn:hover{background:var(--frm-primary-soft)}.mobile-menu-btn:active{transform:scale(.95)}.sidebar-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a8c;z-index:99;animation:fadeIn .18s ease}@media (max-width: 1024px){.sidebar{width:200px;min-width:200px}.page-inner{padding:20px 18px 32px}.sidebar-item{font-size:12.5px;padding:8px 11px}.brand-name{font-size:14.5px}.brand-sub{font-size:9.5px}}@media (max-width: 768px){.app-layout{flex-direction:column}.mobile-menu-btn{display:flex}.sidebar{position:fixed;top:0;left:0;width:260px;min-width:260px;height:100vh;transform:translate(-100%);transition:transform .25s ease;box-shadow:4px 0 30px #00000040}.sidebar.open{transform:translate(0)}.app-content{padding-top:60px}.page-inner{padding:14px 12px 28px;max-width:100%}.search-input,.fund-search-wrap .search-input{width:100%;max-width:100%}.fund-table{font-size:12px}.fund-table th,.fund-table td{padding:6px 8px}.modal-content{max-width:100%;padding:18px 14px;max-height:95vh}.nav-summary{gap:12px;padding:10px 12px}.nav-value{font-size:18px}.perf-grid{grid-template-columns:repeat(auto-fill,minmax(72px,1fr))}.frm-form-row{flex-direction:column!important;align-items:stretch!important}.frm-form-row>div{width:100%}.frm-form-row input,.frm-form-row select{width:100%!important;min-width:0!important;box-sizing:border-box}.frm-mobile-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 400px){.page-inner{padding:10px 10px 24px}.frm-page-title{font-size:18px}.modal-content{padding:14px 10px}}.holdings-wrap{display:grid;grid-template-columns:1fr;gap:18px;margin-top:2px}@media (min-width: 720px){.holdings-wrap{grid-template-columns:1fr 1fr;gap:20px 44px}}.holdings-block{margin:0}.holdings-block-title{position:relative;font-size:13px;font-weight:700;color:var(--frm-text);padding-left:12px;margin-bottom:8px}.holdings-block-title:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:6px;height:6px;border-radius:50%;background:var(--frm-primary)}.holdings-row{display:grid;grid-template-columns:minmax(84px,40%) minmax(0,1fr) 50px;gap:10px;align-items:center;padding:4px 0}.holdings-label{font-size:13px;color:var(--frm-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.holdings-row:hover .holdings-label{color:var(--frm-primary-text)}.holdings-bar-wrap{height:8px;border-radius:999px;background:var(--frm-border-soft);overflow:hidden}.holdings-bar{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--frm-primary),var(--frm-primary-hover))}.holdings-pct{font-size:13px;font-weight:600;text-align:right;font-variant-numeric:tabular-nums;color:var(--frm-text)}.holdings-asof{font-size:12px;font-weight:400;color:var(--frm-text-muted);margin-left:8px}.holdings-source{font-size:11.5px;color:var(--frm-text-muted);margin-top:8px}.rank-row:hover{background:var(--frm-primary-soft)!important}.rank-row:hover .rank-fund-name{color:var(--frm-primary-text);text-decoration:underline}.cp-fund-row:hover{background:var(--frm-primary-soft)!important}.cp-fund-row:hover .cp-fund-name{color:var(--frm-primary-text);text-decoration:underline}.cmp-sec{margin-top:22px}.cmp-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:14px;font-weight:800;color:#0f172a;padding-bottom:6px;border-bottom:1px solid var(--frm-border-soft);margin-bottom:10px}.cmp-head>span{font-size:11.5px;font-weight:400;color:var(--frm-text-muted);text-align:right}.cmp-wrap{overflow-x:auto;border:1px solid var(--frm-border);border-radius:12px;background:var(--frm-surface)}.cmp-table{width:100%;border-collapse:collapse;font-size:13px}.cmp-table th,.cmp-table td{padding:8px 12px;border-bottom:1px solid var(--frm-border-soft);white-space:nowrap;text-align:right}.cmp-table th.cmp-metric,.cmp-table td.cmp-metric{position:sticky;left:0;z-index:2;text-align:left;background:var(--frm-surface);color:var(--frm-text-muted);font-weight:600}.cmp-table thead th{background:var(--frm-surface-alt);font-size:12px;color:var(--frm-text);position:sticky;top:0;z-index:1}.cmp-table thead th.cmp-metric{z-index:3}.cmp-table tbody tr:last-child td{border-bottom:none}.cmp-table td{position:relative}.cmp-table td.best{background:var(--frm-success-soft);color:#14532d;font-weight:700}.cmp-table td.cmp-pos{color:var(--frm-success-text)}.cmp-table td.cmp-neg{color:var(--frm-danger-text)}.cmp-crown{position:absolute;left:6px;top:50%;transform:translateY(-50%);font-size:11px}.cmp-note{font-size:11px;color:var(--frm-text-muted);margin-top:8px;line-height:1.55}.cmp-custom{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:16px;font-size:12.5px;color:var(--frm-text-muted)}.cmp-custom-hint{font-size:11px;color:var(--frm-text-faint)}.dy-fund-row:hover{background:var(--frm-primary-soft)}.dy-fund-row:hover .dy-fund-name{color:var(--frm-primary-text);text-decoration:underline}.dy-dist-btn{border:none;background:none;padding:0;font:inherit;color:var(--frm-primary-text);cursor:pointer;text-decoration:underline;text-decoration-style:dotted}.dy-dist-btn:hover{text-decoration-style:solid}.recharts-legend-item-text{color:var(--frm-text)!important}input.date-dark{color-scheme:dark}input.date-dark::-webkit-calendar-picker-indicator{filter:invert(1) brightness(1.6);cursor:pointer}.modal-content.fd-modal{padding:0;max-width:860px;display:flex;flex-direction:column;overflow:hidden}.fd-head{flex:0 0 auto;background:#fff;padding:18px 24px 12px;border-bottom:1px solid var(--frm-border-soft)}.fd-head-main{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.fd-head-text{min-width:0}.fd-head h2{font-size:19px;font-weight:800;line-height:1.35;color:var(--frm-text)}.fd-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.fd-chip{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#475569;background:#fff;border:1px solid var(--frm-border);border-radius:7px;padding:3px 8px;white-space:nowrap}.fd-chip b{color:#0f172a;font-weight:700;font-variant-numeric:tabular-nums}.fd-chip.risk-low{background:#ecfdf5;border-color:#a7f3d0;color:#047857}.fd-chip.risk-low b{color:#047857}.fd-chip.risk-mid{background:#fffbeb;border-color:#fde68a;color:#b45309}.fd-chip.risk-mid b{color:#b45309}.fd-chip.risk-high{background:#fff7ed;border-color:#fed7aa;color:#c2410c}.fd-chip.risk-high b{color:#c2410c}.fd-chip.nav{background:var(--frm-primary-soft);border-color:var(--frm-primary-border);color:var(--frm-primary-text)}.fd-chip.nav b{color:var(--frm-primary-text)}.fd-body{flex:1 1 auto;min-height:0;overflow-y:auto;padding:4px 24px 24px}.fd-sec{margin-top:18px}.fd-sec-title{display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:14px;font-weight:800;color:#0f172a;padding-bottom:6px;border-bottom:1px solid var(--frm-border-soft);margin-bottom:10px}.fd-sec-title>span{font-size:11.5px;font-weight:400;color:var(--frm-text-muted);text-align:right}.fd-metrics{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.fd-metrics.auto{grid-template-columns:repeat(auto-fit,minmax(118px,1fr))}.fd-metric{background:var(--frm-surface-alt);border:1px solid var(--frm-border-soft);border-radius:10px;padding:9px 6px;text-align:center}.fd-metric-label{font-size:11.5px;color:var(--frm-text-muted);line-height:1.3}.fd-metric-value{font-size:15px;font-weight:700;margin-top:3px;font-variant-numeric:tabular-nums;white-space:nowrap}.fd-dims{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:8px}.fd-dim{border:1px solid var(--frm-border-soft);background:var(--frm-surface-alt);border-radius:10px;padding:9px 11px 10px}.fd-dim-top{display:flex;align-items:center;justify-content:space-between;gap:6px}.fd-dim-name{font-size:12.5px;color:var(--frm-text-muted)}.fd-dim-name i{font-style:normal;font-size:10.5px;color:#64748b;margin-left:4px}.fd-badge{display:inline-block;font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:5px;color:#fff;line-height:1.6}.fd-badge.g-A{background:#1e3a8a}.fd-badge.g-B{background:#2563eb}.fd-badge.g-C{background:#b45309}.fd-badge.g-D{background:#b91c1c}.fd-dim-val{font-size:21px;font-weight:800;line-height:1.15;margin-top:2px;color:#0f172a;font-variant-numeric:tabular-nums}.fd-dim-val small{font-size:12px;font-weight:600;color:#64748b;margin-left:2px}.fd-dim-val .na{font-size:14px;font-weight:600;color:var(--frm-text-muted)}.fd-dim-bar{position:relative;height:6px;background:#e2e8f0;border-radius:3px;margin:8px 0 5px}.fd-dim-bar i{position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:#2563eb}.fd-dim.p-A .fd-dim-bar i{background:#1e3a8a}.fd-dim.p-B .fd-dim-bar i{background:#2563eb}.fd-dim.p-C .fd-dim-bar i{background:#b45309}.fd-dim.p-D .fd-dim-bar i{background:#b91c1c}.fd-dim-bar em{position:absolute;top:-2px;bottom:-2px;width:2px;background:#fff;box-shadow:0 0 0 1px #0f172a59}.fd-dim-foot{display:flex;justify-content:space-between;gap:6px;font-size:11.5px;color:#475569}.fd-dim-foot b{color:#1e293b;font-weight:700;font-variant-numeric:tabular-nums}.fd-dims-note{font-size:11px;color:var(--frm-text-muted);margin-top:7px;line-height:1.55}.fd-dim-empty{font-size:12.5px;color:var(--frm-text-muted);background:var(--frm-surface-alt);border:1px dashed var(--frm-border);border-radius:10px;padding:12px}.fd-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}.fd-tab{border:1px solid var(--frm-border);background:#fff;color:var(--frm-text-muted);font:inherit;font-size:12.5px;padding:5px 12px;border-radius:999px;cursor:pointer;transition:all .15s}.fd-tab:hover{border-color:var(--frm-primary-border);color:var(--frm-primary-text)}.fd-tab.on{background:var(--frm-primary-soft);border-color:var(--frm-primary-border);color:var(--frm-primary-text);font-weight:600}.fd-tab:focus-visible{outline:2px solid var(--frm-primary);outline-offset:2px}.fd-chart-note{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:11.5px;color:var(--frm-text-muted);margin-top:6px}.fd-regime{display:inline-flex;align-items:baseline;gap:8px;flex-wrap:wrap;font-size:12.5px;border-radius:8px;padding:6px 10px;margin:0 0 10px;border:1px solid transparent}.fd-regime b{font-weight:700}.fd-regime span{font-size:11.5px;font-variant-numeric:tabular-nums}.fd-regime.up{background:#ecfdf5;border-color:#a7f3d0;color:#047857}.fd-regime.up b{color:#047857}.fd-regime.down{background:#fef2f2;border-color:#fecaca;color:#b91c1c}.fd-regime.down b{color:#b91c1c}.fd-divwrap{max-height:260px;overflow-y:auto;border:1px solid var(--frm-border-soft);border-radius:8px}.fd-divtable{width:100%;border-collapse:collapse;font-size:13px}.fd-divtable thead th{position:sticky;top:0;background:var(--frm-surface-alt);text-align:left;padding:7px 10px;font-weight:600}.fd-divtable thead th:nth-child(2),.fd-divtable thead th:nth-child(3){text-align:right}.fd-divtable tbody td{padding:6px 10px;border-top:1px solid var(--frm-border-soft)}.fd-divtable td.n{text-align:right;font-variant-numeric:tabular-nums}.fd-divtable td.hot{color:var(--frm-danger-text);font-weight:700}.fd-policy{font-size:13px;line-height:1.7;color:var(--frm-text-muted);background:var(--frm-surface-alt);border-radius:8px;padding:10px 12px}.fd-policy.clamp{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.fd-linkbtn{border:none;background:none;color:var(--frm-primary-text);font-size:12px;cursor:pointer;padding:6px 0 0}.fd-help{margin-top:18px;border:1px solid var(--frm-border-soft);border-radius:10px;background:var(--frm-surface-alt);padding:0 12px}.fd-help summary{cursor:pointer;font-size:12.5px;font-weight:600;color:#475569;padding:9px 0;list-style:none}.fd-help summary::-webkit-details-marker{display:none}.fd-help summary:before{content:"▸";display:inline-block;width:12px;color:#64748b}.fd-help[open] summary:before{content:"▾"}.fd-help-body{font-size:12.5px;line-height:1.7;color:#475569;padding:0 0 10px}.fd-help-body p{margin:0 0 6px}@media (max-width: 720px){.fd-head{padding:14px 14px 10px}.fd-head h2{font-size:17px}.fd-body{padding:2px 14px 20px}.fd-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}.fd-metrics.auto{grid-template-columns:repeat(2,minmax(0,1fr))}.fd-dims{grid-template-columns:1fr}}@media (max-width: 430px){.fd-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.fd-chip{font-size:11.5px}}.dy-meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.dy-meta-item{font-size:12px;color:var(--frm-text-muted);background:var(--frm-surface-alt);border:1px solid var(--frm-border-soft);border-radius:999px;padding:3px 11px}.dy-meta-item b{color:var(--frm-text);font-weight:700;font-variant-numeric:tabular-nums}.dy-meta-link{color:var(--frm-primary-text);text-decoration:underline}.dy-meta-hint{background:transparent;border-style:dashed;color:var(--frm-text-faint)}.dy-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:10px;margin-bottom:16px}.dy-kpi{background:var(--frm-surface);border:1px solid var(--frm-border);border-radius:12px;padding:10px 14px 11px;display:flex;flex-direction:column;gap:1px}.dy-kpi-k{font-size:11px;font-weight:700;color:var(--frm-text-muted);letter-spacing:.2px}.dy-kpi-v{font-size:23px;font-weight:800;line-height:1.18;font-variant-numeric:tabular-nums;color:var(--frm-text)}.dy-kpi-u{font-size:13px;font-weight:700;margin-left:1px;opacity:.8}.dy-kpi-s{font-size:11px;color:var(--frm-text-faint);line-height:1.45}.dy-kpi-note{grid-column:span 2;background:var(--frm-success-soft);border-color:var(--frm-success)}.dy-kpi-note .dy-kpi-k{color:var(--frm-success-text)}.dy-kpi-note-body{font-size:11.5px;line-height:1.6;color:var(--frm-success-text)}.dy-kpi-note-body b{color:var(--frm-success-text)}.dy-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}.dy-count{font-size:12.5px;color:var(--frm-text-muted)}.dy-count b{color:var(--frm-text);font-weight:800;font-variant-numeric:tabular-nums}.dy-sort{display:flex;gap:2px;background:var(--frm-surface-alt);border:1px solid var(--frm-border);border-radius:9px;padding:2px}.dy-sort-btn{border:none;background:transparent;color:var(--frm-text-muted);font-size:12px;font-weight:600;padding:5px 11px;border-radius:7px;cursor:pointer;transition:background .15s,color .15s}.dy-sort-btn:hover{color:var(--frm-text);background:var(--frm-border-soft)}.dy-sort-btn.is-on{background:var(--frm-primary-text);color:#fff;box-shadow:0 1px 4px #0000002e;font-weight:700}.dy-row-top{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;min-width:0}.dy-fund-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 780px){.dy-row-top{flex-wrap:wrap}.dy-fund-name{flex:1 1 100%;white-space:normal}}.dy-rank{min-width:21px;height:21px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:800;color:var(--frm-text-faint);background:var(--frm-surface-alt);font-variant-numeric:tabular-nums}.dy-rank-gold{background:#f2c200;color:#3d2b00}.dy-rank-silver{background:#c3ccd6;color:#1f2d3a}.dy-rank-bronze{background:#d08a4e;color:#2f1800}.dy-code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;font-weight:700;color:var(--frm-text-muted);letter-spacing:.3px}.dy-cap-chip{font-size:10.5px;font-weight:700;color:var(--frm-text-muted);background:var(--frm-surface-alt);border:1px dashed var(--frm-text-faint);padding:1px 7px;border-radius:999px;white-space:nowrap;cursor:help;min-width:74px;text-align:center}.dy-gap-chip{white-space:nowrap}.dy-tags{flex:0 0 248px;display:inline-flex;align-items:center;gap:8px;justify-content:flex-end;overflow:hidden}@media (max-width: 780px){.dy-tags{flex:0 0 auto;flex-wrap:wrap;justify-content:flex-start}}.dy-yield-wrap{margin-left:auto;display:inline-flex;align-items:center;gap:10px;flex:0 0 auto}.dy-bar{width:104px;height:8px;background:var(--frm-border-soft);border-radius:999px;overflow:hidden;display:inline-block}.dy-bar>span{display:block;height:100%;border-radius:999px;transition:width .25s}.dy-yield{font-size:20px;font-weight:800;color:var(--frm-primary-text);font-variant-numeric:tabular-nums;min-width:74px;text-align:right;line-height:1.1}.dy-pct{font-size:13px;font-weight:700;margin-left:1px}.dy-stats{display:grid;grid-template-columns:104px 108px 108px 80px minmax(120px,1fr) 156px;column-gap:10px;row-gap:5px;margin-top:7px;align-items:baseline}@media (max-width: 900px){.dy-stats{grid-template-columns:repeat(3,minmax(0,1fr))}}.dy-stat{display:inline-flex;align-items:baseline;gap:6px;min-width:0}.dy-stat-k{font-size:10.5px;font-weight:700;color:var(--frm-text-faint);letter-spacing:.3px;white-space:nowrap}.dy-stat-v{font-size:13px;color:var(--frm-text);font-variant-numeric:tabular-nums;white-space:nowrap}.dy-stat-v.dy-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px}.dy-stat-sub{font-size:11px;color:var(--frm-text-faint);margin-left:5px}.dmp-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a8c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:1200;display:flex;align-items:center;justify-content:center;padding:16px}.dmp-modal{background:var(--frm-surface);border:1px solid var(--frm-border);border-radius:16px;width:100%;max-width:570px;max-height:88vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 24px 64px #0000004d}.dmp-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:16px 20px 12px;border-bottom:1px solid var(--frm-border-soft)}.dmp-title{font-size:16px;font-weight:800;color:var(--frm-text)}.dmp-sub{display:flex;align-items:center;gap:8px;margin-top:4px;min-width:0}.dmp-code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;font-weight:800;color:var(--frm-primary-text);background:var(--frm-primary-soft);border:1px solid var(--frm-primary-border);border-radius:6px;padding:1px 6px}.dmp-name{font-size:12.5px;color:var(--frm-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dmp-close{border:none;background:var(--frm-surface-alt);color:var(--frm-text-muted);width:28px;height:28px;border-radius:8px;font-size:17px;line-height:1;cursor:pointer;flex:0 0 auto}.dmp-close:hover{background:var(--frm-danger-soft);color:var(--frm-danger-text)}.dmp-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:8px;padding:13px 20px 8px}.dmp-kpi{background:var(--frm-surface-alt);border:1px solid var(--frm-border-soft);border-radius:10px;padding:7px 10px 8px;display:flex;flex-direction:column;gap:1px}.dmp-kpi-label{font-size:10.5px;font-weight:700;color:var(--frm-text-muted)}.dmp-kpi-value{font-size:17px;font-weight:800;color:var(--frm-text);font-variant-numeric:tabular-nums;line-height:1.2}.dmp-kpi-sub{font-size:10px;color:var(--frm-text-faint)}.dmp-table{padding:0 20px;display:flex;flex-direction:column;min-height:0;flex:1 1 auto}.dmp-row{display:grid;grid-template-columns:1.15fr .95fr .78fr 1.12fr;align-items:center;gap:8px;padding:6px 8px;font-size:12.5px;font-variant-numeric:tabular-nums}.dmp-thead{font-size:10.5px;font-weight:800;color:var(--frm-text-muted);letter-spacing:.3px;border-bottom:1px solid var(--frm-border);border-radius:0;padding-bottom:6px;background:var(--frm-surface)}.dmp-body{overflow-y:auto;min-height:0;padding:2px 0 4px}.dmp-zebra{background:var(--frm-surface-alt)}.dmp-latest{background:var(--frm-primary-soft);box-shadow:inset 3px 0 0 var(--frm-primary-text)}.dmp-mon{display:flex;align-items:center;gap:6px;font-weight:600;color:var(--frm-text)}.dmp-new{font-size:9.5px;font-weight:800;color:#fff;background:var(--frm-primary-text);border-radius:999px;padding:1px 6px;letter-spacing:.2px}.dmp-r{text-align:right}.dmp-amt{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:800;color:var(--frm-success-text);display:flex;align-items:baseline;justify-content:flex-end;gap:5px}.dmp-chg{font-family:inherit;font-size:10px;font-weight:700}.dmp-rate{color:var(--frm-text-muted)}.dmp-cap{display:flex;align-items:center;justify-content:flex-end;gap:7px}.dmp-capbar{width:44px;height:6px;background:var(--frm-border-soft);border-radius:999px;overflow:hidden;display:inline-block;flex:0 0 auto}.dmp-capbar>span{display:block;height:100%;border-radius:999px}.dmp-note{font-size:11px;color:var(--frm-text-muted);line-height:1.65;padding:10px 20px 15px;margin:0;border-top:1px solid var(--frm-border-soft)}@media (max-width: 640px){.dy-kpi-note{grid-column:span 1}.dy-bar{width:70px}.dy-yield{font-size:18px;min-width:64px}.dmp-kpis{grid-template-columns:1fr 1fr}.dmp-row{grid-template-columns:1.1fr .95fr .75fr 1fr;font-size:12px;padding:6px 4px}.dmp-table{padding:0 12px}.dmp-head,.dmp-note{padding-left:12px;padding-right:12px}}.dy-cap-chip.dy-cap-stale{color:var(--frm-warning-text);background:var(--frm-warning-soft);border:1px solid var(--frm-warning);cursor:help}.dmp-note-warn{color:var(--frm-warning-text);background:var(--frm-warning-soft);border-top-color:var(--frm-warning)}.dmp-note-warn b{color:var(--frm-warning-text)}
