diff --git a/tradein-mvp/frontend/src/app/v2/page.tsx b/tradein-mvp/frontend/src/app/v2/page.tsx index 3ea09a09..87136092 100644 --- a/tradein-mvp/frontend/src/app/v2/page.tsx +++ b/tradein-mvp/frontend/src/app/v2/page.tsx @@ -701,7 +701,6 @@ export default function TradeInV2Page() { {/* CONTENT WRAP */}
-
diff --git a/tradein-mvp/frontend/src/components/trade-in/v2/SectionOverlay.tsx b/tradein-mvp/frontend/src/components/trade-in/v2/SectionOverlay.tsx index 435a56d0..b1db1274 100644 --- a/tradein-mvp/frontend/src/components/trade-in/v2/SectionOverlay.tsx +++ b/tradein-mvp/frontend/src/components/trade-in/v2/SectionOverlay.tsx @@ -30,6 +30,11 @@ interface SectionOverlayProps { cache?: CacheData; } +// Panel geometry (relative to the artboard). Kept as a constant so the click +// backdrop can align its top edge to the panel — the backdrop starts BELOW the +// TopNav so the top tabs stay clickable while an overlay is open. +const PANEL_TOP = 80; + export default function SectionOverlay({ active, onClose, @@ -105,138 +110,182 @@ export default function SectionOverlay({ }, []); return ( -
- - - {/* HUD corner brackets */} + <> + {/* Click-outside backdrop. A transparent layer covering the artboard BELOW + the TopNav (top: PANEL_TOP) — clicking the margin area around the panel + closes the overlay (in addition to Esc). It is a SIBLING of the dialog + (not an ancestor) and sits one z-index below it, so clicks inside the + panel / on its buttons never reach this handler (they don't bubble to a + sibling) and therefore never close the overlay. Starting below the nav + keeps the top tabs clickable. aria-hidden + no tabIndex → invisible to + AT and keyboard; Esc remains the keyboard close path. */} + ); }