@font-face {
  font-family: "Cormorant Garamond";
  src: url("../_assets/fonts/cormorant-garamond-variable.ttf") format("truetype");
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
}

@font-face {
  font-family: "Great Vibes";
  src: url("../_assets/fonts/great-vibes-regular.ttf") format("truetype");
  font-style: normal;
  font-weight: 400;
  font-display: swap;
}

@font-face {
  font-family: "Manrope";
  src: url("../_assets/fonts/noto-sans-variable.ttf") format("truetype");
  font-style: normal;
  font-weight: 300 500;
  font-display: swap;
}

:root {
      --paper: #f7f3eb;
      --paper-light: #fffdf8;
      --ink: #2c2b27;
      --olive: #66705a;
      --olive-dark: #273020;
      --sage: #9aa18d;
      --sand: #d8cfbe;
      --rose: #ae8277;
      --ivory: #fffaf0;
      --line: rgb(44 43 39 / 18%);
    }

    * { box-sizing: border-box; }

    html {
      scroll-behavior: smooth;
      background: #151b12;
    }

    body {
      margin: 0;
      min-height: 100%;
      color: var(--ink);
      background: #151b12;
      font-family: "Cormorant Garamond", Georgia, serif;
      overscroll-behavior: none;
    }

    body:not(.opened) { overflow: hidden; }

    button,
    input,
    textarea { font: inherit; }

    button,
    a { -webkit-tap-highlight-color: transparent; }

    img { display: block; max-width: 100%; }

    .invitation {
      position: relative;
      z-index: 1;
      width: 100%;
      min-height: 100svh;
      overflow-x: clip;
    }

    .invitation-background {
      position: fixed;
      z-index: 0;
      inset: 0;
      width: 100%;
      height: 100svh;
      overflow: hidden;
      pointer-events: none;
      background: #151b12;
      transform: translateZ(0);
    }

    .background-video,
    .background-shade {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
    }

    .background-video {
      z-index: 0;
      object-fit: cover;
      object-position: center;
    }

    .background-shade {
      z-index: 1;
      pointer-events: none;
      background:
        linear-gradient(180deg, rgb(6 11 5 / 38%) 0%, rgb(10 15 8 / 10%) 43%, rgb(6 10 5 / 52%) 100%),
        radial-gradient(circle at 50% 42%, transparent 18%, rgb(4 7 3 / 24%) 100%);
    }

    .cover {
      position: fixed;
      z-index: 20;
      inset: 0;
      display: grid;
      min-height: 100svh;
      padding: max(28px, env(safe-area-inset-top)) clamp(20px, 6vw, 64px) max(30px, env(safe-area-inset-bottom));
      color: var(--ivory);
      transition: transform 950ms cubic-bezier(.77, 0, .175, 1), opacity 700ms ease;
      will-change: transform;
    }

    .cover::before,
    .cover::after {
      position: absolute;
      content: "";
      z-index: -1;
      width: min(44vw, 320px);
      aspect-ratio: 1;
      border: 1px solid rgb(255 250 240 / 22%);
      border-radius: 100% 0 100% 0;
      pointer-events: none;
    }

    .cover::before { top: -18vw; left: -18vw; rotate: -18deg; }
    .cover::after { right: -22vw; bottom: -18vw; rotate: 18deg; }

    .invitation.open .cover {
      transform: translateX(105%);
      opacity: 0;
      pointer-events: none;
    }

    .cover-content {
      width: min(100%, 560px);
      min-height: calc(100svh - 58px);
      margin: 0 auto;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      align-items: center;
      text-align: center;
    }

    .cover-heading {
      margin-top: clamp(7vh, 11vh, 108px);
      animation: rise 1s .14s both;
    }

    .cover-title {
      margin: 0;
      font-family: "Great Vibes", "Segoe Script", cursive;
      font-size: clamp(4rem, 18vw, 7.6rem);
      font-weight: 400;
      line-height: .78;
      text-shadow: 0 4px 30px rgb(0 0 0 / 30%);
    }

    .opening-area {
      width: min(100%, 430px);
      animation: rise 1s .42s both;
    }

    .swipe-track {
      --progress: 0;
      --handle-x: calc(var(--progress) * (100% - 66px));
      position: relative;
      width: 100%;
      height: 68px;
      overflow: hidden;
      border: 1px solid rgb(255 255 255 / 76%);
      border-radius: 999px;
      background: rgb(255 255 255 / 9%);
      box-shadow: 0 14px 50px rgb(0 0 0 / 23%), inset 0 0 0 1px rgb(0 0 0 / 8%);
      backdrop-filter: blur(8px);
      -webkit-backdrop-filter: blur(8px);
    }

    .track-fill {
      position: absolute;
      inset: 0 auto 0 0;
      width: calc(66px + var(--progress) * (100% - 66px));
      background: linear-gradient(90deg, rgb(255 250 240 / 25%), rgb(255 250 240 / 11%));
    }

    .swipe-label {
      position: absolute;
      top: 50%;
      left: 51%;
      transform: translate(-50%, -50%);
      white-space: nowrap;
      font-family: Manrope, Arial, sans-serif;
      font-size: clamp(.82rem, 4vw, .96rem);
      font-weight: 300;
      opacity: calc(1 - var(--progress));
    }

    .chevrons {
      position: absolute;
      top: 50%;
      right: 16px;
      transform: translateY(-52%);
      font: 1.25rem Arial, sans-serif;
      letter-spacing: -.08em;
      animation: chevron-glow 1.8s ease-in-out infinite;
    }

    .swipe-handle {
      position: absolute;
      z-index: 2;
      top: 5px;
      left: 5px;
      display: grid;
      width: 56px;
      height: 56px;
      place-items: center;
      padding: 0;
      border: 0;
      border-radius: 50%;
      color: var(--olive-dark);
      background: var(--ivory);
      box-shadow: 0 5px 20px rgb(0 0 0 / 18%);
      cursor: grab;
      touch-action: none;
      transform: translateX(var(--handle-x));
      transition: transform 420ms cubic-bezier(.2, .8, .2, 1);
    }

    .swipe-track.dragging .swipe-handle { cursor: grabbing; transition: none; }
    .swipe-handle:focus-visible { outline: 3px solid white; outline-offset: 4px; }
    .swipe-handle span { font: 300 1.55rem Arial, sans-serif; transform: translateY(-1px); }

    .page-content {
      position: relative;
      z-index: 2;
      opacity: 0;
      visibility: hidden;
      transition: opacity 850ms .25s ease;
    }

    .invitation.open .page-content { opacity: 1; visibility: visible; }

    .hero {
      min-height: 100svh;
      display: grid;
      place-items: center;
      padding: max(38px, env(safe-area-inset-top)) 22px max(34px, env(safe-area-inset-bottom));
      color: var(--ivory);
      text-align: center;
    }

    .hero-inner { width: min(100%, 760px); }

    .hero-names {
      margin: 0;
      font-family: "Great Vibes", "Segoe Script", cursive;
      font-size: clamp(4.6rem, 20vw, 9.5rem);
      font-weight: 400;
      line-height: .76;
      text-shadow: 0 4px 34px rgb(0 0 0 / 34%);
    }

    .hero-ampersand { display: block; margin: .16em 0 .08em; font-size: .58em; }

    .hero-date {
      margin: clamp(34px, 6vh, 54px) 0 0;
      font-family: Manrope, Arial, sans-serif;
      font-size: clamp(.76rem, 3vw, .95rem);
      font-weight: 300;
      letter-spacing: .27em;
      text-transform: uppercase;
    }

    .scroll-cue {
      margin-top: 44px;
      display: inline-grid;
      gap: 8px;
      justify-items: center;
      color: inherit;
      text-decoration: none;
      font: 300 .66rem Manrope, Arial, sans-serif;
      letter-spacing: .16em;
      text-transform: uppercase;
      opacity: .72;
    }

    .scroll-cue::after { content: "↓"; font-size: 1.2rem; animation: soft-bounce 1.8s infinite; }

    .paper-section { background: rgb(247 243 235 / 64%); }
    .light-section { background: rgb(255 253 248 / 58%); }
    .dark-section { color: var(--ivory); background: rgb(39 48 32 / 70%); }

    .section-shell {
      width: min(100% - 40px, 1120px);
      margin: 0 auto;
      padding: clamp(76px, 11vw, 138px) 0;
    }

    .section-heading { max-width: 760px; margin: 0 auto 50px; text-align: center; }

    .section-kicker {
      margin: 0 0 13px;
      font-family: Manrope, Arial, sans-serif;
      font-size: .7rem;
      font-weight: 400;
      letter-spacing: .25em;
      text-transform: uppercase;
      color: var(--olive);
    }

    .dark-section .section-kicker { color: var(--sand); }

    .section-title {
      margin: 0;
      font-size: clamp(2.6rem, 8vw, 5.2rem);
      font-weight: 500;
      line-height: .92;
      text-wrap: balance;
    }

    .script-heading {
      font-family: "Great Vibes", "Segoe Script", cursive;
      font-size: clamp(3.8rem, 12vw, 7.4rem);
      font-weight: 400;
      line-height: .82;
    }

    .section-lead {
      max-width: 680px;
      margin: 24px auto 0;
      font-size: clamp(1.18rem, 3vw, 1.55rem);
      line-height: 1.4;
      text-wrap: balance;
    }

    .story-layout {
      display: grid;
      grid-template-columns: minmax(0, 1.1fr) minmax(270px, .8fr);
      gap: clamp(42px, 8vw, 94px);
      align-items: center;
    }

    .photo-collage {
      position: relative;
      min-height: 540px;
    }

    .photo-card {
      position: absolute;
      overflow: hidden;
      padding: 8px;
      background: #fff;
      box-shadow: 0 24px 65px rgb(55 49 41 / 17%);
    }

    .photo-card img { width: 100%; height: 100%; object-fit: cover; filter: saturate(.78) contrast(1.03); }
    .photo-one { top: 0; left: 7%; width: 44%; height: 410px; transform: rotate(-3deg); }
    .photo-two { top: 105px; right: 2%; width: 50%; height: 430px; transform: rotate(2.5deg); }

    .story-copy { text-align: left; }
    .story-copy .script-heading { margin: 0 0 26px; color: var(--olive-dark); }
    .story-copy p { margin: 0 0 18px; font-size: clamp(1.2rem, 2.6vw, 1.55rem); line-height: 1.45; }
    .story-signature { margin-top: 30px !important; font-family: "Great Vibes", "Segoe Script", cursive; font-size: 2.4rem !important; color: var(--olive); }

    .calendar-section {
      min-height: 100svh;
      display: grid;
      place-items: center;
      color: var(--ivory);
      background: transparent;
    }

    .calendar-section .section-shell {
      min-height: 100svh;
      display: grid;
      place-items: center;
    }

    .calendar-card {
      width: min(100%, 680px);
      margin: 0 auto;
      padding: 0;
      border: 0;
      color: var(--ivory);
      background: transparent;
      box-shadow: none;
      text-shadow: 0 2px 22px rgb(0 0 0 / 32%);
    }

    .calendar-month {
      margin: 0 0 30px;
      text-align: center;
      font-size: clamp(2.8rem, 8vw, 5.4rem);
      font-weight: 500;
      letter-spacing: .08em;
      text-transform: uppercase;
    }

    .calendar-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8px 4px; text-align: center; }
    .weekday { padding-bottom: 10px; font: 400 .68rem Manrope, Arial, sans-serif; letter-spacing: .1em; color: rgb(255 250 240 / 72%); }
    .calendar-day { position: relative; display: grid; height: 44px; place-items: center; font: 300 1rem Manrope, Arial, sans-serif; color: rgb(255 250 240 / 86%); }
    .calendar-day.muted { color: transparent; }
    .calendar-day.weekend { color: #e2b5aa; }
    .calendar-day.wedding-day { z-index: 1; color: white; font-weight: 500; }
    .calendar-day.wedding-day::before {
      position: absolute;
      z-index: -1;
      content: "♡";
      top: 50%;
      left: 50%;
      color: #f0beb4;
      font: 400 3.3rem Arial, sans-serif;
      transform: translate(-50%, -50%) rotate(-8deg);
    }

    .venue-name { margin: 0; font-size: clamp(2rem, 5vw, 3.3rem); font-weight: 500; line-height: 1; }
    .venue-address { margin: 17px 0 0; font: 300 clamp(.9rem, 2vw, 1.05rem)/1.6 Manrope, Arial, sans-serif; color: #60605a; }

    .venue-section { background: rgb(247 243 235 / 62%); }

    .venue-card {
      width: min(100%, 790px);
      margin: 0 auto;
      padding: clamp(52px, 9vw, 96px) clamp(24px, 8vw, 88px);
      border: 1px solid rgb(39 48 32 / 28%);
      border-radius: 360px 360px 28px 28px;
      text-align: center;
      background: rgb(255 253 248 / 76%);
      box-shadow: 0 32px 90px rgb(45 40 33 / 12%);
      backdrop-filter: blur(5px);
      -webkit-backdrop-filter: blur(5px);
    }

    .venue-card .venue-name { margin-top: 20px; }
    .venue-card .venue-address { font-size: clamp(.92rem, 2vw, 1.08rem); }
    .venue-card .text-link { margin-left: auto; margin-right: auto; }

    .text-link {
      display: inline-flex;
      margin-top: 28px;
      padding: 12px 0 8px;
      border-bottom: 1px solid currentColor;
      color: var(--olive-dark);
      text-decoration: none;
      font: 400 .73rem Manrope, Arial, sans-serif;
      letter-spacing: .16em;
      text-transform: uppercase;
    }

    .dresscode-board {
      display: grid;
      grid-template-columns: minmax(300px, .84fr) minmax(330px, 1fr);
      gap: clamp(42px, 7vw, 88px);
      align-items: center;
    }

    .dresscode-image {
      overflow: hidden;
      height: min(100svh, 940px);
      padding: 7px;
      border-radius: 260px 260px 22px 22px;
      background: rgb(255 255 255 / 82%);
      box-shadow: 0 30px 90px rgb(45 40 33 / 16%);
    }

    .dresscode-image img { width: 100%; height: 100%; object-fit: cover; object-position: center; border-radius: inherit; }
    .dresscode-copy { position: relative; padding: clamp(30px, 5vw, 58px); border-left: 1px solid rgb(39 48 32 / 25%); text-align: left; }
    .dresscode-copy::before { position: absolute; content: ""; top: 0; left: -5px; width: 9px; height: 9px; border: 1px solid var(--olive); border-radius: 50%; background: var(--paper); }
    .dresscode-copy h3 { margin: 0 0 34px; font: 400 clamp(3.2rem, 7vw, 5.6rem)/.88 "Great Vibes", "Segoe Script", cursive; color: var(--olive-dark); }
    .dresscode-copy p { margin: 0; font-size: clamp(1.15rem, 2.4vw, 1.42rem); line-height: 1.55; }

    .dresscode-group { padding: 0 0 26px; }
    .dresscode-group + .dresscode-group { padding-top: 26px; border-top: 1px solid rgb(39 48 32 / 16%); }
    .dresscode-group h4 { margin: 0 0 10px; font: 500 1.65rem "Cormorant Garamond", Georgia, serif; color: var(--olive-dark); }

    .palette { margin-top: 34px; display: flex; flex-wrap: wrap; gap: 17px; }
    .color-chip { display: grid; justify-items: center; gap: 8px; font: 300 .58rem Manrope, Arial, sans-serif; letter-spacing: .08em; text-transform: uppercase; color: #63625c; }
    .color-chip i { display: block; width: 48px; height: 48px; border: 1px solid rgb(0 0 0 / 8%); border-radius: 50%; box-shadow: inset 0 0 0 4px rgb(255 255 255 / 35%); }

    .wish-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
    .wish-card {
      position: relative;
      min-height: 330px;
      padding: clamp(28px, 4vw, 44px);
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      border: 1px solid rgb(255 250 240 / 24%);
      border-radius: 160px 160px 18px 18px;
      background: rgb(255 255 255 / 5%);
      overflow: hidden;
      transition: transform .45s ease, background .45s ease;
    }

    .wish-card:hover { transform: translateY(-8px); background: rgb(255 255 255 / 9%); }
    .wish-visual { position: relative; width: 112px; height: 112px; margin: 0 auto 23px; color: var(--sand); }
    .wish-card.visible .wish-visual,
    .wish-card.is-motion-visible .wish-visual { animation: wish-float 3.8s ease-in-out infinite; animation-delay: var(--delay, 0s); }

    .wish-visual.bottle-art { width: 104px; height: 132px; }
    .wish-bottle-image { width: 100%; height: 100%; object-fit: contain; opacity: .94; }

    .gift-box { position: absolute; left: 22px; bottom: 18px; width: 70px; height: 54px; border: 1.5px solid currentColor; }
    .gift-box::before { position: absolute; content: ""; left: -7px; top: -13px; width: 82px; height: 14px; border: 1.5px solid currentColor; }
    .gift-box::after { position: absolute; content: ""; left: 32px; top: -13px; width: 8px; height: 66px; border-left: 1.5px solid currentColor; border-right: 1.5px solid currentColor; }
    .gift-bow::before,
    .gift-bow::after { position: absolute; content: ""; top: 14px; width: 25px; height: 17px; border: 1.5px solid currentColor; border-radius: 70% 20% 70% 20%; }
    .gift-bow::before { left: 31px; transform: rotate(28deg); }
    .gift-bow::after { right: 31px; transform: scaleX(-1) rotate(28deg); }

    .quiet-heart { position: absolute; inset: 0; display: grid; place-items: center; font: 400 5.8rem/1 Arial, sans-serif; }
    .quiet-heart::before,
    .quiet-heart::after { position: absolute; content: ""; border: 1px solid currentColor; border-radius: 50%; opacity: .38; animation: heart-ring 2.8s ease-out infinite; }
    .quiet-heart::before { width: 84px; height: 84px; }
    .quiet-heart::after { width: 104px; height: 104px; animation-delay: 1.4s; }
    .wish-card h3 { margin: 0 0 15px; text-align: center; font-size: 2rem; font-weight: 500; }
    .wish-card p { margin: 0; text-align: center; font-size: 1.12rem; line-height: 1.45; color: rgb(255 250 240 / 82%); }

    .rsvp-wrap { display: grid; grid-template-columns: minmax(250px, .62fr) minmax(0, 1.1fr); gap: clamp(44px, 8vw, 100px); align-items: start; }
    .rsvp-intro { position: sticky; top: 30px; }
    .rsvp-intro .script-heading { margin: 0 0 26px; color: var(--olive-dark); }
    .rsvp-intro p { margin: 0; font-size: 1.28rem; line-height: 1.45; }

    .rsvp-form {
      padding: clamp(25px, 5vw, 52px);
      border: 1px solid var(--line);
      background: var(--paper-light);
      box-shadow: 0 28px 80px rgb(55 49 41 / 9%);
    }

    .field-group { margin: 0 0 32px; padding: 0; border: 0; }
    .field-title,
    .field-label { display: block; margin: 0 0 12px; font: 400 .69rem Manrope, Arial, sans-serif; letter-spacing: .15em; text-transform: uppercase; color: #56564f; }

    .text-input,
    .text-area {
      width: 100%;
      padding: 15px 0;
      border: 0;
      border-bottom: 1px solid #aaa79e;
      border-radius: 0;
      outline: 0;
      color: var(--ink);
      background: transparent;
      font-size: 1.25rem;
      transition: border-color .25s ease;
    }

    .text-input:focus,
    .text-area:focus { border-color: var(--olive-dark); }
    .text-area { min-height: 110px; resize: vertical; }

    .choice-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 9px; }
    .choice,
    .check-choice { position: relative; }
    .choice input,
    .check-choice input { position: absolute; opacity: 0; pointer-events: none; }
    .choice span,
    .check-choice span {
      min-height: 100%;
      display: grid;
      place-items: center;
      padding: 13px 10px;
      border: 1px solid #c9c5bc;
      text-align: center;
      font: 300 .76rem/1.35 Manrope, Arial, sans-serif;
      cursor: pointer;
      transition: color .25s ease, background .25s ease, border-color .25s ease;
    }

    .choice input:checked + span,
    .check-choice input:checked + span { border-color: var(--olive-dark); color: white; background: var(--olive-dark); }
    .choice input:focus-visible + span,
    .check-choice input:focus-visible + span { outline: 2px solid var(--olive); outline-offset: 2px; }
    .drink-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 9px; }

    .family-fields { display: block; margin-top: 24px; }

    .submit-button {
      width: 100%;
      min-height: 58px;
      border: 1px solid var(--olive-dark);
      color: white;
      background: var(--olive-dark);
      font: 400 .72rem Manrope, Arial, sans-serif;
      letter-spacing: .14em;
      text-transform: uppercase;
      cursor: pointer;
      transition: color .3s ease, background .3s ease;
    }

    .submit-button:hover { color: var(--olive-dark); background: transparent; }
    .form-status { min-height: 22px; margin: 16px 0 0; text-align: center; font-size: 1rem; color: var(--olive-dark); }
    .form-status a { color: inherit; }

    .countdown-section { text-align: center; }
    .countdown-section .section-shell { padding-top: clamp(80px, 12vw, 145px); padding-bottom: clamp(80px, 12vw, 145px); }
    .countdown { width: min(100%, 820px); margin: 52px auto 0; display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
    .countdown-item { padding: 28px 10px 24px; border-top: 1px solid rgb(255 250 240 / 34%); border-bottom: 1px solid rgb(255 250 240 / 34%); }
    .countdown-value { display: block; font-size: clamp(2.7rem, 8vw, 5.2rem); font-weight: 400; line-height: 1; }
    .countdown-label { display: block; margin-top: 9px; font: 300 .64rem Manrope, Arial, sans-serif; letter-spacing: .18em; text-transform: uppercase; opacity: .72; }

    .final-section {
      position: relative;
      min-height: 92svh;
      display: grid;
      place-items: center;
      padding: 80px 22px;
      overflow: hidden;
      color: white;
      background: rgb(31 40 27 / 78%);
    }

    .final-layout {
      position: relative;
      z-index: 1;
      width: min(100%, 1060px);
      display: grid;
      grid-template-columns: minmax(270px, 420px) minmax(320px, 1fr);
      gap: clamp(44px, 8vw, 100px);
      align-items: center;
    }

    .final-photo {
      margin: 0;
      padding: 8px;
      display: grid;
      place-items: center;
      border: 1px solid rgb(255 255 255 / 35%);
      background: rgb(255 255 255 / 8%);
      box-shadow: 0 30px 80px rgb(0 0 0 / 24%);
    }

    .final-photo img { display: block; width: auto; max-width: 100%; height: min(74svh, 720px); object-fit: contain; }

    .final-inner { width: min(100%, 620px); text-align: left; }
    .final-inner .script-heading { margin: 0 0 26px; }
    .final-copy { margin: 0; max-width: 620px; font-size: clamp(1.2rem, 3vw, 1.55rem); line-height: 1.45; text-wrap: balance; }
    .organizer { width: min(100%, 400px); margin: 42px 0 0; padding: 24px 0; border-top: 1px solid rgb(255 255 255 / 35%); border-bottom: 1px solid rgb(255 255 255 / 35%); }
    .organizer span { display: block; font: 300 .65rem Manrope, Arial, sans-serif; letter-spacing: .2em; text-transform: uppercase; opacity: .72; }
    .organizer strong { display: block; margin-top: 8px; font-size: 1.55rem; font-weight: 500; }
    .organizer a { display: inline-block; margin-top: 8px; color: white; text-decoration: none; font: 300 .9rem Manrope, Arial, sans-serif; letter-spacing: .08em; }
    .replay-button { margin-top: 42px; padding: 10px 0; border: 0; color: white; background: transparent; font: 300 .67rem Manrope, Arial, sans-serif; letter-spacing: .15em; text-transform: uppercase; cursor: pointer; opacity: .72; }

    .reveal { opacity: 1; transform: none; transition: opacity .85s ease, transform .85s ease; }
    body.motion-ready:not(.motion-reduced) .reveal[data-motion-reveal] { opacity: 0; transform: translateY(28px); }
    body.motion-ready .reveal[data-motion-reveal].is-motion-visible { opacity: 1; transform: translateY(0); }

    @keyframes rise { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
    @keyframes chevron-glow { 0%, 100% { opacity: .22; transform: translate(-3px, -52%); } 50% { opacity: .62; transform: translate(2px, -52%); } }
    @keyframes soft-bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(6px); } }
    @keyframes reveal-field { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: translateY(0); } }
    @keyframes wish-float { 0%, 100% { transform: translateY(0) rotate(-1deg); } 50% { transform: translateY(-7px) rotate(1deg); } }
    @keyframes heart-ring { 0% { transform: scale(.7); opacity: .45; } 80%, 100% { transform: scale(1.18); opacity: 0; } }

    @media (max-width: 820px) {
      .story-layout,
      .dresscode-board,
      .rsvp-wrap { grid-template-columns: 1fr; }
      .story-copy,
      .dresscode-copy,
      .rsvp-intro { text-align: center; }
      .story-copy { max-width: 600px; margin: 0 auto; }
      .photo-collage { min-height: 485px; }
      .photo-one { left: 5%; width: 48%; height: 360px; }
      .photo-two { right: 4%; width: 52%; height: 390px; }
      .dresscode-copy { max-width: 620px; margin: 0 auto; padding-left: 10px; padding-right: 10px; border-top: 1px solid rgb(39 48 32 / 25%); border-left: 0; }
      .dresscode-copy::before { top: -5px; left: 50%; transform: translateX(-50%); }
      .dresscode-image { width: min(100%, 560px); height: 100svh; margin: 0 auto; }
      .palette { justify-content: center; }
      .wish-grid { grid-template-columns: 1fr; max-width: 560px; margin: 0 auto; }
      .wish-card { min-height: 270px; }
      .rsvp-intro { position: static; }
      .final-layout { grid-template-columns: 1fr; justify-items: center; }
      .final-inner { text-align: center; }
      .organizer { margin-left: auto; margin-right: auto; }
    }

    @media (max-width: 560px) {
      .cover-heading { margin-top: 9vh; }
      .section-shell { width: min(100% - 32px, 1120px); }
      .hero-names { font-size: clamp(4.4rem, 22vw, 7rem); }
      .photo-collage { min-height: 435px; }
      .photo-card { padding: 5px; }
      .photo-one { top: 0; left: 2%; width: 53%; height: 320px; }
      .photo-two { top: 82px; right: 2%; width: 55%; height: 350px; }
      .calendar-card { padding-left: 4px; padding-right: 4px; }
      .weekday { font-size: .58rem; letter-spacing: .04em; }
      .calendar-day { height: 36px; font-size: .83rem; }
      .choice-grid { grid-template-columns: 1fr; }
      .drink-grid { grid-template-columns: 1fr 1fr; }
      .countdown { grid-template-columns: repeat(2, 1fr); }
      .final-section { min-height: 88svh; }
      .final-photo { width: min(100%, 390px); }
      .final-photo img { width: 100%; height: auto; }
    }

    @media (max-height: 680px) {
      .cover-heading { margin-top: 3vh; }
      .cover-title { font-size: clamp(3.3rem, 14vw, 5.5rem); }
    }

    @media (prefers-reduced-motion: reduce) {
      *, *::before, *::after {
        scroll-behavior: auto !important;
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .01ms !important;
      }
      .reveal { opacity: 1; transform: none; }
      .background-image { animation: none; }
    }
