64 lines
2.3 KiB
PHP
64 lines
2.3 KiB
PHP
<?php require __DIR__ . '/fragments/head.php'; ?>
|
|
<body>
|
|
<?php require __DIR__ . '/fragments/hero.php'; ?>
|
|
<?php require __DIR__ . '/fragments/feature-strip.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');
|
|
};
|
|
|
|
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: '240px 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>
|