(() => { const state = { items: [], index: 0 }; function ensureLightbox() { if (document.getElementById('gd-lightbox')) return; const box = document.createElement('div'); box.id = 'gd-lightbox'; box.className = 'gd-lightbox'; box.setAttribute('role', 'dialog'); box.setAttribute('aria-modal', 'true'); box.setAttribute('aria-label', 'Gallery image viewer'); box.innerHTML = `
`; document.body.appendChild(box); box.querySelector('.gd-lightbox-close').addEventListener('click', closeLightbox); box.querySelector('.gd-lightbox-prev').addEventListener('click', () => showAt(state.index - 1)); box.querySelector('.gd-lightbox-next').addEventListener('click', () => showAt(state.index + 1)); box.addEventListener('click', (e) => { if (e.target === box) closeLightbox(); }); } function showAt(next) { if (!state.items.length) return; state.index = (next + state.items.length) % state.items.length; const item = state.items[state.index]; const box = document.getElementById('gd-lightbox'); const img = box.querySelector('.gd-lightbox-image'); const caption = box.querySelector('.gd-lightbox-caption'); img.src = item.dataset.full; img.alt = item.querySelector('img')?.alt || 'Genavieve Dior gallery image'; caption.textContent = `${item.dataset.gallery} · ${state.index + 1} / ${state.items.length}`; } function openLightbox(item) { ensureLightbox(); state.items = [...document.querySelectorAll('.gd-photo')] .filter(el => el.dataset.gallery === item.dataset.gallery); state.index = Math.max(0, state.items.indexOf(item)); const box = document.getElementById('gd-lightbox'); showAt(state.index); box.classList.add('is-open'); requestAnimationFrame(() => box.classList.add('is-visible')); document.body.classList.add('gd-lightbox-lock'); } function closeLightbox() { const box = document.getElementById('gd-lightbox'); if (!box) return; box.classList.remove('is-visible'); document.body.classList.remove('gd-lightbox-lock'); setTimeout(() => box.classList.remove('is-open'), 240); } function renderGrid(grid, config) { if (!grid || grid.dataset.rendered === 'true') return; const frag = document.createDocumentFragment(); config.images.forEach((file, i) => { const url = `${config.base}${file}${config.version || ''}`; const button = document.createElement('button'); button.className = 'gd-photo'; button.type = 'button'; button.dataset.full = url; button.dataset.gallery = config.photographer; button.dataset.indexLabel = String(i + 1).padStart(2, '0'); button.setAttribute('aria-label', `Open ${config.photographer} photograph ${i + 1}`); const img = document.createElement('img'); img.src = url; img.alt = `Genavieve Dior — photographed by ${config.photographer}, image ${i + 1}`; img.loading = i < 4 ? 'eager' : 'lazy'; img.decoding = 'async'; button.appendChild(img); frag.appendChild(button); }); grid.appendChild(frag); grid.dataset.rendered = 'true'; } window.GDGallery = { mount(id, config) { const grid = document.getElementById(id); if (!grid) return; if (!config.gated) { renderGrid(grid, config); return; } const section = grid.closest('.gd-section'); const gate = section?.querySelector('.gd-agegate'); const enter = section?.querySelector('[data-gd-age-enter]'); const leave = section?.querySelector('[data-gd-age-leave]'); const consentKey = `gd-consent-${config.consentKey || id}`; let verified = false; try { verified = sessionStorage.getItem(consentKey) === 'yes'; } catch (e) {} const reveal = () => { renderGrid(grid, config); gate?.classList.add('gd-hidden'); grid.classList.remove('gd-hidden'); }; if (verified) { reveal(); } else { grid.classList.add('gd-hidden'); } enter?.addEventListener('click', () => { try { sessionStorage.setItem(consentKey, 'yes'); } catch (e) {} reveal(); }); leave?.addEventListener('click', () => { document.getElementById('home')?.scrollIntoView({ behavior: 'smooth' }); }); } }; document.addEventListener('click', (e) => { const photo = e.target.closest('.gd-photo'); if (photo) openLightbox(photo); const nav = e.target.closest('[data-gd-target]'); if (nav) { e.preventDefault(); const target = document.getElementById(nav.dataset.gdTarget); target?.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); document.addEventListener('keydown', (e) => { const box = document.getElementById('gd-lightbox'); if (!box?.classList.contains('is-open')) return; if (e.key === 'Escape') closeLightbox(); if (e.key === 'ArrowLeft') showAt(state.index - 1); if (e.key === 'ArrowRight') showAt(state.index + 1); }); window.addEventListener('load', () => { const links = [...document.querySelectorAll('.gd-nav-link[data-gd-target]')]; const sections = [...document.querySelectorAll('.gd-section[id]')]; if (!('IntersectionObserver' in window) || !links.length || !sections.length) return; const observer = new IntersectionObserver((entries) => { const visible = entries .filter(entry => entry.isIntersecting) .sort((a, b) => b.intersectionRatio - a.intersectionRatio)[0]; if (!visible) return; links.forEach(link => { link.classList.toggle('is-active', link.dataset.gdTarget === visible.target.id); }); }, { rootMargin: '-38% 0px -52% 0px', threshold: [0, .01, .1] }); sections.forEach(section => observer.observe(section)); }); })();

Final Fantasy XIV · GPOSE Photography

Genavieve
Dior

A Collective GPOSE Gallery

A collective archive of Genavieve Dior, divided into individual galleries by the photographer behind each image. Every collection preserves a different eye, atmosphere, and interpretation of the same muse.

Choose a photographer from the navigation above to enter their collection.

Viewer Consent

Freyja

This is a curated GPOSE collection of Genavieve Desire. By entering, you consent to viewing this photographer's gallery.

Your choice is remembered only for this gallery during the current browser session.
window.GDGallery.mount("gd-freyja-grid", { photographer: "FREYJA", base: "https://gena-gallery.crd.co/assets/images/gallery01/", version: "?v=9866c3f7", gated: true, consentKey: "freyja", images: ["11529674.jpg","a3fc9b65.jpg","22817370.jpg","d320ac9c.jpg","dd2622c1.jpg","bad5ceb0.jpg","903ba1e7.jpg","07a1dc9d.jpg","bf732189.jpg","3b606c68.jpg","88fe254d.jpg","3db6b501.jpg","06cc2849.jpg","5d15f467.jpg","4b74aa39.jpg","fd541f87.jpg","dfd56fd9.jpg","f21f141b.jpg","a77a84ea.jpg","fcc1fabd.jpg","84f0e46c.jpg","3f109078.jpg","2242cd78.jpg","6a8b39a4.jpg","5830eb70.jpg","ddf3879b.jpg","6359786c.jpg","7bc7f5de.jpg","00874bb8.jpg","eb4ce6e2.jpg","d817616a.jpg","1ac4bf57.jpg","4ee9b57b.jpg","cc0a04b0.jpg","d0bcb600.jpg","71a9cad3.jpg","6576f9dc.jpg","00e0d3b0.jpg"] });

Viewer Consent

Sonja

This is a curated GPOSE collection of Genavieve Desire. By entering, you consent to viewing this photographer's gallery.

Your choice is remembered only for this gallery during the current browser session.
window.GDGallery.mount("gd-sonja-grid", { photographer: "SONJA", base: "https://gena-gallery.crd.co/assets/images/gallery05/", version: "?v=9866c3f7", gated: true, consentKey: "sonja", images: ["e04eb554.jpg","2d7bbeca.jpg","494bee82.jpg","6d4891df.jpg","f7b8f66b.jpg","7faf3d6c.jpg","95e0a3bc.jpg","acb95a82.jpg","f1b902cd.jpg","880d4006.jpg","9bb13aa2.jpg","782e56c0.jpg","63148598.jpg","e3d2b7ea.jpg","fa41acae.jpg","692611b7.jpg","5037eaee.jpg","b03c1f95.jpg","693132a5.jpg","b026a7e4.jpg","ba9e7c0a.jpg","09a2c21f.jpg","441558fb.jpg","706adc8b.jpg","dbc72495.jpg","e2aa8699.jpg","99cf8b2e.jpg","f0e72535.jpg","dfa16586.jpg"] });

Viewer Consent

Naughty

This is a curated GPOSE collection of Genavieve Desire. By entering, you consent to viewing this photographer's gallery.

Your choice is remembered only for this gallery during the current browser session.
window.GDGallery.mount("gd-naughty-grid", { photographer: "NAUGHTY", base: "https://gena-gallery.crd.co/assets/images/gallery03/", version: "?v=9866c3f7", gated: true, consentKey: "naughty", images: ["248dfadd.jpg","de3e4287.jpg","94d46f85.jpg","c7a4c557.jpg","6e4217c5.jpg","cc83897b.jpg","47ad979c.jpg","23eff4ef.jpg","06d805b1.jpg","936a906a.jpg","be618fd9.jpg","afc40ca9.jpg","58c8d4b7.jpg","3b0d0458.jpg","74b546a0.jpg","b6383e16.jpg"] });

Private Collection · 21+

For Your
Eyes

This collection contains mature GPOSE photography. By entering, you confirm that you are 21 or older and consent to viewing the collection.

Your choice is remembered only for this gallery during the current browser session.
window.GDGallery.mount("gd-for-your-eyes-only-grid", { photographer: "FOR YOUR EYES ONLY", base: "https://gena-gallery.crd.co/assets/images/gallery04/", version: "?v=9866c3f7", gated: true, consentKey: "for-your-eyes-only", images: ["fb37a218.jpg","f0ae17b4.jpg","6e98b106.jpg","efcd0cb1.jpg","22515896.jpg","4a91889d.jpg","4c3345d4.jpg","b126c963.jpg"] });