Header/Tabs: Hallmark Cobalt aesthetic
- Hairlines, cool paper bg, JetBrains Mono + Inter
- Electric cobalt accent on active tab
- No branding, no purple badges, no gradients
QuantReport: inline in strategy detail view
- Renders below trade history on every tab
- API maps strategy name -> file prefix
- Proper backtestId from historical data
Server: strategy-name-to-prefix lookup
ofi, avellaneda, iceberg, momentum, mean_rev,
funding_arb, kalman_pairs, pairs
Removed: FTDT Quant Lab branding, purple badges, green pulse dot,
shadcn Tabs dependency, backdrop blur noise
Replaced with: Hallmark Cobalt engineered aesthetic
- Hairline borders (#e0e4ec), cool paper (#f8f9fb)
- JetBrains Mono header labels, Inter tab buttons
- Electric cobalt (#0ea5e9) signal accent on active tab
- Flat text labels: Live · Paper · Historical
- Status dot + CONNECTED/OFFLINE subtle indicator
- No shadows, no gradients, no rounded cards
Backend: strategies/quant_report.py
- equityCurve: daily PnL from trade history
- monthlyReturns: heatmap matrix (years x months)
- yearlyReturns: bar chart data with mean
- monthlyReturnDistribution: histogram bins
- qqPlot: theoretical vs observed quantiles
- rollingStats: 6-month rolling return + volatility
API: /api/quant-report/{name}
Computes full report from any backtest JSON file
Frontend: QuantReport.tsx
- Strategy Performance chart (equity curve, blue line)
- Monthly Returns heatmap (blue saturation)
- Yearly Returns bar chart with mean line
- Distribution histogram
- Normal QQ plot with diagonal reference
- Rolling Statistics (6-month, dual line)
- QF-Lib header with logo and metadata
- Access via QF-Lib Report button in detail view
- Historical cards now deduplicated by strategy+ticker (28 entries: 7×4)
- Ticker filter bar: ALL | BTC | ETH | HYPE | VVV
- Coin badge on each card
- BacktestSummary.coin now required string field
- fetchHistorical groups by strategy · coin composite key