- B3 type contract: PilotRequestResponse.id is string (UUID via CAST), drop tracking_id;
derive display ID as GD-{first8hexUppercase} from UUID
- B4 stale flag: LandingStatsOut Pydantic schema adds stale:bool=False; fallback
returns stale=True with zeroed fields (no fake numbers); frontend shows skeleton
placeholders when stale=true
- PilotRequestModal: replaced manual backdrop+panel+ESC logic with <Drawer side="bottom">
(focus trap, ESC, scroll-lock, focus restore for free); removed ~80 LoC
- Design tokens: all #hex literals in page.tsx and PilotRequestModal.tsx replaced
with var(--token) from globals.css; h1 fontSize 32 -> 28 per display spec
- HeadlineBar: hand-rolled dark div in page.tsx replaced with <HeadlineBar> component
Hero + 5 KPI cards из GET /api/v1/landing/stats (zk_total, deals_total,
price_coverage_pct, mapping_coverage_pct, last_data_update).
Парадокс портфеля из stats.paradox. Pricing card 30 000 руб/мес. FAQ accordion.
PilotRequestModal -> POST /api/v1/pilot/request, success state с trackingId.
Admin links убраны из public nav. lucide-react добавлен в deps.