## ADDED Requirements ### Requirement: Two-column dashboard layout The profile section SHALL be presented as a two-column layout: a left menu column occupying approximately 25% of the available width and a right content column occupying approximately 75%. On viewports narrower than 1024px the two columns SHALL collapse into a single stacked column. #### Scenario: Wide viewport shows two columns - **WHEN** an authenticated user opens the profile section on a viewport ≥ 1024px wide - **THEN** the left menu column (~25%) and the right content column (~75%) are displayed side by side #### Scenario: Narrow viewport stacks columns - **WHEN** an authenticated user opens the profile section on a viewport < 1024px wide - **THEN** the menu and the content are stacked vertically in a single column ### Requirement: Pinned profile summary The left menu column SHALL display the profile summary (`ProfileSummary` — avatar and identity) pinned at the top, above the list of menu items, and it SHALL remain visible regardless of which menu item is active. #### Scenario: Summary visible on every item - **WHEN** the user switches between any menu items - **THEN** the profile summary remains displayed at the top of the left column ### Requirement: Menu items for profile sections and transactions The left menu SHALL list selectable items for: Данные профиля (`ProfileDetails`), Безопасность (`SecuritySection`), Мнемоническая фраза (`MnemonicSection`), and Транзакции (transactions content). Selecting an item SHALL render its content in the right column, and the currently active item SHALL be visually highlighted. #### Scenario: Selecting a menu item shows its content - **WHEN** the user clicks a menu item - **THEN** the right column renders that item's content and the clicked item is marked as active #### Scenario: Transactions appears as a menu item - **WHEN** the user views the profile menu - **THEN** a «Транзакции» item is present alongside the profile section items, and selecting it renders the transactions content (list plus the «Транзакции / Заявки» tabs for legal-entity accounts) ### Requirement: Per-item routing with default redirect Each menu item SHALL have its own URL under `/profile` (`/profile/details`, `/profile/security`, `/profile/mnemonic`, `/profile/transactions`) so that the browser Back button and direct links select the corresponding item. Navigating to `/profile` SHALL redirect to the default item `/profile/details`. #### Scenario: Direct link opens the matching item - **WHEN** the user navigates directly to `/profile/transactions` - **THEN** the transactions item is active and its content is shown in the right column #### Scenario: Bare profile path redirects to default - **WHEN** the user navigates to `/profile` - **THEN** the app redirects to `/profile/details` and shows the profile data item #### Scenario: Back button restores previous item - **WHEN** the user selects one item and then another, and then presses the browser Back button - **THEN** the previously active item is restored ### Requirement: Legacy transactions route redirect The legacy route `/transactions` SHALL redirect to `/profile/transactions` so existing links and bookmarks continue to work. #### Scenario: Old transactions URL redirects - **WHEN** the user navigates to `/transactions` - **THEN** the app redirects to `/profile/transactions` ### Requirement: KYC banner placement The KYC banner (`KycBanner`) SHALL be displayed above the content in the right column. #### Scenario: KYC banner shown above content - **WHEN** the profile section is displayed and the KYC banner is applicable - **THEN** the banner appears above the active item's content in the right column ### Requirement: Loading state for content While the data for the active menu item is loading, the right column SHALL show a loading indicator (the shared `Spinner`) while the left menu remains interactive. #### Scenario: Spinner while data loads - **WHEN** the active item's data is still loading - **THEN** a loading indicator is shown in the right column and the user can still click other menu items #### Scenario: Content replaces spinner when ready - **WHEN** the active item's data finishes loading - **THEN** the loading indicator is replaced by the item's content