diff --git a/frontend/src/components/gallery/GalleryView.tsx b/frontend/src/components/gallery/GalleryView.tsx index 1b95d63c..7ff8d5be 100644 --- a/frontend/src/components/gallery/GalleryView.tsx +++ b/frontend/src/components/gallery/GalleryView.tsx @@ -697,6 +697,9 @@ export const GalleryView: React.FC = ({ slug, event }) => { const headerStyle = data?.event?.header_style || theme.headerStyle || 'standard'; const isHeroHeader = headerStyle === 'hero'; const showSidebar = theme.controlsStyle === 'sidebar'; + const filterBarShown = !showSidebar + && settingsData?.gallery_show_filter_bar !== false + && (data?.photos?.length ?? 0) > 0; // Full-page layouts (gallery-premium, gallery-story) have their own integrated UI // Skip all wrapper elements (header, footer, sidebar, filters) for these layouts @@ -922,7 +925,7 @@ export const GalleryView: React.FC = ({ slug, event }) => { filter bar globally, and when the gallery actually has photos (avoids the empty "Search photos by filename" row in the screenshot from discussion #317). */} - {!showSidebar && settingsData?.gallery_show_filter_bar !== false && (data?.photos?.length ?? 0) > 0 ? ( + {filterBarShown ? (
= ({ slug, event }) => {
) : null} - {/* Photo Grid */} -
+ {/* Photo Grid — when the hero header sits directly under the filter + bar, double the wrapper margin (mt-12) so the hero's decorative + `-mt-6` bleed leaves a visible gap instead of gluing the filter + bar to the hero image (issue #624). */} +