/* Envelope Intro Screen — mobile-first, no framework */

:root {
  --color-ink: #3a2e26;
  --color-paper: rgb(255, 250, 244);
  --envelope-zoom: 1.04;
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  padding: 0;
  height: 100%;
  background: var(--color-paper);
  color: var(--color-ink);
  overflow: hidden;
}

@font-face {
  font-family: 'Anastasia Script';
  src:
    url('assets/AnastasiaScript.woff2') format('woff2'),
    url('assets/AnastasiaScript.ttf') format('truetype');
  font-display: swap;
}

.envelope {
  position: relative;
  min-height: 100vh;
  min-height: 100dvh;
  width: 100vw;
  overflow: hidden;
  text-align: center;
  isolation: isolate;
}

.envelope__figure {
  position: absolute;
  inset: -4vh -4vw;
  z-index: -2;
  margin: 0;
  transform: scale(var(--envelope-zoom));
  transform-origin: center 48%;
  transition: filter 0.8s ease, transform 0.8s ease;
}

.envelope__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center center;
  position: absolute;
  top: -6%;
}

.envelope::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    radial-gradient(circle at 50% 54%, rgb(255 250 239 / 0.1), transparent 30%),
    linear-gradient(to bottom, rgb(255 252 244 / 0.16), rgb(227 208 178 / 0.12));
  opacity: 0.7;
  pointer-events: none;
  transition: opacity 0.8s ease, transform 0.8s ease;
}

.flap {
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(to bottom, rgb(255 255 255 / 0.2), transparent 52%);
  clip-path: polygon(0 0, 100% 0, 100% 45%, 50% 61%, 0 45%);
  opacity: 0;
  transform: translateY(0) scaleY(1);
  transform-origin: top center;
  pointer-events: none;
  transition: opacity 0.8s ease, transform 0.8s ease;
}

.envelope__seal {
  position: absolute;
  top: 65%;
  left: 50%;
  display: block;
  width: clamp(9.5rem, 16vw, 20.625rem);
  transform: translate(-50%, -50%) scale(1);
  transform-origin: center;
  filter: drop-shadow(0 18px 18px rgb(72 49 33 / 0.24));
  pointer-events: none;
  transition: filter 0.8s ease, opacity 0.8s ease, transform 0.8s ease;
}

.seal__image {
  display: block;
  width: 100%;
  height: auto;
}

.seal__monogram {
  position: absolute;
  top: 58%;
  left: 51%;
  transform: translate(-50%, -50%);
  font-family: 'Cormorant SC', serif;
  font-size: 2.6rem;
  font-weight: 500;
  letter-spacing: 0.01em;
  color: rgb(242, 224, 204);
  text-shadow:
    0 1px 0 rgb(255 250 240 / 0.7),
    0 -1px 0 rgb(85 55 36 / 0.22),
    1px 1px 2px rgba(66, 43, 30, 0.644),
    -1px -1px 2px rgb(255 255 255 / 0.35);
  pointer-events: none;
}

.content {
  position: absolute;
  inset: 0;
  transition: opacity 0.8s ease;
}

.content__from {
  position: absolute;
  top: 37%;
  left: 51%;
  width: min(88vw, 48rem);
  transform: translate(-50%, -50%);
  font-family: 'Cormorant SC', serif;
  font-size: 1.5rem;
  letter-spacing: 0.04em;
  margin: 0;
  text-shadow: 0 1px 10px rgb(255 255 255 / 0.62);
  transition: opacity 0.8s ease, transform 0.8s ease;
}

.content__names {
  position: absolute;
  top: 42%;
  left: 48%;
  width: min(88vw, 48rem);
  transform: translate(-50%, -50%);
  font-family: 'Anastasia Script', cursive;
  font-weight: 400;
  font-size: 4rem;
  line-height: 0.95;
  margin: 0;
  text-shadow: 0 1px 12px rgb(255 255 255 / 0.74);
  transition: opacity 0.8s ease, transform 0.8s ease;
}

.content__button {
  position: absolute;
  top: 82%;
  left: 50%;
  transform: translateX(-50%);
  font-family: 'Cormorant SC', serif;
  font-size: 1.5rem;
  letter-spacing: 0.05em;
  padding: 0.45em 0.2em;
  border: 0;
  border-radius: 0;
  appearance: none;
  background: transparent;
  color: var(--color-ink);
  cursor: pointer;
  white-space: nowrap;
  box-shadow: none;
  text-shadow: 0 1px 10px rgb(255 255 255 / 0.62);
  transition: color 0.3s ease, text-decoration-color 0.3s ease, transform 0.3s ease;
}

.content__button:hover {
  color: rgb(58 46 38 / 0.78);
  transform: translateX(-50%) translateY(-0.12rem);
}

.content__button:focus-visible {
  outline: 0;
  text-decoration: underline;
  text-decoration-thickness: 0.08em;
  text-underline-offset: 0.28em;
}

.intro-word {
  display: inline-block;
  opacity: 0;
  transform: translateY(0.35rem);
  animation: intro-word-fade 0.85s ease forwards;
  animation-delay: calc(0.18s + (var(--word-index) * 0.24s));
}

@keyframes intro-word-fade {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Open state transitions */
.envelope.is-open .flap {
  opacity: 0.75;
  transform: translateY(-12%) scaleY(0.72);
}

.envelope.is-open::before {
  opacity: 1;
  transform: scale(1.04);
}

.envelope.is-open .envelope__figure {
  filter: brightness(1.04) saturate(0.92);
  transform: scale(calc(var(--envelope-zoom) + 0.045));
}

@media (min-width: 900px) {
  :root {
    --envelope-zoom: 1.07;
  }
}

@media (max-width: 640px) {
  :root {
    --envelope-zoom: 1.08;
  }

  .envelope__figure {
    inset: -5vh -5vw;
  }

  .content__from {
    top: 30%;
    font-size: 1.3rem;
  }

  .content__names {
    top: 37%;
    font-size: 3.5rem;
  }

  .seal__monogram {
    font-size: 1.5rem;
  }
}

.envelope.is-open .seal {
  opacity: 0.42;
  transform: translate(-50%, -68%) scale(0.78) rotate(-8deg);
  filter: drop-shadow(0 8px 12px rgb(72 49 33 / 0.12));
}

.envelope.is-open .content {
  opacity: 0.86;
}

.envelope.is-open .content__from,
.envelope.is-open .content__names {
  transform: translate(-50%, -64%) scale(0.96);
}

.envelope.is-open .content__button {
  transform: translateX(-50%) translateY(0.35rem);
}


@media (prefers-reduced-motion: reduce) {
  .envelope::before,
  .envelope__figure,
  .envelope__seal,
  .content,
  .content__from,
  .content__names,
  .content__button,
  .intro-word,
  .flap {
    transition: none !important;
  }

  .intro-word {
    opacity: 1;
    transform: none;
    animation: none !important;
  }
}

@media (max-aspect-ratio: 3 / 4) {
  .envelope__img {
    object-position: center center;
  }

  .content {
    inset: 0;
  }

  .content__from {
    top: 31%;
  }

  .content__names {
    top: 39%;
  }

  .envelope__seal {
    top: 60%;
    width: clamp(8.5rem, 42vw, 14rem);
  }

  .content__button {
    top: 78%;
  }
}
