diff --git a/src/components/Layout.jsx b/src/components/Layout.jsx
index ed890bb..b3615aa 100644
--- a/src/components/Layout.jsx
+++ b/src/components/Layout.jsx
@@ -384,7 +384,9 @@ const Layout = () => {
-
+ {/* Hide the floating chat on full-page flows that have their own bottom CTAs
+ (estimate wizard, ad preview form, Ad Engine) so it doesn't overlap their buttons. */}
+ {!(location.pathname === '/estimate' || location.pathname === '/marketing' || location.pathname.startsWith('/ads/')) && }
);
};
diff --git a/src/components/maps/PropertyDetailDrawer.jsx b/src/components/maps/PropertyDetailDrawer.jsx
index aa22e95..e8f270b 100644
--- a/src/components/maps/PropertyDetailDrawer.jsx
+++ b/src/components/maps/PropertyDetailDrawer.jsx
@@ -1,5 +1,6 @@
import React, { useState, useEffect, useRef } from 'react';
+import { createPortal } from 'react-dom';
import { X, Home, DollarSign, User, Edit2, Save, Info, AlertCircle, ShieldCheck, Loader2, ChevronLeft, ChevronRight, Trash2 } from 'lucide-react';
import { SpotlightCard } from '../SpotlightCard';
@@ -309,7 +310,7 @@ const PropertyDetailDrawer = ({ isOpen, onClose, data, newLocation, onSave, load
);
};
- return (
+ return createPortal(
@@ -710,7 +712,8 @@ const PropertyDetailDrawer = ({ isOpen, onClose, data, newLocation, onSave, load
)}
-
+ ,
+ document.body
);
};