<style>
:root {
--vh-z-snezha: 1vh;
--text-dark-z-snezha: #FFFFFF;
--hint-z-snezha: rgba(255, 255, 255, 100);
--ease-z-snezha: cubic-bezier(0.22, 1, 0.36, 1);
--duration-overlay-hide-z-snezha: 900ms;
--duration-content-show-z-snezha: 900ms;
--duration-fade-z-snezha: 500ms;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
scroll-behavior: smooth;
-webkit-text-size-adjust: 100%;
}
html,
body {
width: 100%;
min-height: 100%;
}
body {
font-family: 'Inter', sans-serif;
background: #faf8f5;
color: #111111;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
body.locked-z-snezha {
overflow: hidden;
touch-action: none;
}
img {
display: block;
max-width: 100%;
}
button {
font: inherit;
color: inherit;
background: transparent;
border: none;
}
.page-z-snezha {
width: 100%;
position: relative;
}
.hero-z-snezha {
position: fixed;
inset: 0;
background-size: cover;
background-image: url('https://static.tildacdn.com/tild6363-6466-4566-b261-353437333235/Frame_20-6.png');
background-size: cover;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
isolation: isolate;
z-index: 9999;
opacity: 1;
visibility: visible;
pointer-events: auto;
transition:
opacity var(--duration-overlay-hide-z-snezha) ease,
visibility var(--duration-overlay-hide-z-snezha) ease;
}
.hero-z-snezha.is-hidden-z-snezha {
opacity: 0;
visibility: hidden;
pointer-events: none;
}
.hero__center-z-snezha {
position: relative;
z-index: 3;
width: 100%;
max-width: 920px;
padding: 32px 20px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
}
.hero__suptitle-z-snezha {
font-family: 'Cormorant Garamond', serif;
color: var(--text-dark-z-snezha);
font-size: clamp(28px, 2.2vw, 42px);
line-height: 1;
letter-spacing: 0.02em;
margin-bottom: 22px;
text-transform: uppercase;
}
.hero__title-z-snezha {
font-family: 'Cormorant Garamond', serif;
color: var(--text-dark-z-snezha);
font-size: clamp(64px, 6vw, 118px);
line-height: 0.9;
font-weight: 500;
letter-spacing: 0.02em;
margin-bottom: 26px;
text-transform: uppercase;
}
.fingerprint-trigger-z-snezha {
display: inline-flex;
align-items: center;
justify-content: center;
width: min(190px, 58vw);
padding: 0;
cursor: pointer;
outline: none;
-webkit-tap-highlight-color: transparent;
transition:
transform 300ms ease,
opacity var(--duration-overlay-hide-z-snezha) ease;
transform-origin: center center;
}
.fingerprint-trigger-z-snezha:hover,
.fingerprint-trigger-z-snezha:focus-visible {
transform: scale(1.06);
}
.fingerprint-trigger-z-snezha:focus-visible {
outline: 2px solid rgba(0, 0, 0, 0.45);
outline-offset: 8px;
border-radius: 12px;
}
.fingerprint-trigger-z-snezha img {
width: 100%;
height: auto;
object-fit: contain;
user-select: none;
-webkit-user-drag: none;
pointer-events: none;
filter: drop-shadow(0 10px 28px rgba(0, 0, 0, 0.12));
}
.hero__hint-z-snezha {
margin-top: 20px;
color: var(--hint-z-snezha);
font-size: clamp(16px, 1.15vw, 20px);
line-height: 1.3;
transition:
opacity var(--duration-overlay-hide-z-snezha) ease,
transform var(--duration-overlay-hide-z-snezha) ease;
}
.hero-z-snezha.is-start-hide-z-snezha .fingerprint-trigger-z-snezha,
.hero-z-snezha.is-start-hide-z-snezha .hero__hint-z-snezha,
.hero-z-snezha.is-start-hide-z-snezha .hero__center-text-z-snezha {
opacity: 0;
transform: scale(0.92);
pointer-events: none;
}
.content-z-snezha {
position: relative;
display: none;
background: #faf8f5;
color: #222222;
padding: 80px 20px 120px;
opacity: 0;
transform: translateY(30px);
transition:
opacity var(--duration-content-show-z-snezha) ease,
transform var(--duration-content-show-z-snezha) ease;
}
.content-z-snezha.is-visible-z-snezha {
opacity: 1;
transform: translateY(0);
}
.content__inner-z-snezha {
max-width: 1800px;
margin: 0 auto;
}
.content-z-snezha h2 {
font-family: 'Cormorant Garamond', serif;
font-size: clamp(36px, 4vw, 64px);
margin-bottom: 20px;
}
.content-z-snezha p {
font-size: 18px;
line-height: 1.7;
margin-bottom: 18px;
max-width: 780px;
}
@media (max-width: 767px) {
.hero__suptitle-z-snezha {
margin-bottom: 18px;
}
.hero__title-z-snezha {
margin-bottom: 20px;
}
.fingerprint-trigger-z-snezha {
width: min(120px, 62vw);
}
.hero__hint-z-snezha {
max-width: 260px;
}
}
@media (hover: none) {
.fingerprint-trigger-z-snezha:hover {
transform: none;
}
}
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
.hero-z-snezha,
.fingerprint-trigger-z-snezha,
.hero__hint-z-snezha,
.hero__center-text-z-snezha,
.content-z-snezha {
transition: none !important;
animation: none !important;
}
}
</style>
</head>
<body class="locked-z-snezha">
<div class="page-z-snezha">
<section class="hero-z-snezha" id="hero-z-snezha">
<div class="hero__center-z-snezha">
<div class="hero__center-text-z-snezha">
<div class="hero__suptitle-z-snezha">Максим<br>&<br>Анна</div>
<h1 class="hero__title-z-snezha">⠀</h1>
</div>
<button
type="button"
class="fingerprint-trigger-z-snezha"
id="inviteCard-z-snezha"
aria-label="Открыть приглашение"
>
<img
src="https://static.tildacdn.com/tild3537-6265-4139-b663-386664623238/__-2.png"
alt="Отпечаток пальца"
/>
</button>
<div class="hero__hint-z-snezha">
Нажмите на отпечаток, чтобы<br />
открыть приглашение
</div>
</div>
</section>
<section class="content-z-snezha" id="content-z-snezha">
</section>
</div>
<audio id="weddingAudio-z-snezha" preload="auto">
<source src="https://www.dropbox.com/scl/fi/g87vljgwhis12euyd6wh9/.mp3?rlkey=uudfbnskhdobzkwqqk089dsfi&st=wlt6ijlj&raw=1" type="audio/mpeg" />
Ваш браузер не поддерживает audio.
</audio>
<script>
(function () {
const bodyZsnezha = document.body;
const rootZsnezha = document.documentElement;
const heroZsnezha = document.getElementById('hero-z-snezha');
const triggerZsnezha = document.getElementById('inviteCard-z-snezha');
const contentZsnezha = document.getElementById('content-z-snezha');
const audioZsnezha = document.getElementById('weddingAudio-z-snezha');
const overlayHideDurationZsnezha = 900;
let isOpenedZsnezha = false;
let resizeTimerZsnezha = null;
function setRealVhZsnezha() {
const vhZsnezha = window.innerHeight * 0.01;
rootZsnezha.style.setProperty('--vh-z-snezha', vhZsnezha + 'px');
}
function lockScrollZsnezha() {
bodyZsnezha.classList.add('locked-z-snezha');
}
function unlockScrollZsnezha() {
bodyZsnezha.classList.remove('locked-z-snezha');
}
function playAudioZsnezha() {
if (!audioZsnezha) return;
const promiseZsnezha = audioZsnezha.play();
if (promiseZsnezha && typeof promiseZsnezha.catch === 'function') {
promiseZsnezha.catch(function () {
console.log('Аудио было заблокировано браузером.');
});
}
}
function openInvitationZsnezha() {
if (!heroZsnezha || !contentZsnezha || isOpenedZsnezha) return;
isOpenedZsnezha = true;
playAudioZsnezha();
heroZsnezha.classList.add('is-start-hide-z-snezha');
window.setTimeout(function () {
heroZsnezha.classList.add('is-hidden-z-snezha');
contentZsnezha.classList.add('is-visible-z-snezha');
unlockScrollZsnezha();
}, overlayHideDurationZsnezha);
}
function initZsnezha() {
setRealVhZsnezha();
lockScrollZsnezha();
if (triggerZsnezha) {
triggerZsnezha.addEventListener('click', openInvitationZsnezha);
triggerZsnezha.addEventListener('keydown', function (eventZsnezha) {
if (eventZsnezha.key === 'Enter' || eventZsnezha.key === ' ') {
eventZsnezha.preventDefault();
openInvitationZsnezha();
}
});
}
window.addEventListener('resize', function () {
clearTimeout(resizeTimerZsnezha);
resizeTimerZsnezha = window.setTimeout(function () {
setRealVhZsnezha();
}, 120);
});
window.addEventListener('orientationchange', function () {
window.setTimeout(function () {
setRealVhZsnezha();
}, 220);
});
}
initZsnezha();
})();
</script>