Každý snímek vypráví příběh. Prohlédněte si ukázky ze svatebního, rodinného, těhotenského focení a portrétů.
Od ranních příprav po poslední tanec. Každý záběr s citem pro váš příběh.
Přirozené momenty, radost a smích. Vaše rodina tak, jak ji znáte.
Jemné, přirozené. Krása čekání zachycená navždy.
Osobní portréty, které zachycují charakter každého člověka.
Ozvěte se mi a společně zachytíme vaše nejkrásnější momenty.
Nezávazná poptávka
`;
div.addEventListener('click', () => openLightbox(div));
masonry.appendChild(div);
}
});
document.getElementById('cnt-all').textContent = total;
// ── MOBILE NAV
const mobileNav = document.getElementById('mobileNav');
const ham = document.getElementById('ham');
const navClose = document.getElementById('navClose');
function openMobileNav() { mobileNav.classList.add('open'); document.body.style.overflow='hidden'; }
function closeMobileNav() { mobileNav.classList.remove('open'); document.body.style.overflow=''; }
ham.addEventListener('click', openMobileNav);
navClose.addEventListener('click', closeMobileNav);
mobileNav.querySelectorAll('a').forEach(a => a.addEventListener('click', closeMobileNav));
// ── FILTER
const sections = ['svatba', 'rodina', 'tehotenstvi', 'portret'];
document.querySelectorAll('.filter-btn').forEach(btn => {
btn.addEventListener('click', () => {
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
const filter = btn.dataset.filter;
sections.forEach(cat => {
const sec = document.getElementById(`sec-${cat}`);
const div = sec.nextElementSibling;
const show = filter === 'all' || filter === cat;
sec.dataset.hidden = show ? 'false' : 'true';
if (div && div.classList.contains('section-divider')) div.style.display = show ? '' : 'none';
});
const first = document.querySelector('.cat-section:not([data-hidden="true"])');
if (first) window.scrollTo({ top: first.getBoundingClientRect().top + scrollY - 130, behavior: 'smooth' });
});
});
// ── SCROLL REVEAL
const io = new IntersectionObserver(entries => {
entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('visible'); io.unobserve(e.target); } });
}, { threshold: 0.08 });
document.querySelectorAll('.reveal').forEach(el => io.observe(el));
// ── LIGHTBOX
let currentIdx = 0, visibleItems = [];
function getVisibleItems() {
return Array.from(document.querySelectorAll('.cat-section:not([data-hidden="true"]) .m-item'));
}
function openLightbox(item) {
visibleItems = getVisibleItems();
currentIdx = visibleItems.indexOf(item);
renderLightbox();
document.getElementById('lightbox').classList.add('open');
document.body.style.overflow = 'hidden';
}
function renderLightbox() {
const item = visibleItems[currentIdx];
const cat = item.dataset.cat;
const img = item.querySelector('img');
const content = document.getElementById('lbContent');
if (img) {
content.innerHTML = `Vaše fotografie