* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

:root {
  --purple: #2c1770;
  --purple-dark: #140a36;
  --purple-light: #432892;
  --gold: #d5b84f;
  --gold-light: #f1dd79;
  --white: #fffdf5;
}

html {
  scroll-behavior: smooth;
}

body {
  background: #ddd;
  color: var(--white);
  font-family:
    "Yu Mincho",
    "YuMincho",
    "Hiragino Mincho ProN",
    serif;
}

.invitation {
  width: min(100%, 520px);
  margin: 0 auto;
  overflow: hidden;
  box-shadow: 0 0 30px rgba(0,0,0,.28);
}

.royal-section {
  position: relative;
  background:
    radial-gradient(
      circle at 50% 0%,
      var(--purple-light) 0%,
      var(--purple) 48%,
      var(--purple-dark) 100%
    );
  overflow: hidden;
}

.royal-section::before {
  content: "";
  position: absolute;
  inset: 0;
  opacity: .09;
  background-image:
    radial-gradient(
      circle,
      var(--gold) 1px,
      transparent 1px
    );
  background-size: 24px 24px;
  pointer-events: none;
}

.small-title {
  color: var(--gold);
  font-family: Georgia, serif;
  font-size: 11px;
  letter-spacing: .35em;
  margin-bottom: 8px;
}

.royal-section h2 {
  color: var(--gold-light);
  font-size: 27px;
  font-weight: 400;
  margin-bottom: 18px;
}

.gold-line {
  width: 70px;
  height: 1px;
  margin: 0 auto 38px;
  background:
    linear-gradient(
      90deg,
      transparent,
      var(--gold),
      transparent
    );
}

.big-title {
  font-family: Georgia, serif;
  letter-spacing: .12em;
  font-size: 39px !important;
}

/* HERO */

.hero {
  min-height: 100vh;
  padding: 48px 18px 55px;
}

.wedding-title {
  position: relative;
  z-index: 5;
  text-align: center;
}

.wedding-write-wrap {
  position: relative;
  width: fit-content;
  margin: 0 auto;
  overflow: hidden;
  clip-path: inset(0 100% 0 0);
  animation:
    weddingWrite 2.8s
    cubic-bezier(.45, 0, .25, 1)
    .35s forwards;
}

.wedding-script {
  display: block;
  font-family:
    "Brush Script MT",
    "Segoe Script",
    cursive;
  font-size: clamp(66px, 18vw, 100px);
  font-style: italic;
  font-weight: 500;
  line-height: .9;
  color: var(--gold-light);
  transform: rotate(-4deg);
  text-shadow:
    0 0 5px rgba(240,219,130,.15);
}

@keyframes weddingWrite {
  0%   { clip-path: inset(0 100% 0 0); }
  15%  { clip-path: inset(0 88% 0 0); }
  35%  { clip-path: inset(0 65% 0 0); }
  55%  { clip-path: inset(0 43% 0 0); }
  75%  { clip-path: inset(0 20% 0 0); }
  100% { clip-path: inset(0 0 0 0); }
}

.invitation-title {
  display: block;
  margin-top: 10px;
  font-family: Georgia, serif;
  font-size: 18px;
  letter-spacing: .45em;
  color: var(--gold-light);
  opacity: 0;
  transform: translateY(8px);
  animation:
    invitationAppear .8s ease
    3s forwards;
}

