{# Bundled portfolio body: KPIs + curves + allocation. Tax planning panels moved to /tax (P1, P9). Rendered by /portfolio/body in one shot. #} {# Action Inbox — lazy-loaded; respects the page's account filter. #}
{% include "_portfolio_kpis.html" %}
{# Top row: equity is the primary "am I winning?" chart; cash is operational context. 3:2 (60/40) gives the cash + contributions chart enough room to read its second series clearly while keeping equity visually dominant. #}
{% include "_portfolio_equity_curve.html" %}
{% include "_portfolio_cash_curve.html" %}
{# Allocation row: existing concentration donut on the left, the cash-vs- positions deployment chart on the right. 2/3 + 1/3 split keeps the chip leaderboard breathing while giving the deployment panel enough room for its hero stat + legend. #}
{% include "_portfolio_allocation.html" %}
{% include "_portfolio_deployment.html" %}
{# Top Movers panel — only render when at least one mover exists. #} {% if top_movers and (top_movers.winners or top_movers.losers) %}
{% include "_portfolio_top_movers.html" %}
{% endif %} {# Wash-sale watch (continuous detection list) moved to the Tax page wash-sales tab — that's its natural home. The Action Inbox at the top of this page is different: it surfaces time-bound *action* signals (safe-to-rebuy, LT countdown, expirations) that auto-disappear once their window passes. #} {# Tax planning panels (offset budget + year-end projection) moved to /tax (P9). #}