Files

67 lines
2.4 KiB
PHP

<?php require __DIR__ . '/fragments/head.php'; ?>
<body>
<?php require __DIR__ . '/fragments/hero.php'; ?>
<?php require __DIR__ . '/fragments/lux-topbar.php'; ?>
<?php require __DIR__ . '/fragments/lux-hero.php'; ?>
<?php require __DIR__ . '/fragments/lux-features.php'; ?>
<?php require __DIR__ . '/fragments/route.php'; ?>
<?php require __DIR__ . '/fragments/architecture.php'; ?>
<?php require __DIR__ . '/fragments/museums.php'; ?>
<?php require __DIR__ . '/fragments/food.php'; ?>
<?php require __DIR__ . '/fragments/cafes.php'; ?>
<?php require __DIR__ . '/fragments/regional-food.php'; ?>
<?php require __DIR__ . '/fragments/footer.php'; ?>
<script>
(() => {
const lazyBackgrounds = document.querySelectorAll('[data-bg]');
const revealItems = document.querySelectorAll('.page-title, .arch-card, .museum-card, .restaurant-card');
const loadBackground = (element) => {
const source = element.dataset.bg;
if (!source) return;
element.style.backgroundImage = `url("${source}")`;
element.removeAttribute('data-bg');
element.classList.add('bg-loaded');
};
window.addEventListener('beforeprint', () => {
document.querySelectorAll('[data-bg]').forEach(loadBackground);
});
if ('IntersectionObserver' in window) {
const backgroundObserver = new IntersectionObserver((entries, observer) => {
entries.forEach((entry) => {
if (!entry.isIntersecting) return;
loadBackground(entry.target);
observer.unobserve(entry.target);
});
}, { rootMargin: '720px 0px' });
lazyBackgrounds.forEach((element) => backgroundObserver.observe(element));
const revealObserver = new IntersectionObserver((entries, observer) => {
entries.forEach((entry) => {
if (!entry.isIntersecting) return;
entry.target.classList.add('is-visible');
observer.unobserve(entry.target);
});
}, { rootMargin: '0px 0px -8% 0px', threshold: 0.08 });
revealItems.forEach((element) => {
element.classList.add('reveal');
revealObserver.observe(element);
});
} else {
lazyBackgrounds.forEach(loadBackground);
revealItems.forEach((element) => element.classList.add('is-visible'));
}
document.querySelectorAll('img').forEach((image) => {
if (!image.hasAttribute('loading')) image.loading = 'lazy';
if (!image.hasAttribute('decoding')) image.decoding = 'async';
});
})();
</script>
</body>
</html>