@keyframes invitationAppear {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.hero-layout {
  position: relative;
  margin-top: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.mirror-wrap {
  position: relative;
  width: 68%;
}

.mirror-outer {
  width: 100%;
  aspect-ratio: 4 / 5;
  padding: 10px;
  border-radius:
    50% 50% 12% 12%
    / 40% 40% 8% 8%;
  border: 3px solid var(--gold);
  box-shadow:
    0 0 0 4px rgba(213,184,79,.24),
    0 0 22px rgba(213,184,79,.18);
}

.mirror-inner {
  width: 100%;
  height: 100%;
  padding: 5px;
  border-radius: inherit;
  border: 1px dotted var(--gold);
}

.main-photo {
  width: 100%;
  height: 100%;
  border-radius: inherit;
  background:
    url("images/main.jpg") center / cover no-repeat,
    linear-gradient(135deg, #8878aa, #4d376e);
  display: flex;
  align-items: center;
  justify-content: center;
  color: white;
  font-family: Arial, sans-serif;
  font-size: 11px;
  letter-spacing: .2em;
  overflow: hidden;
}

.date-stack {
  position: absolute;
  right: -2px;
  top: 12%;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  color: var(--gold-light);
  font-family: Georgia, serif;
}

.date-stack span {
  font-size: 41px;
  line-height: 1;
}

.date-stack i {
  width: 35px;
  height: 1px;
  background: var(--gold);
  position: relative;
}

.date-stack i::after {
  content: "◆";
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  font-size: 6px;
  background: var(--purple);
  padding: 2px;
}

.ornament {
  position: absolute;
  bottom: -24px;
  color: var(--gold);
  font-size: 62px;
  opacity: .82;
}

.ornament-left {
  left: -30px;
}

.ornament-right {
  right: -30px;
  transform: scaleX(-1);
}

.couple-name {
  margin-top: 42px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
  color: var(--gold-light);
  font-family: Georgia, serif;
  font-size: 25px;
  letter-spacing: .06em;
}

.couple-name b {
  font-size: 18px;
  font-style: italic;
  font-weight: 400;
}

.scroll-guide {
  margin-top: 32px;
  text-align: center;
  font-family: Arial, sans-serif;
  font-size: 8px;
  letter-spacing: .35em;
  color: rgba(255,255,255,.55);
}

.decor {
  position: absolute;
  color: var(--gold);
  opacity: .13;
  font-family: Georgia, serif;
  font-size: 150px;
  pointer-events: none;
}

.decor-left {
  top: 110px;
  left: -48px;
}

.decor-right {
  top: 12px;
  right: -40px;
}

.spark {
  position: absolute;
  color: var(--gold-light);
  opacity: .65;
  animation: twinkle 2s infinite alternate;
  filter:
    drop-shadow(0 0 5px rgba(240,219,130,.35));
}

.spark-1 {
  top: 37%;
  right: 8%;
}

.spark-2 {
  top: 29%;
  right: 22%;
}

.spark-3 {
  top: 45%;
  left: 6%;
}

@keyframes twinkle {
  from {
    opacity: .15;
    transform: scale(.7);
  }
  to {
    opacity: .9;
    transform: scale(1.25);
  }
}

/* MESSAGE */

.message {
  padding: 100px 38px;
  text-align: center;
}

.message p {
  position: relative;
  z-index: 2;
  font-size: 14px;
  line-height: 2.35;
  margin-bottom: 30px;
}

.message-lead {
  color: var(--gold-light);
  font-size: 16px !important;
}

.signature {
  margin-top: 48px;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  font-size: 12px;
  line-height: 2;
}

/* BIG DAY */

.bigday {
  padding: 85px 25px;
  text-align: center;
}

.big-photo {
  width: 100%;
  aspect-ratio: 4 / 5;
  border: 2px solid var(--gold);
  padding: 5px;
  background:
    url("images/bigday.jpg") center / cover no-repeat,
    linear-gradient(135deg, #917cb4, #4d3970);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: Arial, sans-serif;
  letter-spacing: .2em;
  overflow: hidden;
}

/* DETAILS */

.details {
  padding: 95px 34px;
  text-align: center;
}

.information {
  border-top: 1px solid rgba(213,184,79,.45);
}

.information > div {
  padding: 20px 5px;
  border-bottom: 1px solid rgba(213,184,79,.35);
}

.information span {
  display: block;
  font-family: Georgia, serif;
  font-size: 10px;
  letter-spacing: .25em;
  color: var(--gold);
}

.information p {
  margin-top: 4px;
  font-size: 14px;
}

/* PROFILE */

.profile {
  padding: 95px 28px;
  text-align: center;
}

.profile-card {
  margin-top: 48px;
  padding-bottom: 75px;
}

.profile-card:last-child {
  padding-bottom: 0;
}

.profile-mirror {
  margin: auto;
  width: 72%;
  max-width: 320px;
  aspect-ratio: 4 / 5;
  padding: 6px;
  border: 2px solid var(--gold);
  border-radius:
    48% 48% 8% 8%
    / 35% 35% 5% 5%;
  box-shadow:
    0 0 0 5px rgba(213,184,79,.15);
}

.profile-photo {
  width: 100%;
  height: 100%;
  border-radius: inherit;
  display: flex;
  align-items: center;
  justify-content: center;
  color: white;
  font-family: Arial, sans-serif;
  font-size: 10px;
  letter-spacing: .2em;
  overflow: hidden;
}

.groom-photo {
  background:
    url("images/groom.jpg") center / cover no-repeat,
    #5b477d;
}

.bride-photo {
  background:
    url("images/bride.jpg") center / cover no-repeat,
    #5b477d;
}

.profile-role {
  margin-top: 30px;
  color: var(--gold);
  font-family: Georgia, serif;
  letter-spacing: .3em;
  font-size: 10px;
}

.profile-card h3 {
  margin: 7px 0 22px;
  font-family: Georgia, serif;
  font-size: 32px;
  font-weight: 400;
  color: var(--gold-light);
}

.profile-card p {
  line-height: 2;
  font-size: 13px;
}

.profile-message {
  margin-top: 26px;
}

/* ACCESS */

.access {
  padding: 95px 28px;
  text-align: center;
}

.map {
  height: 300px;
  border: 1px solid var(--gold);
  background: rgba(255,255,255,.08);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 35px;
  font-family: Arial, sans-serif;
  letter-spacing: .2em;
  font-size: 11px;
}

.access h3 {
  color: var(--gold-light);
  font-size: 18px;
  font-weight: 400;
  margin-bottom: 10px;
}

.access p {
  font-size: 13px;
  line-height: 2;
}

/* RSVP */

.rsvp {
  padding: 100px 32px;
  text-align: center;
}

.rsvp p {
  font-size: 14px;
  line-height: 2.2;
}

.rsvp-button {
  display: block;
  margin-top: 45px;
  padding: 19px 20px;
  border: 1px solid var(--gold);
  color: var(--purple-dark);
  background:
    linear-gradient(
      135deg,
      #f6e59a,
      #cfae4f
    );
  font-size: 14px;
  letter-spacing: .12em;
  text-decoration: none;
  transition: .2s;
}

.rsvp-button:hover {
  transform: translateY(-2px);
  box-shadow:
    0 7px 20px rgba(0,0,0,.25);
}

/* FOOTER */

footer {
  background: #100829;
  text-align: center;
  padding: 60px 20px;
  color: var(--gold-light);
}

footer p {
  font-family: Georgia, serif;
  font-size: 20px;
  letter-spacing: .15em;
}

footer span {
  display: block;
  margin-top: 8px;
  color: rgba(255,255,255,.5);
  font-family: Georgia, serif;
  font-size: 11px;
}

/* REVEAL */

.reveal {
  opacity: 0;
  transform: translateY(30px);
  transition:
    opacity .85s ease,
    transform .85s ease;
}

.reveal.show {
  opacity: 1;
  transform: translateY(0);
}

.zoom-photo {
  animation:
    slowZoom 14s ease-in-out
    infinite alternate;
}

@keyframes slowZoom {
  from {
    background-size: 100%;
  }
  to {
    background-size: 108%;
  }
}

@media (max-width: 420px) {

  .hero {
    padding-left: 14px;
    padding-right: 14px;
  }

  .mirror-wrap {
    width: 72%;
  }

  .profile-mirror {
    width: 78%;
  }

  .date-stack span {
    font-size: 36px;
  }

  .wedding-script {
    font-size: 68px;
  }

  .couple-name {
    font-size: 22px;
  }

}
/* ===================================
   REAL HANDWRITING WEDDING
=================================== */

.wedding-svg {
  display: block;
  width: min(95%, 500px);
  margin: 0 auto -8px;
  overflow: visible;
}

.wedding-draw,
.wedding-fill {
  font-family:
    "Brush Script MT",
    "Segoe Script",
    cursive;

  font-size: 118px;
  font-style: italic;
  font-weight: 500;
}

/* 最初にペンの線だけを書く */
.wedding-draw {
  fill: transparent;

  stroke: var(--gold-light);
  stroke-width: 2.4;
  stroke-linecap: round;
  stroke-linejoin: round;

  stroke-dasharray: 1800;
  stroke-dashoffset: 1800;

  animation:
    drawWedding 3.4s
    cubic-bezier(.4, 0, .2, 1)
    .3s forwards;

  filter:
    drop-shadow(
      0 0 3px rgba(240, 219, 130, .25)
    );
}

/* 書き終わった後に文字を自然に塗る */
.wedding-fill {
  fill: var(--gold-light);
  stroke: none;

  opacity: 0;

  animation:
    fillWedding .65s ease
    3.25s forwards;
}

@keyframes drawWedding {

  0% {
    stroke-dashoffset: 1800;
  }

  100% {
    stroke-dashoffset: 0;
  }

}

@keyframes fillWedding {

  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }

}


/* Wedding完成後にINVITATION */
.invitation-title {
  display: block;

  margin-top: -3px;

  font-family: Georgia, serif;
  font-size: 18px;
  letter-spacing: .45em;

  color: var(--gold-light);

  opacity: 0;
  transform: translateY(7px);

  animation:
    invitationAfterWriting .8s ease
    3.65s forwards;
}

@keyframes invitationAfterWriting {

  to {
    opacity: 1;
    transform: translateY(0);
  }

}