{#if screenedAt} Last screened {screenedAt} {/if}
{#if searchOpen}
e.key === 'Enter' && screen()} />
{/if}
{#if error}
⚠ {error}
{/if} {#if loading || loadingCats}
{/if} {#if ctx}
10Y {ctx.riskFreeRate?.toFixed(2)}%
VIX {ctx.vixLevel?.toFixed(1)}
S&P {ctx.sp500Price?.toLocaleString()}
S&P P/E {fmtPE(ctx.benchmarks?.marketPE?.toFixed(1))}
Tech P/E {fmtPE(ctx.benchmarks?.techPE?.toFixed(1))}
REIT Yld {ctx.benchmarks?.reitYield?.toFixed(2)}%
IG Sprd {ctx.benchmarks?.igSpread?.toFixed(2)}%
Rates {ctx.rateRegime}
Vol {ctx.volatilityRegime}

Signal Summary

{allAssets.length} assets
{#each allAssets as r} {/each}
Ticker Type Signal Mkt-Adjusted Fundamental
{r.asset.ticker} {r.asset.type} {verdictShort(r.inflated.label)} {verdictShort(r.fundamental.label)}
{#each ['STOCK', 'ETF', 'BOND'] as type} {#if results[type]?.length} {@const count = results[type].length}

{type}S

{count}
{#if type === 'STOCK'} {:else if type === 'ETF'} {:else} {/if} {#each sorted(results[type]) as r} {@const mode = getTab(type)} {@const m = r.asset.displayMetrics ?? {}} {@const v = r[mode]} {#if type === 'STOCK'} {:else if type === 'ETF'} {:else} {/if} {/each}
Ticker Price Verdict ScoreSector P/EPEGROE% OpMgn%FCF%D/E FlagsExpenseYieldAUM5Y RetYTMDurationRating
{r.asset.ticker} {m.Price ?? '—'} {verdictShort(v.label)} {v.scoreSummary}{m.Sector ?? '—'} {m['P/E'] ?? '—'} {m['PEG'] ?? '—'} {m['ROE%'] ?? '—'} {m['OpMgn%'] ?? '—'} {m['FCF Yld%'] ?? '—'} {m['D/E'] ?? '—'} {#each v.audit?.riskFlags ?? [] as flag} ⚠ {flag} {/each} {m['Exp Ratio%'] ?? '—'} {m['Yield%'] ?? '—'} {m['AUM'] ?? '—'} {m['5Y Return%'] ?? '—'}{m['YTM%'] ?? '—'} {m['Duration'] ?? '—'} {m['Rating'] ?? '—'}
{/if} {/each} {#if results.ERROR?.length}

Failed {results.ERROR.length}

{#each results.ERROR as e}
{e.ticker} {e.message}
{/each}
{/if} {/if}
{#if sidebar.open} {/if}