diff --git a/frontend/dist/assets/index-CUx7tUuk.css b/frontend/dist/assets/index-CUx7tUuk.css new file mode 100644 index 0000000..664c5e7 --- /dev/null +++ b/frontend/dist/assets/index-CUx7tUuk.css @@ -0,0 +1 @@ +@import"https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700;800&display=swap";:root{color-scheme:dark;font-family:Manrope,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,sans-serif;color:#edf2f7;background:#0b1018;font-synthesis:none;text-rendering:optimizeLegibility;--bg: #0b1018;--panel: #111925;--panel-soft: #151f2d;--line: #263344;--line-bright: #35465c;--text: #edf2f7;--muted: #8794a6;--faint: #5b6a7e;--mint: #52d6bd;--mint-soft: rgba(82, 214, 189, .12);--amber: #e6b96c;--amber-soft: rgba(230, 185, 108, .12);--red: #ef8b8b;--red-soft: rgba(239, 139, 139, .12);--card: #151f2d;--foreground: #edf2f7;--text-2: #a9b2c2;--font: "Manrope", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, sans-serif;--accent: #4da3ff;--accent-soft: rgba(77, 163, 255, .12);--danger: #ef8b8b;--line-weak: rgba(255, 255, 255, .05)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-width:320px;background:var(--bg)}button,input{font:inherit}button{cursor:pointer}.app-shell{min-height:100vh;display:flex;background:radial-gradient(circle at 85% -10%,rgba(82,214,189,.08),transparent 32rem),var(--bg)}.sidebar{width:248px;flex:0 0 248px;min-height:100vh;padding:28px 18px 22px;border-right:1px solid var(--line);display:flex;flex-direction:column;background:#0b1018c2}.brand-lockup{display:flex;align-items:center;gap:11px;padding:0 9px 33px}.brand-mark{width:32px;height:32px;display:grid;place-items:center;border:1px solid rgba(82,214,189,.7);border-radius:9px;color:var(--mint);font:500 11px DM Mono,monospace;letter-spacing:-.08em;box-shadow:0 0 24px #52d6bd1f}.brand-name{font-size:13px;font-weight:800;letter-spacing:.01em}.brand-caption{margin-top:2px;color:var(--faint);font:10px DM Mono,monospace}.nav-stack{display:grid;gap:5px}.nav-item{display:flex;align-items:center;gap:11px;padding:11px 12px;border:1px solid transparent;border-radius:8px;color:var(--muted);text-decoration:none;font-size:12px;font-weight:600;transition:.2s ease}.nav-item:hover{color:var(--text);background:#ffffff06}.nav-item.active{color:var(--mint);background:var(--mint-soft);border-color:#52d6bd2e}.nav-glyph{width:16px;color:currentColor;font-size:15px;text-align:center}.sidebar-footer{margin-top:auto;padding:12px 8px 0}.mode-card{display:flex;gap:10px;align-items:center;padding:12px;border:1px solid var(--line);border-radius:10px;background:#ffffff05}.mode-dot,.freshness-dot{width:7px;height:7px;flex:0 0 7px;border-radius:99px;background:var(--mint);box-shadow:0 0 12px var(--mint)}.mode-label{font-size:11px;font-weight:700}.mode-detail,.version-line{margin-top:3px;color:var(--faint);font:10px DM Mono,monospace}.version-line{padding:14px 3px 0}.content{width:min(100%,1440px);margin:0 auto;padding:42px clamp(22px,4vw,64px) 70px}.topbar{display:flex;justify-content:space-between;gap:24px;align-items:flex-start;padding-bottom:35px}.eyebrow,.section-kicker{color:var(--mint);font:500 10px DM Mono,monospace;letter-spacing:.14em;text-transform:uppercase}h1,h2,p{margin:0}h1{margin-top:10px;font-size:clamp(28px,4vw,46px);line-height:1.04;letter-spacing:-.055em}h2{margin-top:7px;font-size:17px;letter-spacing:-.025em}.subtitle{max-width:560px;margin-top:12px;color:var(--muted);font-size:13px;line-height:1.7}.topbar-meta{text-align:right;color:var(--muted);font:10px DM Mono,monospace}.freshness-pill{display:inline-flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid rgba(82,214,189,.25);border-radius:99px;color:var(--mint);background:var(--mint-soft)}.freshness-pill.pill-fixture{border-color:#e6b96c59;color:var(--amber);background:var(--amber-soft)}.freshness-pill.pill-fixture .freshness-dot{background:var(--amber);box-shadow:0 0 12px var(--amber)}.as-of{margin-top:10px}.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}.kpi-card,.panel,.state-card{border:1px solid var(--line);background:linear-gradient(145deg,#151f2ddb,#0e151ff0);box-shadow:0 18px 42px #0000001f}.kpi-card{min-height:132px;padding:19px 19px 16px;border-radius:10px}.accent-card{border-color:#52d6bd4d;background:linear-gradient(145deg,#19383bcc,#0e1f26eb)}.kpi-label{color:var(--muted);font:10px DM Mono,monospace;text-transform:uppercase;letter-spacing:.08em}.kpi-value{margin-top:12px;color:var(--text);font-size:29px;font-weight:700;letter-spacing:-.055em}.kpi-unit{margin-left:4px;color:var(--mint);font:14px DM Mono,monospace}.quality-value{font-size:22px;text-transform:capitalize}.kpi-foot{margin-top:10px;color:var(--faint);font:10px DM Mono,monospace}.long-count,.positive-text{color:var(--mint)}.short-count,.negative-text{color:var(--red)}.hero-grid,.bottom-grid{display:grid;grid-template-columns:1.45fr 1fr;gap:12px;margin-bottom:12px}.panel{border-radius:10px;padding:22px}.panel-header{display:flex;justify-content:space-between;align-items:flex-start;gap:20px}.confidence-tag,.status-tag{padding:6px 8px;color:var(--mint);border:1px solid rgba(82,214,189,.22);border-radius:6px;background:var(--mint-soft);font:10px DM Mono,monospace;white-space:nowrap}.pulse-lead{display:flex;gap:15px;align-items:baseline;margin:26px 0 25px}.pulse-number{color:var(--mint);font-size:32px;font-weight:700;letter-spacing:-.06em}.pulse-copy{max-width:380px;color:var(--muted);font-size:12px;line-height:1.6}.observation-list{display:grid;gap:16px}.observation-row{display:grid;grid-template-columns:minmax(145px,1fr) 1.3fr 58px;align-items:center;gap:14px}.observation-name{color:var(--muted);font:10px DM Mono,monospace;text-transform:uppercase}.observation-track{height:6px;overflow:hidden;border-radius:99px;background:#253140}.observation-bar{height:100%;border-radius:inherit}.bar-positive{background:var(--mint);box-shadow:0 0 16px #52d6bd6b}.bar-negative{background:var(--red)}.observation-value{text-align:right;font:11px DM Mono,monospace}.lineage-panel{display:flex;flex-direction:column}.lineage-list{display:grid;gap:0;margin-top:24px;border-top:1px solid var(--line)}.lineage-item{display:flex;justify-content:space-between;gap:15px;padding:13px 0;border-bottom:1px solid var(--line);color:var(--muted);font-size:11px}.lineage-item strong{color:var(--text);font:10px DM Mono,monospace;text-align:right}.lineage-note{margin-top:auto;padding-top:22px;color:var(--faint);font-size:11px;line-height:1.7}.signal-panel{padding:0;overflow:hidden}.signal-header{padding:22px;border-bottom:1px solid var(--line)}.signal-header>div:first-child{flex:1 1 auto;min-width:0}.stock-panel .signal-header{align-items:center;flex-wrap:wrap}.stock-panel .panel-subtitle{max-width:620px}.strategy-meta{color:var(--faint);font:10px DM Mono,monospace}.strategy-meta span{color:var(--line-bright);padding:0 5px}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;min-width:850px}th{padding:12px 16px;color:var(--faint);border-bottom:1px solid var(--line);font:10px DM Mono,monospace;font-weight:400;text-align:left;text-transform:uppercase;letter-spacing:.06em}td{padding:14px 16px;border-bottom:1px solid rgba(38,51,68,.72);color:var(--muted);font-size:11px;vertical-align:middle}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:#ffffff06}.muted-cell,.score-cell,.target-cell{font-family:DM Mono,monospace}.symbol-name{display:block;color:var(--text);font-size:12px}.confidence-cell{display:block;margin-top:4px;color:var(--faint);font:9px DM Mono,monospace}.side-pill{display:inline-block;min-width:52px;padding:5px 7px;border-radius:5px;font:10px DM Mono,monospace;text-align:center}.side-pill.long{color:var(--mint);background:var(--mint-soft)}.side-pill.short{color:var(--red);background:var(--red-soft)}.side-pill.neutral{color:var(--amber);background:var(--amber-soft)}.reason-code{display:inline-block;margin:2px 3px 2px 0;padding:4px 5px;border:1px solid var(--line-bright);border-radius:4px;color:var(--faint);font:9px DM Mono,monospace}.theme-panel,.lineage-panel,.health-panel,.sim-panel,.backtest-panel,.research-panel{padding:0;overflow:hidden}.theme-panel{margin-top:18px}.theme-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.theme-card{border:1px solid var(--line-bright);border-radius:10px;padding:14px;background:var(--card)}.theme-card-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}.theme-chip{background:var(--accent-soft, rgba(63,161,255,.12));color:var(--accent);font:9px DM Mono,monospace;padding:2px 6px;border-radius:4px;text-transform:uppercase}.theme-label-en{font:600 12px/1.4 var(--font);color:var(--foreground)}.theme-label-th{font-weight:700;margin-bottom:2px}.theme-source{font:10px DM Mono,monospace;color:var(--faint);margin-bottom:10px}.theme-read-value{font-size:22px;font-weight:700;color:var(--foreground)}.theme-read-meta{font-size:11px;color:var(--faint);margin-top:2px}.theme-read-error{font-size:11px;color:var(--danger, #e5484d)}@media(max-width:720px){.theme-grid{grid-template-columns:1fr}}.theme-surprise{display:flex;flex-direction:column;gap:2px;margin:8px 0 6px}.theme-surprise-label{font-size:10px;color:var(--faint)}.theme-surprise-value{font-size:22px;font-weight:700;color:var(--accent)}.theme-thesis{font-size:11px;color:var(--text-2, #99a);border-top:1px dashed var(--line-bright);padding-top:6px;margin-top:6px}.macro-panel{margin-top:14px;border-top:1px solid var(--line-bright);padding-top:12px}.macro-chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.macro-chip{background:var(--card);border:1px solid var(--line-bright);border-radius:6px;padding:6px 9px;font-size:11px}.macro-chip strong{color:var(--mint)}.lineage-panel{margin-top:18px}.source-table{width:100%;border-collapse:collapse}.source-table th{text-align:left;font:700 10px DM Mono,monospace;color:var(--faint);padding:6px 8px;border-bottom:1px solid var(--line-bright)}.source-table td{padding:7px 8px;font-size:12px;border-bottom:1px solid var(--line-weak, rgba(255,255,255,.04))}.source-name{color:var(--accent)}.combined-cell{color:var(--mint);font-weight:600;font-family:DM Mono,monospace}.theme-tag{display:inline-block;margin:2px 3px 2px 0;padding:2px 6px;border-radius:4px;background:#3fa1ff1f;color:var(--accent);font-size:10px}.theme-tag.large{font-size:12px;padding:4px 8px}.clickable-row{cursor:pointer;transition:background .15s ease}.clickable-row:hover{background:#3fa1ff0f}.theme-narrative{font-size:12px;line-height:1.6;color:var(--text-2, #9aa);border-top:1px dashed var(--line-bright);padding-top:8px;margin-top:8px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;z-index:50;overflow:auto}.modal-card{background:var(--card, #0e1218);border:1px solid var(--line-bright);border-radius:12px;max-width:640px;width:100%;padding:20px}.modal-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:14px}.modal-kicker{font:700 10px DM Mono,monospace;color:var(--faint);letter-spacing:.08em;text-transform:uppercase}.modal-head h3{font-size:24px;margin:4px 0 0}.modal-close{background:none;border:1px solid var(--line-bright);color:var(--text);width:30px;height:30px;border-radius:6px;cursor:pointer}.modal-body{display:flex;flex-direction:column;gap:16px}.modal-section{border-top:1px solid var(--line-weak, rgba(255,255,255,.06));padding-top:12px}.modal-section-title{font:700 11px DM Mono,monospace;color:var(--faint);margin-bottom:8px}.modal-sub{font-size:11px;color:var(--faint);margin-top:6px}.contrib-line{display:flex;justify-content:space-between;padding:3px 0;font-size:13px}.contrib-calc em{font-style:normal;color:var(--accent)}.contrib-calc strong{color:var(--mint);font-family:DM Mono,monospace}.contrib-calc{color:var(--text-2, #9aa);font-size:12px}.fund-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;font-size:12px}.fund-grid span{background:#ffffff08;border-radius:6px;padding:6px 8px}.fund-grid strong{color:var(--text);font-family:DM Mono,monospace}.score-table{width:100%;border-collapse:collapse;font-size:13px}.score-table td{padding:7px 6px;border-bottom:1px solid var(--line-weak, rgba(255,255,255,.05))}.score-table tr.score-total td{border-top:1px solid var(--line-bright);font-weight:700;color:var(--mint)}.calc-box{background:#00000040;border:1px solid var(--line-bright);border-radius:8px;padding:12px}.calc-line{font:700 14px DM Mono,monospace;color:var(--mint);padding:6px 0 10px;border-bottom:1px dashed var(--line-bright);margin-bottom:8px}.calc-step{padding:6px 0;border-bottom:1px solid var(--line-weak, rgba(255,255,255,.05))}.calc-step-head{display:flex;justify-content:space-between;font-size:13px}.calc-step-head strong{color:var(--text);font-family:DM Mono,monospace}.calc-step-note{font-size:11px;color:var(--faint);margin-top:3px;line-height:1.5}.calc-z{font-size:11px;color:var(--faint);margin-top:8px;line-height:1.6}.backtest-controls{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;padding:16px 0}.backtest-controls label{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--faint)}.backtest-controls input,.backtest-controls select{background:#0a0e14;border:1px solid var(--line-bright);color:var(--text);border-radius:6px;padding:7px 9px;font-size:12px}.primary-btn{background:var(--mint);color:#062a1f;border:none;border-radius:7px;padding:9px 16px;font-weight:700;cursor:pointer;font-size:12px}.primary-btn:disabled{opacity:.5;cursor:not-allowed}.bt-kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:12px 0}.bt-kpi{background:#ffffff08;border:1px solid var(--line-bright);border-radius:8px;padding:12px}.bt-kpi span{display:block;font-size:11px;color:var(--faint);margin-bottom:6px}.bt-kpi strong{font-size:15px;font-family:DM Mono,monospace}.bt-meta{margin:4px 0 10px;font-size:11px}.bt-holdings{margin-top:8px;font-size:12px;color:var(--text-2);display:flex;flex-wrap:wrap;gap:6px;align-items:center}.bt-history{margin-top:20px}.bt-history .source-table td{font-size:12px;padding:6px 8px}.thesis-list{display:flex;flex-direction:column;gap:10px;margin:12px 0}.thesis-row{display:flex;gap:10px;align-items:baseline;padding-bottom:8px;border-bottom:1px solid var(--line-weak, rgba(255,255,255,.05))}.thesis-theme{min-width:130px;color:var(--accent)}.thesis-text{flex:1;font-size:12px;color:var(--text-2, #99a)}.thesis-surprise{font-family:DM Mono,monospace;color:var(--mint)}.sim-panel{margin-top:18px}.sim-controls{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;margin-bottom:14px}.sim-field{display:flex;flex-direction:column;gap:4px}.sim-field label{font-size:11px;color:var(--faint)}.sim-field input,.sim-field select{background:var(--card);border:1px solid var(--line-bright);color:var(--text);padding:7px 9px;border-radius:5px;font-size:12px}.sim-result{display:flex;flex-direction:column;gap:12px}.sim-sums{display:flex;gap:24px}.sim-sum span{display:block;font-size:11px;color:var(--faint)}.sim-sum strong{font-size:20px}.sim-note{font-size:11px;color:var(--amber);font-style:italic}.sim-buckets{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;min-width:0}.sim-bucket{border:1px solid var(--line-bright);border-radius:8px;padding:10px;min-width:0;overflow:hidden}.sim-bucket-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.sim-bucket-tag{font:700 10px DM Mono,monospace;padding:2px 6px;border-radius:4px;flex:none}.sim-bucket-tag.b1{background:var(--accent-soft, rgba(63,161,255,.15));color:var(--accent)}.sim-bucket-tag.b2{background:var(--amber-soft, rgba(245,158,11,.15));color:var(--amber)}.sim-bucket-tag.b3{background:var(--mint-soft, rgba(94,234,212,.15));color:var(--mint)}.sim-order-table{width:100%;table-layout:fixed;border-collapse:collapse}.sim-order-table td{padding:3px 4px;font-size:12px;overflow:hidden;text-overflow:ellipsis}.sim-order-table td:first-child{text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sim-bucket-head strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(max-width:720px){.sim-buckets{grid-template-columns:1fr}}.row-action,.primary-button{padding:8px 10px;border:1px solid var(--line-bright);border-radius:5px;color:var(--text);background:transparent;font-size:10px;white-space:nowrap;transition:.2s ease}.row-action:hover{color:var(--mint);border-color:var(--mint)}.stock-panel{padding:0;overflow:hidden;margin-bottom:12px}.panel-subtitle{margin-top:10px;color:var(--faint);font-size:11px;line-height:1.6}.panel-subtitle em{color:var(--mint);font-style:normal}.stock-controls{display:flex;align-items:center;gap:14px}.toggle-filter{display:inline-flex;align-items:center;gap:8px;color:var(--muted);font:10px DM Mono,monospace;cursor:pointer;-webkit-user-select:none;user-select:none}.toggle-filter input{width:auto;accent-color:var(--mint)}.toggle-filter span{white-space:nowrap}.dividend-dot{margin-left:6px;color:var(--amber)}th.sortable{cursor:pointer;transition:color .15s ease}th.sortable:hover{color:var(--text)}th.sortable.active{color:var(--mint)}.research-panel{margin-bottom:12px}.research-grid{display:grid;grid-template-columns:1fr 1.4fr;gap:24px;align-items:center;margin-top:22px}.research-status{display:inline-block;padding:7px 9px;border-radius:5px;font:11px DM Mono,monospace;text-transform:uppercase}.status-ready{color:var(--mint);background:var(--mint-soft)}.status-blocked,.status-descriptive{color:var(--amber);background:var(--amber-soft)}.research-reason{margin-top:12px;color:var(--muted);font-size:12px}.research-meta{margin-top:10px;color:var(--faint);font:9px DM Mono,monospace;overflow-wrap:anywhere}.gate-list{display:grid;gap:0;border-top:1px solid var(--line)}.gate-row{display:flex;justify-content:space-between;gap:15px;padding:12px 0;border-bottom:1px solid var(--line);color:var(--muted);font-size:11px}.gate-row strong{color:var(--text);font:10px DM Mono,monospace;text-align:right}.research-results{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:18px}.research-result-row{display:grid;gap:8px;padding:12px;border:1px solid var(--line);border-radius:6px;color:var(--faint);font:9px DM Mono,monospace}.research-result-row strong{font-size:14px}.empty-research{margin-top:18px;padding:14px;border:1px dashed var(--line-bright);border-radius:6px;color:var(--faint);font:10px DM Mono,monospace}.bottom-grid{grid-template-columns:1fr 1fr}.thesis-panel{background:linear-gradient(145deg,#243040e6,#0f1722f2)}.thesis-panel p,.ledger-panel p{margin-top:14px;color:var(--muted);font-size:12px;line-height:1.8}.thesis-rule{display:flex;align-items:center;gap:9px;margin-top:24px;color:var(--mint);font:10px DM Mono,monospace}.thesis-rule span{width:22px;height:1px;background:var(--mint)}.warning-tag{color:var(--amber);border-color:#e6b96c4d;background:var(--amber-soft)}.neutral-tag{color:var(--amber);border-color:#e6b96c40;background:var(--amber-soft)}.auth-form{display:grid;gap:10px;margin-top:16px}.auth-copy{color:var(--muted);font-size:11px;line-height:1.65}.paper-auth-warning{margin-top:14px;padding:9px 10px;border:1px solid rgba(230,185,108,.3);border-radius:5px;color:var(--amber);background:var(--amber-soft);font:10px DM Mono,monospace;line-height:1.55}.entry-form{display:grid;gap:10px;margin-top:16px}.selected-entry{display:flex;justify-content:space-between;gap:12px;align-items:center;color:var(--muted);font:10px DM Mono,monospace}.selected-entry strong{color:var(--text);font-size:13px}input{width:100%;padding:10px 11px;outline:none;border:1px solid var(--line-bright);border-radius:6px;color:var(--text);background:#0b1018b3;font:11px DM Mono,monospace}input:focus{border-color:var(--mint);box-shadow:0 0 0 3px #52d6bd17}.primary-button{color:#071411;border-color:var(--mint);background:var(--mint);font-weight:700}.primary-button:disabled{opacity:.5;cursor:wait}.empty-ledger{margin-top:18px;padding:14px;border:1px dashed var(--line-bright);border-radius:6px;color:var(--faint);font:10px DM Mono,monospace;text-align:center}.notice{margin-top:14px;padding:9px 10px;border-radius:5px;font:10px DM Mono,monospace}.notice-success{color:var(--mint);background:var(--mint-soft)}.notice-error{color:var(--red);background:var(--red-soft)}.state-card{margin-top:12px;padding:28px;border-radius:10px;color:var(--muted);font:12px DM Mono,monospace}.error-state{color:var(--red);border-color:#ef8b8b4d}@media(max-width:1040px){.sidebar{width:208px;flex-basis:208px}.kpi-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:760px){.app-shell{display:block}.sidebar{width:100%;min-height:auto;padding:15px 18px;border-right:0;border-bottom:1px solid var(--line)}.brand-lockup{padding:0}.nav-stack{display:flex;overflow-x:auto;margin-top:14px;gap:5px}.nav-item{flex:0 0 auto;padding:8px 10px;font-size:10px}.nav-glyph,.sidebar-footer{display:none}.content{padding:30px 16px 44px}.topbar{display:block;padding-bottom:25px}.topbar-meta{display:flex;justify-content:space-between;align-items:center;margin-top:18px;text-align:left}.hero-grid,.bottom-grid{grid-template-columns:1fr}.panel:not(.theme-panel):not(.stock-panel):not(.lineage-panel):not(.health-panel):not(.sim-panel):not(.backtest-panel):not(.research-panel):not(.signal-panel){padding:18px}.signal-header{padding:18px}.research-grid{grid-template-columns:1fr;gap:18px}.research-results{grid-template-columns:repeat(2,1fr)}}@media(max-width:500px){.kpi-grid{grid-template-columns:1fr 1fr;gap:7px}.kpi-card{min-height:112px;padding:14px}.kpi-value{font-size:22px}.kpi-foot{font-size:9px}.pulse-lead{display:block;margin:20px 0}.pulse-copy{display:block;margin-top:8px}.observation-row{grid-template-columns:1fr 55px;gap:8px}.observation-track{grid-column:1 / -1;grid-row:2}.observation-value{grid-column:2;grid-row:1}.lineage-item{display:block}.lineage-item strong{display:block;margin-top:5px;text-align:left}h1{font-size:31px}.subtitle{font-size:11px}} diff --git a/frontend/dist/assets/index-Ca0nIUj6.js b/frontend/dist/assets/index-Ca0nIUj6.js deleted file mode 100644 index a6388e2..0000000 --- a/frontend/dist/assets/index-Ca0nIUj6.js +++ /dev/null @@ -1,18 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))n(l);new MutationObserver(l=>{for(const i of l)if(i.type==="childList")for(const r of i.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function s(l){const i={};return l.integrity&&(i.integrity=l.integrity),l.referrerPolicy&&(i.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?i.credentials="include":l.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(l){if(l.ep)return;l.ep=!0;const i=s(l);fetch(l.href,i)}})();/** -* @vue/shared v3.5.41 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function mn(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const Z={},Ft=[],We=()=>{},_l=()=>!1,Fs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ds=e=>e.startsWith("onUpdate:"),me=Object.assign,bn=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Oi=Object.prototype.hasOwnProperty,G=(e,t)=>Oi.call(e,t),N=Array.isArray,Dt=e=>ls(e)==="[object Map]",Ls=e=>ls(e)==="[object Set]",jn=e=>ls(e)==="[object Date]",j=e=>typeof e=="function",re=e=>typeof e=="string",ze=e=>typeof e=="symbol",X=e=>e!==null&&typeof e=="object",ml=e=>(X(e)||j(e))&&j(e.then)&&j(e.catch),bl=Object.prototype.toString,ls=e=>bl.call(e),Pi=e=>ls(e).slice(8,-1),yl=e=>ls(e)==="[object Object]",yn=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,qt=mn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),$s=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},Ai=/-\w/g,Ie=$s(e=>e.replace(Ai,t=>t.slice(1).toUpperCase())),Ri=/\B([A-Z])/g,kt=$s(e=>e.replace(Ri,"-$1").toLowerCase()),xl=$s(e=>e.charAt(0).toUpperCase()+e.slice(1)),Js=$s(e=>e?`on${xl(e)}`:""),Ue=(e,t)=>!Object.is(e,t),Ss=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},xn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Hn;const Ns=()=>Hn||(Hn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function js(e){if(N(e)){const t={};for(let s=0;s{if(s){const n=s.split(Ii);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function ne(e){let t="";if(re(e))t=e;else if(N(e))for(let s=0;sis(s,t))}const Tl=e=>!!(e&&e.__v_isRef===!0),m=e=>re(e)?e:e==null?"":N(e)||X(e)&&(e.toString===bl||!j(e.toString))?Tl(e)?m(e.value):JSON.stringify(e,kl,2):String(e),kl=(e,t)=>Tl(t)?kl(e,t.value):Dt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,l],i)=>(s[Ys(n,i)+" =>"]=l,s),{})}:Ls(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>Ys(s))}:ze(t)?Ys(t):X(t)&&!N(t)&&!yl(t)?String(t):t,Ys=(e,t="")=>{var s;return ze(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};/** -* @vue/reactivity v3.5.41 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let de;class ji{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&de&&(de.active?(this.parent=de,this.index=(de.scopes||(de.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes){const n=this.scopes.slice();for(t=0,s=n.length;t0&&--this._on===0){if(de===this)de=this.prevScope;else{let t=de;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s0)return;if(Gt){let t=Gt;for(Gt=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;zt;){let t=zt;for(zt=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function Al(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Rl(e){let t,s=e.depsTail,n=s;for(;n;){const l=n.prevDep;n.version===-1?(n===s&&(s=l),Cn(n),Vi(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=l}e.deps=t,e.depsTail=s}function an(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ml(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ml(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Zt)||(e.globalVersion=Zt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!an(e))))return;e.flags|=2;const t=e.dep,s=Q,n=Fe;Q=e,Fe=!0;try{Al(e);const l=e.fn(e._value);(t.version===0||Ue(l,e._value))&&(e.flags|=128,e._value=l,t.version++)}catch(l){throw t.version++,l}finally{Q=s,Fe=n,Rl(e),e.flags&=-3}}function Cn(e,t=!1){const{dep:s,prevSub:n,nextSub:l}=e;if(n&&(n.nextSub=l,e.prevSub=void 0),l&&(l.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let i=s.computed.deps;i;i=i.nextDep)Cn(i,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Vi(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let Fe=!0;const Il=[];function it(){Il.push(Fe),Fe=!1}function ot(){const e=Il.pop();Fe=e===void 0?!0:e}function Vn(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=Q;Q=void 0;try{t()}finally{Q=s}}}let Zt=0;class Bi{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Tn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Q||!Fe||Q===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==Q)s=this.activeLink=new Bi(Q,this),Q.deps?(s.prevDep=Q.depsTail,Q.depsTail.nextDep=s,Q.depsTail=s):Q.deps=Q.depsTail=s,Fl(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=Q.depsTail,s.nextDep=void 0,Q.depsTail.nextDep=s,Q.depsTail=s,Q.deps===s&&(Q.deps=n)}return s}trigger(t){this.version++,Zt++,this.notify(t)}notify(t){Sn();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{wn()}}}function Fl(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)Fl(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const cn=new WeakMap,wt=Symbol(""),un=Symbol(""),Qt=Symbol("");function ve(e,t,s){if(Fe&&Q){let n=cn.get(e);n||cn.set(e,n=new Map);let l=n.get(s);l||(n.set(s,l=new Tn),l.map=n,l.key=s),l.track()}}function nt(e,t,s,n,l,i){const r=cn.get(e);if(!r){Zt++;return}const a=u=>{u&&u.trigger()};if(Sn(),t==="clear")r.forEach(a);else{const u=N(e),p=u&&yn(s);if(u&&s==="length"){const h=Number(n);r.forEach((y,R)=>{(R==="length"||R===Qt||!ze(R)&&R>=h)&&a(y)})}else switch((s!==void 0||r.has(void 0))&&a(r.get(s)),p&&a(r.get(Qt)),t){case"add":u?p&&a(r.get("length")):(a(r.get(wt)),Dt(e)&&a(r.get(un)));break;case"delete":u||(a(r.get(wt)),Dt(e)&&a(r.get(un)));break;case"set":Dt(e)&&a(r.get(wt));break}}wn()}function Rt(e){const t=z(e);return t===e?t:(ve(t,"iterate",Qt),Me(e)?t:t.map(De))}function Hs(e){return ve(e=z(e),"iterate",Qt),e}function Be(e,t){return rt(e)?Nt(Ct(e)?De(t):t):De(t)}const Ki={__proto__:null,[Symbol.iterator](){return Zs(this,Symbol.iterator,e=>Be(this,e))},concat(...e){return Rt(this).concat(...e.map(t=>N(t)?Rt(t):t))},entries(){return Zs(this,"entries",e=>(e[1]=Be(this,e[1]),e))},every(e,t){return et(this,"every",e,t,void 0,arguments)},filter(e,t){return et(this,"filter",e,t,s=>s.map(n=>Be(this,n)),arguments)},find(e,t){return et(this,"find",e,t,s=>Be(this,s),arguments)},findIndex(e,t){return et(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return et(this,"findLast",e,t,s=>Be(this,s),arguments)},findLastIndex(e,t){return et(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return et(this,"forEach",e,t,void 0,arguments)},includes(...e){return Qs(this,"includes",e)},indexOf(...e){return Qs(this,"indexOf",e)},join(e){return Rt(this).join(e)},lastIndexOf(...e){return Qs(this,"lastIndexOf",e)},map(e,t){return et(this,"map",e,t,void 0,arguments)},pop(){return Bt(this,"pop")},push(...e){return Bt(this,"push",e)},reduce(e,...t){return Bn(this,"reduce",e,t)},reduceRight(e,...t){return Bn(this,"reduceRight",e,t)},shift(){return Bt(this,"shift")},some(e,t){return et(this,"some",e,t,void 0,arguments)},splice(...e){return Bt(this,"splice",e)},toReversed(){return Rt(this).toReversed()},toSorted(e){return Rt(this).toSorted(e)},toSpliced(...e){return Rt(this).toSpliced(...e)},unshift(...e){return Bt(this,"unshift",e)},values(){return Zs(this,"values",e=>Be(this,e))}};function Zs(e,t,s){const n=Hs(e),l=n[t]();return n!==e&&!Me(e)&&(l._next=l.next,l.next=()=>{const i=l._next();return i.done||(i.value=s(i.value)),i}),l}const Ui=Array.prototype;function et(e,t,s,n,l,i){const r=Hs(e),a=r!==e&&!Me(e),u=r[t];if(u!==Ui[t]){const y=u.apply(e,i);return a?De(y):y}let p=s;r!==e&&(a?p=function(y,R){return s.call(this,Be(e,y),R,e)}:s.length>2&&(p=function(y,R){return s.call(this,y,R,e)}));const h=u.call(r,p,n);return a&&l?l(h):h}function Bn(e,t,s,n){const l=Hs(e),i=l!==e&&!Me(e);let r=s,a=!1;l!==e&&(i?(a=n.length===0,r=function(p,h,y){return a&&(a=!1,p=Be(e,p)),s.call(this,p,Be(e,h),y,e)}):s.length>3&&(r=function(p,h,y){return s.call(this,p,h,y,e)}));const u=l[t](r,...n);return a?Be(e,u):u}function Qs(e,t,s){const n=z(e);ve(n,"iterate",Qt);const l=n[t](...s);return(l===-1||l===!1)&&Pn(s[0])?(s[0]=z(s[0]),n[t](...s)):l}function Bt(e,t,s=[]){it(),Sn();const n=z(e)[t].apply(e,s);return wn(),ot(),n}const Wi=mn("__proto__,__v_isRef,__isVue"),Dl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ze));function qi(e){ze(e)||(e=String(e));const t=z(this);return ve(t,"has",e),t.hasOwnProperty(e)}class Ll{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const l=this._isReadonly,i=this._isShallow;if(s==="__v_isReactive")return!l;if(s==="__v_isReadonly")return l;if(s==="__v_isShallow")return i;if(s==="__v_raw")return n===(l?i?so:Hl:i?jl:Nl).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const r=N(t);if(!l){let u;if(r&&(u=Ki[s]))return u;if(s==="hasOwnProperty")return qi}const a=Reflect.get(t,s,_e(t)?t:n);if((ze(s)?Dl.has(s):Wi(s))||(l||ve(t,"get",s),i))return a;if(_e(a)){const u=r&&yn(s)?a:a.value;return l&&X(u)?dn(u):u}return X(a)?l?dn(a):En(a):a}}class $l extends Ll{constructor(t=!1){super(!1,t)}set(t,s,n,l){let i=t[s];const r=N(t)&&yn(s);if(!this._isShallow){const p=rt(i);if(!Me(n)&&!rt(n)&&(i=z(i),n=z(n)),!r&&_e(i)&&!_e(n))return p||(i.value=n),!0}const a=r?Number(s)e,_s=e=>Reflect.getPrototypeOf(e);function Xi(e,t,s){return function(...n){const l=this.__v_raw,i=z(l),r=Dt(i),a=e==="entries"||e===Symbol.iterator&&r,u=e==="keys"&&r,p=l[e](...n),h=s?fn:t?Nt:De;return!t&&ve(i,"iterate",u?un:wt),me(Object.create(p),{next(){const{value:y,done:R}=p.next();return R?{value:y,done:R}:{value:a?[h(y[0]),h(y[1])]:h(y),done:R}}})}}function ms(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Zi(e,t){const s={get(l){const i=this.__v_raw,r=z(i),a=z(l);e||(Ue(l,a)&&ve(r,"get",l),ve(r,"get",a));const{has:u}=_s(r),p=t?fn:e?Nt:De;if(u.call(r,l))return p(i.get(l));if(u.call(r,a))return p(i.get(a));i!==r&&i.get(l)},get size(){const l=this.__v_raw;return!e&&ve(z(l),"iterate",wt),l.size},has(l){const i=this.__v_raw,r=z(i),a=z(l);return e||(Ue(l,a)&&ve(r,"has",l),ve(r,"has",a)),l===a?i.has(l):i.has(l)||i.has(a)},forEach(l,i){const r=this,a=r.__v_raw,u=z(a),p=t?fn:e?Nt:De;return!e&&ve(u,"iterate",wt),a.forEach((h,y)=>l.call(i,p(h),p(y),r))}};return me(s,e?{add:ms("add"),set:ms("set"),delete:ms("delete"),clear:ms("clear")}:{add(l){const i=z(this),r=_s(i),a=z(l),u=!t&&!Me(l)&&!rt(l)?a:l;return r.has.call(i,u)||Ue(l,u)&&r.has.call(i,l)||Ue(a,u)&&r.has.call(i,a)||(i.add(u),nt(i,"add",u,u)),this},set(l,i){!t&&!Me(i)&&!rt(i)&&(i=z(i));const r=z(this),{has:a,get:u}=_s(r);let p=a.call(r,l);p||(l=z(l),p=a.call(r,l));const h=u.call(r,l);return r.set(l,i),p?Ue(i,h)&&nt(r,"set",l,i):nt(r,"add",l,i),this},delete(l){const i=z(this),{has:r,get:a}=_s(i);let u=r.call(i,l);u||(l=z(l),u=r.call(i,l)),a&&a.call(i,l);const p=i.delete(l);return u&&nt(i,"delete",l,void 0),p},clear(){const l=z(this),i=l.size!==0,r=l.clear();return i&&nt(l,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(l=>{s[l]=Xi(l,e,t)}),s}function kn(e,t){const s=Zi(e,t);return(n,l,i)=>l==="__v_isReactive"?!e:l==="__v_isReadonly"?e:l==="__v_raw"?n:Reflect.get(G(s,l)&&l in n?s:n,l,i)}const Qi={get:kn(!1,!1)},eo={get:kn(!1,!0)},to={get:kn(!0,!1)};const Nl=new WeakMap,jl=new WeakMap,Hl=new WeakMap,so=new WeakMap;function no(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function En(e){return rt(e)?e:On(e,!1,Gi,Qi,Nl)}function lo(e){return On(e,!1,Yi,eo,jl)}function dn(e){return On(e,!0,Ji,to,Hl)}function On(e,t,s,n,l){if(!X(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const i=l.get(e);if(i)return i;const r=no(Pi(e));if(r===0)return e;const a=new Proxy(e,r===2?n:s);return l.set(e,a),a}function Ct(e){return rt(e)?Ct(e.__v_raw):!!(e&&e.__v_isReactive)}function rt(e){return!!(e&&e.__v_isReadonly)}function Me(e){return!!(e&&e.__v_isShallow)}function Pn(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function io(e){return!G(e,"__v_skip")&&Object.isExtensible(e)&&Sl(e,"__v_skip",!0),e}const De=e=>X(e)?En(e):e,Nt=e=>X(e)?dn(e):e;function _e(e){return e?e.__v_isRef===!0:!1}function B(e){return oo(e,!1)}function oo(e,t){return _e(e)?e:new ro(e,t)}class ro{constructor(t,s){this.dep=new Tn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:z(t),this._value=s?t:De(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||Me(t)||rt(t);t=n?t:z(t),Ue(t,s)&&(this._rawValue=t,this._value=n?t:De(t),this.dep.trigger())}}function ao(e){return _e(e)?e.value:e}const co={get:(e,t,s)=>t==="__v_raw"?e:ao(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const l=e[t];return _e(l)&&!_e(s)?(l.value=s,!0):Reflect.set(e,t,s,n)}};function Vl(e){return Ct(e)?e:new Proxy(e,co)}class uo{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new Tn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Zt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&Q!==this)return Pl(this,!0),!0}get value(){const t=this.dep.track();return Ml(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function fo(e,t,s=!1){let n,l;return j(e)?n=e:(n=e.get,l=e.set),new uo(n,l,s)}const bs={},ks=new WeakMap;let yt;function ho(e,t=!1,s=yt){if(s){let n=ks.get(s);n||ks.set(s,n=[]),n.push(e)}}function po(e,t,s=Z){const{immediate:n,deep:l,once:i,scheduler:r,augmentJob:a,call:u}=s,p=I=>l?I:Me(I)||l===!1||l===0?lt(I,1):lt(I);let h,y,R,M,K=!1,A=!1;if(_e(e)?(y=()=>e.value,K=Me(e)):Ct(e)?(y=()=>p(e),K=!0):N(e)?(A=!0,K=e.some(I=>Ct(I)||Me(I)),y=()=>e.map(I=>{if(_e(I))return I.value;if(Ct(I))return p(I);if(j(I))return u?u(I,2):I()})):j(e)?t?y=u?()=>u(e,2):e:y=()=>{if(R){it();try{R()}finally{ot()}}const I=yt;yt=h;try{return u?u(e,3,[M]):e(M)}finally{yt=I}}:y=We,t&&l){const I=y,ie=l===!0?1/0:l;y=()=>lt(I(),ie)}const ee=Hi(),V=()=>{h.stop(),ee&&ee.active&&bn(ee.effects,h)};if(i&&t){const I=t;t=(...ie)=>{const te=I(...ie);return V(),te}}let H=A?new Array(e.length).fill(bs):bs;const U=I=>{if(!(!(h.flags&1)||!h.dirty&&!I))if(t){const ie=h.run();if(I||l||K||(A?ie.some((te,he)=>Ue(te,H[he])):Ue(ie,H))){R&&R();const te=yt;yt=h;try{const he=[ie,H===bs?void 0:A&&H[0]===bs?[]:H,M];H=ie,u?u(t,3,he):t(...he)}finally{yt=te}}}else h.run()};return a&&a(U),h=new El(y),h.scheduler=r?()=>r(U,!1):U,M=I=>ho(I,!1,h),R=h.onStop=()=>{const I=ks.get(h);if(I){if(u)u(I,4);else for(const ie of I)ie();ks.delete(h)}},t?n?U(!0):H=h.run():r?r(U.bind(null,!0),!0):h.run(),V.pause=h.pause.bind(h),V.resume=h.resume.bind(h),V.stop=V,V}function lt(e,t=1/0,s){if(t<=0||!X(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,_e(e))lt(e.value,t,s);else if(N(e))for(let n=0;n{lt(n,t,s)});else if(yl(e)){for(const n in e)lt(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&<(e[n],t,s)}return e}/** -* @vue/runtime-core v3.5.41 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function os(e,t,s,n){try{return n?e(...n):e()}catch(l){Vs(l,t,s)}}function Le(e,t,s,n){if(j(e)){const l=os(e,t,s,n);return l&&ml(l)&&l.catch(i=>{Vs(i,t,s)}),l}if(N(e)){const l=[];for(let i=0;i>>1,l=xe[n],i=es(l);i=es(s)?xe.push(e):xe.splice(_o(t),0,e),e.flags|=1,Kl()}}function Kl(){Es||(Es=Bl.then(Wl))}function mo(e){if(!N(e))dt&&e.id===-1?dt.splice(It+1,0,e):e.flags&1||(Lt.push(e),e.flags|=1);else for(let t=0;tes(s)-es(n));if(Lt.length=0,dt){for(let s=0;se.id==null?e.flags&2?-1:1/0:e.id;function Wl(e){try{for(Ve=0;Ve{n._d&&el(-1);const i=Os(t),r=Tt.length;let a;try{a=e(...l)}finally{for(let u=Tt.length;u>r;u--)_i();Os(i),n._d&&el(1)}return a};return n._n=!0,n._c=!0,n._d=!0,n}function Mt(e,t){if(Re===null)return e;const s=qs(Re),n=e.dirs||(e.dirs=[]);for(let l=0;l1)return s&&j(t)?t.call(n&&n.proxy):t}}const xo=Symbol.for("v-scx"),So=()=>ws(xo);function en(e,t,s){return zl(e,t,s)}function zl(e,t,s=Z){const{immediate:n,deep:l,flush:i,once:r}=s,a=me({},s),u=t&&n||!t&&i!=="post";let p;if(ns){if(i==="sync"){const M=So();p=M.__watcherHandles||(M.__watcherHandles=[])}else if(!u){const M=()=>{};return M.stop=We,M.resume=We,M.pause=We,M}}const h=Se;a.call=(M,K,A)=>Le(M,h,K,A);let y=!1;i==="post"?a.scheduler=M=>{we(M,h&&h.suspense)}:i!=="sync"&&(y=!0,a.scheduler=(M,K)=>{K?M():An(M)}),a.augmentJob=M=>{t&&(M.flags|=4),y&&(M.flags|=2,h&&(M.id=h.uid,M.i=h))};const R=po(e,t,a);return ns&&(p?p.push(R):u&&R()),R}function wo(e,t,s){const n=this.proxy,l=re(e)?e.includes(".")?Gl(n,e):()=>n[e]:e.bind(n,n);let i;j(t)?i=t:(i=t.handler,s=t);const r=rs(this),a=zl(l,i.bind(n),s);return r(),a}function Gl(e,t){const s=t.split(".");return()=>{let n=e;for(let l=0;le.__isTeleport,tn=Symbol("_leaveCb");function To(e){let t=e[0];if(e.length>1){for(const s of e)if(s.type!==at){t=s;break}}return t}function Jl(e){if(!Mn(e))return Bs(e.type)&&e.children?To(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:s}=e;if(s){if(t&16)return s[0];if(t&32&&j(s.default))return s.default()}}function Rn(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const s=e.component.subTree;Rn(Bs(s.type)&&Jl(s)||s,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Yl(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Un(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const Ps=new WeakMap;function Jt(e,t,s,n,l=!1){if(N(e)){e.forEach((A,ee)=>Jt(A,t&&(N(t)?t[ee]:t),s,n,l));return}if(Yt(n)&&!l){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&Jt(e,t,s,n.component.subTree);return}const i=n.shapeFlag&4?qs(n.component):n.el,r=l?null:i,{i:a,r:u}=e,p=t&&t.r,h=a.refs===Z?a.refs={}:a.refs,y=a.setupState,R=z(y),M=y===Z?_l:A=>Un(h,A)?!1:G(R,A),K=(A,ee)=>!(ee&&Un(h,ee));if(p!=null&&p!==u){if(Wn(t),re(p))h[p]=null,M(p)&&(y[p]=null);else if(_e(p)){const A=t;K(p,A.k)&&(p.value=null),A.k&&(h[A.k]=null)}}if(j(u))os(u,a,12,[r,h]);else{const A=re(u),ee=_e(u);if(A||ee){const V=()=>{if(e.f){const H=A?M(u)?y[u]:h[u]:K()||!e.k?u.value:h[e.k];if(l)N(H)&&bn(H,i);else if(N(H))H.includes(i)||H.push(i);else if(A)h[u]=[i],M(u)&&(y[u]=h[u]);else{const U=[i];K(u,e.k)&&(u.value=U),e.k&&(h[e.k]=U)}}else A?(h[u]=r,M(u)&&(y[u]=r)):ee&&(K(u,e.k)&&(u.value=r),e.k&&(h[e.k]=r))};if(r){const H=()=>{V(),Ps.delete(e)};H.id=-1,Ps.set(e,H),we(H,s)}else Wn(e),V()}}}function Wn(e){const t=Ps.get(e);t&&(t.flags|=8,Ps.delete(e))}Ns().requestIdleCallback;Ns().cancelIdleCallback;const Yt=e=>!!e.type.__asyncLoader,Mn=e=>e.type.__isKeepAlive;function ko(e,t){Xl(e,"a",t)}function Eo(e,t){Xl(e,"da",t)}function Xl(e,t,s=Se){const n=e.__wdc||(e.__wdc=()=>{let l=s;for(;l;){if(l.isDeactivated)return;l=l.parent}return e()});if(Ks(t,n,s),s){let l=s.parent;for(;l&&l.parent;)Mn(l.parent.vnode)&&Oo(n,t,s,l),l=l.parent}}function Oo(e,t,s,n){const l=Ks(t,e,n,!0);Ql(()=>{bn(n[t],l)},s)}function Ks(e,t,s=Se,n=!1){if(s){const l=s[e]||(s[e]=[]),i=t.__weh||(t.__weh=(...r)=>{it();const a=rs(s),u=Le(t,s,e,r);return a(),ot(),u});return n?l.unshift(i):l.push(i),i}}const ct=e=>(t,s=Se)=>{(!ns||e==="sp")&&Ks(e,(...n)=>t(...n),s)},Po=ct("bm"),Zl=ct("m"),Ao=ct("bu"),Ro=ct("u"),Mo=ct("bum"),Ql=ct("um"),Io=ct("sp"),Fo=ct("rtg"),Do=ct("rtc");function Lo(e,t=Se){Ks("ec",e,t)}const $o=Symbol.for("v-ndc");function Ae(e,t,s,n){let l;const i=s,r=N(e);if(r||re(e)){const a=r&&Ct(e);let u=!1,p=!1;a&&(u=!Me(e),p=rt(e),e=Hs(e)),l=new Array(e.length);for(let h=0,y=e.length;ht(a,u,void 0,i));else{const a=Object.keys(e);l=new Array(a.length);for(let u=0,p=a.length;ue?xi(e)?qs(e):hn(e.parent):null,Xt=me(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>hn(e.parent),$root:e=>hn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ti(e),$forceUpdate:e=>e.f||(e.f=()=>{An(e.update)}),$nextTick:e=>e.n||(e.n=vo.bind(e.proxy)),$watch:e=>wo.bind(e)}),sn=(e,t)=>e!==Z&&!e.__isScriptSetup&&G(e,t),No={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:l,props:i,accessCache:r,type:a,appContext:u}=e;if(t[0]!=="$"){const R=r[t];if(R!==void 0)switch(R){case 1:return n[t];case 2:return l[t];case 4:return s[t];case 3:return i[t]}else{if(sn(n,t))return r[t]=1,n[t];if(l!==Z&&G(l,t))return r[t]=2,l[t];if(G(i,t))return r[t]=3,i[t];if(s!==Z&&G(s,t))return r[t]=4,s[t];pn&&(r[t]=0)}}const p=Xt[t];let h,y;if(p)return t==="$attrs"&&ve(e.attrs,"get",""),p(e);if((h=a.__cssModules)&&(h=h[t]))return h;if(s!==Z&&G(s,t))return r[t]=4,s[t];if(y=u.config.globalProperties,G(y,t))return y[t]},set({_:e},t,s){const{data:n,setupState:l,ctx:i}=e;return sn(l,t)?(l[t]=s,!0):n!==Z&&G(n,t)?(n[t]=s,!0):G(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:l,props:i,type:r}},a){let u;return!!(s[a]||e!==Z&&a[0]!=="$"&&G(e,a)||sn(t,a)||G(i,a)||G(n,a)||G(Xt,a)||G(l.config.globalProperties,a)||(u=r.__cssModules)&&u[a])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:G(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function qn(e){return N(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let pn=!0;function jo(e){const t=ti(e),s=e.proxy,n=e.ctx;pn=!1,t.beforeCreate&&zn(t.beforeCreate,e,"bc");const{data:l,computed:i,methods:r,watch:a,provide:u,inject:p,created:h,beforeMount:y,mounted:R,beforeUpdate:M,updated:K,activated:A,deactivated:ee,beforeDestroy:V,beforeUnmount:H,destroyed:U,unmounted:I,render:ie,renderTracked:te,renderTriggered:he,errorCaptured:$e,serverPrefetch:Et,expose:Ge,inheritAttrs:Je,components:Ye,directives:ut,filters:Ht}=t;if(p&&Ho(p,n,null),r)for(const se in r){const J=r[se];j(J)&&(n[se]=J.bind(s))}if(l){const se=l.call(s,s);X(se)&&(e.data=En(se))}if(pn=!0,i)for(const se in i){const J=i[se],Ne=j(J)?J.bind(s,s):j(J.get)?J.get.bind(s,s):We,ht=!j(J)&&j(J.set)?J.set.bind(s):We,ke=ae({get:Ne,set:ht});Object.defineProperty(n,se,{enumerable:!0,configurable:!0,get:()=>ke.value,set:Ee=>ke.value=Ee})}if(a)for(const se in a)ei(a[se],n,s,se);if(u){const se=j(u)?u.call(s):u;Reflect.ownKeys(se).forEach(J=>{yo(J,se[J])})}h&&zn(h,e,"c");function ue(se,J){N(J)?J.forEach(Ne=>se(Ne.bind(s))):J&&se(J.bind(s))}if(ue(Po,y),ue(Zl,R),ue(Ao,M),ue(Ro,K),ue(ko,A),ue(Eo,ee),ue(Lo,$e),ue(Do,te),ue(Fo,he),ue(Mo,H),ue(Ql,I),ue(Io,Et),N(Ge))if(Ge.length){const se=e.exposed||(e.exposed={});Ge.forEach(J=>{Object.defineProperty(se,J,{get:()=>s[J],set:Ne=>s[J]=Ne,enumerable:!0})})}else e.exposed||(e.exposed={});ie&&e.render===We&&(e.render=ie),Je!=null&&(e.inheritAttrs=Je),Ye&&(e.components=Ye),ut&&(e.directives=ut),Et&&Yl(e)}function Ho(e,t,s=We){N(e)&&(e=gn(e));for(const n in e){const l=e[n];let i;X(l)?"default"in l?i=ws(l.from||n,l.default,!0):i=ws(l.from||n):i=ws(l),_e(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:r=>i.value=r}):t[n]=i}}function zn(e,t,s){Le(N(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function ei(e,t,s,n){let l=n.includes(".")?Gl(s,n):()=>s[n];if(re(e)){const i=t[e];j(i)&&en(l,i)}else if(j(e))en(l,e.bind(s));else if(X(e))if(N(e))e.forEach(i=>ei(i,t,s,n));else{const i=j(e.handler)?e.handler.bind(s):t[e.handler];j(i)&&en(l,i,e)}}function ti(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:l,optionsCache:i,config:{optionMergeStrategies:r}}=e.appContext,a=i.get(t);let u;return a?u=a:!l.length&&!s&&!n?u=t:(u={},l.length&&l.forEach(p=>As(u,p,r,!0)),As(u,t,r)),X(t)&&i.set(t,u),u}function As(e,t,s,n=!1){const{mixins:l,extends:i}=t;i&&As(e,i,s,!0),l&&l.forEach(r=>As(e,r,s,!0));for(const r in t)if(!(n&&r==="expose")){const a=Vo[r]||s&&s[r];e[r]=a?a(e[r],t[r]):t[r]}return e}const Vo={data:Gn,props:Jn,emits:Jn,methods:Ut,computed:Ut,beforeCreate:ye,created:ye,beforeMount:ye,mounted:ye,beforeUpdate:ye,updated:ye,beforeDestroy:ye,beforeUnmount:ye,destroyed:ye,unmounted:ye,activated:ye,deactivated:ye,errorCaptured:ye,serverPrefetch:ye,components:Ut,directives:Ut,watch:Ko,provide:Gn,inject:Bo};function Gn(e,t){return t?e?function(){return me(j(e)?e.call(this,this):e,j(t)?t.call(this,this):t)}:t:e}function Bo(e,t){return Ut(gn(e),gn(t))}function gn(e){if(N(e)){const t={};for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ie(t)}Modifiers`]||e[`${kt(t)}Modifiers`];function zo(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||Z;let l=s;const i=t.startsWith("update:"),r=i&&qo(n,t.slice(7));r&&(r.trim&&(l=s.map(h=>re(h)?h.trim():h)),r.number&&(l=s.map(xn)));let a,u=n[a=Js(t)]||n[a=Js(Ie(t))];!u&&i&&(u=n[a=Js(kt(t))]),u&&Le(u,e,6,l);const p=n[a+"Once"];if(p){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,Le(p,e,6,l)}}const Go=new WeakMap;function ni(e,t,s=!1){const n=s?Go:t.emitsCache,l=n.get(e);if(l!==void 0)return l;const i=e.emits;let r={},a=!1;if(!j(e)){const u=p=>{const h=ni(p,t,!0);h&&(a=!0,me(r,h))};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!i&&!a?(X(e)&&n.set(e,null),null):(N(i)?i.forEach(u=>r[u]=null):me(r,i),X(e)&&n.set(e,r),r)}function Us(e,t){return!e||!Fs(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),G(e,t[0].toLowerCase()+t.slice(1))||G(e,kt(t))||G(e,t))}function Yn(e){const{type:t,vnode:s,proxy:n,withProxy:l,propsOptions:[i],slots:r,attrs:a,emit:u,render:p,renderCache:h,props:y,data:R,setupState:M,ctx:K,inheritAttrs:A}=e,ee=Os(e);let V,H;try{if(s.shapeFlag&4){const I=l||n,ie=I;V=Ke(p.call(ie,I,h,y,M,R,K)),H=a}else{const I=t;V=Ke(I.length>1?I(y,{attrs:a,slots:r,emit:u}):I(y,null)),H=t.props?a:Jo(a)}}catch(I){Tt.length=0,Vs(I,e,1),V=qe(at)}let U=V;if(H&&A!==!1){const I=Object.keys(H),{shapeFlag:ie}=U;I.length&&ie&7&&(i&&I.some(Ds)&&(H=Yo(H,i)),U=jt(U,H,!1,!0))}if(s.dirs&&(U=jt(U,null,!1,!0),U.dirs=U.dirs?U.dirs.concat(s.dirs):s.dirs),s.transition){const I=Bs(U.type)&&Jl(U)||U;Rn(I,s.transition)}return V=U,Os(ee),V}const Jo=e=>{let t;for(const s in e)(s==="class"||s==="style"||Fs(s))&&((t||(t={}))[s]=e[s]);return t},Yo=(e,t)=>{const s={};for(const n in e)(!Ds(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function Xo(e,t,s){const{props:n,children:l,component:i}=e,{props:r,children:a,patchFlag:u}=t,p=i.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&u>=0){if(u&1024)return!0;if(u&16)return n?Xn(n,r,p):!!r;if(u&8){const h=t.dynamicProps;for(let y=0;yObject.create(ii),ri=e=>Object.getPrototypeOf(e)===ii;function Qo(e,t,s,n=!1){const l={},i=oi();e.propsDefaults=Object.create(null),ai(e,t,l,i);for(const r in e.propsOptions[0])r in l||(l[r]=void 0);s?e.props=n?l:lo(l):e.type.props?e.props=l:e.props=i,e.attrs=i}function er(e,t,s,n){const{props:l,attrs:i,vnode:{patchFlag:r}}=e,a=z(l),[u]=e.propsOptions;let p=!1;if((n||r>0)&&!(r&16)){if(r&8){const h=e.vnode.dynamicProps;for(let y=0;y{u=!0;const[R,M]=ci(y,t,!0);me(r,R),M&&a.push(...M)};!s&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!i&&!u)return X(e)&&n.set(e,Ft),Ft;if(N(i))for(let h=0;he==="_"||e==="_ctx"||e==="$stable",Fn=e=>N(e)?e.map(Ke):[Ke(e)],sr=(e,t,s)=>{if(t._n)return t;const n=bo((...l)=>Fn(t(...l)),s);return n._c=!1,n},ui=(e,t,s)=>{const n=e._ctx;for(const l in e){if(In(l))continue;const i=e[l];if(j(i))t[l]=sr(l,i,n);else if(i!=null){const r=Fn(i);t[l]=()=>r}}},fi=(e,t)=>{const s=Fn(t);e.slots.default=()=>s},di=(e,t,s)=>{for(const n in t)(s||!In(n))&&(e[n]=t[n])},nr=(e,t,s)=>{const n=e.slots=oi();if(e.vnode.shapeFlag&32){const l=t._;l?(di(n,t,s),s&&Sl(n,"_",l,!0)):ui(t,n)}else t&&fi(e,t)},lr=(e,t,s)=>{const{vnode:n,slots:l}=e;let i=!0,r=Z;if(n.shapeFlag&32){const a=t._;a?s&&a===1?i=!1:di(l,t,s):(i=!t.$stable,ui(t,l)),r=t}else t&&(fi(e,t),r={default:1});if(i)for(const a in l)!In(a)&&r[a]==null&&delete l[a]},we=cr;function ir(e){return or(e)}function or(e,t){const s=Ns();s.__VUE__=!0;const{insert:n,remove:l,patchProp:i,createElement:r,createText:a,createComment:u,setText:p,setElementText:h,parentNode:y,nextSibling:R,setScopeId:M=We,insertStaticContent:K}=e,A=(c,d,b,w=null,S=null,x=null,k=void 0,T=null,C=!!d.dynamicChildren)=>{if(c===d)return;c&&!Kt(c,d)&&(w=Ot(c),Ee(c,S,x,!0),c=null),d.patchFlag===-2&&(C=!1,d.dynamicChildren=null);const{type:_,ref:D,shapeFlag:P}=d;switch(_){case Ws:ee(c,d,b,w);break;case at:V(c,d,b,w);break;case Cs:c==null&&H(d,b,w,k);break;case le:Ye(c,d,b,w,S,x,k,T,C);break;default:P&1?ie(c,d,b,w,S,x,k,T,C):P&6?ut(c,d,b,w,S,x,k,T,C):(P&64||P&128)&&_.process(c,d,b,w,S,x,k,T,C,gt)}D!=null&&S?Jt(D,c&&c.ref,x,d||c,!d):D==null&&c&&c.ref!=null&&Jt(c.ref,null,x,c,!0)},ee=(c,d,b,w)=>{if(c==null)n(d.el=a(d.children),b,w);else{const S=d.el=c.el;d.children!==c.children&&p(S,d.children)}},V=(c,d,b,w)=>{c==null?n(d.el=u(d.children||""),b,w):d.el=c.el},H=(c,d,b,w)=>{[c.el,c.anchor]=K(c.children,d,b,w,c.el,c.anchor)},U=({el:c,anchor:d},b,w)=>{let S;for(;c&&c!==d;)S=R(c),n(c,b,w),c=S;n(d,b,w)},I=({el:c,anchor:d})=>{let b;for(;c&&c!==d;)b=R(c),l(c),c=b;l(d)},ie=(c,d,b,w,S,x,k,T,C)=>{if(d.type==="svg"?k="svg":d.type==="math"&&(k="mathml"),c==null)te(d,b,w,S,x,k,T,C);else{const _=c.el&&c.el._isVueCE?c.el:null;try{_&&_._beginPatch(),Et(c,d,S,x,k,T,C)}finally{_&&_._endPatch()}}},te=(c,d,b,w,S,x,k,T)=>{let C,_;const{props:D,shapeFlag:P,transition:F,dirs:L}=c;if(C=c.el=r(c.type,x,D&&D.is,D),P&8?h(C,c.children):P&16&&$e(c.children,C,null,w,S,nn(c,x),k,T),L&&mt(c,null,w,"created"),he(C,c,c.scopeId,k,w),D){for(const Y in D)Y!=="value"&&!qt(Y)&&i(C,Y,null,D[Y],x,w);"value"in D&&i(C,"value",null,D.value,x),(_=D.onVnodeBeforeMount)&&He(_,w,c)}L&&mt(c,null,w,"beforeMount");const $=rr(S,F);$&&F.beforeEnter(C),n(C,d,b),((_=D&&D.onVnodeMounted)||$||L)&&we(()=>{try{_&&He(_,w,c),$&&F.enter(C),L&&mt(c,null,w,"mounted")}finally{}},S)},he=(c,d,b,w,S)=>{if(b&&M(c,b),w)for(let x=0;x{for(let _=C;_{const T=d.el=c.el;let{patchFlag:C,dynamicChildren:_,dirs:D}=d;C|=c.patchFlag&16;const P=c.props||Z,F=d.props||Z;let L;if(b&&bt(b,!1),(L=F.onVnodeBeforeUpdate)&&He(L,b,d,c),D&&mt(d,c,b,"beforeUpdate"),b&&bt(b,!0),_&&(!c.dynamicChildren||c.dynamicChildren.length!==_.length)&&(C=0,k=!1,_=null),(P.innerHTML&&F.innerHTML==null||P.textContent&&F.textContent==null)&&h(T,""),_?Ge(c.dynamicChildren,_,T,b,w,nn(d,S),x):k||J(c,d,T,null,b,w,nn(d,S),x,!1),C>0){if(C&16)Je(T,P,F,b,S);else if(C&2&&P.class!==F.class&&i(T,"class",null,F.class,S),C&4&&i(T,"style",P.style,F.style,S),C&8){const $=d.dynamicProps;for(let Y=0;Y<$.length;Y++){const q=$[Y],oe=P[q],ce=F[q];(ce!==oe||q==="value")&&i(T,q,oe,ce,S,b)}}C&1&&c.children!==d.children&&h(T,d.children)}else!k&&_==null&&Je(T,P,F,b,S);((L=F.onVnodeUpdated)||D)&&we(()=>{L&&He(L,b,d,c),D&&mt(d,c,b,"updated")},w)},Ge=(c,d,b,w,S,x,k)=>{for(let T=0;T{if(d!==b){if(d!==Z)for(const x in d)!qt(x)&&!(x in b)&&i(c,x,d[x],null,S,w);for(const x in b){if(qt(x))continue;const k=b[x],T=d[x];k!==T&&x!=="value"&&i(c,x,T,k,S,w)}"value"in b&&i(c,"value",d.value,b.value,S)}},Ye=(c,d,b,w,S,x,k,T,C)=>{const _=d.el=c?c.el:a(""),D=d.anchor=c?c.anchor:a("");let{patchFlag:P,dynamicChildren:F,slotScopeIds:L}=d;L&&(T=T?T.concat(L):L),c==null?(n(_,b,w),n(D,b,w),$e(d.children||[],b,D,S,x,k,T,C)):P>0&&P&64&&F&&c.dynamicChildren&&c.dynamicChildren.length===F.length?(Ge(c.dynamicChildren,F,b,S,x,k,T),(d.key!=null||S&&d===S.subTree)&&hi(c,d,!0)):J(c,d,b,D,S,x,k,T,C)},ut=(c,d,b,w,S,x,k,T,C)=>{d.slotScopeIds=T,c==null?d.shapeFlag&512?S.ctx.activate(d,b,w,k,C):Ht(d,b,w,S,x,k,C):as(c,d,C)},Ht=(c,d,b,w,S,x,k)=>{const T=c.component=_r(c,w,S);if(Mn(c)&&(T.ctx.renderer=gt),br(T,!1,k),T.asyncDep){if(S&&S.registerDep(T,ue,k),!c.el){const C=T.subTree=qe(at);V(null,C,d,b),c.placeholder=C.el}}else ue(T,c,d,b,S,x,k)},as=(c,d,b)=>{const w=d.component=c.component;if(Xo(c,d,b))if(w.asyncDep&&!w.asyncResolved){se(w,d,b);return}else w.next=d,w.update();else d.el=c.el,w.vnode=d},ue=(c,d,b,w,S,x,k)=>{const T=()=>{if(c.isMounted){let{next:P,bu:F,u:L,parent:$,vnode:Y}=c;{const fe=pi(c);if(fe){P&&(P.el=Y.el,se(c,P,k)),fe.asyncDep.then(()=>{we(()=>{c.isUnmounted||_()},S)});return}}let q=P,oe;bt(c,!1),P?(P.el=Y.el,se(c,P,k)):P=Y,F&&Ss(F),(oe=P.props&&P.props.onVnodeBeforeUpdate)&&He(oe,$,P,Y),bt(c,!0);const ce=Yn(c),Oe=c.subTree;c.subTree=ce,A(Oe,ce,y(Oe.el),Ot(Oe),c,S,x),P.el=ce.el,q===null&&Zo(c,ce.el),L&&we(L,S),(oe=P.props&&P.props.onVnodeUpdated)&&we(()=>He(oe,$,P,Y),S)}else{let P;const{el:F,props:L}=d,{bm:$,m:Y,parent:q,root:oe,type:ce}=c,Oe=Yt(d);bt(c,!1),$&&Ss($),!Oe&&(P=L&&L.onVnodeBeforeMount)&&He(P,q,d),bt(c,!0);{oe.ce&&oe.ce._hasShadowRoot()&&oe.ce._injectChildStyle(ce,c.parent?c.parent.type:void 0);const fe=c.subTree=Yn(c);A(null,fe,b,w,c,S,x),d.el=fe.el}if(Y&&we(Y,S),!Oe&&(P=L&&L.onVnodeMounted)){const fe=d;we(()=>He(P,q,fe),S)}(d.shapeFlag&256||q&&Yt(q.vnode)&&q.vnode.shapeFlag&256)&&c.a&&we(c.a,S),c.isMounted=!0,d=b=w=null}};c.scope.on();const C=c.effect=new El(T);c.scope.off();const _=c.update=C.run.bind(C),D=c.job=C.runIfDirty.bind(C);D.i=c,D.id=c.uid,C.scheduler=()=>An(D),bt(c,!0),_()},se=(c,d,b)=>{d.component=c;const w=c.vnode.props;c.vnode=d,c.next=null,er(c,d.props,w,b),lr(c,d.children,b),it(),Kn(c),ot()},J=(c,d,b,w,S,x,k,T,C=!1)=>{const _=c&&c.children,D=c?c.shapeFlag:0,P=d.children,{patchFlag:F,shapeFlag:L}=d;if(F>0){if(F&128){ht(_,P,b,w,S,x,k,T,C);return}else if(F&256){Ne(_,P,b,w,S,x,k,T,C);return}}L&8?(D&16&&Ze(_,S,x),P!==_&&h(b,P)):D&16?L&16?ht(_,P,b,w,S,x,k,T,C):Ze(_,S,x,!0):(D&8&&h(b,""),L&16&&$e(P,b,w,S,x,k,T,C))},Ne=(c,d,b,w,S,x,k,T,C)=>{c=c||Ft,d=d||Ft;const _=c.length,D=d.length,P=Math.min(_,D);let F;for(F=0;FD?Ze(c,S,x,!0,!1,P):$e(d,b,w,S,x,k,T,C,P)},ht=(c,d,b,w,S,x,k,T,C)=>{let _=0;const D=d.length;let P=c.length-1,F=D-1;for(;_<=P&&_<=F;){const L=c[_],$=d[_]=C?st(d[_]):Ke(d[_]);if(Kt(L,$))A(L,$,b,null,S,x,k,T,C);else break;_++}for(;_<=P&&_<=F;){const L=c[P],$=d[F]=C?st(d[F]):Ke(d[F]);if(Kt(L,$))A(L,$,b,null,S,x,k,T,C);else break;P--,F--}if(_>P){if(_<=F){const L=F+1,$=LF)for(;_<=P;)Ee(c[_],S,x,!0),_++;else{const L=_,$=_,Y=new Map;for(_=$;_<=F;_++){const be=d[_]=C?st(d[_]):Ke(d[_]);be.key!=null&&Y.set(be.key,_)}let q,oe=0;const ce=F-$+1;let Oe=!1,fe=0;const vt=new Array(ce);for(_=0;_=ce){Ee(be,S,x,!0);continue}let Ce;if(be.key!=null)Ce=Y.get(be.key);else for(q=$;q<=F;q++)if(vt[q-$]===0&&Kt(be,d[q])){Ce=q;break}Ce===void 0?Ee(be,S,x,!0):(vt[Ce-$]=_+1,Ce>=fe?fe=Ce:Oe=!0,A(be,d[Ce],b,null,S,x,k,T,C),oe++)}const us=Oe?ar(vt):Ft;for(q=us.length-1,_=ce-1;_>=0;_--){const be=$+_,Ce=d[be],fs=d[be+1],ds=be+1{const{el:x,type:k,transition:T,children:C,shapeFlag:_}=c;if(_&6){ke(c.component.subTree,d,b,w);return}if(_&128){c.suspense.move(d,b,w);return}if(_&64){k.move(c,d,b,gt);return}if(k===le){n(x,d,b);for(let P=0;PT.enter(x),S));else{const{leave:P,delayLeave:F,afterLeave:L}=T,$=()=>{c.ctx.isUnmounted?l(x):n(x,d,b)},Y=()=>{const q=x._isLeaving||!!x[tn];x._isLeaving&&x[tn](!0),T.persisted&&!q?$():P(x,()=>{$(),L&&L()})};F?F(x,$,Y):Y()}else n(x,d,b)},Ee=(c,d,b,w=!1,S=!1)=>{const{type:x,props:k,ref:T,children:C,dynamicChildren:_,shapeFlag:D,patchFlag:P,dirs:F,cacheIndex:L,memo:$}=c;if(P===-2&&(S=!1),T!=null&&(it(),Jt(T,null,b,c,!0),ot()),L!=null&&(d.renderCache[L]=void 0),D&256){d.ctx.deactivate(c);return}const Y=D&1&&F,q=!Yt(c);let oe;if(q&&(oe=k&&k.onVnodeBeforeUnmount)&&He(oe,d,c),D&6)cs(c.component,b,w);else{if(D&128){c.suspense.unmount(b,w);return}Y&&mt(c,null,d,"beforeUnmount"),D&64?c.type.remove(c,d,b,gt,w):_&&!_.hasOnce&&(x!==le||P>0&&P&64)?Ze(_,d,b,!1,!0):(x===le&&P&384||!S&&D&16)&&Ze(C,d,b),w&&Xe(c)}const ce=$!=null&&L==null;(q&&(oe=k&&k.onVnodeUnmounted)||Y||ce)&&we(()=>{oe&&He(oe,d,c),Y&&mt(c,null,d,"unmounted"),ce&&(c.el=null)},b)},Xe=c=>{const{type:d,el:b,anchor:w,transition:S}=c;if(d===le){Vt(b,w);return}if(d===Cs){I(c);return}const x=()=>{l(b),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(c.shapeFlag&1&&S&&!S.persisted){const{leave:k,delayLeave:T}=S,C=()=>k(b,x);T?T(c.el,x,C):C()}else x()},Vt=(c,d)=>{let b;for(;c!==d;)b=R(c),l(c),c=b;l(d)},cs=(c,d,b)=>{const{bum:w,scope:S,job:x,subTree:k,um:T,m:C,a:_}=c;Qn(C),Qn(_),w&&Ss(w),S.stop(),x&&(x.flags|=8,Ee(k,c,d,b)),T&&we(T,d),we(()=>{c.isUnmounted=!0},d)},Ze=(c,d,b,w=!1,S=!1,x=0)=>{for(let k=x;k{if(c.shapeFlag&6)return Ot(c.component.subTree);if(c.shapeFlag&128)return c.suspense.next();const d=R(c.anchor||c.el),b=d&&d[Co];return b?R(b):d};let ft=!1;const pt=(c,d,b)=>{let w;c==null?d._vnode&&(Ee(d._vnode,null,null,!0),w=d._vnode.component):A(d._vnode||null,c,d,null,null,null,b),d._vnode=c,ft||(ft=!0,Kn(w),Ul(),ft=!1)},gt={p:A,um:Ee,m:ke,r:Xe,mt:Ht,mc:$e,pc:J,pbc:Ge,n:Ot,o:e};return{render:pt,hydrate:void 0,createApp:Wo(pt)}}function nn({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function bt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function rr(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function hi(e,t,s=!1){const n=e.children,l=t.children;if(N(n)&&N(l))for(let i=0;i>1,e[s[a]]0&&(t[n]=s[i-1]),s[i]=n)}}for(i=s.length,r=s[i-1];i-- >0;)s[i]=r,r=t[r];return s}function pi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:pi(t)}function Qn(e){if(e)for(let t=0;te.__isSuspense;function cr(e,t){t&&t.pendingBranch?N(e)?t.effects.push(...e):t.effects.push(e):mo(e)}const le=Symbol.for("v-fgt"),Ws=Symbol.for("v-txt"),at=Symbol.for("v-cmt"),Cs=Symbol.for("v-stc"),Tt=[];let Te=null;function E(e=!1){Tt.push(Te=e?null:[])}function _i(){Tt.pop(),Te=Tt[Tt.length-1]||null}let ts=1;function el(e,t=!1){ts+=e,e<0&&Te&&t&&(Te.hasOnce=!0)}function mi(e){return e.dynamicChildren=ts>0?Te||Ft:null,_i(),ts>0&&Te&&Te.push(e),e}function O(e,t,s,n,l,i){return mi(o(e,t,s,n,l,i,!0))}function ur(e,t,s,n,l){return mi(qe(e,t,s,n,l,!0))}function bi(e){return e?e.__v_isVNode===!0:!1}function Kt(e,t){return e.type===t.type&&e.key===t.key}const yi=({key:e})=>e??null,Ts=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?re(e)||_e(e)||j(e)?{i:Re,r:e,k:t,f:!!s}:e:null);function o(e,t=null,s=null,n=0,l=null,i=e===le?0:1,r=!1,a=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&yi(t),ref:t&&Ts(t),scopeId:ql,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:n,dynamicProps:l,dynamicChildren:null,appContext:null,ctx:Re};return a?(Rs(u,s),i&128&&e.normalize(u)):s&&(u.shapeFlag|=re(s)?8:16),ts>0&&!r&&Te&&(u.patchFlag>0||i&6)&&u.patchFlag!==32&&Te.push(u),u}const qe=fr;function fr(e,t=null,s=null,n=0,l=null,i=!1){if((!e||e===$o)&&(e=at),bi(e)){const a=jt(e,t,!0);return s&&Rs(a,s),ts>0&&!i&&Te&&(a.shapeFlag&6?Te[Te.indexOf(e)]=a:Te.push(a)),a.patchFlag=-2,a}if(wr(e)&&(e=e.__vccOpts),t){t=dr(t);let{class:a,style:u}=t;a&&!re(a)&&(t.class=ne(a)),X(u)&&(Pn(u)&&!N(u)&&(u=me({},u)),t.style=js(u))}const r=re(e)?1:vi(e)?128:Bs(e)?64:X(e)?4:j(e)?2:0;return o(e,t,s,n,l,r,i,!0)}function dr(e){return e?Pn(e)||ri(e)?me({},e):e:null}function jt(e,t,s=!1,n=!1){const{props:l,ref:i,patchFlag:r,children:a,transition:u}=e,p=t?pr(l||{},t):l,h={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&yi(p),ref:t&&t.ref?s&&i?N(i)?i.concat(Ts(t)):[i,Ts(t)]:Ts(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==le?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:u,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&jt(e.ssContent),ssFallback:e.ssFallback&&jt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return u&&n&&Rn(h,u.clone(h)),h}function W(e=" ",t=0){return qe(Ws,null,e,t)}function hr(e,t){const s=qe(Cs,null,e);return s.staticCount=t,s}function ge(e="",t=!1){return t?(E(),ur(at,null,e)):qe(at,null,e)}function Ke(e){return e==null||typeof e=="boolean"?qe(at):N(e)?qe(le,null,e.slice()):bi(e)?st(e):qe(Ws,null,String(e))}function st(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:jt(e)}function Rs(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(N(t))s=16;else if(typeof t=="object")if(n&65){const l=t.default;l&&(l._c&&(l._d=!1),Rs(e,l()),l._c&&(l._d=!0));return}else{s=32;const l=t._;!l&&!ri(t)?t._ctx=Re:l===3&&Re&&(Re.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(j(t)){if(n&65){Rs(e,{default:t});return}t={default:t,_ctx:Re},s=32}else t=String(t),n&64?(s=16,t=[W(t)]):s=8;e.children=t,e.shapeFlag|=s}function pr(...e){const t={};for(let s=0;sSe||Re;let Ms,ss;{const e=Ns(),t=(s,n)=>{let l;return(l=e[s])||(l=e[s]=[]),l.push(n),i=>{l.length>1?l.forEach(r=>r(i)):l[0](i)}};Ms=t("__VUE_INSTANCE_SETTERS__",s=>Se=s),ss=t("__VUE_SSR_SETTERS__",s=>ns=s)}const rs=e=>{const t=Se;return Ms(e),e.scope.on(),()=>{e.scope.off(),Ms(t)}},tl=()=>{Se&&Se.scope.off(),Ms(null)};function xi(e){return e.vnode.shapeFlag&4}let ns=!1;function br(e,t=!1,s=!1){t&&ss(t);const{props:n,children:l}=e.vnode,i=xi(e);Qo(e,n,i,t),nr(e,l,s||t);const r=i?yr(e,t):void 0;return t&&ss(!1),r}function yr(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,No);const{setup:n}=s;if(n){it();const l=e.setupContext=n.length>1?Sr(e):null,i=rs(e),r=os(n,e,0,[e.props,l]),a=ml(r);if(ot(),i(),(a||e.sp)&&!Yt(e)&&Yl(e),a){if(r.then(tl,tl),t)return r.then(u=>{ss(!0);try{sl(e,u,t)}finally{ss(!1)}}).catch(u=>{Vs(u,e,0)});e.asyncDep=r}else sl(e,r)}else Si(e)}function sl(e,t,s){j(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:X(t)&&(e.setupState=Vl(t)),Si(e)}function Si(e,t,s){const n=e.type;e.render||(e.render=n.render||We);{const l=rs(e);it();try{jo(e)}finally{ot(),l()}}}const xr={get(e,t){return ve(e,"get",""),e[t]}};function Sr(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,xr),slots:e.slots,emit:e.emit,expose:t}}function qs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Vl(io(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Xt)return Xt[s](e)},has(t,s){return s in t||s in Xt}})):e.proxy}function wr(e){return j(e)&&"__vccOpts"in e}const ae=(e,t)=>fo(e,t,ns),Cr="3.5.41";/** -* @vue/runtime-dom v3.5.41 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let _n;const nl=typeof window<"u"&&window.trustedTypes;if(nl)try{_n=nl.createPolicy("vue",{createHTML:e=>e})}catch{}const wi=_n?e=>_n.createHTML(e):e=>e,Tr="http://www.w3.org/2000/svg",kr="http://www.w3.org/1998/Math/MathML",tt=typeof document<"u"?document:null,ll=tt&&tt.createElement("template"),Er={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const l=t==="svg"?tt.createElementNS(Tr,e):t==="mathml"?tt.createElementNS(kr,e):s?tt.createElement(e,{is:s}):tt.createElement(e);return e==="select"&&n&&n.multiple!=null&&l.setAttribute("multiple",n.multiple),l},createText:e=>tt.createTextNode(e),createComment:e=>tt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>tt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,l,i){const r=s?s.previousSibling:t.lastChild;if(l&&(l===i||l.nextSibling))for(;t.insertBefore(l.cloneNode(!0),s),!(l===i||!(l=l.nextSibling)););else{ll.innerHTML=wi(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const a=ll.content;if(n==="svg"||n==="mathml"){const u=a.firstChild;for(;u.firstChild;)a.appendChild(u.firstChild);a.removeChild(u)}t.insertBefore(a,s)}return[r?r.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Or=Symbol("_vtc");function Pr(e,t,s){const n=e[Or];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const il=Symbol("_vod"),Ar=Symbol("_vsh"),Rr=Symbol(""),Mr=/(?:^|;)\s*display\s*:/;function Ir(e,t,s){const n=e.style,l=re(s);let i=!1;if(s&&!l){if(t)if(re(t))for(const r of t.split(";")){const a=r.slice(0,r.indexOf(":")).trim();s[a]==null&&Wt(n,a,"")}else for(const r in t)s[r]==null&&Wt(n,r,"");for(const r in s){r==="display"&&(i=!0);const a=s[r];a!=null?Dr(e,r,!re(t)&&t?t[r]:void 0,a)||Wt(n,r,a):Wt(n,r,"")}}else if(l){if(t!==s){const r=n[Rr];r&&(s+=";"+r),n.cssText=s,i=Mr.test(s)}}else t&&e.removeAttribute("style");il in e&&(e[il]=i?n.display:"",e[Ar]&&(n.display="none"))}const ol=/\s*!important$/;function Wt(e,t,s){if(N(s))s.forEach(n=>Wt(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=Fr(e,t);ol.test(s)?e.setProperty(kt(n),s.replace(ol,""),"important"):e[n]=s}}const rl=["Webkit","Moz","ms"],ln={};function Fr(e,t){const s=ln[t];if(s)return s;let n=Ie(t);if(n!=="filter"&&n in e)return ln[t]=n;n=xl(n);for(let l=0;lon||(Vr.then(()=>on=0),on=Date.now());function Kr(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const l=s.value;if(N(l)){const i=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{i.call(n),n._stopped=!0};const r=l.slice(),a=[n];for(let u=0;ue.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ur=(e,t,s,n,l,i)=>{const r=l==="svg";t==="class"?Pr(e,n,r):t==="style"?Ir(e,s,n):Fs(t)?Ds(t)||$r(e,t,s,n,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Wr(e,t,n,r))?(ul(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&cl(e,t,n,r,i,t!=="value")):e._isVueCE&&(qr(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!re(n)))?ul(e,Ie(t),n,i,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),cl(e,t,n,r))};function Wr(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&dl(t)&&j(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const l=e.tagName;if(l==="IMG"||l==="VIDEO"||l==="CANVAS"||l==="SOURCE")return!1}return dl(t)&&re(s)?!1:t in e}function qr(e,t){const s=e._def.props;if(!s)return!1;const n=Ie(t);return Array.isArray(s)?s.some(l=>Ie(l)===n):Object.keys(s).some(l=>Ie(l)===n)}const Is=e=>{const t=e.props["onUpdate:modelValue"]||!1;return N(t)?s=>Ss(t,s):t};function zr(e){e.target.composing=!0}function hl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const St=Symbol("_assign"),ys=Symbol("_initialValue");function rn(e,t,s){return t&&(e=e.trim()),s&&(e=xn(e)),e}const xs={created(e,{modifiers:{lazy:t,trim:s,number:n}},l){e.parentNode&&(e.type==="text"?e[ys]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[ys]=e.defaultValue.replace(/\r\n?/g,` -`))),e[St]=Is(l);const i=n||l.props&&l.props.type==="number";xt(e,t?"change":"input",r=>{r.target.composing||e[St](rn(e.value,s,i))}),(s||i)&&xt(e,"change",()=>{e.value=rn(e.value,s,i)}),t||(xt(e,"compositionstart",zr),xt(e,"compositionend",hl),xt(e,"change",hl))},mounted(e,{value:t,modifiers:{trim:s,number:n}}){const l=t??"",i=e[ys];delete e[ys],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[St](rn(e.value,s,n)):e.value=l},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:l,number:i}},r){if(e[St]=Is(r),e.composing)return;const a=(i||e.type==="number")&&!/^0\d/.test(e.value)?xn(e.value):e.value,u=t??"";if(a===u)return;const p=e.getRootNode();(p instanceof Document||p instanceof ShadowRoot)&&p.activeElement===e&&e.type!=="range"&&(n&&t===s||l&&e.value.trim()===u)||(e.value=u)}},pl={deep:!0,created(e,t,s){e[St]=Is(s),xt(e,"change",()=>{const n=e._modelValue,l=Gr(e),i=e.checked,r=e[St];if(N(n)){const a=Cl(n,l),u=a!==-1;if(i&&!u)r(n.concat(l));else if(!i&&u){const p=[...n];p.splice(a,1),r(p)}}else if(Ls(n)){const a=new Set(n);i?a.add(l):a.delete(l),r(a)}else r(Ci(e,i))})},mounted:gl,beforeUpdate(e,t,s){e[St]=Is(s),gl(e,t,s)}};function gl(e,{value:t,oldValue:s},n){e._modelValue=t;let l;if(N(t))l=Cl(t,n.props.value)>-1;else if(Ls(t))l=t.has(n.props.value);else{if(t===s)return;l=is(t,Ci(e,!0))}e.checked!==l&&(e.checked=l)}function Gr(e){return"_value"in e?e._value:e.value}function Ci(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const Jr=["ctrl","shift","alt","meta"],Yr={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Jr.some(s=>e[`${s}Key`]&&!t.includes(s))},Xr=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((l,...i)=>{for(let r=0;r{const t=Qr().createApp(...e),{mount:s}=t;return t.mount=n=>{const l=sa(n);if(!l)return;const i=t._component;!j(i)&&!i.render&&!i.template&&(i.template=l.innerHTML),l.nodeType===1&&(l.textContent="");const r=s(l,!1,ta(l));return l instanceof Element&&(l.removeAttribute("v-cloak"),l.setAttribute("data-v-app","")),r},t});function ta(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function sa(e){return re(e)?document.querySelector(e):e}const na={class:"app-shell"},la={class:"content",id:"overview"},ia={class:"topbar"},oa={class:"topbar-meta"},ra={class:"as-of"},aa={key:0,class:"state-card"},ca={key:1,class:"state-card error-state"},ua={class:"kpi-grid","aria-label":"Signal summary"},fa={class:"kpi-card accent-card"},da={class:"kpi-value"},ha={class:"kpi-foot"},pa={class:"long-count"},ga={class:"short-count"},va={class:"neutral-count"},_a={class:"kpi-card"},ma={class:"kpi-value"},ba={class:"kpi-foot"},ya={class:"panel theme-panel",id:"themes"},xa={class:"panel-header signal-header"},Sa={class:"status-tag"},wa={class:"theme-grid"},Ca={class:"theme-card-head"},Ta={class:"theme-chip"},ka={class:"theme-label-th"},Ea={class:"theme-surprise"},Oa={class:"theme-surprise-value"},Pa={class:"theme-read"},Aa={key:0,class:"theme-read-value"},Ra={key:1,class:"theme-read-value"},Ma={key:2,class:"theme-read-value"},Ia={key:3,class:"theme-read-value"},Fa={key:0,class:"theme-narrative"},Da={key:0,class:"macro-panel"},La={class:"macro-chips"},$a={class:"macro-chip"},Na={class:"macro-chip"},ja={class:"macro-chip"},Ha={class:"macro-chip"},Va={class:"macro-chip"},Ba={class:"panel stock-panel",id:"stocks"},Ka={class:"panel-header signal-header"},Ua={class:"stock-controls"},Wa={class:"toggle-filter"},qa={key:0,class:"empty-research"},za={key:1,class:"table-wrap"},Ga={class:"factor-table"},Ja=["onClick"],Ya={key:1,class:"muted-cell"},Xa={class:"combined-cell"},Za={class:"symbol-name"},Qa={key:0,class:"muted-cell"},ec={class:"score-cell"},tc={key:0,class:"dividend-dot",title:"จ่ายปันผล"},sc={class:"panel lineage-panel",id:"lineage"},nc={class:"panel-header signal-header"},lc={class:"status-tag"},ic={class:"table-wrap"},oc={class:"source-table"},rc={class:"source-name"},ac={class:"muted-cell"},cc={class:"muted-cell"},uc={class:"muted-cell"},fc={class:"muted-cell"},dc={class:"panel health-panel",id:"health"},hc={key:0,class:"empty-research muted-cell"},pc={key:1},gc={class:"source-table"},vc={class:"source-name"},_c={class:"muted-cell",style:{"font-size":"11px"}},mc={key:0,class:"status-tag",style:{background:"#1a7f37",color:"#fff"}},bc={key:1,class:"status-tag warning-tag"},yc={key:0,class:"muted-cell",style:{"font-size":"11px","word-break":"break-word"}},xc={class:"muted-cell"},Sc=["onClick"],wc={class:"panel sim-panel",id:"suggestion"},Cc={class:"panel-header signal-header"},Tc={class:"status-tag neutral-tag"},kc={class:"sim-controls"},Ec={class:"sim-field"},Oc=["disabled"],Pc={key:0,class:"sim-result"},Ac={class:"sim-sums"},Rc={class:"sim-sum"},Mc={class:"sim-sum"},Ic={class:"sim-note"},Fc={class:"sim-buckets"},Dc={class:"sim-bucket"},Lc={class:"sim-order-table"},$c={key:0},Nc={class:"muted-cell"},jc={class:"score-cell"},Hc={class:"score-cell"},Vc={key:1},Bc={class:"sim-bucket"},Kc={class:"sim-order-table"},Uc={key:0},Wc={class:"muted-cell"},qc={class:"score-cell"},zc={class:"score-cell"},Gc={key:1},Jc={class:"sim-bucket"},Yc={class:"sim-order-table"},Xc={key:0},Zc={class:"muted-cell"},Qc={class:"score-cell"},eu={class:"score-cell"},tu={key:1},su={key:1,class:"empty-research"},nu={class:"panel backtest-panel",id:"backtest"},lu={class:"backtest-controls"},iu={class:"checkbox-label",style:{display:"flex","align-items":"center",gap:"6px"}},ou=["disabled"],ru={key:0,class:"state-card warning-state"},au={class:"muted-cell",style:{"margin-top":"4px"}},cu={class:"muted-cell",style:{"margin-top":"2px"}},uu={key:1,class:"state-card error-state"},fu={key:2,class:"backtest-results"},du={class:"bt-kpi-grid"},hu={class:"bt-kpi"},pu={class:"bt-kpi"},gu={class:"bt-kpi"},vu={class:"positive-text"},_u={class:"bt-kpi"},mu={class:"negative-text"},bu={class:"bt-kpi"},yu={class:"bt-kpi"},xu={class:"bt-kpi"},Su={class:"bt-meta muted-cell"},wu={key:0,class:"bt-meta"},Cu={key:1,class:"bt-meta muted-cell"},Tu={key:2,class:"bt-holdings"},ku={class:"source-table",style:{"margin-top":"6px"}},Eu={class:"muted-cell"},Ou={key:3,class:"empty-research"},Pu={key:4,class:"bt-history"},Au={class:"source-table"},Ru={key:0,class:"status-tag warning-tag",title:"ใช้คะแนนปัจจุบันย้อนหลัง ไม่ใช่ point-in-time"},Mu={class:"positive-text"},Iu=["title"],Fu={class:"muted-cell"},Du={class:"modal-card"},Lu={class:"modal-head"},$u={key:0,class:"empty-research"},Nu={key:1,class:"state-card error-state"},ju={key:2,class:"modal-body"},Hu={class:"modal-section"},Vu={key:0,class:"modal-themes"},Bu={class:"contrib-name"},Ku={key:0,class:"contrib-calc"},Uu={key:1,class:"muted-cell"},Wu={key:1,class:"muted-cell"},qu={class:"modal-section"},zu={class:"fund-grid"},Gu={class:"modal-sub"},Ju={class:"modal-section"},Yu={class:"calc-box"},Xu={class:"calc-line"},Zu={class:"calc-step-head"},Qu={class:"calc-step-note"},ef={key:0,class:"calc-z"},tf={class:"modal-sub"},sf={__name:"App",setup(e){const t=B(null),s=B(null),n=B(null),l=B(null),i=B(null),r=B(null),a=B(1e6),u=B(null),p=B(null),h=B(!1),y=B(""),R=B(""),M=B(1e6),K=B(!1),A=B(null),ee=B([]),V=B(null),H=B(!0),U=B(!1),I=B(null),ie=B(!1),te=B("signal_score"),he=B("desc"),$e=B({entries:[]}),Et=B(null),Ge=B(null),Je=B(!0),Ye=B(""),ut=B(""),Ht=B(!1),as=B("token"),ue=B(!0),se=B(""),J=ae(()=>{var g;return((g=l.value)==null?void 0:g.factors)??[]}),Ne=ae(()=>{var g;return((g=r.value)==null?void 0:g.themes)??[]}),ht=ae(()=>{var g;return((g=r.value)==null?void 0:g.sources)??[]}),ke=B([]),Ee=B(!1),Xe=ae(()=>{var g;return((g=r.value)==null?void 0:g.macro)??{}}),Vt=ae(()=>ht.value.length),cs=ae(()=>{var g,f;return((f=(g=r.value)==null?void 0:g.source_summary)==null?void 0:f.factor_keys)??Vt.value}),Ze=ae(()=>{var g;return((g=r.value)==null?void 0:g.available)??!1}),Ot=ae(()=>{var g;return((g=r.value)==null?void 0:g.board)??J.value}),ft=ae(()=>{const g={};for(const f of Ot.value)g[f.symbol]=f;return g}),pt=ae(()=>{var f;const g=(f=t.value)==null?void 0:f.signal_summary;return{long:(g==null?void 0:g.long)??0,short:(g==null?void 0:g.short)??0,neutral:(g==null?void 0:g.neutral)??0,total:(g==null?void 0:g.total)??0}}),gt=g=>({monthly:"รายเดือน",quarterly:"รายไตรมาส",annual:"รายปี",daily:"รายวัน"})[g]||g,zs=ae(()=>{const g={};for(const f of Ne.value)g[f.id]=f.label_th;return g});function c(g){const f=ft.value[g];return((f==null?void 0:f.themes)??[]).map(Pe=>zs.value[Pe]||Pe)}const d=ae(()=>{var g;return((g=l.value)==null?void 0:g.available)??!1}),b=ae(()=>{var g;return((g=l.value)==null?void 0:g.dividend_count)??0}),w=ae(()=>{var g;return((g=i.value)==null?void 0:g.combined_count)??0}),S=ae(()=>{let g=J.value;return ie.value&&(g=g.filter(f=>f.is_dividend)),g});function x(g,f){var pe;return f==="signal_score"?g.signal_score??(g.signal_side==="LONG"?9999:0):f==="combined"?((pe=ft.value[g.symbol])==null?void 0:pe.combined)??-9999:f==="symbol"?g.symbol:f==="dividend_yield"?g.dividend_yield??-1:f==="eps_growth_yoy"?g.eps_growth_yoy??-1:f==="pe"?g.pe??0:f==="eps"?g.eps??0:f==="pbv"?g.pbv??0:f==="roe"?g.roe??0:g[f]}const k=ae(()=>{const g=[...S.value],f=he.value==="asc"?1:-1;return g.sort((pe,Pe)=>{const je=x(pe,te.value),Qe=x(Pe,te.value);return typeof je=="string"?je.localeCompare(Qe)*f:je===Qe?pe.symbol.localeCompare(Pe.symbol):je==null?1:Qe==null?-1:(je-Qe)*f}),g});function T(g){te.value===g?he.value=he.value==="asc"?"desc":"asc":(te.value=g,he.value="desc")}function C(g){return te.value!==g?"":he.value==="asc"?"↑":"↓"}function _(g,f=2){return Number(g??0).toFixed(f)}function D(g){return g==="dated_ledger"}function P(g){return D(g)?{label:"ตามวันจริง",cls:"status-tag",style:"background:#1a7f37;color:#fff"}:g==="dps_annual_proxy"?{label:"Proxy (ต่อหุ้น)",cls:"status-tag warning-tag"}:{label:"Proxy",cls:"status-tag warning-tag"}}function F(g){return D(g)?"ปันผลตามวันจริงจาก ledger (ex-date × จำนวนหุ้น) — กระแสเงินสดจริง":g==="dps_annual_proxy"?"ประมาณการปันผลต่อหุ้น (DPS ล่าสุด × จำนวนหุ้น) ไม่ใช่กระแสเงินสดตามวันจริง":"ประมาณจาก dividend yield ของพอร์ตสุดท้าย ไม่ใช่กระแสเงินสดปันผลจริง"}function L(g){return g?new Date(g).toLocaleString("en-GB",{day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit"}):"—"}async function $(g,f){const pe=await fetch(g,f);if(!pe.ok){const Pe=await pe.json().catch(()=>({}));throw new Error(Pe.error||`Request failed: ${pe.status}`)}return pe.json()}async function Y(){const g=await fetch("/api/v1/backtest/tourism?min_events=12"),f=await g.json().catch(()=>({}));if(![200,409].includes(g.status))throw new Error(f.error||`Request failed: ${g.status}`);return f}async function q(){const g=await fetch("/api/v1/research/tourism/latest");if(g.status===404)return null;const f=await g.json().catch(()=>({}));if(!g.ok)throw new Error(f.error||`Request failed: ${g.status}`);return f}const oe=ae(()=>{var g;return((g=I.value)==null?void 0:g.orders)??[]}),ce=ae(()=>{var g;return((g=I.value)==null?void 0:g.invested)??0}),Oe=ae(()=>{var g;return((g=I.value)==null?void 0:g.unallocated_cash)??0}),fe=g=>oe.value.filter(f=>f.bucket===g);async function vt(){U.value=!0,I.value=null;try{I.value=await $("/api/v1/suggestion",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({capital:Number(a.value)})})}catch(g){ut.value=g.message}finally{U.value=!1}}async function us(){Je.value=!0,Ye.value="";try{const[g,f,pe,Pe,je,Qe,hs,_t,ps,gs]=await Promise.all([$("/api/v1/dashboard/summary"),$("/api/v1/factors/tourism/observations"),$("/api/v1/signals"),$("/api/v1/factors"),$("/api/v1/themes"),$("/api/v1/dashboard"),$("/api/v1/paper/ledger"),$("/api/v1/auth/paper",{credentials:"include"}),Y(),q()]);t.value=g,s.value=f,n.value=pe,l.value=Pe,i.value=je,r.value=Qe,$e.value=hs,Ht.value=!!_t.authenticated,as.value=_t.mode||"token",ue.value=_t.enabled!==!1,se.value=_t.warning||"",Et.value=ps,Ge.value=gs}catch(g){Ye.value=g.message}finally{Je.value=!1}}async function be(g){u.value=g,p.value=null,h.value=!0;try{p.value=await $(`/api/v1/symbols/${g}`)}catch(f){p.value={error:f.message,symbol:g}}finally{h.value=!1}}function Ce(){u.value=null,p.value=null}async function fs(){try{const g=await $("/api/v1/backtest/readiness");V.value=g,!y.value&&g.recommended_start&&(y.value=g.recommended_start),!R.value&&g.recommended_end&&(R.value=g.recommended_end)}catch{V.value=null}}async function ds(){try{const g=await $("/api/v1/scheduler/sources");ke.value=g.sources||[]}catch{ke.value=[]}Ee.value=!0}const Gs=g=>({ok:"ปกติ",network:"เครือข่ายขัดข้อง",timeout:"หมดเวลา",http:"HTTP error",parse:"รูปแบบข้อมูลผิด",structure:"หน้าเว็บเปลี่ยนโครงสร้าง",auth:"สิทธิ์/ยืนยันตัวตน",other:"อื่น ๆ"})[g]||g;async function Ti(g){const f=`[${g.at}] ${g.label} (${g.key}) — ${g.ok?"OK":"FAIL: "+Gs(g.category)} ${g.detail?"| "+g.detail:""}`;try{await navigator.clipboard.writeText(f),ut.value=`คัดลอกสาเหตุของ ${g.key} แล้ว`}catch{ut.value=f}}function ki(g){return g.ok?"":` (สาเหตุน่าจะ: ${Gs(g.category)})`}async function Ei(){K.value=!0,A.value=null;try{A.value=await $("/api/v1/backtest/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({start:y.value,end:R.value,capital:Number(M.value),use_ledger:H.value})}),await Dn()}catch(g){A.value={error:g.message}}finally{K.value=!1}}async function Dn(){try{ee.value=(await $("/api/v1/backtest/run")).runs||[]}catch{ee.value=[]}}const Pt=g=>g!=null?g>=0?"positive-text":"negative-text":"";return Zl(async()=>{await us(),await Promise.all([Dn(),fs(),ds()])}),(g,f)=>{var pe,Pe,je,Qe,hs,_t,ps,gs,Ln,$n,Nn;return E(),O("div",na,[f[76]||(f[76]=hr('',1)),o("main",la,[o("header",ia,[f[16]||(f[16]=o("div",null,[o("div",{class:"eyebrow"},"Alternative data · SET50"),o("h1",null,"SET50 Signal Lab"),o("p",{class:"subtitle"},"ภาพรวม alternative factors ไทย ไปจนถึงสัญญาณลงทุนที่อธิบายได้ — research + paper only")],-1)),o("div",oa,[o("div",{class:ne(["freshness-pill",Ze.value?"pill-live":"pill-fixture"])},[f[15]||(f[15]=o("span",{class:"freshness-dot"},null,-1)),W(m(Ze.value?"ข้อมูลจริงจากแหล่งไทย":"ข้อมูลจำลอง (fixture)"),1)],2),o("div",ra,"ข้อมูล "+m(((pe=t.value)==null?void 0:pe.as_of)||"—"),1)])]),Je.value?(E(),O("div",aa,"กำลังโหลดข้อมูล…")):Ye.value?(E(),O("div",ca,m(Ye.value),1)):(E(),O(le,{key:2},[o("section",ua,[o("article",fa,[f[19]||(f[19]=o("div",{class:"kpi-label"},"สัญญาณที่ใช้งาน",-1)),o("div",da,m(pt.value.long),1),o("div",ha,[o("span",pa,m(pt.value.long)+" ซื้อ",1),f[17]||(f[17]=W(" · ",-1)),o("span",ga,m(pt.value.short)+" ขาย",1),f[18]||(f[18]=W(" · ",-1)),o("span",va,m(pt.value.neutral)+" เป็นกลาง",1)])]),o("article",_a,[f[20]||(f[20]=o("div",{class:"kpi-label"},"แหล่งข้อมูลที่ใช้",-1)),o("div",ma,m(cs.value)+" ปัจจัย · "+m(Vt.value)+" แหล่ง",1),o("div",ba,"ข้อมูลจริงจากแหล่งไทย "+m(Ze.value?"(จริง)":"—"),1)])]),o("section",ya,[o("div",xa,[f[21]||(f[21]=o("div",null,[o("div",{class:"section-kicker"},"ธีม"),o("h2",null,"ธีม (Themes)"),o("p",{class:"panel-subtitle"},"ภาพรวม alternative factors ของไทย — แต่ละธีมมีความถี่ข้อมูลต่างกัน (monthly / quarterly) ดังนั้นอย่าเทียบเป็นจุดเวลาเดียวกัน.")],-1)),o("span",Sa,"รวม "+m(w.value)+" symbols",1)]),o("div",wa,[(E(!0),O(le,null,Ae(Ne.value,v=>(E(),O("article",{key:v.id,class:"theme-card"},[o("div",Ca,[o("span",Ta,m(gt(v.frequency)),1),o("span",ka,m(v.label_th),1)]),o("div",Ea,[f[22]||(f[22]=o("span",{class:"theme-surprise-label"},"ความต่าง (surprise)",-1)),o("span",Oa,m(v.surprise!=null?_(v.surprise,2)+"σ":"—"),1)]),o("div",Pa,[v.id==="auto_credit"&&v.read.new_car_sales_yoy!=null?(E(),O("div",Aa,m(_(v.read.new_car_sales_yoy))+"% YoY ยอดขายรถ",1)):v.id==="auto_credit"&&v.read.auto_npl_pct!=null?(E(),O("div",Ra,"NPL "+m(_(v.read.auto_npl_pct))+"%",1)):v.id==="refining_energy"&&(v.read.quarterly||v.read.net_profit)?(E(),O("div",Ma,"กำไรสุทธิ TOP (รายไตรมาส)")):v.id==="tourism"?(E(),O("div",Ia,"signal tourism "+m(v.surprise!=null?_(v.surprise,2):"—")+"σ",1)):ge("",!0)]),v.narrative?(E(),O("div",Fa,m(v.narrative),1)):ge("",!0)]))),128))]),Object.keys(Xe.value).length?(E(),O("div",Da,[f[28]||(f[28]=o("div",{class:"section-kicker"},"ภาพรวมประเทศไทย",-1)),o("div",La,[o("span",$a,[f[23]||(f[23]=W("การบริโภคภาคเอกชน ",-1)),o("strong",null,m(Xe.value.private_consumption_yoy)+"%",1)]),o("span",Na,[f[24]||(f[24]=W("การลงทุนเอกชน ",-1)),o("strong",null,m(Xe.value.private_investment_yoy)+"%",1)]),o("span",ja,[f[25]||(f[25]=W("เงินเฟ้อ ",-1)),o("strong",null,m(Xe.value.headline_inflation_yoy)+"%",1)]),o("span",Ha,[f[26]||(f[26]=W("การว่างงาน ",-1)),o("strong",null,m(Xe.value.unemployment_pct)+"%",1)]),o("span",Va,[f[27]||(f[27]=W("นักท่องเที่ยว YTD ",-1)),o("strong",null,m(Xe.value.tourists_ytd_mn)+" ล้าน",1)])])])):ge("",!0)]),o("section",Ba,[o("div",Ka,[f[29]||(f[29]=o("div",null,[o("div",{class:"section-kicker"},"ตารางหุ้น"),o("h2",null,"ตารางหุ้น"),o("p",{class:"panel-subtitle"},[W("ตารางเดียวรวมทุกธีม — สัญญาณ + คะแนนรวม (60% ธีม / 40% พื้นฐาน) + มูลค่าพื้นฐานจาก Siamchart. เรียงได้โดยคลิกหัวตาราง; เปิด "),o("em",null,"เฉพาะหุ้นปันผล"),W(" เพื่อกรองหุ้นที่จ่ายปันผล.")])],-1)),o("div",Ua,[o("label",Wa,[Mt(o("input",{type:"checkbox","onUpdate:modelValue":f[0]||(f[0]=v=>ie.value=v)},null,512),[[pl,ie.value]]),o("span",null,"เฉพาะหุ้นปันผล ("+m(b.value)+")",1)]),o("span",{class:ne(["status-tag",d.value?"":"warning-tag"])},m(d.value?"Siamchart ใช้งานได้":"ไม่มี factor"),3)])]),d.value?(E(),O("div",za,[o("table",Ga,[o("thead",null,[o("tr",null,[o("th",{class:ne(["sortable",{active:te.value==="signal_score"}]),onClick:f[1]||(f[1]=v=>T("signal_score"))},"สัญญาณ "+m(C("signal_score")),3),o("th",{class:ne(["sortable",{active:te.value==="combined"}]),onClick:f[2]||(f[2]=v=>T("combined")),title:"60% ธีม + 40% พื้นฐาน"},"คะแนนรวม (60/40) "+m(C("combined")),3),o("th",{class:ne(["sortable",{active:te.value==="symbol"}]),onClick:f[3]||(f[3]=v=>T("symbol"))},"หุ้น "+m(C("symbol")),3),f[31]||(f[31]=o("th",null,"ธีม",-1)),o("th",{class:ne(["sortable",{active:te.value==="pe"}]),onClick:f[4]||(f[4]=v=>T("pe"))},"P/E "+m(C("pe")),3),o("th",{class:ne(["sortable",{active:te.value==="eps"}]),onClick:f[5]||(f[5]=v=>T("eps"))},"EPS "+m(C("eps")),3),o("th",{class:ne(["sortable",{active:te.value==="eps_growth_yoy"}]),onClick:f[6]||(f[6]=v=>T("eps_growth_yoy"))},"EPS YoY "+m(C("eps_growth_yoy")),3),o("th",{class:ne(["sortable",{active:te.value==="dividend_yield"}]),onClick:f[7]||(f[7]=v=>T("dividend_yield"))},"ปันผล % "+m(C("dividend_yield")),3),o("th",{class:ne(["sortable",{active:te.value==="pbv"}]),onClick:f[8]||(f[8]=v=>T("pbv"))},"P/BV "+m(C("pbv")),3),o("th",{class:ne(["sortable",{active:te.value==="roe"}]),onClick:f[9]||(f[9]=v=>T("roe"))},"ROE "+m(C("roe")),3)])]),o("tbody",null,[(E(!0),O(le,null,Ae(k.value,v=>{var At;return E(),O("tr",{key:v.symbol,class:"clickable-row",onClick:vs=>be(v.symbol)},[o("td",null,[v.signal_side?(E(),O("span",{key:0,class:ne(["side-pill",v.signal_side.toLowerCase()])},m(v.signal_side),3)):(E(),O("span",Ya,"—"))]),o("td",Xa,m(((At=ft.value[v.symbol])==null?void 0:At.combined)!=null?_(ft.value[v.symbol].combined):"—"),1),o("td",null,[o("strong",Za,m(v.symbol),1)]),o("td",null,[(E(!0),O(le,null,Ae(c(v.symbol),vs=>(E(),O("span",{key:vs,class:"theme-tag"},m(vs),1))),128)),c(v.symbol).length?ge("",!0):(E(),O("span",Qa,"—"))]),o("td",ec,m(v.pe!=null?_(v.pe):"—"),1),o("td",null,m(v.eps!=null?_(v.eps):"—"),1),o("td",{class:ne(v.eps_growth_yoy>=0?"positive-text":"negative-text")},m(v.eps_growth_yoy!=null?(v.eps_growth_yoy>=0?"+":"")+_(v.eps_growth_yoy)+"%":"—"),3),o("td",{class:ne(v.dividend_yield>=0?"positive-text":"")},[W(m(v.dividend_yield!=null?_(v.dividend_yield)+"%":"—"),1),v.is_dividend?(E(),O("span",tc,"●")):ge("",!0)],2),o("td",null,m(v.pbv!=null?_(v.pbv):"—"),1),o("td",{class:ne(v.roe>=0?"positive-text":"negative-text")},m(v.roe!=null?_(v.roe)+"%":"—"),3)],8,Ja)}),128))])])])):(E(),O("div",qa,[...f[30]||(f[30]=[W("Siamchart snapshot ไม่อยู่บน disk. รัน ",-1),o("code",null,"collect_siamchart.py --group SET50 --with-info",-1),W(" เพื่อเก็บข้อมูล.",-1)])]))]),o("section",sc,[o("div",nc,[f[32]||(f[32]=o("div",null,[o("div",{class:"section-kicker"},"ที่มาของข้อมูล"),o("h2",null,"แหล่งข้อมูลทั้งหมด"),o("p",{class:"panel-subtitle"},"รายการแหล่งข้อมูลจริงที่ใช้ — ดึงมาเมื่อใด และข้อมูลชุดไหน ข้อมูลทั้งหมดจากแหล่งไทย.")],-1)),o("span",lc,m(cs.value)+" ปัจจัย · "+m(Vt.value)+" แหล่ง",1)]),o("div",ic,[o("table",oc,[f[33]||(f[33]=o("thead",null,[o("tr",null,[o("th",null,"ข้อมูล"),o("th",null,"แหล่ง"),o("th",null,"ช่วงข้อมูล"),o("th",null,"ความถี่"),o("th",null,"อัปเดตครั้งต่อไป"),o("th",null,"อัปเดตล่าสุด")])],-1)),o("tbody",null,[(E(!0),O(le,null,Ae(ht.value,(v,At)=>(E(),O("tr",{key:At},[o("td",null,m(v.จาก||v.ขอบเขต),1),o("td",rc,m(v.แหล่ง),1),o("td",ac,m(v.ข้อมูล),1),o("td",cc,m(v.ความถี่||"—"),1),o("td",uc,m(v.อัปเดตครั้งต่อไป?L(v.อัปเดตครั้งต่อไป):"—"),1),o("td",fc,m(v.dึงมาเมื่อ?L(v.dึงมาเมื่อ):"—"),1)]))),128))])])])]),o("section",dc,[f[35]||(f[35]=o("div",{class:"panel-header signal-header"},[o("div",null,[o("div",{class:"section-kicker"},"สถานะการดึงข้อมูล"),o("h2",null,"Log — สถานะแหล่งข้อมูล"),o("p",{class:"panel-subtitle"},'ผลการดึงข้อมูลครั้งล่าสุดของแต่ละแหล่ง โดยระบบวิเคราะห์สาเหตุให้อัตโนมัติ (เครือข่าย / หมดเวลา / หน้าเว็บเปลี่ยนโครงสร้าง / รูปแบบข้อมูล เป็นต้น) — กดปุ่ม "คัดลอก" เพื่อ copy สาเหตุไปแจ้ง/ตรวจสอบได้ทันที.')])],-1)),ke.value.length===0?(E(),O("div",hc,"ยังไม่มี log — รอรอบ refresh ถัดไป (ปกติ ~ทุกวันสำหรับราคา, ~รายเดือน/ไตรมาสสำหรับปัจจัย).")):(E(),O("div",pc,[o("table",gc,[f[34]||(f[34]=o("thead",null,[o("tr",null,[o("th",null,"แหล่ง"),o("th",null,"ผลลัพธ์"),o("th",null,"สาเหตุ"),o("th",null,"เวลา"),o("th")])],-1)),o("tbody",null,[(E(!0),O(le,null,Ae(ke.value.slice(0,20),(v,At)=>(E(),O("tr",{key:At},[o("td",vc,[W(m(v.label),1),o("div",_c,m(v.key),1)]),o("td",null,[v.ok?(E(),O("span",mc,"OK")):(E(),O("span",bc,"FAIL"))]),o("td",null,[v.ok?(E(),O(le,{key:0},[W("—")],64)):(E(),O(le,{key:1},[o("div",null,m(Gs(v.category))+m(ki(v)),1),v.detail?(E(),O("div",yc,m(v.detail.slice(0,160)),1)):ge("",!0)],64))]),o("td",xc,m(v.at?L(v.at):"—"),1),o("td",null,[v.ok?ge("",!0):(E(),O("button",{key:0,class:"primary-btn",style:{padding:"2px 8px"},onClick:vs=>Ti(v)},"คัดลอกสาเหตุ",8,Sc))])]))),128))])])]))]),o("section",wc,[o("div",Cc,[f[36]||(f[36]=o("div",null,[o("div",{class:"section-kicker"},"คำแนะนำการลงทุน"),o("h2",null,"จัดสรรทุน (Suggestion)"),o("p",{class:"panel-subtitle"},"กรอกทุน และระบบแนะนำสัดส่วน 50 / 20 / 30 — หุ้นที่ทำกำไรได้มากสุดแล้วจ่ายปันผล, หุ้นทำกำไรแต่ไม่ปันผล, และหุ้นปันผลสูงสุด (ไม่ซ้ำ) — ขั้นต่ำ 100 หุ้นต่อตัว.")],-1)),o("span",Tc,m(I.value?"ใช้ได้":"รอใส่ทุน"),1)]),o("div",kc,[o("div",Ec,[f[37]||(f[37]=o("label",null,"ทุน (บาท)",-1)),Mt(o("input",{"onUpdate:modelValue":f[10]||(f[10]=v=>a.value=v),type:"number",min:"1000",step:"1000"},null,512),[[xs,a.value]])]),o("button",{class:"primary-button",disabled:U.value,onClick:vt},m(U.value?"กำลังคำนวณ…":"คำนวณการจัดสรร"),9,Oc)]),I.value?(E(),O("div",Pc,[o("div",Ac,[o("div",Rc,[f[38]||(f[38]=o("span",null,"ลงทุนรวม",-1)),o("strong",null,m(_(ce.value,0))+" บาท",1)]),o("div",Mc,[f[39]||(f[39]=o("span",null,"เงินสดเหลือ",-1)),o("strong",null,m(_(Oe.value,0))+" บาท",1)])]),o("div",Ic,m(I.value.data_note),1),o("div",Fc,[o("div",Dc,[f[41]||(f[41]=o("div",{class:"sim-bucket-head"},[o("span",{class:"sim-bucket-tag b1"},"50%"),o("strong",null,"ทำกำไร + จ่ายปันผล")],-1)),o("table",Lc,[fe(1).length?(E(),O("tbody",$c,[(E(!0),O(le,null,Ae(fe(1),v=>(E(),O("tr",{key:"b1"+v.symbol},[o("td",null,m(v.symbol),1),o("td",Nc,"qty "+m(v.qty),1),o("td",jc,"@ "+m(_(v.price)),1),o("td",Hc,m(_(v.notional,0)),1)]))),128))])):(E(),O("tbody",Vc,[...f[40]||(f[40]=[o("tr",null,[o("td",{class:"muted-cell"},"ไม่มีหุ้นที่เข้าเกณฑ์")],-1)])]))])]),o("div",Bc,[f[43]||(f[43]=o("div",{class:"sim-bucket-head"},[o("span",{class:"sim-bucket-tag b2"},"20%"),o("strong",null,"ทำกำไร ไม่ปันผล")],-1)),o("table",Kc,[fe(2).length?(E(),O("tbody",Uc,[(E(!0),O(le,null,Ae(fe(2),v=>(E(),O("tr",{key:"b2"+v.symbol},[o("td",null,m(v.symbol),1),o("td",Wc,"qty "+m(v.qty),1),o("td",qc,"@ "+m(_(v.price)),1),o("td",zc,m(_(v.notional,0)),1)]))),128))])):(E(),O("tbody",Gc,[...f[42]||(f[42]=[o("tr",null,[o("td",{class:"muted-cell"},"ไม่มีหุ้นที่เข้าเกณฑ์")],-1)])]))])]),o("div",Jc,[f[45]||(f[45]=o("div",{class:"sim-bucket-head"},[o("span",{class:"sim-bucket-tag b3"},"30%"),o("strong",null,"ปันผลสูงสุด (ไม่ซ้ำ)")],-1)),o("table",Yc,[fe(3).length?(E(),O("tbody",Xc,[(E(!0),O(le,null,Ae(fe(3),v=>(E(),O("tr",{key:"b3"+v.symbol},[o("td",null,m(v.symbol),1),o("td",Zc,"qty "+m(v.qty),1),o("td",Qc,"@ "+m(_(v.price)),1),o("td",eu,m(_(v.notional,0)),1)]))),128))])):(E(),O("tbody",tu,[...f[44]||(f[44]=[o("tr",null,[o("td",{class:"muted-cell"},"ไม่มีหุ้นที่เข้าเกณฑ์")],-1)])]))])])])])):ge("",!0),I.value?ge("",!0):(E(),O("div",su,"กด 'คำนวณการจัดสรร' เพื่อดูว่า 50/20/30 จัดสรรทุนของคุณไปที่หุ้นไหนบ้าง"))]),o("section",nu,[f[62]||(f[62]=o("div",{class:"panel-header signal-header"},[o("div",null,[o("div",{class:"section-kicker"},"การย้อนทดสอบ"),o("h2",null,"Backtest (ย้อนทดสอบ)"),o("p",{class:"panel-subtitle"},"กำหนดช่วงวัน แล้วระบบจัดสรร 50/20/30 ณ วันที่เริ่ม ลงทุน และปรับพอร์ตตามข้อมูลที่เผยแพร่ใหม่ (event-driven) จนถึงวันสิ้นสุด — สรุปกำไร/ขาดทุนจากราคา + เงินปันผล. มีค่าธรรมเนียม 0.3% ต่อรายการ และปันผลเข้าบัญชีใน 30 วันหลัง ex-date.")])],-1)),o("div",lu,[o("label",null,[f[46]||(f[46]=W("ตั้งแต่ ",-1)),Mt(o("input",{type:"date","onUpdate:modelValue":f[11]||(f[11]=v=>y.value=v)},null,512),[[xs,y.value]])]),o("label",null,[f[47]||(f[47]=W("ถึง ",-1)),Mt(o("input",{type:"date","onUpdate:modelValue":f[12]||(f[12]=v=>R.value=v)},null,512),[[xs,R.value]])]),o("label",null,[f[48]||(f[48]=W("ทุน ",-1)),Mt(o("input",{type:"number","onUpdate:modelValue":f[13]||(f[13]=v=>M.value=v),step:"100000"},null,512),[[xs,M.value,void 0,{number:!0}]])]),o("label",iu,[Mt(o("input",{type:"checkbox","onUpdate:modelValue":f[14]||(f[14]=v=>H.value=v)},null,512),[[pl,H.value]]),f[49]||(f[49]=W(" ใช้ ledger ปันผลตามวันที่จริง ",-1))]),o("button",{class:"primary-btn",disabled:K.value||V.value&&!V.value.ready,onClick:Ei},m(K.value?"กำลังย้อนทดสอบ…":"รัน Backtest"),9,ou)]),V.value&&!V.value.ready?(E(),O("div",ru,[f[50]||(f[50]=o("strong",null,"ยังรันย้อนทดสอบแบบ strict PIT ไม่ได้ — ขาดข้อมูล coverage:",-1)),o("div",au,m((V.value.missing||[]).slice(0,8).join(", "))+m((V.value.missing||[]).length>8?"…":""),1),o("div",cu,"วันเริ่มที่แนะนำ: "+m(V.value.recommended_start||"—")+" · วันสิ้นสุด: "+m(V.value.recommended_end||"—"),1)])):ge("",!0),(Pe=A.value)!=null&&Pe.error?(E(),O("div",uu,m(A.value.error),1)):A.value&&!A.value.error?(E(),O("div",fu,[o("div",du,[o("div",hu,[f[51]||(f[51]=o("span",null,"กำไรจากราคา (realized)",-1)),o("strong",{class:ne(Pt(A.value.realized_trading_pnl))},m(_(A.value.realized_trading_pnl))+" บาท",3)]),o("div",pu,[f[52]||(f[52]=o("span",null,"กำไรจากราคา (unrealized)",-1)),o("strong",{class:ne(Pt(A.value.unrealized_trading_pnl))},m(_(A.value.unrealized_trading_pnl))+" บาท",3)]),o("div",gu,[f[53]||(f[53]=o("span",null,"เงินปันผลที่ได้รับ",-1)),o("strong",vu,m(_(A.value.dividend_cash_received))+" บาท",1)]),o("div",_u,[f[54]||(f[54]=o("span",null,"ค่าธรรมเนียม (0.3%)",-1)),o("strong",mu,"–"+m(_(A.value.transaction_costs))+" บาท",1)]),o("div",bu,[f[55]||(f[55]=o("span",null,"เงินปันผลค้างรับ",-1)),o("strong",null,m(_(A.value.dividend_receivable))+" บาท",1)]),o("div",yu,[f[56]||(f[56]=o("span",null,"มูลค่าสุดท้าย (equity)",-1)),o("strong",null,m(_(A.value.final_equity))+" บาท",1)]),o("div",xu,[f[57]||(f[57]=o("span",null,"ผลตอบแทนสุทธิ",-1)),o("strong",{class:ne(Pt(A.value.net_return))},m((A.value.net_return*100).toFixed(2))+"%",3)])]),o("div",Su,"Rebalances: "+m(A.value.rebalances)+" · ปันผลตาม: "+m(A.value.dividend_timing)+" · ช่วง "+m(A.value.start)+" → "+m(A.value.end),1),A.value.leakage_guard?(E(),O("div",wu,"✅ strict PIT (leakage guard active)")):(E(),O("div",Cu,"คำเตือน: ไม่ได้พิสูจน์ point-in-time (non-PIT)")),A.value.holdings&&A.value.holdings.length?(E(),O("div",Tu,[f[59]||(f[59]=o("strong",null,"พอร์ตสุดท้าย:",-1)),o("table",ku,[f[58]||(f[58]=o("thead",null,[o("tr",null,[o("th",null,"หุ้น"),o("th",null,"จำนวน"),o("th",null,"ต้นทุนเฉลี่ย"),o("th",null,"ราคาล่าสุด"),o("th",null,"มูลค่า"),o("th",null,"กำไร unrealized")])],-1)),o("tbody",null,[(E(!0),O(le,null,Ae(A.value.holdings,v=>(E(),O("tr",{key:v.symbol},[o("td",Eu,m(v.symbol),1),o("td",null,m(v.qty),1),o("td",null,m(_(v.average_cost,2)),1),o("td",null,m(_(v.last_price,2)),1),o("td",null,m(_(v.market_value)),1),o("td",{class:ne(Pt(v.unrealized_pnl))},m(_(v.unrealized_pnl)),3)]))),128))])])])):ge("",!0)])):(E(),O("div",Ou,"กำหนดช่วงวันแล้วกด 'รัน Backtest' เพื่อดูผล (กำไร/ขาดทุนจากราคา + ปันผล)")),ee.value.length?(E(),O("div",Pu,[f[61]||(f[61]=o("div",{class:"section-kicker"},"ประวัติการย้อนทดสอบ",-1)),o("table",Au,[f[60]||(f[60]=o("thead",null,[o("tr",null,[o("th",null,"#"),o("th",null,"ช่วง"),o("th",null,"ทุน"),o("th",null,"กำไรราคา"),o("th",null,"ปันผล"),o("th",null,"ผลตอบแทน"),o("th",null,"รันเมื่อ")])],-1)),o("tbody",null,[(E(!0),O(le,null,Ae(ee.value.slice().reverse(),v=>(E(),O("tr",{key:v.id},[o("td",null,m(v.id),1),o("td",null,[W(m(v.start)+" → "+m(v.end)+" ",1),v.leakage_guard===!1?(E(),O("span",Ru,"descriptive non-PIT")):ge("",!0)]),o("td",null,m(_(v.capital)),1),o("td",{class:ne(Pt(v.price_pnl))},m(_(v.price_pnl)),3),o("td",Mu,[W(m(_(v.dividend_income)),1),o("span",{class:ne(["status-tag",P(v.dividend_method).cls]),style:js([P(v.dividend_method).style||void 0,{"margin-left":"4px"}]),title:F(v.dividend_method)},m(P(v.dividend_method).label),15,Iu)]),o("td",{class:ne(Pt(v.net_return))},m((v.net_return*100).toFixed(2))+"%",3),o("td",Fu,m(v.ran_at?L(v.ran_at):"—"),1)]))),128))])])])):ge("",!0)])],64))]),u.value?(E(),O("div",{key:0,class:"modal-overlay",onClick:Xr(Ce,["self"])},[o("div",Du,[o("div",Lu,[o("div",null,[f[63]||(f[63]=o("div",{class:"modal-kicker"},"การวิเคราะห์รายหุ้น",-1)),o("h3",null,m(u.value),1)]),o("button",{class:"modal-close",onClick:Ce},"✕")]),h.value?(E(),O("div",$u,"กำลังโหลดการวิเคราะห์…")):(je=p.value)!=null&&je.error?(E(),O("div",Nu,m(p.value.error),1)):p.value?(E(),O("div",ju,[o("div",Hu,[f[67]||(f[67]=o("div",{class:"modal-section-title"},"ธีมที่เกี่ยวข้อง (คะแนนต่อธีม)",-1)),(Qe=p.value.themes)!=null&&Qe.length?(E(),O("div",Vu,[(E(!0),O(le,null,Ae(p.value.theme_contributions,v=>(E(),O("div",{key:v.theme,class:"contrib-line"},[o("span",Bu,m(v.label_th||zs.value[v.theme]||v.theme),1),v.surprise!=null?(E(),O("span",Ku,[o("em",null,m(_(v.surprise))+"σ",1),f[64]||(f[64]=W(" × คุณภาพ ",-1)),o("em",null,m(v.quality),1),f[65]||(f[65]=W(" = ",-1)),o("strong",null,m(_(v.theme_score))+"σ",1)])):(E(),O("strong",Uu,"ยังไม่มีข้อมูล"))]))),128)),f[66]||(f[66]=o("div",{class:"modal-sub"},"คะแนนธีม = ค่าเฉลี่ยของ (surprise × คุณภาพหุ้น) ที่หุ้นนี้อยู่ใน",-1))])):(E(),O("div",Wu,"หุ้นนี้ยังไม่ได้จัดอยู่ในธีมใด (จะอัปเดตเมื่อเพิ่มธีม)"))]),o("div",qu,[f[73]||(f[73]=o("div",{class:"modal-section-title"},"มูลค่าพื้นฐาน (Siamchart)",-1)),o("div",zu,[o("span",null,[f[68]||(f[68]=W("P/E ",-1)),o("strong",null,m(((hs=p.value.fundamentals)==null?void 0:hs.pe)??"—"),1)]),o("span",null,[f[69]||(f[69]=W("EPS ",-1)),o("strong",null,m(((_t=p.value.fundamentals)==null?void 0:_t.eps)??"—"),1)]),o("span",null,[f[70]||(f[70]=W("P/BV ",-1)),o("strong",null,m(((ps=p.value.fundamentals)==null?void 0:ps.pbv)??"—"),1)]),o("span",null,[f[71]||(f[71]=W("ROE ",-1)),o("strong",null,m(((gs=p.value.fundamentals)==null?void 0:gs.roe)??"—"),1)]),o("span",null,[f[72]||(f[72]=W("ปันผล ",-1)),o("strong",null,m((Ln=p.value.fundamentals)!=null&&Ln.is_dividend?"จ่าย":"—"),1)])]),o("div",Gu,"ภาพรวม: "+m(p.value.company_name||u.value),1)]),o("div",Ju,[f[75]||(f[75]=o("div",{class:"modal-section-title"},"ขั้นตอนการคำนวณคะแนนรวม",-1)),o("div",Yu,[o("div",Xu,m(p.value.combined_formula),1),(E(!0),O(le,null,Ae(p.value.combined_calc,v=>(E(),O("div",{key:v.label,class:"calc-step"},[o("div",Zu,[o("span",null,m(v.label),1),o("strong",null,m(_(v.value))+" × "+m(v.weight),1)]),o("div",Qu,m(v.note),1)]))),128)),p.value.siamchart_z_note?(E(),O("div",ef,[W(" คะแนนพื้นฐานได้จาก z-score: z = (ค่า"+m(p.value.siamchart_z_note.raw_i)+" − ค่าเฉลี่ย "+m(p.value.siamchart_z_note.population_mean)+") / ค่าเบี่ยงเบน "+m(p.value.siamchart_z_note.population_stdev),1),f[74]||(f[74]=o("br",null,null,-1)),W("เทียบกับ "+m(p.value.siamchart_z_note.universe_size)+" หุ้นใน SET50 ",1)])):ge("",!0)]),o("div",tf,"ราคาล่าสุด: "+m((($n=p.value.price)==null?void 0:$n.latest)!=null?_(p.value.price.latest):"—")+" ("+m(((Nn=p.value.price)==null?void 0:Nn.date)||"—")+")",1)])])):ge("",!0)])])):ge("",!0)])}}};ea(sf).mount("#app"); diff --git a/frontend/dist/assets/index-Dv48rkXC.css b/frontend/dist/assets/index-Dv48rkXC.css deleted file mode 100644 index 6ee8f73..0000000 --- a/frontend/dist/assets/index-Dv48rkXC.css +++ /dev/null @@ -1 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700;800&display=swap";:root{color-scheme:dark;font-family:Manrope,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,sans-serif;color:#edf2f7;background:#0b1018;font-synthesis:none;text-rendering:optimizeLegibility;--bg: #0b1018;--panel: #111925;--panel-soft: #151f2d;--line: #263344;--line-bright: #35465c;--text: #edf2f7;--muted: #8794a6;--faint: #5b6a7e;--mint: #52d6bd;--mint-soft: rgba(82, 214, 189, .12);--amber: #e6b96c;--amber-soft: rgba(230, 185, 108, .12);--red: #ef8b8b;--red-soft: rgba(239, 139, 139, .12)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-width:320px;background:var(--bg)}button,input{font:inherit}button{cursor:pointer}.app-shell{min-height:100vh;display:flex;background:radial-gradient(circle at 85% -10%,rgba(82,214,189,.08),transparent 32rem),var(--bg)}.sidebar{width:248px;flex:0 0 248px;min-height:100vh;padding:28px 18px 22px;border-right:1px solid var(--line);display:flex;flex-direction:column;background:#0b1018c2}.brand-lockup{display:flex;align-items:center;gap:11px;padding:0 9px 33px}.brand-mark{width:32px;height:32px;display:grid;place-items:center;border:1px solid rgba(82,214,189,.7);border-radius:9px;color:var(--mint);font:500 11px DM Mono,monospace;letter-spacing:-.08em;box-shadow:0 0 24px #52d6bd1f}.brand-name{font-size:13px;font-weight:800;letter-spacing:.01em}.brand-caption{margin-top:2px;color:var(--faint);font:10px DM Mono,monospace}.nav-stack{display:grid;gap:5px}.nav-item{display:flex;align-items:center;gap:11px;padding:11px 12px;border:1px solid transparent;border-radius:8px;color:var(--muted);text-decoration:none;font-size:12px;font-weight:600;transition:.2s ease}.nav-item:hover{color:var(--text);background:#ffffff06}.nav-item.active{color:var(--mint);background:var(--mint-soft);border-color:#52d6bd2e}.nav-glyph{width:16px;color:currentColor;font-size:15px;text-align:center}.sidebar-footer{margin-top:auto;padding:12px 8px 0}.mode-card{display:flex;gap:10px;align-items:center;padding:12px;border:1px solid var(--line);border-radius:10px;background:#ffffff05}.mode-dot,.freshness-dot{width:7px;height:7px;flex:0 0 7px;border-radius:99px;background:var(--mint);box-shadow:0 0 12px var(--mint)}.mode-label{font-size:11px;font-weight:700}.mode-detail,.version-line{margin-top:3px;color:var(--faint);font:10px DM Mono,monospace}.version-line{padding:14px 3px 0}.content{width:min(100%,1440px);margin:0 auto;padding:42px clamp(22px,4vw,64px) 70px}.topbar{display:flex;justify-content:space-between;gap:24px;align-items:flex-start;padding-bottom:35px}.eyebrow,.section-kicker{color:var(--mint);font:500 10px DM Mono,monospace;letter-spacing:.14em;text-transform:uppercase}h1,h2,p{margin:0}h1{margin-top:10px;font-size:clamp(28px,4vw,46px);line-height:1.04;letter-spacing:-.055em}h2{margin-top:7px;font-size:17px;letter-spacing:-.025em}.subtitle{max-width:560px;margin-top:12px;color:var(--muted);font-size:13px;line-height:1.7}.topbar-meta{text-align:right;color:var(--muted);font:10px DM Mono,monospace}.freshness-pill{display:inline-flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid rgba(82,214,189,.25);border-radius:99px;color:var(--mint);background:var(--mint-soft)}.freshness-pill.pill-fixture{border-color:#e6b96c59;color:var(--amber);background:var(--amber-soft)}.freshness-pill.pill-fixture .freshness-dot{background:var(--amber);box-shadow:0 0 12px var(--amber)}.as-of{margin-top:10px}.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}.kpi-card,.panel,.state-card{border:1px solid var(--line);background:linear-gradient(145deg,#151f2ddb,#0e151ff0);box-shadow:0 18px 42px #0000001f}.kpi-card{min-height:132px;padding:19px 19px 16px;border-radius:10px}.accent-card{border-color:#52d6bd4d;background:linear-gradient(145deg,#19383bcc,#0e1f26eb)}.kpi-label{color:var(--muted);font:10px DM Mono,monospace;text-transform:uppercase;letter-spacing:.08em}.kpi-value{margin-top:12px;color:var(--text);font-size:29px;font-weight:700;letter-spacing:-.055em}.kpi-unit{margin-left:4px;color:var(--mint);font:14px DM Mono,monospace}.quality-value{font-size:22px;text-transform:capitalize}.kpi-foot{margin-top:10px;color:var(--faint);font:10px DM Mono,monospace}.long-count,.positive-text{color:var(--mint)}.short-count,.negative-text{color:var(--red)}.hero-grid,.bottom-grid{display:grid;grid-template-columns:1.45fr 1fr;gap:12px;margin-bottom:12px}.panel{border-radius:10px;padding:22px}.panel-header{display:flex;justify-content:space-between;align-items:flex-start;gap:20px}.confidence-tag,.status-tag{padding:6px 8px;color:var(--mint);border:1px solid rgba(82,214,189,.22);border-radius:6px;background:var(--mint-soft);font:10px DM Mono,monospace;white-space:nowrap}.pulse-lead{display:flex;gap:15px;align-items:baseline;margin:26px 0 25px}.pulse-number{color:var(--mint);font-size:32px;font-weight:700;letter-spacing:-.06em}.pulse-copy{max-width:380px;color:var(--muted);font-size:12px;line-height:1.6}.observation-list{display:grid;gap:16px}.observation-row{display:grid;grid-template-columns:minmax(145px,1fr) 1.3fr 58px;align-items:center;gap:14px}.observation-name{color:var(--muted);font:10px DM Mono,monospace;text-transform:uppercase}.observation-track{height:6px;overflow:hidden;border-radius:99px;background:#253140}.observation-bar{height:100%;border-radius:inherit}.bar-positive{background:var(--mint);box-shadow:0 0 16px #52d6bd6b}.bar-negative{background:var(--red)}.observation-value{text-align:right;font:11px DM Mono,monospace}.lineage-panel{display:flex;flex-direction:column}.lineage-list{display:grid;gap:0;margin-top:24px;border-top:1px solid var(--line)}.lineage-item{display:flex;justify-content:space-between;gap:15px;padding:13px 0;border-bottom:1px solid var(--line);color:var(--muted);font-size:11px}.lineage-item strong{color:var(--text);font:10px DM Mono,monospace;text-align:right}.lineage-note{margin-top:auto;padding-top:22px;color:var(--faint);font-size:11px;line-height:1.7}.signal-panel{padding:0;overflow:hidden}.signal-header{padding:22px;border-bottom:1px solid var(--line)}.signal-header>div:first-child{flex:1 1 auto;min-width:0}.stock-panel .signal-header{align-items:center;flex-wrap:wrap}.stock-panel .panel-subtitle{max-width:620px}.strategy-meta{color:var(--faint);font:10px DM Mono,monospace}.strategy-meta span{color:var(--line-bright);padding:0 5px}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;min-width:850px}th{padding:12px 16px;color:var(--faint);border-bottom:1px solid var(--line);font:10px DM Mono,monospace;font-weight:400;text-align:left;text-transform:uppercase;letter-spacing:.06em}td{padding:14px 16px;border-bottom:1px solid rgba(38,51,68,.72);color:var(--muted);font-size:11px;vertical-align:middle}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:#ffffff06}.muted-cell,.score-cell,.target-cell{font-family:DM Mono,monospace}.symbol-name{display:block;color:var(--text);font-size:12px}.confidence-cell{display:block;margin-top:4px;color:var(--faint);font:9px DM Mono,monospace}.side-pill{display:inline-block;min-width:52px;padding:5px 7px;border-radius:5px;font:10px DM Mono,monospace;text-align:center}.side-pill.long{color:var(--mint);background:var(--mint-soft)}.side-pill.short{color:var(--red);background:var(--red-soft)}.side-pill.neutral{color:var(--amber);background:var(--amber-soft)}.reason-code{display:inline-block;margin:2px 3px 2px 0;padding:4px 5px;border:1px solid var(--line-bright);border-radius:4px;color:var(--faint);font:9px DM Mono,monospace}.theme-panel{margin-top:18px}.theme-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.theme-card{border:1px solid var(--line-bright);border-radius:10px;padding:14px;background:var(--card)}.theme-card-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}.theme-chip{background:var(--accent-soft, rgba(63,161,255,.12));color:var(--accent);font:9px DM Mono,monospace;padding:2px 6px;border-radius:4px;text-transform:uppercase}.theme-label-en{font:600 12px/1.4 var(--font);color:var(--foreground)}.theme-label-th{font-weight:700;margin-bottom:2px}.theme-source{font:10px DM Mono,monospace;color:var(--faint);margin-bottom:10px}.theme-read-value{font-size:22px;font-weight:700;color:var(--foreground)}.theme-read-meta{font-size:11px;color:var(--faint);margin-top:2px}.theme-read-error{font-size:11px;color:var(--danger, #e5484d)}@media(max-width:720px){.theme-grid{grid-template-columns:1fr}}.theme-surprise{display:flex;flex-direction:column;gap:2px;margin:8px 0 6px}.theme-surprise-label{font-size:10px;color:var(--faint)}.theme-surprise-value{font-size:22px;font-weight:700;color:var(--accent)}.theme-thesis{font-size:11px;color:var(--text-2, #99a);border-top:1px dashed var(--line-bright);padding-top:6px;margin-top:6px}.macro-panel{margin-top:14px;border-top:1px solid var(--line-bright);padding-top:12px}.macro-chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.macro-chip{background:var(--card);border:1px solid var(--line-bright);border-radius:6px;padding:6px 9px;font-size:11px}.macro-chip strong{color:var(--mint)}.lineage-panel{margin-top:18px}.source-table{width:100%;border-collapse:collapse}.source-table th{text-align:left;font:700 10px DM Mono,monospace;color:var(--faint);padding:6px 8px;border-bottom:1px solid var(--line-bright)}.source-table td{padding:7px 8px;font-size:12px;border-bottom:1px solid var(--line-weak, rgba(255,255,255,.04))}.source-name{color:var(--accent)}.combined-cell{color:var(--mint);font-weight:600;font-family:DM Mono,monospace}.theme-tag{display:inline-block;margin:2px 3px 2px 0;padding:2px 6px;border-radius:4px;background:#3fa1ff1f;color:var(--accent);font-size:10px}.theme-tag.large{font-size:12px;padding:4px 8px}.clickable-row{cursor:pointer;transition:background .15s ease}.clickable-row:hover{background:#3fa1ff0f}.theme-narrative{font-size:12px;line-height:1.6;color:var(--text-2, #9aa);border-top:1px dashed var(--line-bright);padding-top:8px;margin-top:8px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;z-index:50;overflow:auto}.modal-card{background:var(--card, #0e1218);border:1px solid var(--line-bright);border-radius:12px;max-width:640px;width:100%;padding:20px}.modal-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:14px}.modal-kicker{font:700 10px DM Mono,monospace;color:var(--faint);letter-spacing:.08em;text-transform:uppercase}.modal-head h3{font-size:24px;margin:4px 0 0}.modal-close{background:none;border:1px solid var(--line-bright);color:var(--text);width:30px;height:30px;border-radius:6px;cursor:pointer}.modal-body{display:flex;flex-direction:column;gap:16px}.modal-section{border-top:1px solid var(--line-weak, rgba(255,255,255,.06));padding-top:12px}.modal-section-title{font:700 11px DM Mono,monospace;color:var(--faint);margin-bottom:8px}.modal-sub{font-size:11px;color:var(--faint);margin-top:6px}.contrib-line{display:flex;justify-content:space-between;padding:3px 0;font-size:13px}.contrib-calc em{font-style:normal;color:var(--accent)}.contrib-calc strong{color:var(--mint);font-family:DM Mono,monospace}.contrib-calc{color:var(--text-2, #9aa);font-size:12px}.fund-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;font-size:12px}.fund-grid span{background:#ffffff08;border-radius:6px;padding:6px 8px}.fund-grid strong{color:var(--text);font-family:DM Mono,monospace}.score-table{width:100%;border-collapse:collapse;font-size:13px}.score-table td{padding:7px 6px;border-bottom:1px solid var(--line-weak, rgba(255,255,255,.05))}.score-table tr.score-total td{border-top:1px solid var(--line-bright);font-weight:700;color:var(--mint)}.calc-box{background:#00000040;border:1px solid var(--line-bright);border-radius:8px;padding:12px}.calc-line{font:700 14px DM Mono,monospace;color:var(--mint);padding:6px 0 10px;border-bottom:1px dashed var(--line-bright);margin-bottom:8px}.calc-step{padding:6px 0;border-bottom:1px solid var(--line-weak, rgba(255,255,255,.05))}.calc-step-head{display:flex;justify-content:space-between;font-size:13px}.calc-step-head strong{color:var(--text);font-family:DM Mono,monospace}.calc-step-note{font-size:11px;color:var(--faint);margin-top:3px;line-height:1.5}.calc-z{font-size:11px;color:var(--faint);margin-top:8px;line-height:1.6}.backtest-controls{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;padding:16px 0}.backtest-controls label{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--faint)}.backtest-controls input,.backtest-controls select{background:#0a0e14;border:1px solid var(--line-bright);color:var(--text);border-radius:6px;padding:7px 9px;font-size:12px}.primary-btn{background:var(--mint);color:#062a1f;border:none;border-radius:7px;padding:9px 16px;font-weight:700;cursor:pointer;font-size:12px}.primary-btn:disabled{opacity:.5;cursor:not-allowed}.bt-kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:12px 0}.bt-kpi{background:#ffffff08;border:1px solid var(--line-bright);border-radius:8px;padding:12px}.bt-kpi span{display:block;font-size:11px;color:var(--faint);margin-bottom:6px}.bt-kpi strong{font-size:15px;font-family:DM Mono,monospace}.bt-meta{margin:4px 0 10px;font-size:11px}.bt-holdings{margin-top:8px;font-size:12px;color:var(--text-2);display:flex;flex-wrap:wrap;gap:6px;align-items:center}.bt-history{margin-top:20px}.bt-history .source-table td{font-size:12px;padding:6px 8px}.thesis-list{display:flex;flex-direction:column;gap:10px;margin:12px 0}.thesis-row{display:flex;gap:10px;align-items:baseline;padding-bottom:8px;border-bottom:1px solid var(--line-weak, rgba(255,255,255,.05))}.thesis-theme{min-width:130px;color:var(--accent)}.thesis-text{flex:1;font-size:12px;color:var(--text-2, #99a)}.thesis-surprise{font-family:DM Mono,monospace;color:var(--mint)}.sim-panel{margin-top:18px}.sim-controls{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;margin-bottom:14px}.sim-field{display:flex;flex-direction:column;gap:4px}.sim-field label{font-size:11px;color:var(--faint)}.sim-field input,.sim-field select{background:var(--card);border:1px solid var(--line-bright);color:var(--text);padding:7px 9px;border-radius:5px;font-size:12px}.sim-result{display:flex;flex-direction:column;gap:12px}.sim-sums{display:flex;gap:24px}.sim-sum span{display:block;font-size:11px;color:var(--faint)}.sim-sum strong{font-size:20px}.sim-note{font-size:11px;color:var(--amber);font-style:italic}.sim-buckets{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;min-width:0}.sim-bucket{border:1px solid var(--line-bright);border-radius:8px;padding:10px;min-width:0;overflow:hidden}.sim-bucket-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.sim-bucket-tag{font:700 10px DM Mono,monospace;padding:2px 6px;border-radius:4px;flex:none}.sim-bucket-tag.b1{background:var(--accent-soft, rgba(63,161,255,.15));color:var(--accent)}.sim-bucket-tag.b2{background:var(--amber-soft, rgba(245,158,11,.15));color:var(--amber)}.sim-bucket-tag.b3{background:var(--mint-soft, rgba(94,234,212,.15));color:var(--mint)}.sim-order-table{width:100%;table-layout:fixed;border-collapse:collapse}.sim-order-table td{padding:3px 4px;font-size:12px;overflow:hidden;text-overflow:ellipsis}.sim-order-table td:first-child{text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sim-bucket-head strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(max-width:720px){.sim-buckets{grid-template-columns:1fr}}.row-action,.primary-button{padding:8px 10px;border:1px solid var(--line-bright);border-radius:5px;color:var(--text);background:transparent;font-size:10px;white-space:nowrap;transition:.2s ease}.row-action:hover{color:var(--mint);border-color:var(--mint)}.stock-panel{padding:0;overflow:hidden;margin-bottom:12px}.panel-subtitle{margin-top:10px;color:var(--faint);font-size:11px;line-height:1.6}.panel-subtitle em{color:var(--mint);font-style:normal}.stock-controls{display:flex;align-items:center;gap:14px}.toggle-filter{display:inline-flex;align-items:center;gap:8px;color:var(--muted);font:10px DM Mono,monospace;cursor:pointer;-webkit-user-select:none;user-select:none}.toggle-filter input{width:auto;accent-color:var(--mint)}.toggle-filter span{white-space:nowrap}.dividend-dot{margin-left:6px;color:var(--amber)}th.sortable{cursor:pointer;transition:color .15s ease}th.sortable:hover{color:var(--text)}th.sortable.active{color:var(--mint)}.research-panel{margin-bottom:12px}.research-grid{display:grid;grid-template-columns:1fr 1.4fr;gap:24px;align-items:center;margin-top:22px}.research-status{display:inline-block;padding:7px 9px;border-radius:5px;font:11px DM Mono,monospace;text-transform:uppercase}.status-ready{color:var(--mint);background:var(--mint-soft)}.status-blocked,.status-descriptive{color:var(--amber);background:var(--amber-soft)}.research-reason{margin-top:12px;color:var(--muted);font-size:12px}.research-meta{margin-top:10px;color:var(--faint);font:9px DM Mono,monospace;overflow-wrap:anywhere}.gate-list{display:grid;gap:0;border-top:1px solid var(--line)}.gate-row{display:flex;justify-content:space-between;gap:15px;padding:12px 0;border-bottom:1px solid var(--line);color:var(--muted);font-size:11px}.gate-row strong{color:var(--text);font:10px DM Mono,monospace;text-align:right}.research-results{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:18px}.research-result-row{display:grid;gap:8px;padding:12px;border:1px solid var(--line);border-radius:6px;color:var(--faint);font:9px DM Mono,monospace}.research-result-row strong{font-size:14px}.empty-research{margin-top:18px;padding:14px;border:1px dashed var(--line-bright);border-radius:6px;color:var(--faint);font:10px DM Mono,monospace}.bottom-grid{grid-template-columns:1fr 1fr}.thesis-panel{background:linear-gradient(145deg,#243040e6,#0f1722f2)}.thesis-panel p,.ledger-panel p{margin-top:14px;color:var(--muted);font-size:12px;line-height:1.8}.thesis-rule{display:flex;align-items:center;gap:9px;margin-top:24px;color:var(--mint);font:10px DM Mono,monospace}.thesis-rule span{width:22px;height:1px;background:var(--mint)}.warning-tag{color:var(--amber);border-color:#e6b96c4d;background:var(--amber-soft)}.neutral-tag{color:var(--amber);border-color:#e6b96c40;background:var(--amber-soft)}.auth-form{display:grid;gap:10px;margin-top:16px}.auth-copy{color:var(--muted);font-size:11px;line-height:1.65}.paper-auth-warning{margin-top:14px;padding:9px 10px;border:1px solid rgba(230,185,108,.3);border-radius:5px;color:var(--amber);background:var(--amber-soft);font:10px DM Mono,monospace;line-height:1.55}.entry-form{display:grid;gap:10px;margin-top:16px}.selected-entry{display:flex;justify-content:space-between;gap:12px;align-items:center;color:var(--muted);font:10px DM Mono,monospace}.selected-entry strong{color:var(--text);font-size:13px}input{width:100%;padding:10px 11px;outline:none;border:1px solid var(--line-bright);border-radius:6px;color:var(--text);background:#0b1018b3;font:11px DM Mono,monospace}input:focus{border-color:var(--mint);box-shadow:0 0 0 3px #52d6bd17}.primary-button{color:#071411;border-color:var(--mint);background:var(--mint);font-weight:700}.primary-button:disabled{opacity:.5;cursor:wait}.empty-ledger{margin-top:18px;padding:14px;border:1px dashed var(--line-bright);border-radius:6px;color:var(--faint);font:10px DM Mono,monospace;text-align:center}.notice{margin-top:14px;padding:9px 10px;border-radius:5px;font:10px DM Mono,monospace}.notice-success{color:var(--mint);background:var(--mint-soft)}.notice-error{color:var(--red);background:var(--red-soft)}.state-card{margin-top:12px;padding:28px;border-radius:10px;color:var(--muted);font:12px DM Mono,monospace}.error-state{color:var(--red);border-color:#ef8b8b4d}@media(max-width:1040px){.sidebar{width:208px;flex-basis:208px}.kpi-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:760px){.app-shell{display:block}.sidebar{width:100%;min-height:auto;padding:15px 18px;border-right:0;border-bottom:1px solid var(--line)}.brand-lockup{padding:0}.nav-stack{display:flex;overflow-x:auto;margin-top:14px;gap:5px}.nav-item{flex:0 0 auto;padding:8px 10px;font-size:10px}.nav-glyph,.sidebar-footer{display:none}.content{padding:30px 16px 44px}.topbar{display:block;padding-bottom:25px}.topbar-meta{display:flex;justify-content:space-between;align-items:center;margin-top:18px;text-align:left}.hero-grid,.bottom-grid{grid-template-columns:1fr}.panel{padding:18px}.research-grid{grid-template-columns:1fr;gap:18px}.research-results{grid-template-columns:repeat(2,1fr)}}@media(max-width:500px){.kpi-grid{grid-template-columns:1fr 1fr;gap:7px}.kpi-card{min-height:112px;padding:14px}.kpi-value{font-size:22px}.kpi-foot{font-size:9px}.pulse-lead{display:block;margin:20px 0}.pulse-copy{display:block;margin-top:8px}.observation-row{grid-template-columns:1fr 55px;gap:8px}.observation-track{grid-column:1 / -1;grid-row:2}.observation-value{grid-column:2;grid-row:1}.lineage-item{display:block}.lineage-item strong{display:block;margin-top:5px;text-align:left}h1{font-size:31px}.subtitle{font-size:11px}} diff --git a/frontend/dist/assets/index-eGeNIixN.js b/frontend/dist/assets/index-eGeNIixN.js new file mode 100644 index 0000000..a5448ed --- /dev/null +++ b/frontend/dist/assets/index-eGeNIixN.js @@ -0,0 +1,18 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))n(l);new MutationObserver(l=>{for(const i of l)if(i.type==="childList")for(const r of i.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function s(l){const i={};return l.integrity&&(i.integrity=l.integrity),l.referrerPolicy&&(i.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?i.credentials="include":l.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(l){if(l.ep)return;l.ep=!0;const i=s(l);fetch(l.href,i)}})();/** +* @vue/shared v3.5.41 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function mn(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const Z={},Ft=[],We=()=>{},_l=()=>!1,Fs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ds=e=>e.startsWith("onUpdate:"),me=Object.assign,bn=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Oi=Object.prototype.hasOwnProperty,Y=(e,t)=>Oi.call(e,t),N=Array.isArray,Dt=e=>ls(e)==="[object Map]",Ls=e=>ls(e)==="[object Set]",jn=e=>ls(e)==="[object Date]",j=e=>typeof e=="function",re=e=>typeof e=="string",ze=e=>typeof e=="symbol",X=e=>e!==null&&typeof e=="object",ml=e=>(X(e)||j(e))&&j(e.then)&&j(e.catch),bl=Object.prototype.toString,ls=e=>bl.call(e),Pi=e=>ls(e).slice(8,-1),yl=e=>ls(e)==="[object Object]",yn=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,qt=mn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),$s=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},Ai=/-\w/g,Ie=$s(e=>e.replace(Ai,t=>t.slice(1).toUpperCase())),Ri=/\B([A-Z])/g,Tt=$s(e=>e.replace(Ri,"-$1").toLowerCase()),xl=$s(e=>e.charAt(0).toUpperCase()+e.slice(1)),Gs=$s(e=>e?`on${xl(e)}`:""),Ue=(e,t)=>!Object.is(e,t),Ss=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:n,value:s})},xn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Hn;const Ns=()=>Hn||(Hn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function js(e){if(N(e)){const t={};for(let s=0;s{if(s){const n=s.split(Ii);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function ne(e){let t="";if(re(e))t=e;else if(N(e))for(let s=0;sis(s,t))}const kl=e=>!!(e&&e.__v_isRef===!0),m=e=>re(e)?e:e==null?"":N(e)||X(e)&&(e.toString===bl||!j(e.toString))?kl(e)?m(e.value):JSON.stringify(e,Tl,2):String(e),Tl=(e,t)=>kl(t)?Tl(e,t.value):Dt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[n,l],i)=>(s[Js(n,i)+" =>"]=l,s),{})}:Ls(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>Js(s))}:ze(t)?Js(t):X(t)&&!N(t)&&!yl(t)?String(t):t,Js=(e,t="")=>{var s;return ze(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};/** +* @vue/reactivity v3.5.41 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let de;class ji{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&de&&(de.active?(this.parent=de,this.index=(de.scopes||(de.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes){const n=this.scopes.slice();for(t=0,s=n.length;t0&&--this._on===0){if(de===this)de=this.prevScope;else{let t=de;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let s,n;for(s=0,n=this.effects.length;s0)return;if(Yt){let t=Yt;for(Yt=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;zt;){let t=zt;for(zt=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(n){e||(e=n)}t=s}}if(e)throw e}function Al(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Rl(e){let t,s=e.depsTail,n=s;for(;n;){const l=n.prevDep;n.version===-1?(n===s&&(s=l),Cn(n),Vi(n)):t=n,n.dep.activeLink=n.prevActiveLink,n.prevActiveLink=void 0,n=l}e.deps=t,e.depsTail=s}function an(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ml(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ml(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Zt)||(e.globalVersion=Zt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!an(e))))return;e.flags|=2;const t=e.dep,s=Q,n=Fe;Q=e,Fe=!0;try{Al(e);const l=e.fn(e._value);(t.version===0||Ue(l,e._value))&&(e.flags|=128,e._value=l,t.version++)}catch(l){throw t.version++,l}finally{Q=s,Fe=n,Rl(e),e.flags&=-3}}function Cn(e,t=!1){const{dep:s,prevSub:n,nextSub:l}=e;if(n&&(n.nextSub=l,e.prevSub=void 0),l&&(l.prevSub=n,e.nextSub=void 0),s.subs===e&&(s.subs=n,!n&&s.computed)){s.computed.flags&=-5;for(let i=s.computed.deps;i;i=i.nextDep)Cn(i,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Vi(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let Fe=!0;const Il=[];function it(){Il.push(Fe),Fe=!1}function ot(){const e=Il.pop();Fe=e===void 0?!0:e}function Vn(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=Q;Q=void 0;try{t()}finally{Q=s}}}let Zt=0;class Bi{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class kn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Q||!Fe||Q===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==Q)s=this.activeLink=new Bi(Q,this),Q.deps?(s.prevDep=Q.depsTail,Q.depsTail.nextDep=s,Q.depsTail=s):Q.deps=Q.depsTail=s,Fl(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const n=s.nextDep;n.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=n),s.prevDep=Q.depsTail,s.nextDep=void 0,Q.depsTail.nextDep=s,Q.depsTail=s,Q.deps===s&&(Q.deps=n)}return s}trigger(t){this.version++,Zt++,this.notify(t)}notify(t){Sn();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{wn()}}}function Fl(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let n=t.deps;n;n=n.nextDep)Fl(n)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const cn=new WeakMap,wt=Symbol(""),un=Symbol(""),Qt=Symbol("");function ve(e,t,s){if(Fe&&Q){let n=cn.get(e);n||cn.set(e,n=new Map);let l=n.get(s);l||(n.set(s,l=new kn),l.map=n,l.key=s),l.track()}}function nt(e,t,s,n,l,i){const r=cn.get(e);if(!r){Zt++;return}const a=u=>{u&&u.trigger()};if(Sn(),t==="clear")r.forEach(a);else{const u=N(e),g=u&&yn(s);if(u&&s==="length"){const h=Number(n);r.forEach((y,R)=>{(R==="length"||R===Qt||!ze(R)&&R>=h)&&a(y)})}else switch((s!==void 0||r.has(void 0))&&a(r.get(s)),g&&a(r.get(Qt)),t){case"add":u?g&&a(r.get("length")):(a(r.get(wt)),Dt(e)&&a(r.get(un)));break;case"delete":u||(a(r.get(wt)),Dt(e)&&a(r.get(un)));break;case"set":Dt(e)&&a(r.get(wt));break}}wn()}function Rt(e){const t=z(e);return t===e?t:(ve(t,"iterate",Qt),Me(e)?t:t.map(De))}function Hs(e){return ve(e=z(e),"iterate",Qt),e}function Be(e,t){return rt(e)?Nt(Ct(e)?De(t):t):De(t)}const Ki={__proto__:null,[Symbol.iterator](){return Zs(this,Symbol.iterator,e=>Be(this,e))},concat(...e){return Rt(this).concat(...e.map(t=>N(t)?Rt(t):t))},entries(){return Zs(this,"entries",e=>(e[1]=Be(this,e[1]),e))},every(e,t){return et(this,"every",e,t,void 0,arguments)},filter(e,t){return et(this,"filter",e,t,s=>s.map(n=>Be(this,n)),arguments)},find(e,t){return et(this,"find",e,t,s=>Be(this,s),arguments)},findIndex(e,t){return et(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return et(this,"findLast",e,t,s=>Be(this,s),arguments)},findLastIndex(e,t){return et(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return et(this,"forEach",e,t,void 0,arguments)},includes(...e){return Qs(this,"includes",e)},indexOf(...e){return Qs(this,"indexOf",e)},join(e){return Rt(this).join(e)},lastIndexOf(...e){return Qs(this,"lastIndexOf",e)},map(e,t){return et(this,"map",e,t,void 0,arguments)},pop(){return Bt(this,"pop")},push(...e){return Bt(this,"push",e)},reduce(e,...t){return Bn(this,"reduce",e,t)},reduceRight(e,...t){return Bn(this,"reduceRight",e,t)},shift(){return Bt(this,"shift")},some(e,t){return et(this,"some",e,t,void 0,arguments)},splice(...e){return Bt(this,"splice",e)},toReversed(){return Rt(this).toReversed()},toSorted(e){return Rt(this).toSorted(e)},toSpliced(...e){return Rt(this).toSpliced(...e)},unshift(...e){return Bt(this,"unshift",e)},values(){return Zs(this,"values",e=>Be(this,e))}};function Zs(e,t,s){const n=Hs(e),l=n[t]();return n!==e&&!Me(e)&&(l._next=l.next,l.next=()=>{const i=l._next();return i.done||(i.value=s(i.value)),i}),l}const Ui=Array.prototype;function et(e,t,s,n,l,i){const r=Hs(e),a=r!==e&&!Me(e),u=r[t];if(u!==Ui[t]){const y=u.apply(e,i);return a?De(y):y}let g=s;r!==e&&(a?g=function(y,R){return s.call(this,Be(e,y),R,e)}:s.length>2&&(g=function(y,R){return s.call(this,y,R,e)}));const h=u.call(r,g,n);return a&&l?l(h):h}function Bn(e,t,s,n){const l=Hs(e),i=l!==e&&!Me(e);let r=s,a=!1;l!==e&&(i?(a=n.length===0,r=function(g,h,y){return a&&(a=!1,g=Be(e,g)),s.call(this,g,Be(e,h),y,e)}):s.length>3&&(r=function(g,h,y){return s.call(this,g,h,y,e)}));const u=l[t](r,...n);return a?Be(e,u):u}function Qs(e,t,s){const n=z(e);ve(n,"iterate",Qt);const l=n[t](...s);return(l===-1||l===!1)&&Pn(s[0])?(s[0]=z(s[0]),n[t](...s)):l}function Bt(e,t,s=[]){it(),Sn();const n=z(e)[t].apply(e,s);return wn(),ot(),n}const Wi=mn("__proto__,__v_isRef,__isVue"),Dl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ze));function qi(e){ze(e)||(e=String(e));const t=z(this);return ve(t,"has",e),t.hasOwnProperty(e)}class Ll{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,n){if(s==="__v_skip")return t.__v_skip;const l=this._isReadonly,i=this._isShallow;if(s==="__v_isReactive")return!l;if(s==="__v_isReadonly")return l;if(s==="__v_isShallow")return i;if(s==="__v_raw")return n===(l?i?so:Hl:i?jl:Nl).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const r=N(t);if(!l){let u;if(r&&(u=Ki[s]))return u;if(s==="hasOwnProperty")return qi}const a=Reflect.get(t,s,_e(t)?t:n);if((ze(s)?Dl.has(s):Wi(s))||(l||ve(t,"get",s),i))return a;if(_e(a)){const u=r&&yn(s)?a:a.value;return l&&X(u)?dn(u):u}return X(a)?l?dn(a):En(a):a}}class $l extends Ll{constructor(t=!1){super(!1,t)}set(t,s,n,l){let i=t[s];const r=N(t)&&yn(s);if(!this._isShallow){const g=rt(i);if(!Me(n)&&!rt(n)&&(i=z(i),n=z(n)),!r&&_e(i)&&!_e(n))return g||(i.value=n),!0}const a=r?Number(s)e,_s=e=>Reflect.getPrototypeOf(e);function Xi(e,t,s){return function(...n){const l=this.__v_raw,i=z(l),r=Dt(i),a=e==="entries"||e===Symbol.iterator&&r,u=e==="keys"&&r,g=l[e](...n),h=s?fn:t?Nt:De;return!t&&ve(i,"iterate",u?un:wt),me(Object.create(g),{next(){const{value:y,done:R}=g.next();return R?{value:y,done:R}:{value:a?[h(y[0]),h(y[1])]:h(y),done:R}}})}}function ms(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Zi(e,t){const s={get(l){const i=this.__v_raw,r=z(i),a=z(l);e||(Ue(l,a)&&ve(r,"get",l),ve(r,"get",a));const{has:u}=_s(r),g=t?fn:e?Nt:De;if(u.call(r,l))return g(i.get(l));if(u.call(r,a))return g(i.get(a));i!==r&&i.get(l)},get size(){const l=this.__v_raw;return!e&&ve(z(l),"iterate",wt),l.size},has(l){const i=this.__v_raw,r=z(i),a=z(l);return e||(Ue(l,a)&&ve(r,"has",l),ve(r,"has",a)),l===a?i.has(l):i.has(l)||i.has(a)},forEach(l,i){const r=this,a=r.__v_raw,u=z(a),g=t?fn:e?Nt:De;return!e&&ve(u,"iterate",wt),a.forEach((h,y)=>l.call(i,g(h),g(y),r))}};return me(s,e?{add:ms("add"),set:ms("set"),delete:ms("delete"),clear:ms("clear")}:{add(l){const i=z(this),r=_s(i),a=z(l),u=!t&&!Me(l)&&!rt(l)?a:l;return r.has.call(i,u)||Ue(l,u)&&r.has.call(i,l)||Ue(a,u)&&r.has.call(i,a)||(i.add(u),nt(i,"add",u,u)),this},set(l,i){!t&&!Me(i)&&!rt(i)&&(i=z(i));const r=z(this),{has:a,get:u}=_s(r);let g=a.call(r,l);g||(l=z(l),g=a.call(r,l));const h=u.call(r,l);return r.set(l,i),g?Ue(i,h)&&nt(r,"set",l,i):nt(r,"add",l,i),this},delete(l){const i=z(this),{has:r,get:a}=_s(i);let u=r.call(i,l);u||(l=z(l),u=r.call(i,l)),a&&a.call(i,l);const g=i.delete(l);return u&&nt(i,"delete",l,void 0),g},clear(){const l=z(this),i=l.size!==0,r=l.clear();return i&&nt(l,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(l=>{s[l]=Xi(l,e,t)}),s}function Tn(e,t){const s=Zi(e,t);return(n,l,i)=>l==="__v_isReactive"?!e:l==="__v_isReadonly"?e:l==="__v_raw"?n:Reflect.get(Y(s,l)&&l in n?s:n,l,i)}const Qi={get:Tn(!1,!1)},eo={get:Tn(!1,!0)},to={get:Tn(!0,!1)};const Nl=new WeakMap,jl=new WeakMap,Hl=new WeakMap,so=new WeakMap;function no(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function En(e){return rt(e)?e:On(e,!1,Yi,Qi,Nl)}function lo(e){return On(e,!1,Ji,eo,jl)}function dn(e){return On(e,!0,Gi,to,Hl)}function On(e,t,s,n,l){if(!X(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const i=l.get(e);if(i)return i;const r=no(Pi(e));if(r===0)return e;const a=new Proxy(e,r===2?n:s);return l.set(e,a),a}function Ct(e){return rt(e)?Ct(e.__v_raw):!!(e&&e.__v_isReactive)}function rt(e){return!!(e&&e.__v_isReadonly)}function Me(e){return!!(e&&e.__v_isShallow)}function Pn(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function io(e){return!Y(e,"__v_skip")&&Object.isExtensible(e)&&Sl(e,"__v_skip",!0),e}const De=e=>X(e)?En(e):e,Nt=e=>X(e)?dn(e):e;function _e(e){return e?e.__v_isRef===!0:!1}function B(e){return oo(e,!1)}function oo(e,t){return _e(e)?e:new ro(e,t)}class ro{constructor(t,s){this.dep=new kn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:z(t),this._value=s?t:De(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,n=this.__v_isShallow||Me(t)||rt(t);t=n?t:z(t),Ue(t,s)&&(this._rawValue=t,this._value=n?t:De(t),this.dep.trigger())}}function ao(e){return _e(e)?e.value:e}const co={get:(e,t,s)=>t==="__v_raw"?e:ao(Reflect.get(e,t,s)),set:(e,t,s,n)=>{const l=e[t];return _e(l)&&!_e(s)?(l.value=s,!0):Reflect.set(e,t,s,n)}};function Vl(e){return Ct(e)?e:new Proxy(e,co)}class uo{constructor(t,s,n){this.fn=t,this.setter=s,this._value=void 0,this.dep=new kn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Zt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&Q!==this)return Pl(this,!0),!0}get value(){const t=this.dep.track();return Ml(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function fo(e,t,s=!1){let n,l;return j(e)?n=e:(n=e.get,l=e.set),new uo(n,l,s)}const bs={},Ts=new WeakMap;let yt;function po(e,t=!1,s=yt){if(s){let n=Ts.get(s);n||Ts.set(s,n=[]),n.push(e)}}function ho(e,t,s=Z){const{immediate:n,deep:l,once:i,scheduler:r,augmentJob:a,call:u}=s,g=I=>l?I:Me(I)||l===!1||l===0?lt(I,1):lt(I);let h,y,R,M,K=!1,A=!1;if(_e(e)?(y=()=>e.value,K=Me(e)):Ct(e)?(y=()=>g(e),K=!0):N(e)?(A=!0,K=e.some(I=>Ct(I)||Me(I)),y=()=>e.map(I=>{if(_e(I))return I.value;if(Ct(I))return g(I);if(j(I))return u?u(I,2):I()})):j(e)?t?y=u?()=>u(e,2):e:y=()=>{if(R){it();try{R()}finally{ot()}}const I=yt;yt=h;try{return u?u(e,3,[M]):e(M)}finally{yt=I}}:y=We,t&&l){const I=y,ie=l===!0?1/0:l;y=()=>lt(I(),ie)}const ee=Hi(),V=()=>{h.stop(),ee&&ee.active&&bn(ee.effects,h)};if(i&&t){const I=t;t=(...ie)=>{const te=I(...ie);return V(),te}}let H=A?new Array(e.length).fill(bs):bs;const U=I=>{if(!(!(h.flags&1)||!h.dirty&&!I))if(t){const ie=h.run();if(I||l||K||(A?ie.some((te,pe)=>Ue(te,H[pe])):Ue(ie,H))){R&&R();const te=yt;yt=h;try{const pe=[ie,H===bs?void 0:A&&H[0]===bs?[]:H,M];H=ie,u?u(t,3,pe):t(...pe)}finally{yt=te}}}else h.run()};return a&&a(U),h=new El(y),h.scheduler=r?()=>r(U,!1):U,M=I=>po(I,!1,h),R=h.onStop=()=>{const I=Ts.get(h);if(I){if(u)u(I,4);else for(const ie of I)ie();Ts.delete(h)}},t?n?U(!0):H=h.run():r?r(U.bind(null,!0),!0):h.run(),V.pause=h.pause.bind(h),V.resume=h.resume.bind(h),V.stop=V,V}function lt(e,t=1/0,s){if(t<=0||!X(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,_e(e))lt(e.value,t,s);else if(N(e))for(let n=0;n{lt(n,t,s)});else if(yl(e)){for(const n in e)lt(e[n],t,s);for(const n of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,n)&<(e[n],t,s)}return e}/** +* @vue/runtime-core v3.5.41 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function os(e,t,s,n){try{return n?e(...n):e()}catch(l){Vs(l,t,s)}}function Le(e,t,s,n){if(j(e)){const l=os(e,t,s,n);return l&&ml(l)&&l.catch(i=>{Vs(i,t,s)}),l}if(N(e)){const l=[];for(let i=0;i>>1,l=xe[n],i=es(l);i=es(s)?xe.push(e):xe.splice(_o(t),0,e),e.flags|=1,Kl()}}function Kl(){Es||(Es=Bl.then(Wl))}function mo(e){if(!N(e))dt&&e.id===-1?dt.splice(It+1,0,e):e.flags&1||(Lt.push(e),e.flags|=1);else for(let t=0;tes(s)-es(n));if(Lt.length=0,dt){for(let s=0;se.id==null?e.flags&2?-1:1/0:e.id;function Wl(e){try{for(Ve=0;Ve{n._d&&el(-1);const i=Os(t),r=kt.length;let a;try{a=e(...l)}finally{for(let u=kt.length;u>r;u--)_i();Os(i),n._d&&el(1)}return a};return n._n=!0,n._c=!0,n._d=!0,n}function Mt(e,t){if(Re===null)return e;const s=qs(Re),n=e.dirs||(e.dirs=[]);for(let l=0;l1)return s&&j(t)?t.call(n&&n.proxy):t}}const xo=Symbol.for("v-scx"),So=()=>ws(xo);function en(e,t,s){return zl(e,t,s)}function zl(e,t,s=Z){const{immediate:n,deep:l,flush:i,once:r}=s,a=me({},s),u=t&&n||!t&&i!=="post";let g;if(ns){if(i==="sync"){const M=So();g=M.__watcherHandles||(M.__watcherHandles=[])}else if(!u){const M=()=>{};return M.stop=We,M.resume=We,M.pause=We,M}}const h=Se;a.call=(M,K,A)=>Le(M,h,K,A);let y=!1;i==="post"?a.scheduler=M=>{we(M,h&&h.suspense)}:i!=="sync"&&(y=!0,a.scheduler=(M,K)=>{K?M():An(M)}),a.augmentJob=M=>{t&&(M.flags|=4),y&&(M.flags|=2,h&&(M.id=h.uid,M.i=h))};const R=ho(e,t,a);return ns&&(g?g.push(R):u&&R()),R}function wo(e,t,s){const n=this.proxy,l=re(e)?e.includes(".")?Yl(n,e):()=>n[e]:e.bind(n,n);let i;j(t)?i=t:(i=t.handler,s=t);const r=rs(this),a=zl(l,i.bind(n),s);return r(),a}function Yl(e,t){const s=t.split(".");return()=>{let n=e;for(let l=0;le.__isTeleport,tn=Symbol("_leaveCb");function ko(e){let t=e[0];if(e.length>1){for(const s of e)if(s.type!==at){t=s;break}}return t}function Gl(e){if(!Mn(e))return Bs(e.type)&&e.children?ko(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:s}=e;if(s){if(t&16)return s[0];if(t&32&&j(s.default))return s.default()}}function Rn(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const s=e.component.subTree;Rn(Bs(s.type)&&Gl(s)||s,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Jl(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Un(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const Ps=new WeakMap;function Gt(e,t,s,n,l=!1){if(N(e)){e.forEach((A,ee)=>Gt(A,t&&(N(t)?t[ee]:t),s,n,l));return}if(Jt(n)&&!l){n.shapeFlag&512&&n.type.__asyncResolved&&n.component.subTree.component&&Gt(e,t,s,n.component.subTree);return}const i=n.shapeFlag&4?qs(n.component):n.el,r=l?null:i,{i:a,r:u}=e,g=t&&t.r,h=a.refs===Z?a.refs={}:a.refs,y=a.setupState,R=z(y),M=y===Z?_l:A=>Un(h,A)?!1:Y(R,A),K=(A,ee)=>!(ee&&Un(h,ee));if(g!=null&&g!==u){if(Wn(t),re(g))h[g]=null,M(g)&&(y[g]=null);else if(_e(g)){const A=t;K(g,A.k)&&(g.value=null),A.k&&(h[A.k]=null)}}if(j(u))os(u,a,12,[r,h]);else{const A=re(u),ee=_e(u);if(A||ee){const V=()=>{if(e.f){const H=A?M(u)?y[u]:h[u]:K()||!e.k?u.value:h[e.k];if(l)N(H)&&bn(H,i);else if(N(H))H.includes(i)||H.push(i);else if(A)h[u]=[i],M(u)&&(y[u]=h[u]);else{const U=[i];K(u,e.k)&&(u.value=U),e.k&&(h[e.k]=U)}}else A?(h[u]=r,M(u)&&(y[u]=r)):ee&&(K(u,e.k)&&(u.value=r),e.k&&(h[e.k]=r))};if(r){const H=()=>{V(),Ps.delete(e)};H.id=-1,Ps.set(e,H),we(H,s)}else Wn(e),V()}}}function Wn(e){const t=Ps.get(e);t&&(t.flags|=8,Ps.delete(e))}Ns().requestIdleCallback;Ns().cancelIdleCallback;const Jt=e=>!!e.type.__asyncLoader,Mn=e=>e.type.__isKeepAlive;function To(e,t){Xl(e,"a",t)}function Eo(e,t){Xl(e,"da",t)}function Xl(e,t,s=Se){const n=e.__wdc||(e.__wdc=()=>{let l=s;for(;l;){if(l.isDeactivated)return;l=l.parent}return e()});if(Ks(t,n,s),s){let l=s.parent;for(;l&&l.parent;)Mn(l.parent.vnode)&&Oo(n,t,s,l),l=l.parent}}function Oo(e,t,s,n){const l=Ks(t,e,n,!0);Ql(()=>{bn(n[t],l)},s)}function Ks(e,t,s=Se,n=!1){if(s){const l=s[e]||(s[e]=[]),i=t.__weh||(t.__weh=(...r)=>{it();const a=rs(s),u=Le(t,s,e,r);return a(),ot(),u});return n?l.unshift(i):l.push(i),i}}const ct=e=>(t,s=Se)=>{(!ns||e==="sp")&&Ks(e,(...n)=>t(...n),s)},Po=ct("bm"),Zl=ct("m"),Ao=ct("bu"),Ro=ct("u"),Mo=ct("bum"),Ql=ct("um"),Io=ct("sp"),Fo=ct("rtg"),Do=ct("rtc");function Lo(e,t=Se){Ks("ec",e,t)}const $o=Symbol.for("v-ndc");function Ae(e,t,s,n){let l;const i=s,r=N(e);if(r||re(e)){const a=r&&Ct(e);let u=!1,g=!1;a&&(u=!Me(e),g=rt(e),e=Hs(e)),l=new Array(e.length);for(let h=0,y=e.length;ht(a,u,void 0,i));else{const a=Object.keys(e);l=new Array(a.length);for(let u=0,g=a.length;ue?xi(e)?qs(e):pn(e.parent):null,Xt=me(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>pn(e.parent),$root:e=>pn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ti(e),$forceUpdate:e=>e.f||(e.f=()=>{An(e.update)}),$nextTick:e=>e.n||(e.n=vo.bind(e.proxy)),$watch:e=>wo.bind(e)}),sn=(e,t)=>e!==Z&&!e.__isScriptSetup&&Y(e,t),No={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:n,data:l,props:i,accessCache:r,type:a,appContext:u}=e;if(t[0]!=="$"){const R=r[t];if(R!==void 0)switch(R){case 1:return n[t];case 2:return l[t];case 4:return s[t];case 3:return i[t]}else{if(sn(n,t))return r[t]=1,n[t];if(l!==Z&&Y(l,t))return r[t]=2,l[t];if(Y(i,t))return r[t]=3,i[t];if(s!==Z&&Y(s,t))return r[t]=4,s[t];hn&&(r[t]=0)}}const g=Xt[t];let h,y;if(g)return t==="$attrs"&&ve(e.attrs,"get",""),g(e);if((h=a.__cssModules)&&(h=h[t]))return h;if(s!==Z&&Y(s,t))return r[t]=4,s[t];if(y=u.config.globalProperties,Y(y,t))return y[t]},set({_:e},t,s){const{data:n,setupState:l,ctx:i}=e;return sn(l,t)?(l[t]=s,!0):n!==Z&&Y(n,t)?(n[t]=s,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:n,appContext:l,props:i,type:r}},a){let u;return!!(s[a]||e!==Z&&a[0]!=="$"&&Y(e,a)||sn(t,a)||Y(i,a)||Y(n,a)||Y(Xt,a)||Y(l.config.globalProperties,a)||(u=r.__cssModules)&&u[a])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:Y(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function qn(e){return N(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let hn=!0;function jo(e){const t=ti(e),s=e.proxy,n=e.ctx;hn=!1,t.beforeCreate&&zn(t.beforeCreate,e,"bc");const{data:l,computed:i,methods:r,watch:a,provide:u,inject:g,created:h,beforeMount:y,mounted:R,beforeUpdate:M,updated:K,activated:A,deactivated:ee,beforeDestroy:V,beforeUnmount:H,destroyed:U,unmounted:I,render:ie,renderTracked:te,renderTriggered:pe,errorCaptured:$e,serverPrefetch:Et,expose:Ye,inheritAttrs:Ge,components:Je,directives:ut,filters:Ht}=t;if(g&&Ho(g,n,null),r)for(const se in r){const G=r[se];j(G)&&(n[se]=G.bind(s))}if(l){const se=l.call(s,s);X(se)&&(e.data=En(se))}if(hn=!0,i)for(const se in i){const G=i[se],Ne=j(G)?G.bind(s,s):j(G.get)?G.get.bind(s,s):We,pt=!j(G)&&j(G.set)?G.set.bind(s):We,Te=ae({get:Ne,set:pt});Object.defineProperty(n,se,{enumerable:!0,configurable:!0,get:()=>Te.value,set:Ee=>Te.value=Ee})}if(a)for(const se in a)ei(a[se],n,s,se);if(u){const se=j(u)?u.call(s):u;Reflect.ownKeys(se).forEach(G=>{yo(G,se[G])})}h&&zn(h,e,"c");function ue(se,G){N(G)?G.forEach(Ne=>se(Ne.bind(s))):G&&se(G.bind(s))}if(ue(Po,y),ue(Zl,R),ue(Ao,M),ue(Ro,K),ue(To,A),ue(Eo,ee),ue(Lo,$e),ue(Do,te),ue(Fo,pe),ue(Mo,H),ue(Ql,I),ue(Io,Et),N(Ye))if(Ye.length){const se=e.exposed||(e.exposed={});Ye.forEach(G=>{Object.defineProperty(se,G,{get:()=>s[G],set:Ne=>s[G]=Ne,enumerable:!0})})}else e.exposed||(e.exposed={});ie&&e.render===We&&(e.render=ie),Ge!=null&&(e.inheritAttrs=Ge),Je&&(e.components=Je),ut&&(e.directives=ut),Et&&Jl(e)}function Ho(e,t,s=We){N(e)&&(e=gn(e));for(const n in e){const l=e[n];let i;X(l)?"default"in l?i=ws(l.from||n,l.default,!0):i=ws(l.from||n):i=ws(l),_e(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:r=>i.value=r}):t[n]=i}}function zn(e,t,s){Le(N(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,s)}function ei(e,t,s,n){let l=n.includes(".")?Yl(s,n):()=>s[n];if(re(e)){const i=t[e];j(i)&&en(l,i)}else if(j(e))en(l,e.bind(s));else if(X(e))if(N(e))e.forEach(i=>ei(i,t,s,n));else{const i=j(e.handler)?e.handler.bind(s):t[e.handler];j(i)&&en(l,i,e)}}function ti(e){const t=e.type,{mixins:s,extends:n}=t,{mixins:l,optionsCache:i,config:{optionMergeStrategies:r}}=e.appContext,a=i.get(t);let u;return a?u=a:!l.length&&!s&&!n?u=t:(u={},l.length&&l.forEach(g=>As(u,g,r,!0)),As(u,t,r)),X(t)&&i.set(t,u),u}function As(e,t,s,n=!1){const{mixins:l,extends:i}=t;i&&As(e,i,s,!0),l&&l.forEach(r=>As(e,r,s,!0));for(const r in t)if(!(n&&r==="expose")){const a=Vo[r]||s&&s[r];e[r]=a?a(e[r],t[r]):t[r]}return e}const Vo={data:Yn,props:Gn,emits:Gn,methods:Ut,computed:Ut,beforeCreate:ye,created:ye,beforeMount:ye,mounted:ye,beforeUpdate:ye,updated:ye,beforeDestroy:ye,beforeUnmount:ye,destroyed:ye,unmounted:ye,activated:ye,deactivated:ye,errorCaptured:ye,serverPrefetch:ye,components:Ut,directives:Ut,watch:Ko,provide:Yn,inject:Bo};function Yn(e,t){return t?e?function(){return me(j(e)?e.call(this,this):e,j(t)?t.call(this,this):t)}:t:e}function Bo(e,t){return Ut(gn(e),gn(t))}function gn(e){if(N(e)){const t={};for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ie(t)}Modifiers`]||e[`${Tt(t)}Modifiers`];function zo(e,t,...s){if(e.isUnmounted)return;const n=e.vnode.props||Z;let l=s;const i=t.startsWith("update:"),r=i&&qo(n,t.slice(7));r&&(r.trim&&(l=s.map(h=>re(h)?h.trim():h)),r.number&&(l=s.map(xn)));let a,u=n[a=Gs(t)]||n[a=Gs(Ie(t))];!u&&i&&(u=n[a=Gs(Tt(t))]),u&&Le(u,e,6,l);const g=n[a+"Once"];if(g){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,Le(g,e,6,l)}}const Yo=new WeakMap;function ni(e,t,s=!1){const n=s?Yo:t.emitsCache,l=n.get(e);if(l!==void 0)return l;const i=e.emits;let r={},a=!1;if(!j(e)){const u=g=>{const h=ni(g,t,!0);h&&(a=!0,me(r,h))};!s&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!i&&!a?(X(e)&&n.set(e,null),null):(N(i)?i.forEach(u=>r[u]=null):me(r,i),X(e)&&n.set(e,r),r)}function Us(e,t){return!e||!Fs(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,Tt(t))||Y(e,t))}function Jn(e){const{type:t,vnode:s,proxy:n,withProxy:l,propsOptions:[i],slots:r,attrs:a,emit:u,render:g,renderCache:h,props:y,data:R,setupState:M,ctx:K,inheritAttrs:A}=e,ee=Os(e);let V,H;try{if(s.shapeFlag&4){const I=l||n,ie=I;V=Ke(g.call(ie,I,h,y,M,R,K)),H=a}else{const I=t;V=Ke(I.length>1?I(y,{attrs:a,slots:r,emit:u}):I(y,null)),H=t.props?a:Go(a)}}catch(I){kt.length=0,Vs(I,e,1),V=qe(at)}let U=V;if(H&&A!==!1){const I=Object.keys(H),{shapeFlag:ie}=U;I.length&&ie&7&&(i&&I.some(Ds)&&(H=Jo(H,i)),U=jt(U,H,!1,!0))}if(s.dirs&&(U=jt(U,null,!1,!0),U.dirs=U.dirs?U.dirs.concat(s.dirs):s.dirs),s.transition){const I=Bs(U.type)&&Gl(U)||U;Rn(I,s.transition)}return V=U,Os(ee),V}const Go=e=>{let t;for(const s in e)(s==="class"||s==="style"||Fs(s))&&((t||(t={}))[s]=e[s]);return t},Jo=(e,t)=>{const s={};for(const n in e)(!Ds(n)||!(n.slice(9)in t))&&(s[n]=e[n]);return s};function Xo(e,t,s){const{props:n,children:l,component:i}=e,{props:r,children:a,patchFlag:u}=t,g=i.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&u>=0){if(u&1024)return!0;if(u&16)return n?Xn(n,r,g):!!r;if(u&8){const h=t.dynamicProps;for(let y=0;yObject.create(ii),ri=e=>Object.getPrototypeOf(e)===ii;function Qo(e,t,s,n=!1){const l={},i=oi();e.propsDefaults=Object.create(null),ai(e,t,l,i);for(const r in e.propsOptions[0])r in l||(l[r]=void 0);s?e.props=n?l:lo(l):e.type.props?e.props=l:e.props=i,e.attrs=i}function er(e,t,s,n){const{props:l,attrs:i,vnode:{patchFlag:r}}=e,a=z(l),[u]=e.propsOptions;let g=!1;if((n||r>0)&&!(r&16)){if(r&8){const h=e.vnode.dynamicProps;for(let y=0;y{u=!0;const[R,M]=ci(y,t,!0);me(r,R),M&&a.push(...M)};!s&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!i&&!u)return X(e)&&n.set(e,Ft),Ft;if(N(i))for(let h=0;he==="_"||e==="_ctx"||e==="$stable",Fn=e=>N(e)?e.map(Ke):[Ke(e)],sr=(e,t,s)=>{if(t._n)return t;const n=bo((...l)=>Fn(t(...l)),s);return n._c=!1,n},ui=(e,t,s)=>{const n=e._ctx;for(const l in e){if(In(l))continue;const i=e[l];if(j(i))t[l]=sr(l,i,n);else if(i!=null){const r=Fn(i);t[l]=()=>r}}},fi=(e,t)=>{const s=Fn(t);e.slots.default=()=>s},di=(e,t,s)=>{for(const n in t)(s||!In(n))&&(e[n]=t[n])},nr=(e,t,s)=>{const n=e.slots=oi();if(e.vnode.shapeFlag&32){const l=t._;l?(di(n,t,s),s&&Sl(n,"_",l,!0)):ui(t,n)}else t&&fi(e,t)},lr=(e,t,s)=>{const{vnode:n,slots:l}=e;let i=!0,r=Z;if(n.shapeFlag&32){const a=t._;a?s&&a===1?i=!1:di(l,t,s):(i=!t.$stable,ui(t,l)),r=t}else t&&(fi(e,t),r={default:1});if(i)for(const a in l)!In(a)&&r[a]==null&&delete l[a]},we=cr;function ir(e){return or(e)}function or(e,t){const s=Ns();s.__VUE__=!0;const{insert:n,remove:l,patchProp:i,createElement:r,createText:a,createComment:u,setText:g,setElementText:h,parentNode:y,nextSibling:R,setScopeId:M=We,insertStaticContent:K}=e,A=(c,d,b,w=null,S=null,x=null,O=void 0,k=null,C=!!d.dynamicChildren)=>{if(c===d)return;c&&!Kt(c,d)&&(w=Ot(c),Ee(c,S,x,!0),c=null),d.patchFlag===-2&&(C=!1,d.dynamicChildren=null);const{type:_,ref:D,shapeFlag:P}=d;switch(_){case Ws:ee(c,d,b,w);break;case at:V(c,d,b,w);break;case Cs:c==null&&H(d,b,w,O);break;case le:Je(c,d,b,w,S,x,O,k,C);break;default:P&1?ie(c,d,b,w,S,x,O,k,C):P&6?ut(c,d,b,w,S,x,O,k,C):(P&64||P&128)&&_.process(c,d,b,w,S,x,O,k,C,gt)}D!=null&&S?Gt(D,c&&c.ref,x,d||c,!d):D==null&&c&&c.ref!=null&&Gt(c.ref,null,x,c,!0)},ee=(c,d,b,w)=>{if(c==null)n(d.el=a(d.children),b,w);else{const S=d.el=c.el;d.children!==c.children&&g(S,d.children)}},V=(c,d,b,w)=>{c==null?n(d.el=u(d.children||""),b,w):d.el=c.el},H=(c,d,b,w)=>{[c.el,c.anchor]=K(c.children,d,b,w,c.el,c.anchor)},U=({el:c,anchor:d},b,w)=>{let S;for(;c&&c!==d;)S=R(c),n(c,b,w),c=S;n(d,b,w)},I=({el:c,anchor:d})=>{let b;for(;c&&c!==d;)b=R(c),l(c),c=b;l(d)},ie=(c,d,b,w,S,x,O,k,C)=>{if(d.type==="svg"?O="svg":d.type==="math"&&(O="mathml"),c==null)te(d,b,w,S,x,O,k,C);else{const _=c.el&&c.el._isVueCE?c.el:null;try{_&&_._beginPatch(),Et(c,d,S,x,O,k,C)}finally{_&&_._endPatch()}}},te=(c,d,b,w,S,x,O,k)=>{let C,_;const{props:D,shapeFlag:P,transition:F,dirs:L}=c;if(C=c.el=r(c.type,x,D&&D.is,D),P&8?h(C,c.children):P&16&&$e(c.children,C,null,w,S,nn(c,x),O,k),L&&mt(c,null,w,"created"),pe(C,c,c.scopeId,O,w),D){for(const J in D)J!=="value"&&!qt(J)&&i(C,J,null,D[J],x,w);"value"in D&&i(C,"value",null,D.value,x),(_=D.onVnodeBeforeMount)&&He(_,w,c)}L&&mt(c,null,w,"beforeMount");const $=rr(S,F);$&&F.beforeEnter(C),n(C,d,b),((_=D&&D.onVnodeMounted)||$||L)&&we(()=>{try{_&&He(_,w,c),$&&F.enter(C),L&&mt(c,null,w,"mounted")}finally{}},S)},pe=(c,d,b,w,S)=>{if(b&&M(c,b),w)for(let x=0;x{for(let _=C;_{const k=d.el=c.el;let{patchFlag:C,dynamicChildren:_,dirs:D}=d;C|=c.patchFlag&16;const P=c.props||Z,F=d.props||Z;let L;if(b&&bt(b,!1),(L=F.onVnodeBeforeUpdate)&&He(L,b,d,c),D&&mt(d,c,b,"beforeUpdate"),b&&bt(b,!0),_&&(!c.dynamicChildren||c.dynamicChildren.length!==_.length)&&(C=0,O=!1,_=null),(P.innerHTML&&F.innerHTML==null||P.textContent&&F.textContent==null)&&h(k,""),_?Ye(c.dynamicChildren,_,k,b,w,nn(d,S),x):O||G(c,d,k,null,b,w,nn(d,S),x,!1),C>0){if(C&16)Ge(k,P,F,b,S);else if(C&2&&P.class!==F.class&&i(k,"class",null,F.class,S),C&4&&i(k,"style",P.style,F.style,S),C&8){const $=d.dynamicProps;for(let J=0;J<$.length;J++){const q=$[J],oe=P[q],ce=F[q];(ce!==oe||q==="value")&&i(k,q,oe,ce,S,b)}}C&1&&c.children!==d.children&&h(k,d.children)}else!O&&_==null&&Ge(k,P,F,b,S);((L=F.onVnodeUpdated)||D)&&we(()=>{L&&He(L,b,d,c),D&&mt(d,c,b,"updated")},w)},Ye=(c,d,b,w,S,x,O)=>{for(let k=0;k{if(d!==b){if(d!==Z)for(const x in d)!qt(x)&&!(x in b)&&i(c,x,d[x],null,S,w);for(const x in b){if(qt(x))continue;const O=b[x],k=d[x];O!==k&&x!=="value"&&i(c,x,k,O,S,w)}"value"in b&&i(c,"value",d.value,b.value,S)}},Je=(c,d,b,w,S,x,O,k,C)=>{const _=d.el=c?c.el:a(""),D=d.anchor=c?c.anchor:a("");let{patchFlag:P,dynamicChildren:F,slotScopeIds:L}=d;L&&(k=k?k.concat(L):L),c==null?(n(_,b,w),n(D,b,w),$e(d.children||[],b,D,S,x,O,k,C)):P>0&&P&64&&F&&c.dynamicChildren&&c.dynamicChildren.length===F.length?(Ye(c.dynamicChildren,F,b,S,x,O,k),(d.key!=null||S&&d===S.subTree)&&pi(c,d,!0)):G(c,d,b,D,S,x,O,k,C)},ut=(c,d,b,w,S,x,O,k,C)=>{d.slotScopeIds=k,c==null?d.shapeFlag&512?S.ctx.activate(d,b,w,O,C):Ht(d,b,w,S,x,O,C):as(c,d,C)},Ht=(c,d,b,w,S,x,O)=>{const k=c.component=_r(c,w,S);if(Mn(c)&&(k.ctx.renderer=gt),br(k,!1,O),k.asyncDep){if(S&&S.registerDep(k,ue,O),!c.el){const C=k.subTree=qe(at);V(null,C,d,b),c.placeholder=C.el}}else ue(k,c,d,b,S,x,O)},as=(c,d,b)=>{const w=d.component=c.component;if(Xo(c,d,b))if(w.asyncDep&&!w.asyncResolved){se(w,d,b);return}else w.next=d,w.update();else d.el=c.el,w.vnode=d},ue=(c,d,b,w,S,x,O)=>{const k=()=>{if(c.isMounted){let{next:P,bu:F,u:L,parent:$,vnode:J}=c;{const fe=hi(c);if(fe){P&&(P.el=J.el,se(c,P,O)),fe.asyncDep.then(()=>{we(()=>{c.isUnmounted||_()},S)});return}}let q=P,oe;bt(c,!1),P?(P.el=J.el,se(c,P,O)):P=J,F&&Ss(F),(oe=P.props&&P.props.onVnodeBeforeUpdate)&&He(oe,$,P,J),bt(c,!0);const ce=Jn(c),Oe=c.subTree;c.subTree=ce,A(Oe,ce,y(Oe.el),Ot(Oe),c,S,x),P.el=ce.el,q===null&&Zo(c,ce.el),L&&we(L,S),(oe=P.props&&P.props.onVnodeUpdated)&&we(()=>He(oe,$,P,J),S)}else{let P;const{el:F,props:L}=d,{bm:$,m:J,parent:q,root:oe,type:ce}=c,Oe=Jt(d);bt(c,!1),$&&Ss($),!Oe&&(P=L&&L.onVnodeBeforeMount)&&He(P,q,d),bt(c,!0);{oe.ce&&oe.ce._hasShadowRoot()&&oe.ce._injectChildStyle(ce,c.parent?c.parent.type:void 0);const fe=c.subTree=Jn(c);A(null,fe,b,w,c,S,x),d.el=fe.el}if(J&&we(J,S),!Oe&&(P=L&&L.onVnodeMounted)){const fe=d;we(()=>He(P,q,fe),S)}(d.shapeFlag&256||q&&Jt(q.vnode)&&q.vnode.shapeFlag&256)&&c.a&&we(c.a,S),c.isMounted=!0,d=b=w=null}};c.scope.on();const C=c.effect=new El(k);c.scope.off();const _=c.update=C.run.bind(C),D=c.job=C.runIfDirty.bind(C);D.i=c,D.id=c.uid,C.scheduler=()=>An(D),bt(c,!0),_()},se=(c,d,b)=>{d.component=c;const w=c.vnode.props;c.vnode=d,c.next=null,er(c,d.props,w,b),lr(c,d.children,b),it(),Kn(c),ot()},G=(c,d,b,w,S,x,O,k,C=!1)=>{const _=c&&c.children,D=c?c.shapeFlag:0,P=d.children,{patchFlag:F,shapeFlag:L}=d;if(F>0){if(F&128){pt(_,P,b,w,S,x,O,k,C);return}else if(F&256){Ne(_,P,b,w,S,x,O,k,C);return}}L&8?(D&16&&Ze(_,S,x),P!==_&&h(b,P)):D&16?L&16?pt(_,P,b,w,S,x,O,k,C):Ze(_,S,x,!0):(D&8&&h(b,""),L&16&&$e(P,b,w,S,x,O,k,C))},Ne=(c,d,b,w,S,x,O,k,C)=>{c=c||Ft,d=d||Ft;const _=c.length,D=d.length,P=Math.min(_,D);let F;for(F=0;FD?Ze(c,S,x,!0,!1,P):$e(d,b,w,S,x,O,k,C,P)},pt=(c,d,b,w,S,x,O,k,C)=>{let _=0;const D=d.length;let P=c.length-1,F=D-1;for(;_<=P&&_<=F;){const L=c[_],$=d[_]=C?st(d[_]):Ke(d[_]);if(Kt(L,$))A(L,$,b,null,S,x,O,k,C);else break;_++}for(;_<=P&&_<=F;){const L=c[P],$=d[F]=C?st(d[F]):Ke(d[F]);if(Kt(L,$))A(L,$,b,null,S,x,O,k,C);else break;P--,F--}if(_>P){if(_<=F){const L=F+1,$=LF)for(;_<=P;)Ee(c[_],S,x,!0),_++;else{const L=_,$=_,J=new Map;for(_=$;_<=F;_++){const be=d[_]=C?st(d[_]):Ke(d[_]);be.key!=null&&J.set(be.key,_)}let q,oe=0;const ce=F-$+1;let Oe=!1,fe=0;const vt=new Array(ce);for(_=0;_=ce){Ee(be,S,x,!0);continue}let Ce;if(be.key!=null)Ce=J.get(be.key);else for(q=$;q<=F;q++)if(vt[q-$]===0&&Kt(be,d[q])){Ce=q;break}Ce===void 0?Ee(be,S,x,!0):(vt[Ce-$]=_+1,Ce>=fe?fe=Ce:Oe=!0,A(be,d[Ce],b,null,S,x,O,k,C),oe++)}const us=Oe?ar(vt):Ft;for(q=us.length-1,_=ce-1;_>=0;_--){const be=$+_,Ce=d[be],fs=d[be+1],ds=be+1{const{el:x,type:O,transition:k,children:C,shapeFlag:_}=c;if(_&6){Te(c.component.subTree,d,b,w);return}if(_&128){c.suspense.move(d,b,w);return}if(_&64){O.move(c,d,b,gt);return}if(O===le){n(x,d,b);for(let P=0;Pk.enter(x),S));else{const{leave:P,delayLeave:F,afterLeave:L}=k,$=()=>{c.ctx.isUnmounted?l(x):n(x,d,b)},J=()=>{const q=x._isLeaving||!!x[tn];x._isLeaving&&x[tn](!0),k.persisted&&!q?$():P(x,()=>{$(),L&&L()})};F?F(x,$,J):J()}else n(x,d,b)},Ee=(c,d,b,w=!1,S=!1)=>{const{type:x,props:O,ref:k,children:C,dynamicChildren:_,shapeFlag:D,patchFlag:P,dirs:F,cacheIndex:L,memo:$}=c;if(P===-2&&(S=!1),k!=null&&(it(),Gt(k,null,b,c,!0),ot()),L!=null&&(d.renderCache[L]=void 0),D&256){d.ctx.deactivate(c);return}const J=D&1&&F,q=!Jt(c);let oe;if(q&&(oe=O&&O.onVnodeBeforeUnmount)&&He(oe,d,c),D&6)cs(c.component,b,w);else{if(D&128){c.suspense.unmount(b,w);return}J&&mt(c,null,d,"beforeUnmount"),D&64?c.type.remove(c,d,b,gt,w):_&&!_.hasOnce&&(x!==le||P>0&&P&64)?Ze(_,d,b,!1,!0):(x===le&&P&384||!S&&D&16)&&Ze(C,d,b),w&&Xe(c)}const ce=$!=null&&L==null;(q&&(oe=O&&O.onVnodeUnmounted)||J||ce)&&we(()=>{oe&&He(oe,d,c),J&&mt(c,null,d,"unmounted"),ce&&(c.el=null)},b)},Xe=c=>{const{type:d,el:b,anchor:w,transition:S}=c;if(d===le){Vt(b,w);return}if(d===Cs){I(c);return}const x=()=>{l(b),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(c.shapeFlag&1&&S&&!S.persisted){const{leave:O,delayLeave:k}=S,C=()=>O(b,x);k?k(c.el,x,C):C()}else x()},Vt=(c,d)=>{let b;for(;c!==d;)b=R(c),l(c),c=b;l(d)},cs=(c,d,b)=>{const{bum:w,scope:S,job:x,subTree:O,um:k,m:C,a:_}=c;Qn(C),Qn(_),w&&Ss(w),S.stop(),x&&(x.flags|=8,Ee(O,c,d,b)),k&&we(k,d),we(()=>{c.isUnmounted=!0},d)},Ze=(c,d,b,w=!1,S=!1,x=0)=>{for(let O=x;O{if(c.shapeFlag&6)return Ot(c.component.subTree);if(c.shapeFlag&128)return c.suspense.next();const d=R(c.anchor||c.el),b=d&&d[Co];return b?R(b):d};let ft=!1;const ht=(c,d,b)=>{let w;c==null?d._vnode&&(Ee(d._vnode,null,null,!0),w=d._vnode.component):A(d._vnode||null,c,d,null,null,null,b),d._vnode=c,ft||(ft=!0,Kn(w),Ul(),ft=!1)},gt={p:A,um:Ee,m:Te,r:Xe,mt:Ht,mc:$e,pc:G,pbc:Ye,n:Ot,o:e};return{render:ht,hydrate:void 0,createApp:Wo(ht)}}function nn({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function bt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function rr(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function pi(e,t,s=!1){const n=e.children,l=t.children;if(N(n)&&N(l))for(let i=0;i>1,e[s[a]]0&&(t[n]=s[i-1]),s[i]=n)}}for(i=s.length,r=s[i-1];i-- >0;)s[i]=r,r=t[r];return s}function hi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:hi(t)}function Qn(e){if(e)for(let t=0;te.__isSuspense;function cr(e,t){t&&t.pendingBranch?N(e)?t.effects.push(...e):t.effects.push(e):mo(e)}const le=Symbol.for("v-fgt"),Ws=Symbol.for("v-txt"),at=Symbol.for("v-cmt"),Cs=Symbol.for("v-stc"),kt=[];let ke=null;function T(e=!1){kt.push(ke=e?null:[])}function _i(){kt.pop(),ke=kt[kt.length-1]||null}let ts=1;function el(e,t=!1){ts+=e,e<0&&ke&&t&&(ke.hasOnce=!0)}function mi(e){return e.dynamicChildren=ts>0?ke||Ft:null,_i(),ts>0&&ke&&ke.push(e),e}function E(e,t,s,n,l,i){return mi(o(e,t,s,n,l,i,!0))}function ur(e,t,s,n,l){return mi(qe(e,t,s,n,l,!0))}function bi(e){return e?e.__v_isVNode===!0:!1}function Kt(e,t){return e.type===t.type&&e.key===t.key}const yi=({key:e})=>e??null,ks=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?re(e)||_e(e)||j(e)?{i:Re,r:e,k:t,f:!!s}:e:null);function o(e,t=null,s=null,n=0,l=null,i=e===le?0:1,r=!1,a=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&yi(t),ref:t&&ks(t),scopeId:ql,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:n,dynamicProps:l,dynamicChildren:null,appContext:null,ctx:Re};return a?(Rs(u,s),i&128&&e.normalize(u)):s&&(u.shapeFlag|=re(s)?8:16),ts>0&&!r&&ke&&(u.patchFlag>0||i&6)&&u.patchFlag!==32&&ke.push(u),u}const qe=fr;function fr(e,t=null,s=null,n=0,l=null,i=!1){if((!e||e===$o)&&(e=at),bi(e)){const a=jt(e,t,!0);return s&&Rs(a,s),ts>0&&!i&&ke&&(a.shapeFlag&6?ke[ke.indexOf(e)]=a:ke.push(a)),a.patchFlag=-2,a}if(wr(e)&&(e=e.__vccOpts),t){t=dr(t);let{class:a,style:u}=t;a&&!re(a)&&(t.class=ne(a)),X(u)&&(Pn(u)&&!N(u)&&(u=me({},u)),t.style=js(u))}const r=re(e)?1:vi(e)?128:Bs(e)?64:X(e)?4:j(e)?2:0;return o(e,t,s,n,l,r,i,!0)}function dr(e){return e?Pn(e)||ri(e)?me({},e):e:null}function jt(e,t,s=!1,n=!1){const{props:l,ref:i,patchFlag:r,children:a,transition:u}=e,g=t?hr(l||{},t):l,h={__v_isVNode:!0,__v_skip:!0,type:e.type,props:g,key:g&&yi(g),ref:t&&t.ref?s&&i?N(i)?i.concat(ks(t)):[i,ks(t)]:ks(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==le?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:u,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&jt(e.ssContent),ssFallback:e.ssFallback&&jt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return u&&n&&Rn(h,u.clone(h)),h}function W(e=" ",t=0){return qe(Ws,null,e,t)}function pr(e,t){const s=qe(Cs,null,e);return s.staticCount=t,s}function ge(e="",t=!1){return t?(T(),ur(at,null,e)):qe(at,null,e)}function Ke(e){return e==null||typeof e=="boolean"?qe(at):N(e)?qe(le,null,e.slice()):bi(e)?st(e):qe(Ws,null,String(e))}function st(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:jt(e)}function Rs(e,t){let s=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(N(t))s=16;else if(typeof t=="object")if(n&65){const l=t.default;l&&(l._c&&(l._d=!1),Rs(e,l()),l._c&&(l._d=!0));return}else{s=32;const l=t._;!l&&!ri(t)?t._ctx=Re:l===3&&Re&&(Re.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(j(t)){if(n&65){Rs(e,{default:t});return}t={default:t,_ctx:Re},s=32}else t=String(t),n&64?(s=16,t=[W(t)]):s=8;e.children=t,e.shapeFlag|=s}function hr(...e){const t={};for(let s=0;sSe||Re;let Ms,ss;{const e=Ns(),t=(s,n)=>{let l;return(l=e[s])||(l=e[s]=[]),l.push(n),i=>{l.length>1?l.forEach(r=>r(i)):l[0](i)}};Ms=t("__VUE_INSTANCE_SETTERS__",s=>Se=s),ss=t("__VUE_SSR_SETTERS__",s=>ns=s)}const rs=e=>{const t=Se;return Ms(e),e.scope.on(),()=>{e.scope.off(),Ms(t)}},tl=()=>{Se&&Se.scope.off(),Ms(null)};function xi(e){return e.vnode.shapeFlag&4}let ns=!1;function br(e,t=!1,s=!1){t&&ss(t);const{props:n,children:l}=e.vnode,i=xi(e);Qo(e,n,i,t),nr(e,l,s||t);const r=i?yr(e,t):void 0;return t&&ss(!1),r}function yr(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,No);const{setup:n}=s;if(n){it();const l=e.setupContext=n.length>1?Sr(e):null,i=rs(e),r=os(n,e,0,[e.props,l]),a=ml(r);if(ot(),i(),(a||e.sp)&&!Jt(e)&&Jl(e),a){if(r.then(tl,tl),t)return r.then(u=>{ss(!0);try{sl(e,u,t)}finally{ss(!1)}}).catch(u=>{Vs(u,e,0)});e.asyncDep=r}else sl(e,r)}else Si(e)}function sl(e,t,s){j(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:X(t)&&(e.setupState=Vl(t)),Si(e)}function Si(e,t,s){const n=e.type;e.render||(e.render=n.render||We);{const l=rs(e);it();try{jo(e)}finally{ot(),l()}}}const xr={get(e,t){return ve(e,"get",""),e[t]}};function Sr(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,xr),slots:e.slots,emit:e.emit,expose:t}}function qs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Vl(io(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Xt)return Xt[s](e)},has(t,s){return s in t||s in Xt}})):e.proxy}function wr(e){return j(e)&&"__vccOpts"in e}const ae=(e,t)=>fo(e,t,ns),Cr="3.5.41";/** +* @vue/runtime-dom v3.5.41 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let _n;const nl=typeof window<"u"&&window.trustedTypes;if(nl)try{_n=nl.createPolicy("vue",{createHTML:e=>e})}catch{}const wi=_n?e=>_n.createHTML(e):e=>e,kr="http://www.w3.org/2000/svg",Tr="http://www.w3.org/1998/Math/MathML",tt=typeof document<"u"?document:null,ll=tt&&tt.createElement("template"),Er={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,n)=>{const l=t==="svg"?tt.createElementNS(kr,e):t==="mathml"?tt.createElementNS(Tr,e):s?tt.createElement(e,{is:s}):tt.createElement(e);return e==="select"&&n&&n.multiple!=null&&l.setAttribute("multiple",n.multiple),l},createText:e=>tt.createTextNode(e),createComment:e=>tt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>tt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,n,l,i){const r=s?s.previousSibling:t.lastChild;if(l&&(l===i||l.nextSibling))for(;t.insertBefore(l.cloneNode(!0),s),!(l===i||!(l=l.nextSibling)););else{ll.innerHTML=wi(n==="svg"?`${e}`:n==="mathml"?`${e}`:e);const a=ll.content;if(n==="svg"||n==="mathml"){const u=a.firstChild;for(;u.firstChild;)a.appendChild(u.firstChild);a.removeChild(u)}t.insertBefore(a,s)}return[r?r.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Or=Symbol("_vtc");function Pr(e,t,s){const n=e[Or];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const il=Symbol("_vod"),Ar=Symbol("_vsh"),Rr=Symbol(""),Mr=/(?:^|;)\s*display\s*:/;function Ir(e,t,s){const n=e.style,l=re(s);let i=!1;if(s&&!l){if(t)if(re(t))for(const r of t.split(";")){const a=r.slice(0,r.indexOf(":")).trim();s[a]==null&&Wt(n,a,"")}else for(const r in t)s[r]==null&&Wt(n,r,"");for(const r in s){r==="display"&&(i=!0);const a=s[r];a!=null?Dr(e,r,!re(t)&&t?t[r]:void 0,a)||Wt(n,r,a):Wt(n,r,"")}}else if(l){if(t!==s){const r=n[Rr];r&&(s+=";"+r),n.cssText=s,i=Mr.test(s)}}else t&&e.removeAttribute("style");il in e&&(e[il]=i?n.display:"",e[Ar]&&(n.display="none"))}const ol=/\s*!important$/;function Wt(e,t,s){if(N(s))s.forEach(n=>Wt(e,t,n));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const n=Fr(e,t);ol.test(s)?e.setProperty(Tt(n),s.replace(ol,""),"important"):e[n]=s}}const rl=["Webkit","Moz","ms"],ln={};function Fr(e,t){const s=ln[t];if(s)return s;let n=Ie(t);if(n!=="filter"&&n in e)return ln[t]=n;n=xl(n);for(let l=0;lon||(Vr.then(()=>on=0),on=Date.now());function Kr(e,t){const s=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=s.attached)return;const l=s.value;if(N(l)){const i=n.stopImmediatePropagation;n.stopImmediatePropagation=()=>{i.call(n),n._stopped=!0};const r=l.slice(),a=[n];for(let u=0;ue.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ur=(e,t,s,n,l,i)=>{const r=l==="svg";t==="class"?Pr(e,n,r):t==="style"?Ir(e,s,n):Fs(t)?Ds(t)||$r(e,t,s,n,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Wr(e,t,n,r))?(ul(e,t,n),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&cl(e,t,n,r,i,t!=="value")):e._isVueCE&&(qr(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!re(n)))?ul(e,Ie(t),n,i,t):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),cl(e,t,n,r))};function Wr(e,t,s,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&dl(t)&&j(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const l=e.tagName;if(l==="IMG"||l==="VIDEO"||l==="CANVAS"||l==="SOURCE")return!1}return dl(t)&&re(s)?!1:t in e}function qr(e,t){const s=e._def.props;if(!s)return!1;const n=Ie(t);return Array.isArray(s)?s.some(l=>Ie(l)===n):Object.keys(s).some(l=>Ie(l)===n)}const Is=e=>{const t=e.props["onUpdate:modelValue"]||!1;return N(t)?s=>Ss(t,s):t};function zr(e){e.target.composing=!0}function pl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const St=Symbol("_assign"),ys=Symbol("_initialValue");function rn(e,t,s){return t&&(e=e.trim()),s&&(e=xn(e)),e}const xs={created(e,{modifiers:{lazy:t,trim:s,number:n}},l){e.parentNode&&(e.type==="text"?e[ys]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[ys]=e.defaultValue.replace(/\r\n?/g,` +`))),e[St]=Is(l);const i=n||l.props&&l.props.type==="number";xt(e,t?"change":"input",r=>{r.target.composing||e[St](rn(e.value,s,i))}),(s||i)&&xt(e,"change",()=>{e.value=rn(e.value,s,i)}),t||(xt(e,"compositionstart",zr),xt(e,"compositionend",pl),xt(e,"change",pl))},mounted(e,{value:t,modifiers:{trim:s,number:n}}){const l=t??"",i=e[ys];delete e[ys],i!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==i?e[St](rn(e.value,s,n)):e.value=l},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:n,trim:l,number:i}},r){if(e[St]=Is(r),e.composing)return;const a=(i||e.type==="number")&&!/^0\d/.test(e.value)?xn(e.value):e.value,u=t??"";if(a===u)return;const g=e.getRootNode();(g instanceof Document||g instanceof ShadowRoot)&&g.activeElement===e&&e.type!=="range"&&(n&&t===s||l&&e.value.trim()===u)||(e.value=u)}},hl={deep:!0,created(e,t,s){e[St]=Is(s),xt(e,"change",()=>{const n=e._modelValue,l=Yr(e),i=e.checked,r=e[St];if(N(n)){const a=Cl(n,l),u=a!==-1;if(i&&!u)r(n.concat(l));else if(!i&&u){const g=[...n];g.splice(a,1),r(g)}}else if(Ls(n)){const a=new Set(n);i?a.add(l):a.delete(l),r(a)}else r(Ci(e,i))})},mounted:gl,beforeUpdate(e,t,s){e[St]=Is(s),gl(e,t,s)}};function gl(e,{value:t,oldValue:s},n){e._modelValue=t;let l;if(N(t))l=Cl(t,n.props.value)>-1;else if(Ls(t))l=t.has(n.props.value);else{if(t===s)return;l=is(t,Ci(e,!0))}e.checked!==l&&(e.checked=l)}function Yr(e){return"_value"in e?e._value:e.value}function Ci(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const Gr=["ctrl","shift","alt","meta"],Jr={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Gr.some(s=>e[`${s}Key`]&&!t.includes(s))},Xr=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),n=t.join(".");return s[n]||(s[n]=((l,...i)=>{for(let r=0;r{const t=Qr().createApp(...e),{mount:s}=t;return t.mount=n=>{const l=sa(n);if(!l)return;const i=t._component;!j(i)&&!i.render&&!i.template&&(i.template=l.innerHTML),l.nodeType===1&&(l.textContent="");const r=s(l,!1,ta(l));return l instanceof Element&&(l.removeAttribute("v-cloak"),l.setAttribute("data-v-app","")),r},t});function ta(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function sa(e){return re(e)?document.querySelector(e):e}const na={class:"app-shell"},la={class:"content",id:"overview"},ia={class:"topbar"},oa={class:"topbar-meta"},ra={class:"as-of"},aa={key:0,class:"state-card"},ca={key:1,class:"state-card error-state"},ua={class:"kpi-grid","aria-label":"Signal summary"},fa={class:"kpi-card accent-card"},da={class:"kpi-value"},pa={class:"kpi-foot"},ha={class:"long-count"},ga={class:"short-count"},va={class:"neutral-count"},_a={class:"kpi-card"},ma={class:"kpi-value"},ba={class:"kpi-foot"},ya={class:"panel theme-panel",id:"themes"},xa={class:"panel-header signal-header"},Sa={class:"status-tag"},wa={class:"theme-grid"},Ca={class:"theme-card-head"},ka={class:"theme-chip"},Ta={class:"theme-label-th"},Ea={class:"theme-surprise"},Oa={class:"theme-surprise-value"},Pa={class:"theme-read"},Aa={key:0,class:"theme-read-value"},Ra={key:1,class:"theme-read-value"},Ma={key:2,class:"theme-read-value"},Ia={key:3,class:"theme-read-value"},Fa={key:4,class:"theme-read-value"},Da={key:5,class:"theme-read-value"},La={key:6,class:"theme-read-value"},$a={key:7,class:"theme-read-value"},Na={key:8,class:"theme-read-value"},ja={key:9,class:"theme-read-value"},Ha={key:10,class:"theme-read-value"},Va={key:11,class:"theme-read-value"},Ba={key:12,class:"theme-read-value"},Ka={key:0,class:"theme-narrative"},Ua={key:0,class:"macro-panel"},Wa={class:"macro-chips"},qa={class:"macro-chip"},za={class:"macro-chip"},Ya={class:"macro-chip"},Ga={class:"macro-chip"},Ja={class:"macro-chip"},Xa={class:"panel stock-panel",id:"stocks"},Za={class:"panel-header signal-header"},Qa={class:"stock-controls"},ec={class:"toggle-filter"},tc={key:0,class:"empty-research"},sc={key:1,class:"table-wrap"},nc={class:"factor-table"},lc=["onClick"],ic={key:1,class:"muted-cell"},oc={class:"combined-cell"},rc={class:"symbol-name"},ac={key:0,class:"muted-cell"},cc={class:"score-cell"},uc={key:0,class:"dividend-dot",title:"จ่ายปันผล"},fc={class:"panel lineage-panel",id:"lineage"},dc={class:"panel-header signal-header"},pc={class:"status-tag"},hc={class:"table-wrap"},gc={class:"source-table"},vc={class:"source-name"},_c={class:"muted-cell"},mc={class:"muted-cell"},bc={class:"muted-cell"},yc={class:"muted-cell"},xc={class:"panel health-panel",id:"health"},Sc={key:0,class:"empty-research muted-cell"},wc={key:1},Cc={class:"source-table"},kc={class:"source-name"},Tc={class:"muted-cell",style:{"font-size":"11px"}},Ec={key:0,class:"status-tag",style:{background:"#1a7f37",color:"#fff"}},Oc={key:1,class:"status-tag warning-tag"},Pc={key:0,class:"muted-cell",style:{"font-size":"11px","word-break":"break-word"}},Ac={class:"muted-cell"},Rc=["onClick"],Mc={class:"panel sim-panel",id:"suggestion"},Ic={class:"panel-header signal-header"},Fc={class:"status-tag neutral-tag"},Dc={class:"sim-controls"},Lc={class:"sim-field"},$c=["disabled"],Nc={key:0,class:"sim-result"},jc={class:"sim-sums"},Hc={class:"sim-sum"},Vc={class:"sim-sum"},Bc={class:"sim-note"},Kc={class:"sim-buckets"},Uc={class:"sim-bucket"},Wc={class:"sim-order-table"},qc={key:0},zc={class:"muted-cell"},Yc={class:"score-cell"},Gc={class:"score-cell"},Jc={key:1},Xc={class:"sim-bucket"},Zc={class:"sim-order-table"},Qc={key:0},eu={class:"muted-cell"},tu={class:"score-cell"},su={class:"score-cell"},nu={key:1},lu={class:"sim-bucket"},iu={class:"sim-order-table"},ou={key:0},ru={class:"muted-cell"},au={class:"score-cell"},cu={class:"score-cell"},uu={key:1},fu={key:1,class:"empty-research"},du={class:"panel backtest-panel",id:"backtest"},pu={class:"backtest-controls"},hu={class:"checkbox-label",style:{display:"flex","align-items":"center",gap:"6px"}},gu=["disabled"],vu={key:0,class:"state-card warning-state"},_u={class:"muted-cell",style:{"margin-top":"4px"}},mu={class:"muted-cell",style:{"margin-top":"2px"}},bu={key:1,class:"state-card error-state"},yu={key:2,class:"backtest-results"},xu={class:"bt-kpi-grid"},Su={class:"bt-kpi"},wu={class:"bt-kpi"},Cu={class:"bt-kpi"},ku={class:"positive-text"},Tu={class:"bt-kpi"},Eu={class:"negative-text"},Ou={class:"bt-kpi"},Pu={class:"bt-kpi"},Au={class:"bt-kpi"},Ru={class:"bt-meta muted-cell"},Mu={key:0,class:"bt-meta"},Iu={key:1,class:"bt-meta muted-cell"},Fu={key:2,class:"bt-holdings"},Du={class:"source-table",style:{"margin-top":"6px"}},Lu={class:"muted-cell"},$u={key:3,class:"empty-research"},Nu={key:4,class:"bt-history"},ju={class:"source-table"},Hu={key:0,class:"status-tag warning-tag",title:"ใช้คะแนนปัจจุบันย้อนหลัง ไม่ใช่ point-in-time"},Vu={class:"positive-text"},Bu=["title"],Ku={class:"muted-cell"},Uu={class:"modal-card"},Wu={class:"modal-head"},qu={key:0,class:"empty-research"},zu={key:1,class:"state-card error-state"},Yu={key:2,class:"modal-body"},Gu={class:"modal-section"},Ju={key:0,class:"modal-themes"},Xu={class:"contrib-name"},Zu={key:0,class:"contrib-calc"},Qu={key:1,class:"muted-cell"},ef={key:1,class:"muted-cell"},tf={class:"modal-section"},sf={class:"fund-grid"},nf={class:"modal-sub"},lf={class:"modal-section"},of={class:"calc-box"},rf={class:"calc-line"},af={class:"calc-step-head"},cf={class:"calc-step-note"},uf={key:0,class:"calc-z"},ff={class:"modal-sub"},df={__name:"App",setup(e){const t=B(null),s=B(null),n=B(null),l=B(null),i=B(null),r=B(null),a=B(1e6),u=B(null),g=B(null),h=B(!1),y=B(""),R=B(""),M=B(1e6),K=B(!1),A=B(null),ee=B([]),V=B(null),H=B(!0),U=B(!1),I=B(null),ie=B(!1),te=B("signal_score"),pe=B("desc"),$e=B({entries:[]}),Et=B(null),Ye=B(null),Ge=B(!0),Je=B(""),ut=B(""),Ht=B(!1),as=B("token"),ue=B(!0),se=B(""),G=ae(()=>{var v;return((v=l.value)==null?void 0:v.factors)??[]}),Ne=ae(()=>{var v;return((v=r.value)==null?void 0:v.themes)??[]}),pt=ae(()=>{var v;return((v=r.value)==null?void 0:v.sources)??[]}),Te=B([]),Ee=B(!1),Xe=ae(()=>{var v;return((v=r.value)==null?void 0:v.macro)??{}}),Vt=ae(()=>pt.value.length),cs=ae(()=>{var v,f;return((f=(v=r.value)==null?void 0:v.source_summary)==null?void 0:f.factor_keys)??Vt.value}),Ze=ae(()=>{var v;return((v=r.value)==null?void 0:v.available)??!1}),Ot=ae(()=>{var v;return((v=r.value)==null?void 0:v.board)??G.value}),ft=ae(()=>{const v={};for(const f of Ot.value)v[f.symbol]=f;return v}),ht=ae(()=>{var f;const v=(f=t.value)==null?void 0:f.signal_summary;return{long:(v==null?void 0:v.long)??0,short:(v==null?void 0:v.short)??0,neutral:(v==null?void 0:v.neutral)??0,total:(v==null?void 0:v.total)??0}}),gt=v=>({monthly:"รายเดือน",quarterly:"รายไตรมาส",annual:"รายปี",daily:"รายวัน"})[v]||v,zs=ae(()=>{const v={};for(const f of Ne.value)v[f.id]=f.label_th;return v});function c(v){const f=ft.value[v];return((f==null?void 0:f.themes)??[]).map(Pe=>zs.value[Pe]||Pe)}const d=ae(()=>{var v;return((v=l.value)==null?void 0:v.available)??!1}),b=ae(()=>{var v;return((v=l.value)==null?void 0:v.dividend_count)??0}),w=ae(()=>{var v;return((v=i.value)==null?void 0:v.combined_count)??0}),S=ae(()=>{let v=G.value;return ie.value&&(v=v.filter(f=>f.is_dividend)),v});function x(v,f){var he;return f==="signal_score"?v.signal_score??(v.signal_side==="LONG"?9999:0):f==="combined"?((he=ft.value[v.symbol])==null?void 0:he.combined)??-9999:f==="symbol"?v.symbol:f==="dividend_yield"?v.dividend_yield??-1:f==="eps_growth_yoy"?v.eps_growth_yoy??-1:f==="pe"?v.pe??0:f==="eps"?v.eps??0:f==="pbv"?v.pbv??0:f==="roe"?v.roe??0:v[f]}const O=ae(()=>{const v=[...S.value],f=pe.value==="asc"?1:-1;return v.sort((he,Pe)=>{const je=x(he,te.value),Qe=x(Pe,te.value);return typeof je=="string"?je.localeCompare(Qe)*f:je===Qe?he.symbol.localeCompare(Pe.symbol):je==null?1:Qe==null?-1:(je-Qe)*f}),v});function k(v){te.value===v?pe.value=pe.value==="asc"?"desc":"asc":(te.value=v,pe.value="desc")}function C(v){return te.value!==v?"":pe.value==="asc"?"↑":"↓"}function _(v,f=2){return Number(v??0).toFixed(f)}function D(v){return v==="dated_ledger"}function P(v){return D(v)?{label:"ตามวันจริง",cls:"status-tag",style:"background:#1a7f37;color:#fff"}:v==="dps_annual_proxy"?{label:"Proxy (ต่อหุ้น)",cls:"status-tag warning-tag"}:{label:"Proxy",cls:"status-tag warning-tag"}}function F(v){return D(v)?"ปันผลตามวันจริงจาก ledger (ex-date × จำนวนหุ้น) — กระแสเงินสดจริง":v==="dps_annual_proxy"?"ประมาณการปันผลต่อหุ้น (DPS ล่าสุด × จำนวนหุ้น) ไม่ใช่กระแสเงินสดตามวันจริง":"ประมาณจาก dividend yield ของพอร์ตสุดท้าย ไม่ใช่กระแสเงินสดปันผลจริง"}function L(v){return v?new Date(v).toLocaleString("en-GB",{day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit"}):"—"}async function $(v,f){const he=await fetch(v,f);if(!he.ok){const Pe=await he.json().catch(()=>({}));throw new Error(Pe.error||`Request failed: ${he.status}`)}return he.json()}async function J(){const v=await fetch("/api/v1/backtest/tourism?min_events=12"),f=await v.json().catch(()=>({}));if(![200,409].includes(v.status))throw new Error(f.error||`Request failed: ${v.status}`);return f}async function q(){const v=await fetch("/api/v1/research/tourism/latest");if(v.status===404)return null;const f=await v.json().catch(()=>({}));if(!v.ok)throw new Error(f.error||`Request failed: ${v.status}`);return f}const oe=ae(()=>{var v;return((v=I.value)==null?void 0:v.orders)??[]}),ce=ae(()=>{var v;return((v=I.value)==null?void 0:v.invested)??0}),Oe=ae(()=>{var v;return((v=I.value)==null?void 0:v.unallocated_cash)??0}),fe=v=>oe.value.filter(f=>f.bucket===v);async function vt(){U.value=!0,I.value=null;try{I.value=await $("/api/v1/suggestion",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({capital:Number(a.value)})})}catch(v){ut.value=v.message}finally{U.value=!1}}async function us(){Ge.value=!0,Je.value="";try{const[v,f,he,Pe,je,Qe,ps,_t,hs,gs]=await Promise.all([$("/api/v1/dashboard/summary"),$("/api/v1/factors/tourism/observations"),$("/api/v1/signals"),$("/api/v1/factors"),$("/api/v1/themes"),$("/api/v1/dashboard"),$("/api/v1/paper/ledger"),$("/api/v1/auth/paper",{credentials:"include"}),J(),q()]);t.value=v,s.value=f,n.value=he,l.value=Pe,i.value=je,r.value=Qe,$e.value=ps,Ht.value=!!_t.authenticated,as.value=_t.mode||"token",ue.value=_t.enabled!==!1,se.value=_t.warning||"",Et.value=hs,Ye.value=gs}catch(v){Je.value=v.message}finally{Ge.value=!1}}async function be(v){u.value=v,g.value=null,h.value=!0;try{g.value=await $(`/api/v1/symbols/${v}`)}catch(f){g.value={error:f.message,symbol:v}}finally{h.value=!1}}function Ce(){u.value=null,g.value=null}async function fs(){try{const v=await $("/api/v1/backtest/readiness");V.value=v,!y.value&&v.recommended_start&&(y.value=v.recommended_start),!R.value&&v.recommended_end&&(R.value=v.recommended_end)}catch{V.value=null}}async function ds(){try{const v=await $("/api/v1/scheduler/sources");Te.value=v.sources||[]}catch{Te.value=[]}Ee.value=!0}const Ys=v=>({ok:"ปกติ",network:"เครือข่ายขัดข้อง",timeout:"หมดเวลา",http:"HTTP error",parse:"รูปแบบข้อมูลผิด",structure:"หน้าเว็บเปลี่ยนโครงสร้าง",auth:"สิทธิ์/ยืนยันตัวตน",other:"อื่น ๆ"})[v]||v;async function ki(v){const f=`[${v.at}] ${v.label} (${v.key}) — ${v.ok?"OK":"FAIL: "+Ys(v.category)} ${v.detail?"| "+v.detail:""}`;try{await navigator.clipboard.writeText(f),ut.value=`คัดลอกสาเหตุของ ${v.key} แล้ว`}catch{ut.value=f}}function Ti(v){return v.ok?"":` (สาเหตุน่าจะ: ${Ys(v.category)})`}async function Ei(){K.value=!0,A.value=null;try{A.value=await $("/api/v1/backtest/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({start:y.value,end:R.value,capital:Number(M.value),use_ledger:H.value})}),await Dn()}catch(v){A.value={error:v.message}}finally{K.value=!1}}async function Dn(){try{ee.value=(await $("/api/v1/backtest/run")).runs||[]}catch{ee.value=[]}}const Pt=v=>v!=null?v>=0?"positive-text":"negative-text":"";return Zl(async()=>{await us(),await Promise.all([Dn(),fs(),ds()])}),(v,f)=>{var he,Pe,je,Qe,ps,_t,hs,gs,Ln,$n,Nn;return T(),E("div",na,[f[76]||(f[76]=pr('',1)),o("main",la,[o("header",ia,[f[16]||(f[16]=o("div",null,[o("div",{class:"eyebrow"},"Alternative data · SET50"),o("h1",null,"SET50 Signal Lab"),o("p",{class:"subtitle"},"ภาพรวม alternative factors ไทย ไปจนถึงสัญญาณลงทุนที่อธิบายได้ — research + paper only")],-1)),o("div",oa,[o("div",{class:ne(["freshness-pill",Ze.value?"pill-live":"pill-fixture"])},[f[15]||(f[15]=o("span",{class:"freshness-dot"},null,-1)),W(m(Ze.value?"ข้อมูลจริงจากแหล่งไทย":"ข้อมูลจำลอง (fixture)"),1)],2),o("div",ra,"ข้อมูล "+m(((he=t.value)==null?void 0:he.as_of)||"—"),1)])]),Ge.value?(T(),E("div",aa,"กำลังโหลดข้อมูล…")):Je.value?(T(),E("div",ca,m(Je.value),1)):(T(),E(le,{key:2},[o("section",ua,[o("article",fa,[f[19]||(f[19]=o("div",{class:"kpi-label"},"สัญญาณที่ใช้งาน",-1)),o("div",da,m(ht.value.long),1),o("div",pa,[o("span",ha,m(ht.value.long)+" ซื้อ",1),f[17]||(f[17]=W(" · ",-1)),o("span",ga,m(ht.value.short)+" ขาย",1),f[18]||(f[18]=W(" · ",-1)),o("span",va,m(ht.value.neutral)+" เป็นกลาง",1)])]),o("article",_a,[f[20]||(f[20]=o("div",{class:"kpi-label"},"แหล่งข้อมูลที่ใช้",-1)),o("div",ma,m(cs.value)+" ปัจจัย · "+m(Vt.value)+" แหล่ง",1),o("div",ba,"ข้อมูลจริงจากแหล่งไทย "+m(Ze.value?"(จริง)":"—"),1)])]),o("section",ya,[o("div",xa,[f[21]||(f[21]=o("div",null,[o("div",{class:"section-kicker"},"ธีม"),o("h2",null,"ธีม (Themes)"),o("p",{class:"panel-subtitle"},"ภาพรวม alternative factors ของไทย — แต่ละธีมมีความถี่ข้อมูลต่างกัน (monthly / quarterly) ดังนั้นอย่าเทียบเป็นจุดเวลาเดียวกัน.")],-1)),o("span",Sa,"รวม "+m(w.value)+" symbols",1)]),o("div",wa,[(T(!0),E(le,null,Ae(Ne.value,p=>(T(),E("article",{key:p.id,class:"theme-card"},[o("div",Ca,[o("span",ka,m(gt(p.frequency)),1),o("span",Ta,m(p.label_th),1)]),o("div",Ea,[f[22]||(f[22]=o("span",{class:"theme-surprise-label"},"ความต่าง (surprise)",-1)),o("span",Oa,m(p.surprise!=null?_(p.surprise,2)+"σ":"—"),1)]),o("div",Pa,[p.id==="auto_credit"&&p.read.new_car_sales_yoy!=null?(T(),E("div",Aa,m(_(p.read.new_car_sales_yoy))+"% YoY ยอดขายรถ",1)):p.id==="auto_credit"&&p.read.auto_npl_pct!=null?(T(),E("div",Ra,"NPL "+m(_(p.read.auto_npl_pct))+"%",1)):p.id==="refining_energy"&&(p.read.quarterly||p.read.net_profit)?(T(),E("div",Ma,"กำไรสุทธิ TOP (รายไตรมาส)")):p.id==="tourism"?(T(),E("div",Ia,"signal tourism "+m(p.surprise!=null?_(p.surprise,2):"—")+"σ",1)):p.id==="banks"&&p.read.interest_rate_pct!=null?(T(),E("div",Fa,"ดอกเบี้ย "+m(_(p.read.interest_rate_pct))+"%",1)):p.id==="banks"&&p.read.bank_npl_pct!=null?(T(),E("div",Da,"NPL ภาคการเงิน "+m(_(p.read.bank_npl_pct))+"%",1)):(p.id==="retail"||p.id==="consumer_staples")&&p.read.retail_sales_yoy!=null?(T(),E("div",La,"ยอดขายปลีก "+m(_(p.read.retail_sales_yoy))+"% YoY",1)):(p.id==="retail"||p.id==="consumer_staples")&&p.read.consumer_confidence!=null?(T(),E("div",$a,"เชื่อมั่นผู้บริโภค "+m(_(p.read.consumer_confidence,1)),1)):p.id==="nonbank_finance"&&p.read.consumer_credit!=null?(T(),E("div",Na,"สินเชื่อผู้บริโภค "+m(_(p.read.consumer_credit/1e6,2))+" ล้านลบ.",1)):p.id==="nonbank_finance"&&p.read.household_debt_gdp!=null?(T(),E("div",ja,"หนี้ครัวเรือน "+m(_(p.read.household_debt_gdp))+"% GDP",1)):p.id==="property"&&p.read.property_prices_yoy!=null?(T(),E("div",Ha,"ราคาอสังหา "+m(_(p.read.property_prices_yoy))+"% YoY",1)):p.id==="telecom_it"&&p.read.business_confidence!=null?(T(),E("div",Va,"เชื่อมั่นธุรกิจ "+m(_(p.read.business_confidence,1)),1)):p.id==="healthcare"&&p.read.consumption_yoy!=null?(T(),E("div",Ba,"บริโภค "+m(_(p.read.consumption_yoy))+"% YoY",1)):ge("",!0)]),p.narrative?(T(),E("div",Ka,m(p.narrative),1)):ge("",!0)]))),128))]),Object.keys(Xe.value).length?(T(),E("div",Ua,[f[28]||(f[28]=o("div",{class:"section-kicker"},"ภาพรวมประเทศไทย",-1)),o("div",Wa,[o("span",qa,[f[23]||(f[23]=W("การบริโภคภาคเอกชน ",-1)),o("strong",null,m(Xe.value.private_consumption_yoy)+"%",1)]),o("span",za,[f[24]||(f[24]=W("การลงทุนเอกชน ",-1)),o("strong",null,m(Xe.value.private_investment_yoy)+"%",1)]),o("span",Ya,[f[25]||(f[25]=W("เงินเฟ้อ ",-1)),o("strong",null,m(Xe.value.headline_inflation_yoy)+"%",1)]),o("span",Ga,[f[26]||(f[26]=W("การว่างงาน ",-1)),o("strong",null,m(Xe.value.unemployment_pct)+"%",1)]),o("span",Ja,[f[27]||(f[27]=W("นักท่องเที่ยว YTD ",-1)),o("strong",null,m(Xe.value.tourists_ytd_mn)+" ล้าน",1)])])])):ge("",!0)]),o("section",Xa,[o("div",Za,[f[29]||(f[29]=o("div",null,[o("div",{class:"section-kicker"},"ตารางหุ้น"),o("h2",null,"ตารางหุ้น"),o("p",{class:"panel-subtitle"},[W("ตารางเดียวรวมทุกธีม — สัญญาณ + คะแนนรวม (60% ธีม / 40% พื้นฐาน) + มูลค่าพื้นฐานจาก Siamchart. เรียงได้โดยคลิกหัวตาราง; เปิด "),o("em",null,"เฉพาะหุ้นปันผล"),W(" เพื่อกรองหุ้นที่จ่ายปันผล.")])],-1)),o("div",Qa,[o("label",ec,[Mt(o("input",{type:"checkbox","onUpdate:modelValue":f[0]||(f[0]=p=>ie.value=p)},null,512),[[hl,ie.value]]),o("span",null,"เฉพาะหุ้นปันผล ("+m(b.value)+")",1)]),o("span",{class:ne(["status-tag",d.value?"":"warning-tag"])},m(d.value?"Siamchart ใช้งานได้":"ไม่มี factor"),3)])]),d.value?(T(),E("div",sc,[o("table",nc,[o("thead",null,[o("tr",null,[o("th",{class:ne(["sortable",{active:te.value==="signal_score"}]),onClick:f[1]||(f[1]=p=>k("signal_score"))},"สัญญาณ "+m(C("signal_score")),3),o("th",{class:ne(["sortable",{active:te.value==="combined"}]),onClick:f[2]||(f[2]=p=>k("combined")),title:"60% ธีม + 40% พื้นฐาน"},"คะแนนรวม (60/40) "+m(C("combined")),3),o("th",{class:ne(["sortable",{active:te.value==="symbol"}]),onClick:f[3]||(f[3]=p=>k("symbol"))},"หุ้น "+m(C("symbol")),3),f[31]||(f[31]=o("th",null,"ธีม",-1)),o("th",{class:ne(["sortable",{active:te.value==="pe"}]),onClick:f[4]||(f[4]=p=>k("pe"))},"P/E "+m(C("pe")),3),o("th",{class:ne(["sortable",{active:te.value==="eps"}]),onClick:f[5]||(f[5]=p=>k("eps"))},"EPS "+m(C("eps")),3),o("th",{class:ne(["sortable",{active:te.value==="eps_growth_yoy"}]),onClick:f[6]||(f[6]=p=>k("eps_growth_yoy"))},"EPS YoY "+m(C("eps_growth_yoy")),3),o("th",{class:ne(["sortable",{active:te.value==="dividend_yield"}]),onClick:f[7]||(f[7]=p=>k("dividend_yield"))},"ปันผล % "+m(C("dividend_yield")),3),o("th",{class:ne(["sortable",{active:te.value==="pbv"}]),onClick:f[8]||(f[8]=p=>k("pbv"))},"P/BV "+m(C("pbv")),3),o("th",{class:ne(["sortable",{active:te.value==="roe"}]),onClick:f[9]||(f[9]=p=>k("roe"))},"ROE "+m(C("roe")),3)])]),o("tbody",null,[(T(!0),E(le,null,Ae(O.value,p=>{var At;return T(),E("tr",{key:p.symbol,class:"clickable-row",onClick:vs=>be(p.symbol)},[o("td",null,[p.signal_side?(T(),E("span",{key:0,class:ne(["side-pill",p.signal_side.toLowerCase()])},m(p.signal_side),3)):(T(),E("span",ic,"—"))]),o("td",oc,m(((At=ft.value[p.symbol])==null?void 0:At.combined)!=null?_(ft.value[p.symbol].combined):"—"),1),o("td",null,[o("strong",rc,m(p.symbol),1)]),o("td",null,[(T(!0),E(le,null,Ae(c(p.symbol),vs=>(T(),E("span",{key:vs,class:"theme-tag"},m(vs),1))),128)),c(p.symbol).length?ge("",!0):(T(),E("span",ac,"—"))]),o("td",cc,m(p.pe!=null?_(p.pe):"—"),1),o("td",null,m(p.eps!=null?_(p.eps):"—"),1),o("td",{class:ne(p.eps_growth_yoy>=0?"positive-text":"negative-text")},m(p.eps_growth_yoy!=null?(p.eps_growth_yoy>=0?"+":"")+_(p.eps_growth_yoy)+"%":"—"),3),o("td",{class:ne(p.dividend_yield>=0?"positive-text":"")},[W(m(p.dividend_yield!=null?_(p.dividend_yield)+"%":"—"),1),p.is_dividend?(T(),E("span",uc,"●")):ge("",!0)],2),o("td",null,m(p.pbv!=null?_(p.pbv):"—"),1),o("td",{class:ne(p.roe>=0?"positive-text":"negative-text")},m(p.roe!=null?_(p.roe)+"%":"—"),3)],8,lc)}),128))])])])):(T(),E("div",tc,[...f[30]||(f[30]=[W("Siamchart snapshot ไม่อยู่บน disk. รัน ",-1),o("code",null,"collect_siamchart.py --group SET50 --with-info",-1),W(" เพื่อเก็บข้อมูล.",-1)])]))]),o("section",fc,[o("div",dc,[f[32]||(f[32]=o("div",null,[o("div",{class:"section-kicker"},"ที่มาของข้อมูล"),o("h2",null,"แหล่งข้อมูลทั้งหมด"),o("p",{class:"panel-subtitle"},"รายการแหล่งข้อมูลจริงที่ใช้ — ดึงมาเมื่อใด และข้อมูลชุดไหน ข้อมูลทั้งหมดจากแหล่งไทย.")],-1)),o("span",pc,m(cs.value)+" ปัจจัย · "+m(Vt.value)+" แหล่ง",1)]),o("div",hc,[o("table",gc,[f[33]||(f[33]=o("thead",null,[o("tr",null,[o("th",null,"ข้อมูล"),o("th",null,"แหล่ง"),o("th",null,"ช่วงข้อมูล"),o("th",null,"ความถี่"),o("th",null,"อัปเดตครั้งต่อไป"),o("th",null,"อัปเดตล่าสุด")])],-1)),o("tbody",null,[(T(!0),E(le,null,Ae(pt.value,(p,At)=>(T(),E("tr",{key:At},[o("td",null,m(p.จาก||p.ขอบเขต),1),o("td",vc,m(p.แหล่ง),1),o("td",_c,m(p.ข้อมูล),1),o("td",mc,m(p.ความถี่||"—"),1),o("td",bc,m(p.อัปเดตครั้งต่อไป?L(p.อัปเดตครั้งต่อไป):"—"),1),o("td",yc,m(p.dึงมาเมื่อ?L(p.dึงมาเมื่อ):"—"),1)]))),128))])])])]),o("section",xc,[f[35]||(f[35]=o("div",{class:"panel-header signal-header"},[o("div",null,[o("div",{class:"section-kicker"},"สถานะการดึงข้อมูล"),o("h2",null,"Log — สถานะแหล่งข้อมูล"),o("p",{class:"panel-subtitle"},'ผลการดึงข้อมูลครั้งล่าสุดของแต่ละแหล่ง โดยระบบวิเคราะห์สาเหตุให้อัตโนมัติ (เครือข่าย / หมดเวลา / หน้าเว็บเปลี่ยนโครงสร้าง / รูปแบบข้อมูล เป็นต้น) — กดปุ่ม "คัดลอก" เพื่อ copy สาเหตุไปแจ้ง/ตรวจสอบได้ทันที.')])],-1)),Te.value.length===0?(T(),E("div",Sc,"ยังไม่มี log — รอรอบ refresh ถัดไป (ปกติ ~ทุกวันสำหรับราคา, ~รายเดือน/ไตรมาสสำหรับปัจจัย).")):(T(),E("div",wc,[o("table",Cc,[f[34]||(f[34]=o("thead",null,[o("tr",null,[o("th",null,"แหล่ง"),o("th",null,"ผลลัพธ์"),o("th",null,"สาเหตุ"),o("th",null,"เวลา"),o("th")])],-1)),o("tbody",null,[(T(!0),E(le,null,Ae(Te.value.slice(0,20),(p,At)=>(T(),E("tr",{key:At},[o("td",kc,[W(m(p.label),1),o("div",Tc,m(p.key),1)]),o("td",null,[p.ok?(T(),E("span",Ec,"OK")):(T(),E("span",Oc,"FAIL"))]),o("td",null,[p.ok?(T(),E(le,{key:0},[W("—")],64)):(T(),E(le,{key:1},[o("div",null,m(Ys(p.category))+m(Ti(p)),1),p.detail?(T(),E("div",Pc,m(p.detail.slice(0,160)),1)):ge("",!0)],64))]),o("td",Ac,m(p.at?L(p.at):"—"),1),o("td",null,[p.ok?ge("",!0):(T(),E("button",{key:0,class:"primary-btn",style:{padding:"2px 8px"},onClick:vs=>ki(p)},"คัดลอกสาเหตุ",8,Rc))])]))),128))])])]))]),o("section",Mc,[o("div",Ic,[f[36]||(f[36]=o("div",null,[o("div",{class:"section-kicker"},"คำแนะนำการลงทุน"),o("h2",null,"จัดสรรทุน (Suggestion)"),o("p",{class:"panel-subtitle"},"กรอกทุน และระบบแนะนำสัดส่วน 50 / 20 / 30 — หุ้นที่ทำกำไรได้มากสุดแล้วจ่ายปันผล, หุ้นทำกำไรแต่ไม่ปันผล, และหุ้นปันผลสูงสุด (ไม่ซ้ำ) — ขั้นต่ำ 100 หุ้นต่อตัว.")],-1)),o("span",Fc,m(I.value?"ใช้ได้":"รอใส่ทุน"),1)]),o("div",Dc,[o("div",Lc,[f[37]||(f[37]=o("label",null,"ทุน (บาท)",-1)),Mt(o("input",{"onUpdate:modelValue":f[10]||(f[10]=p=>a.value=p),type:"number",min:"1000",step:"1000"},null,512),[[xs,a.value]])]),o("button",{class:"primary-button",disabled:U.value,onClick:vt},m(U.value?"กำลังคำนวณ…":"คำนวณการจัดสรร"),9,$c)]),I.value?(T(),E("div",Nc,[o("div",jc,[o("div",Hc,[f[38]||(f[38]=o("span",null,"ลงทุนรวม",-1)),o("strong",null,m(_(ce.value,0))+" บาท",1)]),o("div",Vc,[f[39]||(f[39]=o("span",null,"เงินสดเหลือ",-1)),o("strong",null,m(_(Oe.value,0))+" บาท",1)])]),o("div",Bc,m(I.value.data_note),1),o("div",Kc,[o("div",Uc,[f[41]||(f[41]=o("div",{class:"sim-bucket-head"},[o("span",{class:"sim-bucket-tag b1"},"50%"),o("strong",null,"ทำกำไร + จ่ายปันผล")],-1)),o("table",Wc,[fe(1).length?(T(),E("tbody",qc,[(T(!0),E(le,null,Ae(fe(1),p=>(T(),E("tr",{key:"b1"+p.symbol},[o("td",null,m(p.symbol),1),o("td",zc,"qty "+m(p.qty),1),o("td",Yc,"@ "+m(_(p.price)),1),o("td",Gc,m(_(p.notional,0)),1)]))),128))])):(T(),E("tbody",Jc,[...f[40]||(f[40]=[o("tr",null,[o("td",{class:"muted-cell"},"ไม่มีหุ้นที่เข้าเกณฑ์")],-1)])]))])]),o("div",Xc,[f[43]||(f[43]=o("div",{class:"sim-bucket-head"},[o("span",{class:"sim-bucket-tag b2"},"20%"),o("strong",null,"ทำกำไร ไม่ปันผล")],-1)),o("table",Zc,[fe(2).length?(T(),E("tbody",Qc,[(T(!0),E(le,null,Ae(fe(2),p=>(T(),E("tr",{key:"b2"+p.symbol},[o("td",null,m(p.symbol),1),o("td",eu,"qty "+m(p.qty),1),o("td",tu,"@ "+m(_(p.price)),1),o("td",su,m(_(p.notional,0)),1)]))),128))])):(T(),E("tbody",nu,[...f[42]||(f[42]=[o("tr",null,[o("td",{class:"muted-cell"},"ไม่มีหุ้นที่เข้าเกณฑ์")],-1)])]))])]),o("div",lu,[f[45]||(f[45]=o("div",{class:"sim-bucket-head"},[o("span",{class:"sim-bucket-tag b3"},"30%"),o("strong",null,"ปันผลสูงสุด (ไม่ซ้ำ)")],-1)),o("table",iu,[fe(3).length?(T(),E("tbody",ou,[(T(!0),E(le,null,Ae(fe(3),p=>(T(),E("tr",{key:"b3"+p.symbol},[o("td",null,m(p.symbol),1),o("td",ru,"qty "+m(p.qty),1),o("td",au,"@ "+m(_(p.price)),1),o("td",cu,m(_(p.notional,0)),1)]))),128))])):(T(),E("tbody",uu,[...f[44]||(f[44]=[o("tr",null,[o("td",{class:"muted-cell"},"ไม่มีหุ้นที่เข้าเกณฑ์")],-1)])]))])])])])):ge("",!0),I.value?ge("",!0):(T(),E("div",fu,"กด 'คำนวณการจัดสรร' เพื่อดูว่า 50/20/30 จัดสรรทุนของคุณไปที่หุ้นไหนบ้าง"))]),o("section",du,[f[62]||(f[62]=o("div",{class:"panel-header signal-header"},[o("div",null,[o("div",{class:"section-kicker"},"การย้อนทดสอบ"),o("h2",null,"Backtest (ย้อนทดสอบ)"),o("p",{class:"panel-subtitle"},"กำหนดช่วงวัน แล้วระบบจัดสรร 50/20/30 ณ วันที่เริ่ม ลงทุน และปรับพอร์ตตามข้อมูลที่เผยแพร่ใหม่ (event-driven) จนถึงวันสิ้นสุด — สรุปกำไร/ขาดทุนจากราคา + เงินปันผล. มีค่าธรรมเนียม 0.3% ต่อรายการ และปันผลเข้าบัญชีใน 30 วันหลัง ex-date.")])],-1)),o("div",pu,[o("label",null,[f[46]||(f[46]=W("ตั้งแต่ ",-1)),Mt(o("input",{type:"date","onUpdate:modelValue":f[11]||(f[11]=p=>y.value=p)},null,512),[[xs,y.value]])]),o("label",null,[f[47]||(f[47]=W("ถึง ",-1)),Mt(o("input",{type:"date","onUpdate:modelValue":f[12]||(f[12]=p=>R.value=p)},null,512),[[xs,R.value]])]),o("label",null,[f[48]||(f[48]=W("ทุน ",-1)),Mt(o("input",{type:"number","onUpdate:modelValue":f[13]||(f[13]=p=>M.value=p),step:"100000"},null,512),[[xs,M.value,void 0,{number:!0}]])]),o("label",hu,[Mt(o("input",{type:"checkbox","onUpdate:modelValue":f[14]||(f[14]=p=>H.value=p)},null,512),[[hl,H.value]]),f[49]||(f[49]=W(" ใช้ ledger ปันผลตามวันที่จริง ",-1))]),o("button",{class:"primary-btn",disabled:K.value||V.value&&!V.value.ready,onClick:Ei},m(K.value?"กำลังย้อนทดสอบ…":"รัน Backtest"),9,gu)]),V.value&&!V.value.ready?(T(),E("div",vu,[f[50]||(f[50]=o("strong",null,"ยังรันย้อนทดสอบแบบ strict PIT ไม่ได้ — ขาดข้อมูล coverage:",-1)),o("div",_u,m((V.value.missing||[]).slice(0,8).join(", "))+m((V.value.missing||[]).length>8?"…":""),1),o("div",mu,"วันเริ่มที่แนะนำ: "+m(V.value.recommended_start||"—")+" · วันสิ้นสุด: "+m(V.value.recommended_end||"—"),1)])):ge("",!0),(Pe=A.value)!=null&&Pe.error?(T(),E("div",bu,m(A.value.error),1)):A.value&&!A.value.error?(T(),E("div",yu,[o("div",xu,[o("div",Su,[f[51]||(f[51]=o("span",null,"กำไรจากราคา (realized)",-1)),o("strong",{class:ne(Pt(A.value.realized_trading_pnl))},m(_(A.value.realized_trading_pnl))+" บาท",3)]),o("div",wu,[f[52]||(f[52]=o("span",null,"กำไรจากราคา (unrealized)",-1)),o("strong",{class:ne(Pt(A.value.unrealized_trading_pnl))},m(_(A.value.unrealized_trading_pnl))+" บาท",3)]),o("div",Cu,[f[53]||(f[53]=o("span",null,"เงินปันผลที่ได้รับ",-1)),o("strong",ku,m(_(A.value.dividend_cash_received))+" บาท",1)]),o("div",Tu,[f[54]||(f[54]=o("span",null,"ค่าธรรมเนียม (0.3%)",-1)),o("strong",Eu,"–"+m(_(A.value.transaction_costs))+" บาท",1)]),o("div",Ou,[f[55]||(f[55]=o("span",null,"เงินปันผลค้างรับ",-1)),o("strong",null,m(_(A.value.dividend_receivable))+" บาท",1)]),o("div",Pu,[f[56]||(f[56]=o("span",null,"มูลค่าสุดท้าย (equity)",-1)),o("strong",null,m(_(A.value.final_equity))+" บาท",1)]),o("div",Au,[f[57]||(f[57]=o("span",null,"ผลตอบแทนสุทธิ",-1)),o("strong",{class:ne(Pt(A.value.net_return))},m((A.value.net_return*100).toFixed(2))+"%",3)])]),o("div",Ru,"Rebalances: "+m(A.value.rebalances)+" · ปันผลตาม: "+m(A.value.dividend_timing)+" · ช่วง "+m(A.value.start)+" → "+m(A.value.end),1),A.value.leakage_guard?(T(),E("div",Mu,"✅ strict PIT (leakage guard active)")):(T(),E("div",Iu,"คำเตือน: ไม่ได้พิสูจน์ point-in-time (non-PIT)")),A.value.holdings&&A.value.holdings.length?(T(),E("div",Fu,[f[59]||(f[59]=o("strong",null,"พอร์ตสุดท้าย:",-1)),o("table",Du,[f[58]||(f[58]=o("thead",null,[o("tr",null,[o("th",null,"หุ้น"),o("th",null,"จำนวน"),o("th",null,"ต้นทุนเฉลี่ย"),o("th",null,"ราคาล่าสุด"),o("th",null,"มูลค่า"),o("th",null,"กำไร unrealized")])],-1)),o("tbody",null,[(T(!0),E(le,null,Ae(A.value.holdings,p=>(T(),E("tr",{key:p.symbol},[o("td",Lu,m(p.symbol),1),o("td",null,m(p.qty),1),o("td",null,m(_(p.average_cost,2)),1),o("td",null,m(_(p.last_price,2)),1),o("td",null,m(_(p.market_value)),1),o("td",{class:ne(Pt(p.unrealized_pnl))},m(_(p.unrealized_pnl)),3)]))),128))])])])):ge("",!0)])):(T(),E("div",$u,"กำหนดช่วงวันแล้วกด 'รัน Backtest' เพื่อดูผล (กำไร/ขาดทุนจากราคา + ปันผล)")),ee.value.length?(T(),E("div",Nu,[f[61]||(f[61]=o("div",{class:"section-kicker"},"ประวัติการย้อนทดสอบ",-1)),o("table",ju,[f[60]||(f[60]=o("thead",null,[o("tr",null,[o("th",null,"#"),o("th",null,"ช่วง"),o("th",null,"ทุน"),o("th",null,"กำไรราคา"),o("th",null,"ปันผล"),o("th",null,"ผลตอบแทน"),o("th",null,"รันเมื่อ")])],-1)),o("tbody",null,[(T(!0),E(le,null,Ae(ee.value.slice().reverse(),p=>(T(),E("tr",{key:p.id},[o("td",null,m(p.id),1),o("td",null,[W(m(p.start)+" → "+m(p.end)+" ",1),p.leakage_guard===!1?(T(),E("span",Hu,"descriptive non-PIT")):ge("",!0)]),o("td",null,m(_(p.capital)),1),o("td",{class:ne(Pt(p.price_pnl))},m(_(p.price_pnl)),3),o("td",Vu,[W(m(_(p.dividend_income)),1),o("span",{class:ne(["status-tag",P(p.dividend_method).cls]),style:js([P(p.dividend_method).style||void 0,{"margin-left":"4px"}]),title:F(p.dividend_method)},m(P(p.dividend_method).label),15,Bu)]),o("td",{class:ne(Pt(p.net_return))},m((p.net_return*100).toFixed(2))+"%",3),o("td",Ku,m(p.ran_at?L(p.ran_at):"—"),1)]))),128))])])])):ge("",!0)])],64))]),u.value?(T(),E("div",{key:0,class:"modal-overlay",onClick:Xr(Ce,["self"])},[o("div",Uu,[o("div",Wu,[o("div",null,[f[63]||(f[63]=o("div",{class:"modal-kicker"},"การวิเคราะห์รายหุ้น",-1)),o("h3",null,m(u.value),1)]),o("button",{class:"modal-close",onClick:Ce},"✕")]),h.value?(T(),E("div",qu,"กำลังโหลดการวิเคราะห์…")):(je=g.value)!=null&&je.error?(T(),E("div",zu,m(g.value.error),1)):g.value?(T(),E("div",Yu,[o("div",Gu,[f[67]||(f[67]=o("div",{class:"modal-section-title"},"ธีมที่เกี่ยวข้อง (คะแนนต่อธีม)",-1)),(Qe=g.value.themes)!=null&&Qe.length?(T(),E("div",Ju,[(T(!0),E(le,null,Ae(g.value.theme_contributions,p=>(T(),E("div",{key:p.theme,class:"contrib-line"},[o("span",Xu,m(p.label_th||zs.value[p.theme]||p.theme),1),p.surprise!=null?(T(),E("span",Zu,[o("em",null,m(_(p.surprise))+"σ",1),f[64]||(f[64]=W(" × คุณภาพ ",-1)),o("em",null,m(p.quality),1),f[65]||(f[65]=W(" = ",-1)),o("strong",null,m(_(p.theme_score))+"σ",1)])):(T(),E("strong",Qu,"ยังไม่มีข้อมูล"))]))),128)),f[66]||(f[66]=o("div",{class:"modal-sub"},"คะแนนธีม = ค่าเฉลี่ยของ (surprise × คุณภาพหุ้น) ที่หุ้นนี้อยู่ใน",-1))])):(T(),E("div",ef,"หุ้นนี้ยังไม่ได้จัดอยู่ในธีมใด (จะอัปเดตเมื่อเพิ่มธีม)"))]),o("div",tf,[f[73]||(f[73]=o("div",{class:"modal-section-title"},"มูลค่าพื้นฐาน (Siamchart)",-1)),o("div",sf,[o("span",null,[f[68]||(f[68]=W("P/E ",-1)),o("strong",null,m(((ps=g.value.fundamentals)==null?void 0:ps.pe)??"—"),1)]),o("span",null,[f[69]||(f[69]=W("EPS ",-1)),o("strong",null,m(((_t=g.value.fundamentals)==null?void 0:_t.eps)??"—"),1)]),o("span",null,[f[70]||(f[70]=W("P/BV ",-1)),o("strong",null,m(((hs=g.value.fundamentals)==null?void 0:hs.pbv)??"—"),1)]),o("span",null,[f[71]||(f[71]=W("ROE ",-1)),o("strong",null,m(((gs=g.value.fundamentals)==null?void 0:gs.roe)??"—"),1)]),o("span",null,[f[72]||(f[72]=W("ปันผล ",-1)),o("strong",null,m((Ln=g.value.fundamentals)!=null&&Ln.is_dividend?"จ่าย":"—"),1)])]),o("div",nf,"ภาพรวม: "+m(g.value.company_name||u.value),1)]),o("div",lf,[f[75]||(f[75]=o("div",{class:"modal-section-title"},"ขั้นตอนการคำนวณคะแนนรวม",-1)),o("div",of,[o("div",rf,m(g.value.combined_formula),1),(T(!0),E(le,null,Ae(g.value.combined_calc,p=>(T(),E("div",{key:p.label,class:"calc-step"},[o("div",af,[o("span",null,m(p.label),1),o("strong",null,m(_(p.value))+" × "+m(p.weight),1)]),o("div",cf,m(p.note),1)]))),128)),g.value.siamchart_z_note?(T(),E("div",uf,[W(" คะแนนพื้นฐานได้จาก z-score: z = (ค่า"+m(g.value.siamchart_z_note.raw_i)+" − ค่าเฉลี่ย "+m(g.value.siamchart_z_note.population_mean)+") / ค่าเบี่ยงเบน "+m(g.value.siamchart_z_note.population_stdev),1),f[74]||(f[74]=o("br",null,null,-1)),W("เทียบกับ "+m(g.value.siamchart_z_note.universe_size)+" หุ้นใน SET50 ",1)])):ge("",!0)]),o("div",ff,"ราคาล่าสุด: "+m((($n=g.value.price)==null?void 0:$n.latest)!=null?_(g.value.price.latest):"—")+" ("+m(((Nn=g.value.price)==null?void 0:Nn.date)||"—")+")",1)])])):ge("",!0)])])):ge("",!0)])}}};ea(df).mount("#app"); diff --git a/frontend/dist/index.html b/frontend/dist/index.html index bd7b8cf..f78fd4e 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -5,8 +5,8 @@ SET50 Signal Lab - - + +
diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 28d7926..4183185 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -572,6 +572,15 @@ onMounted(async () => { await loadDashboard(); await Promise.all([loadBacktestRu
NPL {{ formatNumber(theme.read.auto_npl_pct) }}%
กำไรสุทธิ TOP (รายไตรมาส)
signal tourism {{ theme.surprise != null ? formatNumber(theme.surprise,2) : '—' }}σ
+
ดอกเบี้ย {{ formatNumber(theme.read.interest_rate_pct) }}%
+
NPL ภาคการเงิน {{ formatNumber(theme.read.bank_npl_pct) }}%
+
ยอดขายปลีก {{ formatNumber(theme.read.retail_sales_yoy) }}% YoY
+
เชื่อมั่นผู้บริโภค {{ formatNumber(theme.read.consumer_confidence, 1) }}
+
สินเชื่อผู้บริโภค {{ formatNumber(theme.read.consumer_credit / 1e6, 2) }} ล้านลบ.
+
หนี้ครัวเรือน {{ formatNumber(theme.read.household_debt_gdp) }}% GDP
+
ราคาอสังหา {{ formatNumber(theme.read.property_prices_yoy) }}% YoY
+
เชื่อมั่นธุรกิจ {{ formatNumber(theme.read.business_confidence, 1) }}
+
บริโภค {{ formatNumber(theme.read.consumption_yoy) }}% YoY
{{ theme.narrative }}
diff --git a/frontend/src/style.css b/frontend/src/style.css index 6dbdf03..f78e204 100644 --- a/frontend/src/style.css +++ b/frontend/src/style.css @@ -21,6 +21,18 @@ --amber-soft: rgba(230, 185, 108, 0.12); --red: #ef8b8b; --red-soft: rgba(239, 139, 139, 0.12); + /* aliases the theme/macro/sources/modal components reference — these were + written against a design-system variable set that was never declared, so + every var() below fell back to invalid and those elements lost their + intended background/color. Map them onto the real palette here. */ + --card: #151f2d; /* card background = panel-soft */ + --foreground: #edf2f7; /* primary text = --text */ + --text-2: #a9b2c2; /* secondary text */ + --font: 'Manrope', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; + --accent: #4da3ff; /* blue accent (distinct from mint) */ + --accent-soft: rgba(77, 163, 255, 0.12); + --danger: #ef8b8b; /* = --red */ + --line-weak: rgba(255, 255, 255, 0.05); } * { box-sizing: border-box; } @@ -116,6 +128,13 @@ tbody tr:hover { background: rgba(255,255,255,.025); } .reason-code { display: inline-block; margin: 2px 3px 2px 0; padding: 4px 5px; border: 1px solid var(--line-bright); border-radius: 4px; color: var(--faint); font: 9px 'DM Mono', monospace; } /* ---- Theme panel (multi-theme) ---- */ +/* These sections are `class="panel X-panel"` with an inner `.panel-header + signal-header`. `.panel` applies 22px padding; `.signal-header` applies its + own 22px + bottom border. Without padding:0 the header ends up inset 44px + while the body stays at 22px -> header misaligned from content. Zero the + panel padding and let the header carry the spacing (matches .stock-panel). */ +.theme-panel, .lineage-panel, .health-panel, .sim-panel, .backtest-panel, +.research-panel { padding: 0; overflow: hidden; } .theme-panel { margin-top: 18px; } .theme-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; } .theme-card { border: 1px solid var(--line-bright); border-radius: 10px; padding: 14px; background: var(--card); } @@ -307,7 +326,12 @@ input:focus { border-color: var(--mint); box-shadow: 0 0 0 3px rgba(82,214,189,. .topbar { display: block; padding-bottom: 25px; } .topbar-meta { display: flex; justify-content: space-between; align-items: center; margin-top: 18px; text-align: left; } .hero-grid, .bottom-grid { grid-template-columns: 1fr; } - .panel { padding: 18px; } + /* .panel's default 18px must NOT re-pad the section panels (theme/stock/ + lineage/health/sim/backtest/research) — those keep padding:0 so their + .signal-header stays the single source of top spacing; otherwise the + header (#1a7f) would sit inset 18px further than the body. */ + .panel:not(.theme-panel):not(.stock-panel):not(.lineage-panel):not(.health-panel):not(.sim-panel):not(.backtest-panel):not(.research-panel):not(.signal-panel) { padding: 18px; } + .signal-header { padding: 18px; } .research-grid { grid-template-columns: 1fr; gap: 18px; } .research-results { grid-template-columns: repeat(2, 1fr); } }