` with classes `company-logo company-logo--{CARRIER} {large? "large" :""} {round? "round" :""} {locale === "ru" ? "ru" : ""}`. The SCSS applies background images.
+
+**`FlightActions`**
+```typescript
+interface Props {
+ flight: ISimpleFlight;
+ locale: string;
+ viewType: "Onlineboard" | "Schedule";
+ showStatus?: boolean; // default true
+ showDetails?: boolean; // default false
+ showPrint?: boolean; // default false (hidden on details page)
+ showShare?: boolean; // default true
+ showRegister?: boolean; // default true
+ showBuy?: boolean; // default true
+}
+```
+Renders each action button conditional on visibility logic + show prop.
+
+**`FlightEvents`**
+```typescript
+interface Props {
+ changeRoute: boolean;
+ reroute: boolean;
+ direction?: "row" | "column-mobile";
+ showDescription?: boolean;
+}
+```
+
+**`LastUpdate`**
+```typescript
+interface Props {
+ flight: ISimpleFlight;
+ locale: string;
+}
+```
+Renders timestamp (`HH:mm DD.MM.YYYY`) via `date-fns` `format`. Also renders a mobile-only `ShareButton` next to it.
+
+### Button behaviors (click handlers)
+
+**BuyTicket:** opens `https://www.aeroflot.ru/sb/app/{locale}-{locale}#/search?adults=1&cabin=economy&children=0&infants=0&routes={dep}.{yyyymmdd}.{arr}&autosearch=Y` in new tab.
+
+**Registration:** opens `AIRLINES[carrier].registrationUrl` in new tab.
+
+**FlightStatus:** if `hasNativeStatus`, opens the flight's own details URL in new tab; otherwise opens `statusUrl` in new tab.
+
+**Share:** toggles `SharePanel`. Panel renders:
+- Facebook: `https://www.facebook.com/sharer/sharer.php?u={url}`
+- VK: `http://vk.com/share.php?url={url}`
+- Twitter: `http://twitter.com/share?text={text}&url={url}`
+- Weibo (zh only): `http://service.weibo.com/share/share.php?url={url}`
+- Copy button: `navigator.clipboard.writeText(url)`
+
+`url` is built from the current page's absolute URL.
+
+**Print:** empty URL (matches Angular). The component is always rendered hidden on the details page via `showPrint={false}`.
+
+### Integration into `OnlineBoardDetailsPage`
+
+Replace:
+```tsx
+
+ {displayFlight.status}
+
+```
+
+with:
+```tsx
+
+```
+
+Move the overall-status indication into the header's badge. Remove the stale `flight-details__header` div from the main content — the header is the entire top section now.
+
+## Styling
+
+### Copied from Angular `_logos.scss`
+
+All 35 `.company-logo--{CODE}` rules with CSS `background-image` URLs. Paths rewritten from `~src/assets/...` to relative (`./airlines-logo/...`). Rspack handles the `.svg`/`.png` imports as file assets.
+
+### Action buttons
+
+Shared `actions.scss`:
+```scss
+.flight-action-btn {
+ padding: 8px 16px;
+ border-radius: 6px;
+ cursor: pointer;
+ font-size: 14px;
+ border: none;
+ font-family: inherit;
+
+ &--orange { background: #ff9000; color: #fff; }
+ &--blue-light { background: #e3f0ff; color: #1a3a5c; }
+ &--transparent { background: transparent; padding: 8px; }
+}
+```
+
+### Header layout
+
+```scss
+.board-details-header {
+ display: grid;
+ grid-template-columns: auto 1fr auto;
+ align-items: center;
+ gap: 16px;
+ padding: 24px;
+ background: #fff;
+ border-radius: 8px;
+
+ &__badge { grid-column: 1; }
+ &__actions { grid-column: 2; display: flex; gap: 8px; justify-content: flex-end; }
+ &__events { grid-column: 3; }
+ &__last-update { grid-column: 1 / -1; }
+
+ @media (max-width: 768px) {
+ grid-template-columns: 1fr;
+ padding: 16px;
+ .share-button--desktop { display: none; }
+ }
+}
+```
+
+## Testing
+
+### Visibility logic (unit, pure functions)
+
+- `buyTicketVisibility.test.ts` — window boundary tests (just before showFrom, middle, just after showUntil), status exclusions
+- `registrationVisibility.test.ts` — airline support matrix, status "InProgress" check
+- `flightStatusVisibility.test.ts` — same-day boundary, airline filtering, time window
+
+### Components (unit)
+
+- `OperatorLogo.test.tsx` — applies correct CSS class per carrier code
+- `DetailsHeaderBadge.test.tsx` — flight number, codesharing list, small status button visibility
+- `BuyTicketButton.test.tsx` / `RegistrationButton.test.tsx` / `FlightStatusButton.test.tsx` — render, click opens expected URL (mock `window.open`)
+- `ShareButton.test.tsx` — toggles panel visibility
+- `SharePanel.test.tsx` — renders 4 social links, Weibo conditional, copy calls `navigator.clipboard`
+- `FlightEvents.test.tsx` — conditional rendering of change/reroute icons
+- `LastUpdate.test.tsx` — timestamp format, mobile share visibility
+- `FlightActions.test.tsx` — renders only enabled visible buttons
+- `BoardDetailsHeader.test.tsx` — integration smoke test
+
+### Hook extension
+
+- `useAppSettings.test.ts` — new tests for `buttons` parsing
+
+### Integration
+
+- `OnlineBoardDetailsPage.test.tsx` — `
` replaces the inline header
+
+## i18n
+
+No new keys needed. Reuses:
+- `SHARED.BUY-TICKET`, `SHARED.ONLINE-REGISTRATION`
+- `SHARED.DETAILS`, `SHARED.DETAILS-TOOLTIP`, `SHARED.FLIGHT-INFO`
+- `SHARED.LAST-UPDATE`, `SHARED.ROUTE-CHANGE`, `SHARED.RETURN`
+- `SHARED.AVIACOMPANY`
+- `BOARD.SHARE`
+
+(All confirmed present in `src/i18n/locales/en/common.json`.)
+
+## Assets
+
+### Airline logos
+Copy all 35 directories from `ClientApp/src/assets/img/airlines-logo/` to `src/features/online-board/components/BoardDetailsHeader/airlines-logo/`.
+
+### Event/action icons
+Copy `change.svg`, `return.svg`, `share.svg`, `print.svg` from Angular's icon directory to `./icons/`.
+
+## Files Touched
+
+### New files
+- All under `src/features/online-board/components/BoardDetailsHeader/` (as listed in file structure)
+
+### Modified files
+- `src/shared/hooks/useAppSettings.ts` — extend with buttons config
+- `src/shared/hooks/useAppSettings.test.ts` — add tests for buttons parsing
+- `src/features/online-board/components/OnlineBoardDetailsPage.tsx` — replace inline header
+- `src/features/online-board/components/OnlineBoardDetailsPage.test.tsx` — update mock state
+- `package.json` — add `date-fns` dependency
+
+## Out of Scope
+
+- Schedule feature equivalent (`schedule-details-header`)
+- Print page implementation (URL stays empty per Angular)
+- Registration state re-fetch on button click
+- Feature flags for China-specific share filtering beyond locale check
+- Analytics wiring on button clicks