# FN-398 — Subscription Page Mobile Remainder (P1) ## Task - **ID:** FN-398 - **Priority:** P1 — bottom-of-funnel, revenue-critical - **Single source file:** `apps/web/src/routes/dashboard/subscription/index.tsx` - **Single test folder:** `apps/web/src/routes/dashboard/subscription/__tests__/` - Existing files to extend: `cls-regression.test.tsx`, `grid-parity.test.tsx` - **Dependencies:** FN-395 (P1-A shortlist; informational only — no code dependency). This task fixes three specific defects (one CLS, one dialog overflow, one safe-area padding) on the subscription / plan-selection page. All requirements below are stated inline; you do **not** need to read any external audit document to execute. --- ## In-scope defects (verbatim requirements — inline, authoritative) ### Defect A — Skeleton grid CLS parity (audit §6) **Symptom:** When the subscription page is loading, the skeleton placeholders use a different grid than the real plan-cards grid. When the real data arrives, the layout jumps (Cumulative Layout Shift). **Real grid (already correct in source, currently `index.tsx` line ~989):** ```tsx