- Replace MUI Chip in events card with custom Badge matching reference
colors (blue coupon, green dividend, amber maturity, red tax/fee)
- Add working pagination (useState, 7 per page, ←/→ handlers)
- Increase events API limit to 100 for multi-page support
- Fix chart month labels: left-align first, right-align last
to prevent overflow beyond container edges
- Render RUB values via formatDashboardCurrency so RUB shows as ₽
instead of 'RUB', matching the hero, events and income cards.
- Apply semantic color tones per spec §6:
* Пополнения/Дивиденды/Купоны/Всего получено → positive when > 0,
neutral when 0.
* Выводы → prefix value with '−' and render with negative tone
whenever the underlying amount is positive.
* Нетто → sign-based tone.
- Add data-testid and data-tone attributes on each analytics value so
tests and downstream styling can address each metric.
- Update the analytics mock in BrokerDashboard.test.tsx to cover
positive, negative (net invested + withdrawals) and zero values, and
add two new tests asserting ₽ rendering and the tone data attributes.
Replace vertical overview with dashboard composition:
- BrokerDashboardHero with portfolio KPI, return, daily change, total income
- BrokerDashboardEventsCard with compact events table and local pagination
- BrokerDashboardIncomeCard with income operations table and cursor pagination
- BrokerDashboardAnalyticsCard with analytics Metric grid
- BrokerDashboardAllocationCard wrapping existing donut chart
- BrokerDashboardSkeleton matching dashboard shape
- BrokerDashboardCard local card pattern
- Pure lib helpers: dashboardIncome, dashboardFilters, dashboardFormatters
- Unit tests for income helpers (6) and dashboard composition (1)