@font-face {
  font-family: "iCiel BC Cubano";
  src: url('/fonts/iCielBCCubano-Normal.otf') format('opentype');
  font-style: normal;
  font-weight: 400;
  font-display: swap;
}

/* Modern countryside: clear Vietnamese typography, field photography, quiet rice details. */
:root {
  --serif: "Manrope", "Be Vietnam Pro", sans-serif;
  --ivory: #f5f3e9;
  --paper: #fcfbf5;
  --jade-100: #e9ede3;
  --muted: #5e6b61;
  --shadow: 0 18px 44px rgba(16,45,40,.09);
}
body {font-weight:400;-webkit-font-smoothing:antialiased}
#gateTitle,.hero-title,.couple-names,.gift-box-name,.footer-title-wrap h2 {
  font-family:"iCiel BC Cubano","Be Vietnam Pro",sans-serif;
  font-weight:400;
}
.eyebrow {font-size:.7rem;letter-spacing:.19em;font-weight:500;margin-bottom:22px}
.section {padding:clamp(72px,8vw,116px) 0}
.section-heading h2,.intro-copy h2,.story-sticky h2,.gift-copy h2,.wishes-copy h2 {
  font-size:clamp(2.25rem,4vw,3.7rem);font-weight:500;line-height:1.23;letter-spacing:-.03em;
}
.section-heading p:last-child,.story-sticky p:last-child,.wishes-copy p:last-child {line-height:1.9}
.gate-card {grid-template-columns:1fr 1fr;min-height:600px;max-width:960px;border-radius:4px;box-shadow:0 32px 100px #09251f66}
.gate-photo {min-height:600px}
.gate-content {position:relative;padding:48px;border:0;background:var(--paper)}
.gate-content::after {content:"";position:absolute;right:-8px;bottom:105px;width:65px;height:110px;background:url('/rice.svg') center/contain no-repeat;opacity:.32;pointer-events:none}
.monogram {border-radius:0;width:auto;height:auto;border:0;font-size:.85rem;letter-spacing:.18em;margin-bottom:34px;color:var(--jade-800)}
.gate-content h1 {font-size:clamp(2.7rem,4.4vw,4rem);line-height:1.15;letter-spacing:-.04em;font-weight:500}
.gate-content h1 span {font-size:.46em;line-height:1.6;margin:5px 0;font-weight:400}
.gate-date {font-size:.75rem;letter-spacing:.16em;border-block:1px solid var(--line);padding:15px 0;margin:26px 0 20px}
.gate-guest {font-size:.8rem;margin-bottom:24px}
.gate-guest strong {font-family:var(--sans);font-size:.95rem;font-weight:500;margin-top:8px}
.open-invitation {min-height:52px;border-radius:4px;text-transform:none;font-size:.85rem;letter-spacing:.02em;font-weight:500}
.hero {min-height:850px;min-height:100svh;align-items:center}
.hero-media {background-image:var(--landscape-photo);background-position:center 65%;transform:none}
.hero-media::after {background:linear-gradient(90deg,rgba(10,33,24,.78),rgba(10,33,24,.28)),linear-gradient(0deg,rgba(10,33,24,.35),transparent 65%)}
.hero-content {padding:170px 0 100px}
.hero-grid {grid-template-columns:minmax(0,1fr) minmax(260px,350px);grid-template-rows:auto auto;column-gap:80px;row-gap:34px;align-items:center}
.hero-title {grid-column:1;grid-row:1;align-self:end;font-weight:400;font-size:clamp(4rem,7.5vw,7.1rem);line-height:1.15;letter-spacing:-.04em}
.hero-title em {font-style:normal;font-weight:400;line-height:1.2;margin:6px 0 0;color:#e6d5a7}
.hero-side {grid-column:1;grid-row:2;align-self:start;max-width:440px}
.hero-side p {font-size:.9rem;line-height:1.95;color:#f2f0e6;margin-bottom:28px}
.hero-portrait {grid-column:2;grid-row:1/3;margin:0;align-self:center;padding:10px 10px 0;border:1px solid #e9e2ca70;background:#f7f4e912;backdrop-filter:blur(5px);transform:rotate(2deg)}
.hero-portrait img {aspect-ratio:4/5;object-fit:cover}
.hero-portrait figcaption {font-size:.7rem;text-align:center;letter-spacing:.08em;padding:16px 8px;color:#fff6df}
.hero-logo {font-weight:500;font-size:1rem}
.hero-nav {align-items:flex-start}
.hero-nav time.date-seal {width:156px;min-width:156px;flex:0 0 156px;margin:0;padding:0;background:rgba(252,251,245,.82);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:var(--ink);font-size:1rem;letter-spacing:normal}
.hero-nav time[hidden] {display:none}
.hero-nav time.date-seal span {font-size:.6rem;letter-spacing:.1em}
.hero-nav time.date-seal strong {font-size:3.3rem;line-height:1.45}
.scroll-link {text-transform:none;font-size:.8rem;letter-spacing:.02em;border-bottom:1px solid #ede9dc88;padding-bottom:10px}
.quick-nav {padding:8px 20px;background:#f5f3e9f5;gap:44px}
.quick-nav a {font-size:.78rem;transition:color .2s}
.quick-nav a:hover {color:#91713b}
.intro {position:relative}
.intro::before {content:"";position:absolute;left:2%;bottom:32px;width:110px;height:185px;background:url('/rice.svg') center/contain no-repeat;opacity:.3;pointer-events:none}
.intro-grid {grid-template-columns:1fr 1.05fr;gap:80px}
.couple-names {font-family:var(--sans);font-size:.82rem;font-weight:500;color:var(--muted);margin:0 0 26px;line-height:1.8}
.intro-copy .quote {font-family:var(--sans);font-size:.96rem;font-style:normal;line-height:1.95}
.personal-invite {padding-left:18px}
.personal-invite span {font-size:.67rem;letter-spacing:.12em}
.personal-invite strong {font-family:var(--sans);font-size:1rem;font-weight:500;margin-top:10px}
.intro-visual {min-height:540px}
.intro-main {width:85%;border-radius:3px;overflow:hidden}
.intro-small {width:47%;height:43%;border-width:8px;transform:rotate(-3deg);border-radius:3px}
.vertical-note {font-size:.6rem;letter-spacing:.17em;left:0}
.events-top {margin-bottom:42px}
.date-seal {border-radius:5px;background:var(--paper);border-color:transparent;flex-basis:156px;box-shadow:0 8px 30px #183c3508}
.date-seal strong {font-size:3.3rem;font-weight:500;line-height:1.45;letter-spacing:-.06em}
.date-seal span {font-size:.6rem;letter-spacing:.1em;padding-inline:8px}
.event-row {padding:30px 0;grid-template-columns:135px 1fr 1fr auto}
.event-time {font-size:1.6rem;font-weight:500;letter-spacing:-.04em}
.event-time small {font-size:.65rem;letter-spacing:0}
.event-name h3 {font-size:1.2rem;font-weight:500;letter-spacing:-.025em;margin-bottom:8px}
.event-name span,.event-place address,.event-place strong {font-size:.8rem;line-height:1.8}
.map-link,.text-button {font-size:.75rem;text-transform:none;letter-spacing:.015em}
.countdown {min-height:500px}
.countdown-content h2 {font-size:clamp(2.2rem,4.5vw,4rem);line-height:1.3;letter-spacing:-.05em;font-weight:400}
.countdown-item strong {font-size:clamp(2.5rem,5vw,4.2rem);font-weight:400;letter-spacing:-.06em;line-height:1.5;font-variant-numeric:tabular-nums}
.countdown-item span {font-size:.67rem}
.gallery-head {gap:65px}
.gallery-note {font-size:.87rem;line-height:1.9}
.gallery-item {border-radius:3px}
.gallery-more {font-size:.75rem}
.timeline-item {grid-template-columns:75px 1fr;gap:24px;padding:32px 0}
.timeline-item time {font-size:.95rem;font-weight:500;color:var(--jade-800);letter-spacing:-.02em;padding-top:4px}
.timeline-item h3 {font-size:1.3rem;line-height:1.5;letter-spacing:-.025em;font-weight:500}
.timeline-item p {font-size:.85rem;line-height:1.9}
.timeline-photo {border-radius:3px;height:260px}
.field-quote {min-height:530px}
.field-quote blockquote {font-size:clamp(1.7rem,3.4vw,3.1rem);line-height:1.5;letter-spacing:-.045em;max-width:900px}
.gift-copy p {font-size:.95rem;line-height:1.9}
.gift-open {border-radius:4px;text-transform:none;letter-spacing:0;font-size:.85rem}
.wish-form {border:1px solid var(--line);border-radius:7px;padding:36px;box-shadow:0 15px 50px #183c3505}
.field label {font-size:.78rem;font-weight:500;letter-spacing:0;text-transform:none}
.field input,.field textarea,.field select {border:1px solid #183c3530;border-radius:4px;background:#fffef9;padding:13px 14px;min-height:48px}
.field input:focus-visible,.field textarea:focus-visible,.field select:focus-visible {outline:2px solid var(--jade-800);outline-offset:2px}
.submit-wish {border-radius:4px;font-size:.85rem;font-weight:500;text-transform:none;letter-spacing:.015em}
.wish-head strong {font-size:.95rem;font-weight:500}
.footer {min-height:480px}
.footer-content p {font-size:.7rem;letter-spacing:.13em}
.footer-content h2 {font-size:clamp(4rem,9vw,8rem);font-weight:400;letter-spacing:-.07em;line-height:1.3}
.gift-dialog-info h3 {font-size:1.7rem;line-height:1.3;letter-spacing:-.03em}
.gift-thankyou {max-width:360px;margin:-4px auto 24px;color:var(--muted);font:400 .78rem/1.8 var(--sans);text-wrap:pretty}
.account-name {font-size:1rem;line-height:1.7}
@media(max-width:1100px) {
  .hero-grid {column-gap:40px;grid-template-columns:minmax(0,1fr) 280px}
  .hero-title {font-size:clamp(3.6rem,7.6vw,6rem)}
  .intro-grid {gap:40px}
}
@media(max-width:900px) {
  .gate-card {grid-template-columns:1fr;max-width:460px;min-height:0}
  .gate-photo {min-height:190px;background-position:center 55%}
  .gate-content {padding:30px 40px}
  .monogram {margin-bottom:20px}
  .gate-content h1 {font-size:2.8rem}
  .gate-date {margin-top:20px;padding:12px 0}
  .intro-grid {grid-template-columns:1fr;gap:46px}
  .intro-visual {min-height:580px}
  .hero-grid {grid-template-columns:minmax(0,1fr) 230px;gap:24px}
  .hero-title {font-size:3.8rem}
  .hero-side p {font-size:.84rem}
  .event-row {grid-template-columns:95px 1fr 1fr}
}
@media(max-width:620px) {
  .gate {padding:18px}
  .gate-card {max-height:calc(100svh - 36px)}
  .gate-photo {min-height:140px}
  .gate-content {padding:26px 28px}
  .gate-content h1 {font-size:2.55rem}
  .gate-content h1 span {margin:0;line-height:1.4}
  .gate-content .eyebrow {font-size:.6rem;margin-bottom:16px}
  .gate-date {font-size:.65rem;margin:18px 0 14px;padding:11px 0}
  .gate-guest {margin-bottom:20px;font-size:.74rem}
  .gate-guest strong {font-size:.85rem}
  .monogram {margin-bottom:18px;font-size:.7rem}
  .hero-content {padding:160px 0 65px}
  .hero-grid {grid-template-columns:minmax(0,1fr);gap:25px}
  .hero-title {font-size:clamp(3rem,13vw,4.8rem);line-height:1.16;grid-column:1;grid-row:1}
  .hero-title em {margin-top:0}
  .hero-portrait {grid-column:1;grid-row:2;width:156px;padding:6px 6px 0;justify-self:end;margin-top:-5px;margin-right:8px;transform:rotate(3deg)}
  .hero-portrait img {aspect-ratio:5/4}
  .hero-portrait figcaption {font-size:.51rem;padding:8px 0;letter-spacing:.04em}
  .hero-side {grid-row:3;max-width:300px;margin-top:-10px}
  .hero-side p {font-size:.83rem;margin-bottom:19px}
  .quick-nav {gap:23px;padding:6px 12px}
  .quick-nav a {font-size:.65rem}
  .section-heading h2,.intro-copy h2,.story-sticky h2,.gift-copy h2,.wishes-copy h2 {font-size:2.25rem;line-height:1.25;letter-spacing:-.03em}
  .intro-visual {min-height:420px}
  .intro-copy .quote {font-size:.9rem}
  .intro::before {display:none}
  .intro-small {width:49%}
  .events-top {display:flex;align-items:flex-start;gap:18px;margin-bottom:32px}
  .events-top h2 {font-size:1.85rem}
  .events-top .eyebrow {font-size:.58rem;letter-spacing:.1em}
  .date-seal {flex-basis:105px;min-width:105px;margin-top:0;width:105px}
  .date-seal strong {font-size:2.4rem;line-height:1.3}
  .date-seal span {font-size:.48rem;letter-spacing:.03em}
  .event-row {grid-template-columns:80px minmax(0,1fr);gap:12px 18px;padding:26px 0}
  .event-time {font-size:1.25rem;align-self:start}
  .event-time small {font-size:.6rem}
  .event-name h3 {font-size:1.1rem}
  .event-place {grid-column:2}
  .countdown {min-height:440px}
  .countdown-content h2 {font-size:2rem}
  .countdown-item strong {font-size:2.6rem}
  .gallery-head {margin-bottom:30px}
  .gallery-note {font-size:.82rem}
  .timeline-item {grid-template-columns:52px minmax(0,1fr);gap:16px}
  .timeline-item h3 {font-size:1.1rem}
  .timeline-photo {height:200px}
  .field-quote {min-height:440px}
  .field-quote blockquote {font-size:1.65rem}
  .wish-form {padding:24px 20px}
  .footer {min-height:400px}
  .footer-content p {font-size:.58rem;letter-spacing:.1em}
}
@media(prefers-reduced-motion:reduce) {.hero-portrait{transform:none}}

/* Cinematic invitation and photo-led hero */
.gate {isolation:isolate;background:#0b2e28;transition:opacity .42s ease-in,visibility .42s ease-in}
.gate::before {filter:saturate(.72) contrast(1.05);transform:scale(1.035);animation:gate-background-in .4s ease-out both,gate-background-breathe 12s .4s ease-in-out infinite alternate}
.gate::after {background:linear-gradient(115deg,#071c19a8,#0d342d54 55%,#b8955424),radial-gradient(circle at 72% 26%,transparent,#061a17a0)}
.gate-orbit {position:absolute;z-index:1;border:1px solid #e6d09d38;border-radius:50%;pointer-events:none;animation:gate-orbit-in .4s ease-out both,gate-orbit-float 8s .4s ease-in-out infinite alternate}
.gate-orbit-one {width:min(72vw,980px);aspect-ratio:1;left:-32vw;top:-48vw}
.gate-orbit-two {width:min(46vw,620px);aspect-ratio:1;right:-18vw;bottom:-28vw;animation-delay:.06s}
.gate-card {isolation:isolate;border:1px solid #eadbb566;box-shadow:0 36px 110px #0318159c;animation:gate-card-in .38s cubic-bezier(.16,1,.3,1) both;transition:transform .4s cubic-bezier(.4,0,1,1),opacity .34s ease-in,filter .34s ease-in}
.gate-card::before {content:"";position:absolute;z-index:4;inset:10px;border:1px solid #d0b97b52;pointer-events:none}
.gate-photo {overflow:hidden;background-position:center;animation:gate-photo-in .4s .04s cubic-bezier(.16,1,.3,1) both,gate-photo-breathe 9s .45s ease-in-out infinite alternate}
.gate-photo::before {content:"";position:absolute;z-index:1;right:24px;bottom:72px;width:136px;aspect-ratio:4/5;background:var(--gate-detail-photo) center/cover;border:7px solid #f8f4e9;box-shadow:0 18px 44px #071f1a7a;transform:rotate(4deg);animation:gate-detail-float 4.8s .45s ease-in-out infinite alternate}
.gate-photo::after {z-index:0;background:linear-gradient(180deg,#0b2d2812 42%,#071f1bd6)}
.gate-photo-number {position:absolute;z-index:2;left:28px;top:27px;color:#fff;font:500 .68rem/1 var(--sans);letter-spacing:.18em}
.gate-photo-caption {position:absolute;z-index:2;left:28px;right:28px;bottom:28px;color:#fff;font:500 .7rem/1.5 var(--sans);letter-spacing:.08em;text-transform:uppercase}
.gate-content {overflow:hidden}
.gate-content > * {animation:gate-copy-in .32s cubic-bezier(.16,1,.3,1) both}
.gate-content > :nth-child(1){animation-delay:.10s}.gate-content > :nth-child(2){animation-delay:.14s}.gate-content > :nth-child(3){animation-delay:.18s}.gate-content > :nth-child(4){animation-delay:.22s}.gate-content > :nth-child(5){animation-delay:.26s}.gate-content > :nth-child(6){animation-delay:.30s}.gate-content > :nth-child(7){animation-delay:.34s}
.open-invitation {position:relative;min-height:72px;display:grid;grid-template-columns:58px 1fr 22px;align-items:center;gap:13px;overflow:hidden;padding:9px 16px 9px 12px;text-align:left;box-shadow:0 10px 28px #173d3425;transition:background .22s ease,box-shadow .22s ease,transform .12s ease}
.open-invitation::after {content:"";position:absolute;inset:0;background:linear-gradient(105deg,transparent 30%,#ffffff32 48%,transparent 66%);transform:translateX(-120%);transition:transform .38s ease;animation:gate-button-shimmer 3.8s 1.2s ease-in-out infinite}
.open-invitation:hover::after {transform:translateX(120%)}
.open-invitation:active {transform:scale(.985)}
.open-invitation > span {position:relative;z-index:2}
.open-gift {width:52px;height:49px;display:block;filter:drop-shadow(0 6px 8px #061a1655);animation:open-gift-float 2.8s ease-in-out infinite alternate}
.open-gift-box {position:absolute;left:6px;right:6px;bottom:2px;height:29px;border-radius:2px;background:#f6e6bc;box-shadow:inset 0 -6px 0 #e4c882}
.open-gift-lid {position:absolute;z-index:3;left:3px;right:3px;top:14px;height:10px;border-radius:2px;background:#fff0c7;box-shadow:0 3px 6px #061a1638;transform-origin:14% 85%}
.open-gift-ribbon {position:absolute;z-index:4;left:23px;top:14px;width:7px;height:35px;background:#c49a4f}
.open-gift-bow {position:absolute;z-index:5;top:3px;width:18px;height:14px;border:5px solid #d7b464}
.open-gift-bow-left {left:9px;border-radius:12px 3px 10px 3px;transform:rotate(14deg)}
.open-gift-bow-right {right:9px;border-radius:3px 12px 3px 10px;transform:rotate(-14deg)}
.open-gift-copy {display:grid;gap:3px;line-height:1.15}
.open-gift-copy small {color:#f1ddaa;font-size:.55rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase}
.open-gift-copy strong {color:#fff;font-size:.84rem;font-weight:600;letter-spacing:.015em}
.open-gift-arrow {justify-self:end;font-size:.9rem;transition:transform .25s ease}
.open-invitation:hover .open-gift-arrow {transform:translate(2px,-2px)}
.open-gift-spark {position:absolute;z-index:6;width:5px;height:5px;border-radius:50%;background:#ffe5a5;box-shadow:0 0 10px #ffe5a5;opacity:0;pointer-events:none}
.open-gift-spark-one {left:22px;top:16px}.open-gift-spark-two{left:48px;top:11px}.open-gift-spark-three{left:34px;top:3px}
.open-invitation.is-unwrapping {background:#204f44;box-shadow:0 15px 38px #102e2866}
.open-invitation.is-unwrapping .open-gift {animation:open-gift-celebrate .72s cubic-bezier(.16,1,.3,1) both}
.open-invitation.is-unwrapping .open-gift-lid {animation:open-gift-lid .72s cubic-bezier(.16,1,.3,1) both}
.open-invitation.is-unwrapping .open-gift-bow,.open-invitation.is-unwrapping .open-gift-ribbon {animation:open-gift-ribbon .62s ease-out both}
.open-invitation.is-unwrapping .open-gift-spark {animation:open-gift-spark .65s ease-out both}.open-invitation.is-unwrapping .open-gift-spark-two{animation-delay:.08s}.open-invitation.is-unwrapping .open-gift-spark-three{animation-delay:.15s}
.gate-sound {width:100%;min-height:42px;margin-top:11px;display:flex;align-items:center;justify-content:center;gap:10px;border:0;background:transparent;color:#315a50;font:500 .68rem/1 var(--sans);letter-spacing:.045em;cursor:pointer;transition:color .2s ease,background .2s ease}
.gate-sound:hover {background:#173d3409;color:#173d34}
.gate-sound .music-bars {width:17px;height:17px}
.gate-sound .music-bars i {background:currentColor}
.gate-sound.playing .music-bars i {animation:music-wave .72s ease-in-out infinite alternate}
.gate-sound.playing .music-bars i:nth-child(2){animation-delay:-.22s}.gate-sound.playing .music-bars i:nth-child(3){animation-delay:-.44s}.gate-sound.playing .music-bars i:nth-child(4){animation-delay:-.12s}
.gate-ambient {position:absolute;z-index:2;inset:0;overflow:hidden;pointer-events:none}
.gate-ambient i {position:absolute;width:4px;height:4px;border-radius:50%;background:#f5d98a;box-shadow:0 0 12px 4px #f4cd6670;opacity:0;animation:gate-firefly 6s ease-in-out infinite}
.gate-ambient i:nth-child(1){left:9%;top:20%;animation-delay:-1s}.gate-ambient i:nth-child(2){left:19%;top:72%;animation-delay:-4.1s}.gate-ambient i:nth-child(3){left:39%;top:12%;animation-delay:-2.7s}.gate-ambient i:nth-child(4){right:12%;top:24%;animation-delay:-5.2s}.gate-ambient i:nth-child(5){right:7%;top:69%;animation-delay:-.4s}.gate-ambient i:nth-child(6){right:33%;bottom:8%;animation-delay:-3.4s}
.music-is-playing .gate-card {box-shadow:0 36px 110px #0318159c,0 0 0 1px #e7cf8a32}
.gate.is-opening .gate-card {transform:scale(.94) translateY(-16px);opacity:0;filter:blur(5px)}
.gate.is-opening::before {transform:scale(1.08)}

.hero {isolation:isolate}
.hero::before {content:"";position:absolute;z-index:1;inset:0;opacity:.13;pointer-events:none;background-image:radial-gradient(#fff 0.45px,transparent .55px);background-size:5px 5px;mix-blend-mode:soft-light}
.hero-media {background-position:center 72%;filter:saturate(.78) contrast(1.06)}
.hero-content {z-index:3}
.hero-grid {grid-template-columns:minmax(0,1fr) minmax(360px,500px);grid-template-rows:auto auto;column-gap:clamp(48px,7vw,104px)}
.hero-collage {position:relative;grid-column:2;grid-row:1/3;min-height:620px;align-self:center}
.hero-frame {position:absolute;margin:0;overflow:hidden;background:#f3edde;padding:7px;box-shadow:0 26px 70px #061d1966}
.hero-frame img {display:block;width:100%;height:100%;object-fit:cover}
.hero-frame-1 {z-index:2;width:62%;height:72%;right:7%;top:9%;transform:rotate(2.5deg)}
.hero-frame-2 {z-index:1;width:43%;height:42%;left:1%;bottom:6%;transform:rotate(-5deg)}
.hero-frame-3 {z-index:3;width:34%;height:30%;right:0;bottom:2%;transform:rotate(5deg)}
.hero-collage-caption {position:absolute;z-index:4;right:14%;top:84%;color:#fff;font-size:.61rem;letter-spacing:.12em;text-transform:uppercase;text-shadow:0 2px 12px #000}
.motion-ready .hero-title,.motion-ready .hero-side,.motion-ready .hero-frame,.motion-ready .hero-collage-caption {opacity:0}
.motion-ready .hero-title {transform:translateY(24px)}
.motion-ready .hero-side {transform:translateY(16px)}
.motion-ready .hero-frame-1 {transform:translateY(22px) rotate(2.5deg) scale(.95)}
.motion-ready .hero-frame-2 {transform:translateY(18px) rotate(-5deg) scale(.95)}
.motion-ready .hero-frame-3 {transform:translateY(16px) rotate(5deg) scale(.95)}
.hero.is-ready .hero-title,.hero.is-ready .hero-side,.hero.is-ready .hero-frame,.hero.is-ready .hero-collage-caption {opacity:1;transition:opacity .38s ease-out,transform .38s cubic-bezier(.16,1,.3,1)}
.hero.is-ready .hero-title,.hero.is-ready .hero-side {transform:translateY(0)}
.hero.is-ready .hero-frame-1 {transform:rotate(2.5deg) scale(1);transition-delay:.06s}
.hero.is-ready .hero-frame-2 {transform:rotate(-5deg) scale(1);transition-delay:.10s}
.hero.is-ready .hero-frame-3 {transform:rotate(5deg) scale(1);transition-delay:.14s}
.hero.is-ready .hero-collage-caption {transition-delay:.18s}

.memory-reel {overflow:hidden;background:#102f29;padding:34px 0}
.memory-reel-track {width:max-content;min-width:100%;display:grid;grid-template-columns:repeat(6,minmax(180px,1fr));gap:10px;padding-inline:max(16px,calc((100vw - 1160px)/2));}
.memory-reel-card {position:relative;width:clamp(180px,16vw,250px);aspect-ratio:4/5;border:0;padding:0;overflow:hidden;background:#203f38;cursor:pointer}
.memory-reel-card img {transition:transform .35s cubic-bezier(.16,1,.3,1),filter .25s ease}
.memory-reel-card span {position:absolute;left:14px;bottom:12px;color:#fff;font-size:.62rem;letter-spacing:.16em;text-shadow:0 1px 8px #000}
.memory-reel-card:hover img {transform:scale(1.035);filter:brightness(.85)}
.memory-reel-card:active {transform:scale(.99)}

.gallery-grid {grid-template-columns:repeat(12,1fr);grid-template-rows:none;grid-auto-rows:125px;gap:12px}
.gallery-item {grid-column:span 4;grid-row:span 2}
.gallery-item:first-child {grid-column:span 6;grid-row:span 4}
.gallery-item:nth-child(2),.gallery-item:nth-child(3) {grid-column:span 3;grid-row:span 2}
.gallery-item:nth-child(4) {grid-column:span 6;grid-row:span 2}
.gallery-item:nth-child(8n) {grid-column:span 8;grid-row:span 3}

.music-toggle {overflow:visible}
.music-toggle::after {content:attr(data-track-title);position:absolute;right:58px;width:max-content;max-width:min(340px,calc(100vw - 106px));overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:#153d35eb;color:#fff;border:1px solid #ffffff25;padding:9px 12px;border-radius:4px;font:500 .72rem/1.4 var(--sans);letter-spacing:.02em;opacity:0;transform:translateX(5px);pointer-events:none;transition:.2s ease}
.music-toggle[data-track-title]:not([data-track-title=""])::after {opacity:1;transform:none}
.music-bars {width:22px;height:22px;display:flex;align-items:center;justify-content:center;gap:2px}
.music-bars i {display:block;width:2px;height:7px;border-radius:2px;background:currentColor;transform-origin:center}
.music-bars i:nth-child(2),.music-bars i:nth-child(4){height:13px}
.music-toggle.playing .music-bars i {animation:music-wave .72s ease-in-out infinite alternate}
.music-toggle.playing .music-bars i:nth-child(2){animation-delay:-.22s}.music-toggle.playing .music-bars i:nth-child(3){animation-delay:-.44s}.music-toggle.playing .music-bars i:nth-child(4){animation-delay:-.12s}

@keyframes gate-card-in {from{opacity:0;transform:translateY(18px) scale(.975)}to{opacity:1;transform:none}}
@keyframes gate-photo-in {from{opacity:.6;transform:scale(1.06)}to{opacity:1;transform:scale(1)}}
@keyframes gate-copy-in {from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes gate-background-in {from{opacity:.6;transform:scale(1.08)}to{opacity:1;transform:scale(1.035)}}
@keyframes gate-orbit-in {from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}
@keyframes gate-background-breathe {from{transform:scale(1.035) translate3d(-.4%,0,0)}to{transform:scale(1.075) translate3d(.7%,-.5%,0)}}
@keyframes gate-orbit-float {from{translate:0 0;opacity:.55}to{translate:18px -12px;opacity:1}}
@keyframes gate-photo-breathe {from{background-position:50% 50%}to{background-position:53% 47%}}
@keyframes gate-detail-float {from{transform:translateY(0) rotate(4deg)}to{transform:translateY(-8px) rotate(2.5deg)}}
@keyframes gate-button-shimmer {0%,68%{transform:translateX(-120%)}88%,100%{transform:translateX(120%)}}
@keyframes open-gift-float {from{transform:translateY(1px) rotate(-1deg)}to{transform:translateY(-2px) rotate(1deg)}}
@keyframes open-gift-celebrate {0%{transform:scale(1)}45%{transform:scale(1.12) rotate(-3deg)}100%{transform:scale(.96)}}
@keyframes open-gift-lid {0%{transform:none}45%{transform:translate(-2px,-11px) rotate(-12deg)}100%{transform:translate(-8px,-20px) rotate(-24deg);opacity:.35}}
@keyframes open-gift-ribbon {from{opacity:1;transform:scale(1)}to{opacity:.15;transform:translateY(-12px) scale(.65)}}
@keyframes open-gift-spark {0%{opacity:0;transform:translateY(16px) scale(.25)}35%{opacity:1}100%{opacity:0;transform:translateY(-22px) scale(1.5)}}
@keyframes gate-firefly {0%,100%{opacity:0;transform:translate3d(0,18px,0) scale(.5)}35%{opacity:.75}65%{opacity:.28;transform:translate3d(22px,-25px,0) scale(1.25)}}
@keyframes music-wave {from{transform:scaleY(.45)}to{transform:scaleY(1.25)}}

@media(max-width:900px) {
  .hero-grid {grid-template-columns:minmax(0,1fr) 300px}
  .hero-collage {min-height:520px}
  .memory-reel-track {overflow-x:auto;scroll-snap-type:x proximity;max-width:100vw;min-width:0;width:100%;grid-template-columns:repeat(6,180px);padding-inline:18px;scrollbar-width:none}
  .memory-reel-card {width:180px;scroll-snap-align:start}
}
@media(max-width:620px) {
  .gate-orbit-one {width:130vw;left:-82vw;top:-30vw}.gate-orbit-two {width:90vw;right:-52vw;bottom:-18vw}
  .gate-card::before {inset:7px}
  .gate-photo::before {right:18px;bottom:18px;width:78px;border-width:4px}
  .gate-photo-caption {font-size:.55rem;left:18px;bottom:18px;right:105px}.gate-photo-number{left:18px;top:18px}
  .gate-content::after {bottom:94px;right:-16px;width:58px}
  .hero {min-height:860px}
  .hero-content {padding:132px 0 54px}
  .hero-grid {grid-template-columns:minmax(0,1fr);grid-template-rows:auto 270px auto;gap:22px}
  .hero-title {grid-column:1;grid-row:1;font-size:clamp(3.1rem,14.5vw,4.4rem)}
  .hero-collage {grid-column:1;grid-row:2;min-height:270px;width:100%}
  .hero-frame {padding:4px}
  .hero-frame-1 {width:45%;height:88%;right:21%;top:0}
  .hero-frame-2 {width:35%;height:59%;left:4%;bottom:0}
  .hero-frame-3 {width:29%;height:47%;right:2%;bottom:4%}
  .hero-collage-caption {right:24%;top:auto;bottom:-2px;font-size:.48rem}
  .hero-side {grid-column:1;grid-row:3;margin-top:0}
  .memory-reel {padding:18px 0}.memory-reel-track{grid-template-columns:repeat(6,138px);gap:8px}.memory-reel-card{width:138px}
  .gallery-grid {grid-template-columns:repeat(2,1fr);grid-auto-rows:170px;gap:8px}
  .gallery-item,.gallery-item:first-child,.gallery-item:nth-child(2),.gallery-item:nth-child(3),.gallery-item:nth-child(4),.gallery-item:nth-child(8n){grid-column:span 1;grid-row:span 1}
  .gallery-item:first-child,.gallery-item:nth-child(5n){grid-column:span 2;grid-row:span 2}
  .music-toggle::after {right:54px}
}
@media(prefers-reduced-motion:reduce) {
  .gate::before,.gate-card,.gate-photo,.gate-photo::before,.gate-content>* ,.gate-orbit,.gate-ambient i,.open-invitation::after,.music-toggle.playing .music-bars i,.gate-sound.playing .music-bars i {animation:none!important}
  .motion-ready .hero-title,.motion-ready .hero-side,.motion-ready .hero-frame,.motion-ready .hero-collage-caption {opacity:1;transform:none}
  .gate.is-opening .gate-card {transition:none;transform:none}
}

/* Closing scene */
.footer {position:relative;min-height:100svh;display:block;isolation:isolate;text-align:left;background:#092a24;color:#fff;overflow:hidden}
.footer-bg {filter:saturate(.72) contrast(1.05);background:linear-gradient(90deg,#071f1bd9 0%,#092a24b8 48%,#0a2a2475 100%),linear-gradient(0deg,#061b18e8 0%,transparent 58%),var(--landscape-photo) center 64%/cover}
.footer::before {content:"";position:absolute;z-index:1;inset:0;pointer-events:none;background-image:radial-gradient(#fff 0.45px,transparent .55px);background-size:5px 5px;opacity:.08;mix-blend-mode:soft-light}
.footer::after {content:"";position:absolute;z-index:1;left:-25px;bottom:22px;width:170px;height:280px;background:url('/rice.svg') center/contain no-repeat;filter:brightness(0) invert(1);opacity:.14;transform:rotate(-9deg);pointer-events:none}
.footer-glow {position:absolute;z-index:1;width:520px;aspect-ratio:1;right:-150px;top:-210px;border-radius:50%;background:#dbbd7352;filter:blur(100px);pointer-events:none}
.footer-content {position:relative;z-index:2;padding:72px 0 30px}
.footer-head {display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:32px;padding-bottom:25px;border-bottom:1px solid #ffffff30}
.footer-monogram {font-size:.85rem;font-weight:600;letter-spacing:.16em}
.footer-eyebrow {margin:0;color:#f2e5bf;font-size:.65rem;font-weight:500;letter-spacing:.17em;text-transform:uppercase;text-align:center}
.footer-head time {justify-self:end;font-size:.72rem;font-weight:500;letter-spacing:.12em}
.footer-stage {display:grid;grid-template-columns:minmax(0,1.15fr) minmax(360px,.85fr);align-items:center;gap:clamp(40px,8vw,120px);min-height:535px;padding:55px 0 60px}
.footer-title-wrap {align-self:center}
.footer-message {max-width:520px;margin:0 0 30px;color:#f0e9d7;font-size:.88rem;font-weight:400;line-height:1.85;letter-spacing:.02em;text-transform:none}
.footer-title-wrap h2 {display:flex;flex-direction:column;align-items:flex-start;margin:0;font-size:clamp(4.4rem,8.5vw,8rem);font-weight:400;line-height:.9;letter-spacing:-.055em}
.footer-title-wrap h2 em {align-self:center;margin:-.02em 0 -.08em;color:#e1c98e;font-size:.42em;font-style:normal;font-weight:400;line-height:1}
.footer-title-wrap h2 span:last-child {padding-left:.55em;color:#e7d3a2}
.footer-photo-pile {position:relative;min-height:450px}
.footer-photo {position:absolute;margin:0;padding:7px;background:#f5f0e2;box-shadow:0 24px 60px #03161385;overflow:hidden}
.footer-photo img {width:100%;height:100%;object-fit:cover}
.footer-photo-1 {z-index:2;width:58%;height:76%;left:17%;top:8%;transform:rotate(-3deg)}
.footer-photo-2 {z-index:3;width:42%;height:48%;right:2%;bottom:2%;transform:rotate(5deg)}
.footer-photo-3 {z-index:1;width:38%;height:42%;left:0;bottom:0;transform:rotate(-7deg)}
.footer-closing {min-height:76px;display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:36px;padding-top:22px;border-top:1px solid #ffffff30}
.footer-closing nav {display:flex;align-items:center;gap:30px}
.footer-closing a,.back-top {color:#fff;text-decoration:none;font-size:.72rem;font-weight:500;letter-spacing:.02em;transition:opacity .2s ease,border-color .2s ease,background .2s ease}
.footer-closing a {min-height:44px;display:inline-flex;align-items:center}
.footer-closing a:hover {opacity:.7}
.footer-map {border-bottom:1px solid #ffffff75;gap:8px}
.back-top {width:48px;height:48px;min-height:48px;margin:0;display:grid;place-items:center;border:1px solid #ffffff70;border-radius:50%;padding:0;background:#ffffff0d;text-transform:none;letter-spacing:0;font-size:0}
.back-top span {font-size:1rem;transition:transform .2s ease}
.back-top:hover {background:#fff;color:#173d34;border-color:#fff}.back-top:hover span{transform:translateY(-2px)}

/* Finale begins when the visitor reaches the true end of the page. */
.footer-title-wrap h2 {position:relative}
.footer-title-wrap h2::after {content:"";position:absolute;left:0;bottom:-28px;width:0;height:1px;background:linear-gradient(90deg,#e5cc91,transparent)}
.footer.is-finale .footer-bg {animation:footer-landscape-finale 7s cubic-bezier(.16,1,.3,1) both}
.footer.is-finale .footer-glow {animation:footer-glow-finale 3.8s ease-in-out both}
.footer.is-finale .footer-head {animation:footer-copy-finale .7s .05s cubic-bezier(.16,1,.3,1) both}
.footer.is-finale .footer-message {animation:footer-copy-finale .7s .15s cubic-bezier(.16,1,.3,1) both}
.footer.is-finale .footer-title-wrap h2 span:first-child {animation:footer-name-left .9s .18s cubic-bezier(.16,1,.3,1) both}
.footer.is-finale .footer-title-wrap h2 em {animation:footer-ampersand-finale .8s .34s cubic-bezier(.16,1,.3,1) both}
.footer.is-finale .footer-title-wrap h2 span:last-child {animation:footer-name-right .9s .28s cubic-bezier(.16,1,.3,1) both}
.footer.is-finale .footer-title-wrap h2::after {animation:footer-line-finale 1.1s .55s cubic-bezier(.16,1,.3,1) both}
.footer.is-finale .footer-photo-1 {animation:footer-photo-one-finale 1s .18s cubic-bezier(.16,1,.3,1) both}
.footer.is-finale .footer-photo-2 {animation:footer-photo-two-finale .9s .36s cubic-bezier(.16,1,.3,1) both}
.footer.is-finale .footer-photo-3 {animation:footer-photo-three-finale .9s .5s cubic-bezier(.16,1,.3,1) both}
.footer.is-finale .footer-closing {animation:footer-copy-finale .75s .65s cubic-bezier(.16,1,.3,1) both}
.footer.is-finale::after {transform-origin:50% 100%;animation:footer-rice-sway 4.8s .2s ease-in-out infinite alternate}

@keyframes footer-landscape-finale {from{transform:scale(1.04);filter:saturate(.55) contrast(1.08) brightness(.8)}to{transform:scale(1);filter:saturate(.78) contrast(1.05) brightness(1)}}
@keyframes footer-glow-finale {0%{opacity:.25;transform:translate3d(60px,-35px,0) scale(.7)}45%{opacity:.85}100%{opacity:.58;transform:translate3d(0,0,0) scale(1)}}
@keyframes footer-copy-finale {from{opacity:.18;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}
@keyframes footer-name-left {from{opacity:.22;transform:translateX(-28px);letter-spacing:-.09em}to{opacity:1;transform:translateX(0);letter-spacing:inherit}}
@keyframes footer-name-right {from{opacity:.22;transform:translateX(34px);letter-spacing:-.09em}to{opacity:1;transform:translateX(0);letter-spacing:inherit}}
@keyframes footer-ampersand-finale {0%{opacity:0;transform:rotate(-18deg) scale(.45)}70%{transform:rotate(4deg) scale(1.12)}100%{opacity:1;transform:rotate(0) scale(1)}}
@keyframes footer-line-finale {from{width:0;opacity:0}to{width:min(260px,58%);opacity:1}}
@keyframes footer-photo-one-finale {from{opacity:.2;transform:translateY(44px) rotate(-8deg) scale(.9)}to{opacity:1;transform:translateY(0) rotate(-3deg) scale(1)}}
@keyframes footer-photo-two-finale {from{opacity:.15;transform:translate(40px,28px) rotate(11deg) scale(.86)}to{opacity:1;transform:translate(0,0) rotate(5deg) scale(1)}}
@keyframes footer-photo-three-finale {from{opacity:.15;transform:translate(-35px,25px) rotate(-13deg) scale(.86)}to{opacity:1;transform:translate(0,0) rotate(-7deg) scale(1)}}
@keyframes footer-rice-sway {from{transform:rotate(-11deg)}to{transform:rotate(-5deg)}}
@media(max-width:900px) {
  .footer {min-height:100svh}
  .footer-stage {grid-template-columns:1fr 320px;gap:30px}
  .footer-photo-pile {min-height:400px}
  .footer-closing nav {gap:20px}
}
@media(max-width:620px) {
  .footer {min-height:100svh}
  .footer-bg {background:linear-gradient(180deg,#071f1bd1,#071f1bde 72%,#061b18f2),var(--landscape-photo) center/cover}
  .footer-content {padding:44px 0 24px}
  .footer-head {grid-template-columns:1fr auto;gap:12px;padding-bottom:20px}
  .footer-eyebrow {grid-column:1/3;grid-row:2;text-align:left;font-size:.58rem}
  .footer-head time {font-size:.64rem}
  .footer-stage {display:flex;flex-direction:column;align-items:stretch;gap:30px;min-height:0;padding:45px 0}
  .footer-message {max-width:310px;margin-bottom:22px;font-size:.82rem}
  .footer-title-wrap h2 {font-size:clamp(3.5rem,18vw,5rem);line-height:.92}
  .footer-title-wrap h2 em {align-self:flex-start;margin:.06em 0;padding-left:.85em}
  .footer-title-wrap h2 span:last-child {padding-left:.55em}
  .footer-photo-pile {min-height:255px;width:min(100%,340px);align-self:center}
  .footer-photo {padding:4px}
  .footer-photo-1 {width:48%;height:78%;left:25%;top:0}.footer-photo-2{width:38%;height:52%;right:0;bottom:0}.footer-photo-3{width:35%;height:46%;left:2%;bottom:4%}
  .footer-closing {grid-template-columns:1fr auto;gap:16px;padding-top:18px}
  .footer-closing nav {grid-column:1/3;gap:18px;overflow-x:auto;scrollbar-width:none}
  .footer-closing nav a {white-space:nowrap;font-size:.66rem}
  .footer-map {font-size:.68rem}.back-top{width:46px;height:46px}
  .footer::after {width:105px;height:175px;left:-25px;bottom:66px}
}
@media(prefers-reduced-motion:reduce) {
  .footer.is-finale .footer-bg,.footer.is-finale .footer-glow,.footer.is-finale .footer-head,.footer.is-finale .footer-message,.footer.is-finale .footer-title-wrap h2 span,.footer.is-finale .footer-title-wrap h2 em,.footer.is-finale .footer-title-wrap h2::after,.footer.is-finale .footer-photo,.footer.is-finale .footer-closing,.footer.is-finale::after {animation:none!important}
  .footer.is-finale .footer-title-wrap h2::after {width:min(260px,58%)}
}

/* The opening invitation always fits one viewport and never becomes a scroll area. */
html:has(#invitationGate:not(.is-open)) {overflow:hidden;overscroll-behavior:none}
body.is-locked:has(#invitationGate:not(.is-open)) {position:fixed;inset:0;width:100%;height:100%;overflow:hidden}
#invitationGate {height:100vh;height:100dvh;overflow:hidden!important;overscroll-behavior:none}
#invitationGate .gate-card {max-height:calc(100dvh - 48px);overflow:hidden}

@media(max-width:620px) {
  #invitationGate {padding:12px}
  #invitationGate .gate-card {height:calc(100dvh - 24px);max-height:none;grid-template-rows:minmax(120px,24dvh) minmax(0,1fr)}
  #invitationGate .gate-photo {min-height:0}
  #invitationGate .gate-content {min-height:0;padding:clamp(15px,3.6dvh,26px) 28px}
}
@media(max-width:620px) and (max-height:760px) {
  #invitationGate {padding:8px}
  #invitationGate .gate-card {height:calc(100dvh - 16px);grid-template-rows:minmax(92px,21dvh) minmax(0,1fr)}
  #invitationGate .gate-content {padding:12px 22px}
  #invitationGate .monogram {margin-bottom:5px;font-size:.62rem}
  #invitationGate .gate-content .eyebrow {margin-bottom:6px;font-size:.54rem}
  #invitationGate .gate-content h1 {font-size:clamp(1.95rem,10vw,2.45rem);line-height:1.02}
  #invitationGate .gate-content h1 span {line-height:1.05}
  #invitationGate .gate-date {margin:7px 0;padding:6px 0;font-size:.58rem}
  #invitationGate .gate-guest {margin-bottom:8px;font-size:.66rem;line-height:1.45}
  #invitationGate .gate-guest strong {margin-top:2px;font-size:.78rem}
  #invitationGate .open-invitation {min-height:44px;grid-template-columns:35px 1fr 16px;gap:8px;padding:4px 12px 4px 8px}
  #invitationGate .open-gift {width:34px;height:34px;transform:scale(.72);transform-origin:center}
  #invitationGate .open-gift-copy small {display:none}
  #invitationGate .open-gift-copy strong {font-size:.72rem}
  #invitationGate .gate-sound {min-height:32px;margin-top:2px;font-size:.62rem}
  #invitationGate .gate-photo::before {width:62px;right:14px;bottom:14px;border-width:3px}
  #invitationGate .gate-photo-caption {left:14px;bottom:12px;right:86px;font-size:.48rem}
  #invitationGate .gate-photo-number {left:14px;top:12px;font-size:.55rem}
}
@media(min-width:621px) and (max-height:680px) {
  #invitationGate {padding:12px}
  #invitationGate .gate-card {width:min(900px,calc(100vw - 24px));max-width:none;height:calc(100dvh - 24px);min-height:0;grid-template-columns:1fr 1fr;grid-template-rows:minmax(0,1fr)}
  #invitationGate .gate-photo {min-height:0}
  #invitationGate .gate-content {padding:14px 30px}
  #invitationGate .monogram {margin-bottom:5px;font-size:.62rem}
  #invitationGate .gate-content .eyebrow {margin-bottom:5px;font-size:.54rem}
  #invitationGate .gate-content h1 {font-size:clamp(2rem,7dvh,2.8rem);line-height:1}
  #invitationGate .gate-content h1 span {line-height:1}
  #invitationGate .gate-date {margin:7px 0;padding:6px 0;font-size:.58rem}
  #invitationGate .gate-guest {margin-bottom:7px;font-size:.65rem;line-height:1.4}
  #invitationGate .gate-guest strong {margin-top:2px;font-size:.8rem}
  #invitationGate .open-invitation {min-height:46px;grid-template-columns:38px 1fr 16px;gap:8px;padding:4px 12px 4px 8px}
  #invitationGate .open-gift {width:36px;height:36px;transform:scale(.76);transform-origin:center}
  #invitationGate .open-gift-copy small {display:none}
  #invitationGate .open-gift-copy strong {font-size:.74rem}
  #invitationGate .gate-sound {min-height:30px;margin-top:1px;font-size:.6rem}
}

/* Main-page motion and approved wishes */
.motion-ready .reveal {filter:blur(5px);transform:translateY(34px);transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .8s cubic-bezier(.16,1,.3,1),filter .8s ease}
.motion-ready .reveal.is-visible {filter:none;transform:none}
.motion-ready .motion-item {opacity:0;transform:translateY(28px) scale(.985);transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1);transition-delay:var(--motion-delay,0ms)}
.motion-ready .motion-item.is-visible {opacity:1;transform:none}
.section-motion {isolation:isolate}
.section-motion .date-seal {transform:rotate(-3deg);transition:transform .9s cubic-bezier(.16,1,.3,1)}
.section-motion.is-visible .date-seal {transform:rotate(0)}
.gallery-item.motion-item {clip-path:inset(8% 8% 8% 8% round 3px);transition:opacity .75s ease,transform .75s cubic-bezier(.16,1,.3,1),clip-path .9s cubic-bezier(.16,1,.3,1);transition-delay:var(--motion-delay,0ms)}
.gallery-item.motion-item.is-visible {clip-path:inset(0 round 3px)}
.intro-visual.is-visible .intro-small {animation:intro-photo-float 5.5s 1s ease-in-out infinite alternate}
.countdown.is-visible .countdown-bg,.field-quote.is-visible .field-quote-bg {animation:main-landscape-breathe 11s ease-in-out infinite alternate}
.gift-envelope.reveal.is-visible {animation:envelope-float 5s .9s ease-in-out infinite alternate}
.timeline-item.motion-item.is-visible .timeline-photo img {animation:story-photo-breathe 8s ease-in-out infinite alternate}

.wish-stream {margin-top:38px;border:0}
.wish-stream-head {display:flex;align-items:end;justify-content:space-between;gap:18px;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.wish-stream-head h3 {margin:0;font-size:1rem;font-weight:600;letter-spacing:-.02em}
.wish-stream-head span {color:var(--muted);font-size:.65rem;letter-spacing:.06em;white-space:nowrap}
.wish-list {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.wish-list .wish {position:relative;min-height:190px;display:flex;flex-direction:column;justify-content:space-between;margin:0;padding:24px;border:1px solid #183c3514;border-radius:5px;background:#fffef9;box-shadow:0 12px 34px #183c3509;overflow:hidden}
.wish-list .wish::after {content:"";position:absolute;right:-25px;bottom:-44px;width:90px;height:150px;background:url('/rice.svg') center/contain no-repeat;opacity:.09;transform:rotate(12deg);pointer-events:none}
.wish-quote {height:28px;color:#c6a86a;font-size:2.5rem;line-height:1;font-family:Georgia,serif}
.wish-list .wish p {position:relative;z-index:1;margin:10px 0 24px;color:#3f4d47;font-family:var(--sans);font-size:.82rem;font-style:normal;line-height:1.75}
.wish-list .wish-head {position:relative;z-index:1;justify-content:flex-start;gap:10px;margin:0;padding-top:14px;border-top:1px solid var(--line)}
.wish-avatar {width:30px;height:30px;flex:0 0 30px;display:grid;place-items:center;border-radius:50%;background:#e9ede3;color:#214b42;font-size:.7rem;font-weight:600}
.wish-list .wish-head strong {font-family:var(--sans);font-size:.72rem;font-weight:600;line-height:1.4}
.wish-empty {margin:0;padding:28px;border:1px dashed #183c3530;border-radius:5px;color:var(--muted);font-size:.82rem;line-height:1.7;text-align:center}

@keyframes intro-photo-float {from{transform:translateY(0) rotate(-3deg)}to{transform:translateY(-9px) rotate(-1.5deg)}}
@keyframes main-landscape-breathe {from{transform:scale(1.01);filter:saturate(.88)}to{transform:scale(1.065);filter:saturate(1.02)}}
@keyframes envelope-float {from{transform:translateY(0) rotate(-.4deg)}to{transform:translateY(-9px) rotate(.5deg)}}
@keyframes story-photo-breathe {from{transform:scale(1.01)}to{transform:scale(1.065)}}

@media(max-width:620px) {
  .wish-list {grid-template-columns:1fr}
  .wish-list .wish {min-height:170px;padding:21px}
  .wish-stream-head {align-items:flex-start;flex-direction:column;gap:4px}
}
@media(prefers-reduced-motion:reduce) {
  .motion-ready .reveal,.motion-ready .motion-item {opacity:1;filter:none;transform:none;transition:none}
  .intro-visual.is-visible .intro-small,.countdown.is-visible .countdown-bg,.field-quote.is-visible .field-quote-bg,.gift-envelope.reveal.is-visible,.timeline-item.motion-item.is-visible .timeline-photo img {animation:none!important}
}

/* Two configurable wedding gift boxes */
.gift-boxes {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;perspective:1000px}
.gift-boxes:has(> .gift-box[hidden]) {grid-template-columns:minmax(0,330px);justify-content:center}
.gift-box {position:relative;min-height:330px;display:flex;flex-direction:column;align-items:center;justify-content:center;border:1px solid #eadbb570;border-radius:4px;padding:74px 26px 32px;overflow:hidden;color:#173d34;background:linear-gradient(145deg,#fffdf5,#e9ddc4);box-shadow:0 28px 65px #03171370;isolation:isolate;transition:transform .35s cubic-bezier(.16,1,.3,1),box-shadow .35s ease}
.gift-box-bride {background:linear-gradient(145deg,#fff9f3,#ead6cc)}
.gift-box::before,.gift-box::after {content:"";position:absolute;z-index:0;background:#b99655}
.gift-box::before {width:42px;inset-block:0;left:50%;transform:translateX(-50%);opacity:.78}
.gift-box::after {height:36px;inset-inline:0;top:50px;opacity:.78}
.gift-box-bride::before,.gift-box-bride::after {background:#b98378}
.gift-ribbon {position:absolute;z-index:2;left:50%;top:49px;width:52px;height:29px;border-radius:50%;background:#c7a663;transform:translate(-50%,-50%);box-shadow:-26px -2px 0 -7px #c7a663,26px -2px 0 -7px #c7a663}
.gift-box-bride .gift-ribbon {background:#c28f84;box-shadow:-26px -2px 0 -7px #c28f84,26px -2px 0 -7px #c28f84}
.gift-box > :not(.gift-ribbon) {position:relative;z-index:2}
.gift-box-kicker {font-size:.55rem;font-weight:600;letter-spacing:.19em;text-transform:uppercase;opacity:.72}
.gift-box strong {margin:12px 0 4px;font-size:1rem;font-weight:500}
.gift-box-name {font-size:clamp(2rem,4vw,3.4rem);font-weight:400;line-height:1.15;letter-spacing:-.055em}
.gift-box-action {margin-top:34px;padding-bottom:4px;border-bottom:1px solid currentColor;font-size:.65rem;font-weight:600;letter-spacing:.03em}
.gift-box:hover {transform:translateY(-10px) rotateX(2deg);box-shadow:0 38px 80px #03171391}
.gift-box:focus-visible {outline-color:#f0d79e}
.gift-boxes.is-visible .gift-box:first-child {animation:gift-box-arrive-left .85s .15s cubic-bezier(.16,1,.3,1) both}
.gift-boxes.is-visible .gift-box:last-child {animation:gift-box-arrive-right .85s .27s cubic-bezier(.16,1,.3,1) both}
.qr img,.qr .qr-pattern {width:100%;height:100%;object-fit:contain}
.gift-demo-note {max-width:240px;margin:-12px auto 18px;color:#8b5c4a;font-size:.63rem;line-height:1.5}

@keyframes gift-box-arrive-left {from{opacity:0;transform:translate(-24px,30px) rotate(-4deg)}to{opacity:1;transform:none}}
@keyframes gift-box-arrive-right {from{opacity:0;transform:translate(24px,30px) rotate(4deg)}to{opacity:1;transform:none}}

@media(max-width:620px) {
  .gift-boxes {gap:10px}
  .gift-box {min-height:245px;padding:62px 12px 24px}
  .gift-box::before {width:30px}.gift-box::after{height:28px;top:42px}
  .gift-ribbon {top:41px;width:40px;height:23px;box-shadow:-20px -2px 0 -6px #c7a663,20px -2px 0 -6px #c7a663}
  .gift-box-bride .gift-ribbon {box-shadow:-20px -2px 0 -6px #c28f84,20px -2px 0 -6px #c28f84}
  .gift-box strong {font-size:.76rem}.gift-box-name{font-size:1.75rem}.gift-box-action{margin-top:18px;font-size:.58rem}
}
@media(prefers-reduced-motion:reduce) {
  .gift-boxes.is-visible .gift-box {animation:none!important}
}

/* Landscape envelope invitation */
#invitationGate .gate-card {
  width:min(980px,calc(100vw - 48px));max-width:none;height:min(570px,calc(100dvh - 48px));min-height:500px;max-height:none;display:block;
  background:
    linear-gradient(31deg,transparent 49.7%,#bda97842 50%,transparent 50.3%) left bottom/50% 48% no-repeat,
    linear-gradient(-31deg,transparent 49.7%,#bda97842 50%,transparent 50.3%) right bottom/50% 48% no-repeat,
    linear-gradient(145deg,#fffef9,#f3eddd);
  border:1px solid #e5d3a8;border-radius:5px;box-shadow:0 38px 115px #031815a8;overflow:hidden;
}
#invitationGate .gate-card::before {z-index:8;inset:10px;border-color:#bda97870}
#invitationGate .gate-card::after {content:"";position:absolute;z-index:0;left:0;right:0;top:0;height:54%;background:linear-gradient(180deg,#f8f2e3,#eee4cc);clip-path:polygon(0 0,100% 0,50% 92%);filter:drop-shadow(0 1px 0 #bda97866);pointer-events:none}
#invitationGate .gate-photo {position:absolute;z-index:4;right:54px;top:54px;width:224px;height:272px;min-height:0;border:9px solid #fffaf0;background-position:center;box-shadow:0 20px 46px #193a3240;transform:rotate(3deg);animation:envelope-stamp-in .55s .18s cubic-bezier(.16,1,.3,1) both,envelope-stamp-float 5s .8s ease-in-out infinite alternate}
#invitationGate .gate-photo::before {display:none}
#invitationGate .gate-photo::after {z-index:0;background:linear-gradient(180deg,transparent 48%,#0a2924b3)}
#invitationGate .gate-photo-number {left:14px;top:14px}
#invitationGate .gate-photo-caption {left:14px;right:14px;bottom:13px;font-size:.55rem;text-align:center}
#invitationGate .gate-content {position:relative;z-index:3;width:100%;height:100%;min-height:0;display:block;padding:60px 340px 48px 68px;text-align:left;border:0;background:transparent;overflow:visible}
#invitationGate .gate-content::before {content:"";position:absolute;z-index:-1;left:30px;bottom:20px;width:92px;height:154px;background:url('/rice.svg') center/contain no-repeat;opacity:.13;transform:rotate(-18deg)}
#invitationGate .gate-content::after {right:286px;bottom:23px;width:70px;height:118px;opacity:.16}
#invitationGate .monogram {width:48px;height:48px;margin:0 0 24px;display:grid;place-items:center;border:1px solid #b99a57;border-radius:50%;background:#fffdf7;color:#264e45;font-size:.67rem;letter-spacing:.13em;box-shadow:0 5px 16px #183c3512}
#invitationGate .gate-content .eyebrow {margin:0 0 12px;color:#597b72;font-size:.62rem;letter-spacing:.22em}
#invitationGate .gate-content h1 {max-width:510px;margin:0;font-size:clamp(3.1rem,5.5vw,5.5rem);line-height:.92;letter-spacing:-.035em}
#invitationGate .gate-content h1 span {display:inline-block;margin:0 .13em;color:#b28d46;font:400 .52em/1 var(--sans);vertical-align:.24em}
#invitationGate .gate-date {width:fit-content;margin:22px 0 15px;padding:9px 20px;border:1px solid #bda97855;border-radius:999px;background:#fffdf7a8;font-size:.66rem;letter-spacing:.16em}
#invitationGate .gate-guest {max-width:330px;margin:0;color:#65736d;font-size:.75rem}
#invitationGate .gate-guest strong {margin-top:2px;font-size:.9rem}
#invitationGate .open-invitation {position:absolute;z-index:9;right:111px;bottom:41px;width:110px;height:110px;min-height:0;display:grid;place-items:center;padding:0;border:0;border-radius:0;background:transparent;color:#173d34;box-shadow:none;overflow:visible;filter:none;transform:none;animation:envelope-gift-arrive .65s .46s cubic-bezier(.16,1,.3,1) both}
#invitationGate .open-invitation::after {display:none}
#invitationGate .open-invitation:hover,#invitationGate .open-invitation:focus-visible {background:transparent;box-shadow:none;transform:translateY(-3px)}
#invitationGate .open-invitation:focus-visible {outline:2px solid #b48f48;outline-offset:8px;border-radius:8px}
#invitationGate .open-gift {width:86px;height:82px;filter:drop-shadow(0 12px 13px #173d3442);animation:envelope-gift-float 2.3s ease-in-out infinite alternate}
#invitationGate .open-gift-box {left:8px;right:8px;bottom:3px;height:49px;background:linear-gradient(145deg,#f6deb0,#e7bd68);box-shadow:inset 0 -9px 0 #d5a953}
#invitationGate .open-gift-lid {left:3px;right:3px;top:23px;height:16px;background:linear-gradient(180deg,#fff0ca,#e8c372);box-shadow:0 5px 8px #173d3438}
#invitationGate .open-gift-ribbon {left:38px;top:22px;width:11px;height:59px;background:#1f574b}
#invitationGate .open-gift-bow {top:4px;width:29px;height:23px;border-width:7px;border-color:#2b6658}
#invitationGate .open-gift-bow-left {left:14px;border-radius:19px 4px 16px 4px}.open-gift-bow-right {right:14px;border-radius:4px 19px 4px 16px}
#invitationGate .open-gift-tooltip {position:absolute;right:96px;top:50%;width:max-content;padding:9px 13px;border:1px solid #d6bd82;border-radius:14px 14px 3px 14px;background:#fffdf7;color:#234b42;font:600 .68rem/1 var(--sans);letter-spacing:.015em;box-shadow:0 10px 24px #173d3424;transform:translateY(-50%);animation:envelope-tooltip-float 2.3s ease-in-out infinite alternate}
#invitationGate .open-gift-tooltip::after {content:"";position:absolute;right:-7px;bottom:5px;width:12px;height:12px;border-top:1px solid #d6bd82;border-right:1px solid #d6bd82;background:#fffdf7;transform:rotate(45deg)}
#invitationGate .open-gift-tooltip span {position:relative;z-index:1;color:#b58e48;font-size:.9rem}
#invitationGate .open-invitation:hover .open-gift-tooltip,#invitationGate .open-invitation:focus-visible .open-gift-tooltip {color:#153d35;box-shadow:0 13px 30px #173d3435}
#invitationGate .gate-sound {position:absolute;left:68px;bottom:32px;width:auto;min-height:36px;margin:0;padding:0 12px;border:1px solid #bda97845;border-radius:999px;background:#fffdf78f}
#invitationGate.is-unwrapping .gate-card::after {transform-origin:50% 0;animation:envelope-flap-open .72s cubic-bezier(.16,1,.3,1) both}
#invitationGate.is-unwrapping .gate-photo {animation:envelope-stamp-release .72s cubic-bezier(.16,1,.3,1) both}
#invitationGate .open-invitation.is-unwrapping {animation:none}

@keyframes envelope-stamp-in {from{opacity:0;transform:translate(20px,-14px) rotate(8deg) scale(.9)}to{opacity:1;transform:rotate(3deg) scale(1)}}
@keyframes envelope-stamp-float {from{transform:translateY(0) rotate(3deg)}to{transform:translateY(-5px) rotate(1.8deg)}}
@keyframes envelope-gift-arrive {from{opacity:0;transform:translateY(18px) scale(.8)}to{opacity:1;transform:none}}
@keyframes envelope-gift-float {from{transform:translateY(2px) rotate(-1.5deg)}to{transform:translateY(-4px) rotate(1.5deg)}}
@keyframes envelope-tooltip-float {from{transform:translate(-2px,-48%)}to{transform:translate(2px,-54%)}}
@keyframes envelope-flap-open {from{transform:perspective(900px) rotateX(0);opacity:1}to{transform:perspective(900px) rotateX(92deg);opacity:.2}}
@keyframes envelope-stamp-release {from{transform:rotate(3deg) scale(1);opacity:1}to{transform:translate(22px,-28px) rotate(8deg) scale(.93);opacity:.25}}

@media(max-width:620px) {
  #invitationGate {padding:8px}
  #invitationGate .gate-card {width:calc(100vw - 16px);height:min(72vw,calc(100dvh - 16px));min-height:220px;max-height:330px;grid-template:none}
  #invitationGate .gate-card::before {inset:5px}
  #invitationGate .gate-photo {right:20px;top:19px;width:84px;height:104px;border-width:4px}
  #invitationGate .gate-photo-number {left:6px;top:6px;font-size:.42rem}
  #invitationGate .gate-photo-caption {display:none}
  #invitationGate .gate-content {padding:18px 120px 15px 24px;overflow:hidden}
  #invitationGate .gate-content::before {left:5px;bottom:5px;width:52px;height:90px}
  #invitationGate .gate-content::after {display:none}
  #invitationGate .monogram {width:27px;height:27px;margin-bottom:8px;font-size:.42rem}
  #invitationGate .gate-content .eyebrow {margin-bottom:4px;font-size:.43rem;letter-spacing:.14em}
  #invitationGate .gate-content h1 {font-size:clamp(1.65rem,8.6vw,2.35rem);line-height:.9;white-space:nowrap}
  #invitationGate .gate-content h1 span {margin-inline:.05em}
  #invitationGate .gate-date {margin:8px 0 5px;padding:3px 9px;font-size:.46rem}
  #invitationGate .gate-guest {max-width:180px;margin:0;font-size:.48rem;line-height:1.25}
  #invitationGate .gate-guest strong {margin-top:0;font-size:.57rem}
  #invitationGate .open-invitation {right:27px;bottom:12px;width:64px;height:62px}
  #invitationGate .open-gift {width:49px;height:47px;transform:none}
  #invitationGate .open-gift-box {height:29px}
  #invitationGate .open-gift-lid {top:13px;height:10px}
  #invitationGate .open-gift-ribbon {left:21px;top:13px;width:7px;height:34px}
  #invitationGate .open-gift-bow {top:2px;width:18px;height:14px;border-width:5px}
  #invitationGate .open-gift-bow-left {left:7px}
  #invitationGate .open-gift-bow-right {right:7px}
  #invitationGate .open-gift-tooltip {right:50%;top:-2px;padding:6px 8px;border-radius:10px;font-size:.52rem;transform:translate(50%,-100%);animation:envelope-tooltip-mobile 2.3s ease-in-out infinite alternate}
  #invitationGate .open-gift-tooltip::after {right:19px;bottom:-7px;border-top:0;border-right:1px solid #d6bd82;border-bottom:1px solid #d6bd82}
  #invitationGate .gate-sound {left:24px;bottom:10px;min-height:24px;padding:0 7px;font-size:.48rem}
  #invitationGate .gate-sound .music-bars {width:12px;height:12px}
}
@media(min-width:621px) and (max-height:680px) {
  #invitationGate .gate-card {width:min(900px,calc(100vw - 24px));height:calc(100dvh - 24px);min-height:0}
  #invitationGate .gate-photo {right:38px;top:30px;width:170px;height:205px;border-width:6px}
  #invitationGate .gate-content {padding:28px 250px 24px 48px}
  #invitationGate .monogram {width:34px;height:34px;margin-bottom:10px}
  #invitationGate .gate-content .eyebrow {margin-bottom:5px}
  #invitationGate .gate-content h1 {font-size:clamp(2.2rem,8dvh,3.4rem)}
  #invitationGate .gate-date {margin:9px 0 5px;padding:4px 12px}
  #invitationGate .gate-guest {font-size:.58rem}.gate-guest strong{font-size:.7rem}
  #invitationGate .open-invitation {right:71px;bottom:18px;width:78px;height:76px}
  #invitationGate .open-gift {width:59px;height:57px;transform:scale(.78)}
  #invitationGate .open-gift-box {height:35px}
  #invitationGate .open-gift-lid {top:16px;height:11px}
  #invitationGate .open-gift-ribbon {left:26px;top:16px;width:8px;height:41px}
  #invitationGate .open-gift-bow {top:2px;width:21px;height:17px;border-width:5px}
  #invitationGate .open-gift-bow-left {left:10px}
  #invitationGate .open-gift-bow-right {right:10px}
  #invitationGate .open-gift-tooltip {right:70px;font-size:.56rem;padding:7px 9px}
  #invitationGate .gate-sound {left:48px;bottom:16px;min-height:27px;font-size:.5rem}
}
@media(prefers-reduced-motion:reduce) {
  #invitationGate .open-gift,#invitationGate .open-gift-tooltip,#invitationGate .gate-photo {animation:none!important}
}
@keyframes envelope-tooltip-mobile {from{transform:translate(50%,-100%)}to{transform:translate(50%,calc(-100% - 3px))}}

/* Give each name its own line; never break Vietnamese names into letters. */
#invitationGate #gateTitle {display:grid;justify-items:start;gap:5px;width:100%;max-width:100%;font-size:clamp(2rem,4.5vw,3.6rem);line-height:1.1;white-space:normal;overflow-wrap:normal;word-break:normal}
#invitationGate #gateTitle .gate-person {display:block;max-width:100%;margin:0;color:var(--jade-900);font:inherit;vertical-align:baseline;text-wrap:balance;animation:gate-name-arrive .9s .25s both,gate-name-breathe 4.5s 1.2s ease-in-out infinite alternate}
#invitationGate #gateTitle .gate-bride {color:#8e6c30;animation-delay:.45s,1.4s}
#invitationGate #gateTitle .gate-ampersand {margin:0 0 0 1.5em;font:400 .4em/1 var(--sans);color:#b28d46;animation:gate-name-arrive .8s .35s both}
#invitationGate .gate-content {padding-top:35px}
#invitationGate .monogram {margin-bottom:14px}
#invitationGate .gate-date {margin-top:15px}
@keyframes gate-name-arrive {from{opacity:0;transform:translateY(14px);filter:blur(5px)}to{opacity:1;transform:translateY(0);filter:blur(0)}}
@keyframes gate-name-breathe {from{translate:0 0;text-shadow:0 0 0 transparent}to{translate:0 -3px;text-shadow:0 6px 18px #bda97835}}
@media(min-width:621px) and (max-width:900px) {
  #invitationGate .gate-content {padding-left:40px;padding-right:260px}
  #invitationGate .gate-photo {width:180px;height:225px;right:35px}
  #invitationGate .gate-content .eyebrow {white-space:nowrap}
  #invitationGate .gate-sound {left:40px}
  #invitationGate .open-invitation {right:65px}
}
@media(max-width:620px) {
  #invitationGate .gate-content {padding-top:16px;padding-right:120px}
  #invitationGate .monogram {margin-bottom:6px}
  #invitationGate #gateTitle {font-size:clamp(1.25rem,5.6vw,2rem);gap:2px;line-height:1.05}
  #invitationGate .gate-date {margin-top:6px}
  #invitationGate .gate-guest {max-width:100%}
}
@media(min-width:621px) and (max-height:680px) {
  #invitationGate #gateTitle {font-size:clamp(1.5rem,6dvh,2.7rem);gap:2px}
  #invitationGate .gate-content {padding-top:22px}
  #invitationGate .monogram {margin-bottom:8px}
}
@media(prefers-reduced-motion:reduce) {
  #invitationGate #gateTitle span {animation:none!important;translate:none;filter:none}
}
/* Expressive invitation lettering, with space reserved for the centered heading. */
#invitationGate .gate-heading {position:absolute;z-index:5;top:19px;left:0;right:0;margin:0;text-align:center;font:600 3.7rem/1.2 'Dancing Script',cursive;color:#987332;pointer-events:none;animation:invitation-heading-in 1.2s both}
#invitationGate .gate-heading::before,#invitationGate .gate-heading::after {content:'✦';display:inline-block;margin:0 23px;vertical-align:middle;font:400 .85rem/1 var(--sans);color:#bea365;animation:invitation-star 2.4s ease-in-out infinite alternate}
#invitationGate .gate-content {padding-top:110px}
#invitationGate .monogram {position:absolute;left:32px;top:28px;margin:0}
#invitationGate .gate-content > .eyebrow {display:none}
#invitationGate .gate-photo {top:119px}
#invitationGate #gateTitle {font-size:clamp(3rem,7vw,5.4rem);gap:4px;line-height:1.04}
#invitationGate #gateTitle .gate-person {position:relative;transform-origin:left center;animation:invitation-name-in 1.2s .15s cubic-bezier(.16,1,.3,1) both,invitation-name-float 3.4s 1.4s ease-in-out infinite alternate;background:linear-gradient(110deg,#183c35 15%,#183c35 32%,#719f7b 43%,#d6bc7a 48%,#183c35 60%,#183c35 85%);background-size:260% 100%;background-clip:text;-webkit-background-clip:text;color:transparent;animation-name:invitation-name-in,invitation-name-float,invitation-name-shine;animation-duration:1.2s,3.4s,5s;animation-delay:.15s,1.4s,1.4s;animation-timing-function:cubic-bezier(.16,1,.3,1),ease-in-out,linear;animation-iteration-count:1,infinite,infinite;animation-direction:normal,alternate,normal}
#invitationGate #gateTitle .gate-bride {background-image:linear-gradient(110deg,#967032 15%,#967032 32%,#d4af60 43%,#fff0b7 48%,#967032 60%,#967032 85%);animation-delay:.4s,1.65s,2s}
#invitationGate #gateTitle .gate-ampersand {font-family:'Dancing Script',cursive;font-size:.38em;margin-left:2.2em;animation:invitation-amp-in 1.2s .3s both,invitation-star 2.8s 1.5s ease-in-out infinite alternate}
#invitationGate .gate-card {box-shadow:0 38px 115px #031815a8,0 0 65px #dfbd6430}
#invitationGate .gate-ambient i {width:6px;height:6px;box-shadow:0 0 18px 6px #f4cd6680;animation-duration:4s}
#invitationGate .gate-photo {animation:envelope-stamp-in .9s .3s both,envelope-stamp-float 3.4s 1.2s ease-in-out infinite alternate}
@keyframes invitation-heading-in {from{opacity:0;transform:translateY(-22px) scale(.85);filter:blur(8px)}to{opacity:1;transform:none;filter:none}}
@keyframes invitation-name-in {0%{opacity:0;transform:translate(-45px,24px) rotate(-7deg) scale(.7);filter:blur(9px)}70%{opacity:1;transform:translate(3px,-3px) rotate(1deg) scale(1.035);filter:blur(0)}100%{opacity:1;transform:none;filter:none}}
@keyframes invitation-name-float {from{translate:0 0;rotate:-.5deg;filter:drop-shadow(0 3px 0 #bba66b18)}to{translate:6px -7px;rotate:.6deg;filter:drop-shadow(0 10px 12px #bba66b50)}}
@keyframes invitation-name-shine {0%{background-position:130% 0}100%{background-position:-130% 0}}
@keyframes invitation-amp-in {from{opacity:0;transform:rotate(-60deg) scale(.3)}to{opacity:1;transform:none}}
@keyframes invitation-star {from{opacity:.5;scale:.85}to{opacity:1;scale:1.2}}
@media(min-width:621px) and (max-width:900px) {
  #invitationGate #gateTitle {font-size:clamp(2.7rem,6.7vw,4.2rem)}
  #invitationGate .gate-content {padding-right:245px}
}
@media(max-width:620px) {
  #invitationGate .gate-heading {top:12px;font-size:clamp(1.7rem,7vw,2.5rem)}
  #invitationGate .gate-heading::before,#invitationGate .gate-heading::after {margin:0 10px;font-size:.45rem}
  #invitationGate .monogram {display:none}
  #invitationGate .gate-content {padding-top:57px;padding-left:22px;padding-right:115px}
  #invitationGate .gate-photo {top:60px;width:76px;height:96px}
  #invitationGate #gateTitle {font-size:clamp(1.6rem,7.6vw,2.8rem);gap:1px;line-height:1}
  #invitationGate .gate-date {font-size:.44rem;margin-top:5px;padding:2px 7px}
  #invitationGate .gate-guest {font-size:.45rem;line-height:1.2}
  #invitationGate .gate-guest strong {font-size:.53rem}
}
@media(min-width:621px) and (max-height:680px) {
  #invitationGate .gate-heading {top:12px;font-size:2.5rem}
  #invitationGate .gate-content {padding-top:70px}
  #invitationGate .gate-photo {top:68px;height:175px;width:145px}
  #invitationGate #gateTitle {font-size:clamp(2rem,8dvh,3.5rem);gap:1px}
  #invitationGate .gate-date {margin-top:7px}
}
@media(prefers-reduced-motion:reduce) {
  #invitationGate #gateTitle .gate-person {animation:none!important;translate:none;rotate:none;filter:none;background:none;color:var(--jade-900)}
  #invitationGate #gateTitle .gate-bride {color:#967032}
  #invitationGate .gate-heading,#invitationGate .gate-heading::before,#invitationGate .gate-heading::after {animation:none!important}
}
@media(max-width:620px) {
  #invitationGate .open-gift-tooltip {right:58px;top:50%;transform:translateY(-50%);animation:envelope-tooltip-float 2.3s ease-in-out infinite alternate}
  #invitationGate .open-gift-tooltip::after {right:-7px;bottom:5px;border-bottom:0;border-top:1px solid #d6bd82}
}

/* Keep the invitation details inside the folded paper's safe area. */
#invitationGate .gate-content {padding-left:clamp(70px,9vw,100px);padding-right:340px;padding-top:120px}
#invitationGate .gate-photo {right:70px;top:130px}
#invitationGate .monogram {left:48px;top:35px}
#invitationGate .gate-guest {position:absolute;left:15%;right:15%;bottom:125px;width:auto;max-width:none;margin:0;text-align:center;font-size:.8rem;line-height:1.65}
#invitationGate .gate-guest strong {margin-top:5px;font-size:1.05rem}
@media(min-width:621px) and (max-width:900px) {
  #invitationGate .gate-content {padding-left:65px;padding-right:255px}
  #invitationGate .gate-photo {right:55px;width:165px;height:210px}
}
@media(max-width:620px) {
  #invitationGate .gate-card {height:min(85vw,calc(100dvh - 16px));min-height:280px;max-height:390px}
  #invitationGate .gate-content {padding:62px 120px 20px 34px}
  #invitationGate .gate-photo {right:28px;top:65px;width:72px;height:91px}
  #invitationGate .gate-guest {left:12%;right:12%;bottom:81px;font-size:.55rem;line-height:1.35}
  #invitationGate .gate-guest strong {font-size:.66rem;margin-top:3px}
}
@media(min-width:621px) and (max-height:680px) {
  #invitationGate .gate-content {padding:74px 250px 20px 65px}
  #invitationGate .gate-photo {top:78px;right:55px;width:130px;height:158px}
  #invitationGate .gate-guest {bottom:71px;font-size:.63rem;line-height:1.35}
  #invitationGate .gate-guest strong {font-size:.8rem;margin-top:3px}
}

/* Center the opening gift; give the mobile invitation room to breathe. */
#invitationGate .open-invitation {left:calc(50% - 55px);right:auto;bottom:35px;grid-template-columns:1fr;gap:0}
#invitationGate .open-gift-tooltip {right:50%;top:-5px;border-radius:14px;transform:translate(50%,-100%);animation:envelope-tooltip-mobile 2.3s ease-in-out infinite alternate}
#invitationGate .open-gift-tooltip::after {right:calc(50% - 6px);bottom:-7px;border-top:0;border-right:1px solid #d6bd82;border-bottom:1px solid #d6bd82}
@media(max-width:620px) {
  #invitationGate {padding:16px}
  #invitationGate .gate-card {width:100%;height:min(620px,calc(100dvh - 32px));min-height:0;max-height:none}
  #invitationGate .gate-card::before {inset:10px}
  #invitationGate .gate-heading {top:28px;font-size:clamp(2.2rem,10vw,3rem)}
  #invitationGate .gate-content {padding:120px 44% 20px 28px}
  #invitationGate #gateTitle {font-size:clamp(1.85rem,8.8vw,3.2rem);gap:9px;line-height:1.06}
  #invitationGate #gateTitle .gate-ampersand {margin-left:1.5em;font-size:.46em}
  #invitationGate .gate-photo {top:122px;right:26px;width:31%;height:174px;border-width:5px}
  #invitationGate .gate-date {position:absolute;left:0;right:0;top:55%;margin:0 auto;padding:9px 17px;font-size:.64rem;letter-spacing:.14em}
  #invitationGate .open-invitation {width:90px;height:88px;left:calc(50% - 45px);bottom:70px}
  #invitationGate .open-gift {width:70px;height:68px}
  #invitationGate .open-gift-box {height:40px;left:7px;right:7px}
  #invitationGate .open-gift-lid {top:19px;height:13px}
  #invitationGate .open-gift-ribbon {left:30px;top:19px;width:9px;height:48px}
  #invitationGate .open-gift-bow {top:3px;width:25px;height:20px;border-width:6px}
  #invitationGate .open-gift-bow-left {left:10px}
  #invitationGate .open-gift-bow-right {right:10px}
  #invitationGate .open-gift-tooltip {font-size:.65rem;padding:8px 12px;top:-9px}
  #invitationGate .gate-sound {left:50%;bottom:22px;min-height:32px;padding:0 12px;white-space:nowrap;font-size:.6rem;translate:-50% 0}
  #invitationGate .gate-content::before {left:16px;bottom:60px;width:70px;height:124px}
}
@media(max-width:620px) and (max-height:650px) {
  #invitationGate .gate-heading {top:22px}
  #invitationGate .gate-content {padding-top:100px;padding-left:24px}
  #invitationGate .gate-photo {top:105px;right:23px;height:140px}
  #invitationGate #gateTitle {gap:5px}
  #invitationGate .gate-date {top:54%;font-size:.58rem;padding:7px 13px}
  #invitationGate .open-invitation {bottom:61px}
  #invitationGate .gate-sound {bottom:17px}
}
@media(min-width:621px) and (max-height:680px) {
  #invitationGate .open-invitation {left:calc(50% - 39px);bottom:18px}
}

/* A playful gift that bounces, sparkles and springs open. */
#invitationGate .gate-content {overflow:clip}
#invitationGate .open-invitation::before {content:"";position:absolute;inset:-15px;border-radius:50%;background:radial-gradient(circle,#ffdc807a, #eac3652b 48%,transparent 72%);pointer-events:none;animation:gift-aura-pulse 2.6s ease-in-out infinite}
#invitationGate .open-invitation::after {display:block;content:"";position:absolute;inset:6px;border:1px solid #d4ac5290;border-radius:50%;background:none;pointer-events:none;animation:gift-ring-expand 2.6s ease-out infinite}
#invitationGate .open-gift {transform-origin:50% 85%;animation:gift-playful-bounce 2.6s cubic-bezier(.45,0,.3,1) infinite;filter:drop-shadow(0 12px 9px #816b3b50)}
#invitationGate .open-gift-lid {animation:gift-lid-tease 2.6s ease-in-out infinite}
#invitationGate .open-gift-spark {width:9px;height:9px;border-radius:0;clip-path:polygon(50% 0,62% 36%,100% 50%,62% 64%,50% 100%,38% 64%,0 50%,38% 36%);background:#c39436;box-shadow:none;animation:gift-star-dance 2.6s ease-in-out infinite}
#invitationGate .open-gift-spark-one {left:0;top:25%;animation-delay:-.4s}
#invitationGate .open-gift-spark-two {left:auto;right:-3px;top:40%;animation-delay:-1.1s}
#invitationGate .open-gift-spark-three {left:22%;top:5%;animation-delay:-1.8s}
#invitationGate .open-invitation:hover .open-gift {animation-duration:1.5s}
#invitationGate .open-invitation.is-unwrapping .open-gift {animation:gift-open-pop .72s cubic-bezier(.16,1,.3,1) both}
#invitationGate .open-invitation.is-unwrapping .open-gift-lid {animation:gift-lid-launch .72s ease-out both}
#invitationGate .open-invitation.is-unwrapping .open-gift-bow,#invitationGate .open-invitation.is-unwrapping .open-gift-ribbon {animation:open-gift-ribbon .62s ease-out both}
#invitationGate .open-invitation.is-unwrapping::after {animation:gift-open-ring .72s ease-out both}
#invitationGate .open-invitation.is-unwrapping .open-gift-spark {animation:gift-open-spark .72s ease-out both}
#invitationGate .open-invitation.is-unwrapping .open-gift-tooltip {opacity:0;transition:opacity .18s}
@keyframes gift-playful-bounce {0%,12%,100%{transform:translateY(0) rotate(0) scale(1)}22%{transform:translateY(3px) rotate(-5deg) scale(1.07,.94)}34%{transform:translateY(-13px) rotate(7deg) scale(1.08)}45%{transform:translateY(-9px) rotate(-7deg) scale(1.06)}56%{transform:translateY(-12px) rotate(4deg) scale(1.07)}70%{transform:translateY(2px) rotate(-2deg) scale(1.04,.97)}82%{transform:translateY(-4px) rotate(0) scale(1)}}
@keyframes gift-lid-tease {0%,25%,70%,100%{translate:0 0;rotate:0deg}38%{translate:0 -5px;rotate:-5deg}52%{translate:0 -3px;rotate:4deg}}
@keyframes gift-aura-pulse {0%,100%{opacity:.35;scale:.85}45%{opacity:1;scale:1.18}}
@keyframes gift-ring-expand {0%,20%{opacity:0;transform:scale(.65)}30%{opacity:.65}75%,100%{opacity:0;transform:scale(1.65)}}
@keyframes gift-star-dance {0%,100%{opacity:0;transform:translateY(8px) scale(.2) rotate(-30deg)}45%{opacity:1;transform:translateY(-9px) scale(1.3) rotate(30deg)}75%{opacity:0;transform:translateY(-20px) scale(.3) rotate(75deg)}}
@keyframes gift-open-pop {0%{transform:scale(1)}25%{transform:scale(1.2,.87) rotate(-5deg)}55%{transform:translateY(-17px) scale(1.22) rotate(4deg)}100%{transform:translateY(-5px) scale(1.08)}}
@keyframes gift-lid-launch {0%{transform:none;opacity:1}100%{transform:translate(-22px,-56px) rotate(-32deg);opacity:0}}
@keyframes gift-open-ring {from{opacity:1;transform:scale(.7);border-width:3px}to{opacity:0;transform:scale(2.3);border-width:1px}}
@keyframes gift-open-spark {from{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-65px) scale(1.9) rotate(110deg)}}
@media(prefers-reduced-motion:reduce) {
  #invitationGate .open-invitation::before,#invitationGate .open-invitation::after,#invitationGate .open-gift,#invitationGate .open-gift i,#invitationGate .open-gift-spark {animation:none!important}
  #invitationGate .open-invitation::after,#invitationGate .open-gift-spark {opacity:0}
}
/* Softer editorial typography for the opened invitation. */
#invitationPage,body > .dialog {
  --serif:'Lora',Georgia,serif;
  --sans:'Nunito Sans','Be Vietnam Pro',sans-serif;
  font-family:var(--sans);
}
main .section-heading h2,main .intro-copy h2,main .story-sticky h2,main .gift-copy h2,main .wishes-copy h2,main .countdown-content h2 {font-family:var(--serif);font-weight:500;letter-spacing:-.025em;line-height:1.25}
main .intro-copy .quote,main .field-quote blockquote {font-family:var(--serif);font-style:italic;font-weight:400;letter-spacing:-.015em}
main .event-name h3,main .timeline-item h3,main .wish-stream-head h3 {font-family:var(--serif);font-weight:500}
main .event-name span,main .event-place address,main .event-place strong,main .timeline-item p {font-size:.9rem}
main .wish-list .wish p {font-size:.95rem;line-height:1.8}
main .field label,.quick-nav a {font-size:.85rem}
main .couple-names {font-family:'iCiel BC Cubano','Be Vietnam Pro',sans-serif;font-weight:400}

/* A light rice illustration visits a different screen corner every 14 seconds. */
.rice-drift {position:fixed;z-index:24;width:130px;height:220px;opacity:0;visibility:hidden;pointer-events:none;user-select:none;contain:layout style;--rice-x:-14px;--rice-y:25px;--rice-tilt:-12deg}
.rice-drift[data-corner='bottom-left'] {left:-18px;bottom:55px}
.rice-drift[data-corner='top-right'] {right:-18px;top:85px;--rice-x:14px;--rice-y:-25px;--rice-tilt:14deg}
.rice-drift[data-corner='bottom-right'] {right:-18px;bottom:85px;--rice-x:14px;--rice-tilt:12deg}
.rice-drift[data-corner='top-left'] {left:-18px;top:85px;--rice-y:-25px}
.rice-drift-stem,.rice-drift-companion {position:absolute;inset:0;display:block;background:url('/rice.svg') center/contain no-repeat;transform-origin:50% 95%;filter:drop-shadow(0 1px 1px #fff7dc70)}
.rice-drift-companion {inset:30px 23px 0 -8px;opacity:.55;rotate:-17deg}
.rice-drift.is-drifting {visibility:visible;animation:rice-corner-visit 7s ease-in-out both}
.rice-drift.is-drifting .rice-drift-stem {animation:rice-stem-sway 2.6s ease-in-out infinite alternate}
.rice-drift.is-drifting .rice-drift-companion {animation:rice-stem-sway 3.1s -.9s ease-in-out infinite alternate-reverse}
body.is-locked .rice-drift {visibility:hidden}
@keyframes rice-corner-visit {0%,100%{opacity:0;transform:translate(var(--rice-x),var(--rice-y)) rotate(var(--rice-tilt)) scale(.85)}22%,72%{opacity:.6}48%{transform:translate(0,-10px) rotate(0deg) scale(1)}}
@keyframes rice-stem-sway {from{transform:rotate(-9deg)}to{transform:rotate(7deg)}}
@media(max-width:620px) {.rice-drift {width:82px;height:142px}.rice-drift[data-corner^='top']{top:65px}}
@media(prefers-reduced-motion:reduce) {.rice-drift {display:none!important}}
/* Continuous photo movement inside stable, clickable frames. */
.memory-reel {position:relative;padding-top:60px}
.memory-reel-track {display:flex;gap:12px;width:100%;min-width:0;max-width:100%;overflow-x:auto;padding:0 24px;scroll-snap-type:none;scroll-behavior:auto;scrollbar-width:none;overscroll-behavior-x:contain}
.memory-reel-track::-webkit-scrollbar {display:none}
.memory-reel-card {flex:0 0 clamp(180px,20vw,300px);width:clamp(180px,20vw,300px);scroll-snap-align:none}
.reel-motion-toggle {position:absolute;top:13px;right:24px;padding:6px 12px;min-height:36px;border:1px solid #d6c38a65;border-radius:30px;background:#ffffff0a;color:#f8f1dc;font:500 .72rem/1.4 'Nunito Sans',sans-serif;cursor:pointer}
.living-photo {overflow:hidden}
.living-photo > img {animation:photo-roaming 12s var(--photo-phase,0s) ease-in-out infinite alternate;animation-play-state:paused;transform-origin:50% 50%}
.living-photo:nth-child(even) > img {animation-name:photo-roaming-reverse}
.living-photo.photo-in-view > img {animation-play-state:running}
.living-photo:hover > img,.living-photo:focus-within > img,body.is-locked .living-photo > img,body.photos-paused .living-photo > img {animation-play-state:paused}
.hero.is-ready .hero-frame.photo-in-view,.footer-photo.photo-in-view {translate:0 0;animation:photo-frame-float 6s var(--photo-phase,0s) ease-in-out infinite alternate}
.footer.is-finale .footer-photo {animation-name:photo-frame-float;animation-duration:6s;animation-iteration-count:infinite;animation-direction:alternate;animation-delay:var(--photo-phase,0s)}
@keyframes photo-roaming {from{transform:scale(1.05) translate(-1%,.5%)}to{transform:scale(1.17) translate(1.5%,-1.5%)}}
@keyframes photo-roaming-reverse {from{transform:scale(1.16) translate(1%,1%)}to{transform:scale(1.05) translate(-1%,-.5%)}}
@keyframes photo-frame-float {from{translate:0 0}to{translate:0 -12px}}
@media(max-width:620px) {.memory-reel {padding-top:56px}.memory-reel-track{padding-inline:16px;gap:10px}.memory-reel-card{flex-basis:170px;width:170px}.reel-motion-toggle{right:16px}.living-photo > img{animation-duration:10s}}
@media(prefers-reduced-motion:reduce) {.living-photo > img,.hero.is-ready .hero-frame.photo-in-view,.footer-photo.photo-in-view,.footer.is-finale .footer-photo{animation:none!important;translate:none}.living-photo > img{transform:none}}
/* Mobile invitation uses a real vertical layout instead of scaled desktop offsets. */
@media(max-width:700px) and (orientation:portrait) {
  #invitationGate {padding:12px}
  #invitationGate .gate-card {width:100%;max-width:480px;height:min(800px,calc(100dvh - 24px));min-height:0;max-height:none;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:52px auto minmax(80px,1fr) 34px 114px 40px;gap:10px;padding:20px 26px 16px;align-items:center}
  #invitationGate .gate-content {display:contents}
  #invitationGate .gate-content::before,#invitationGate .gate-content::after,#invitationGate .monogram {display:none}
  #invitationGate .gate-heading {position:relative;inset:auto;grid-row:1;font-size:2.6rem;line-height:1.2;white-space:nowrap}
  #invitationGate .gate-heading::before,#invitationGate .gate-heading::after {margin-inline:10px;font-size:.55rem}
  #invitationGate #gateTitle {position:relative;z-index:3;grid-row:2;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:8px 12px;font-size:clamp(2.1rem,10vw,2.8rem);line-height:1.2;text-align:center;padding-block:8px}
  #invitationGate #gateTitle .gate-person {max-width:100%;transform-origin:center}
  #invitationGate #gateTitle .gate-ampersand {margin:0;font-size:.55em}
  #invitationGate .gate-photo {position:relative;inset:auto;grid-row:3;justify-self:center;width:min(78%,260px);height:calc(100% - 14px);min-height:0;border:6px solid #fffaf0;background-position:center 45%;box-shadow:0 12px 28px #193a3233}
  #invitationGate .gate-photo-caption {display:none}
  #invitationGate .gate-photo-number {font-size:.6rem;left:10px;top:10px}
  #invitationGate .gate-date {position:relative;inset:auto;grid-row:4;justify-self:center;width:fit-content;margin:0;padding:7px 16px;font-size:.78rem;letter-spacing:.12em}
  #invitationGate .open-invitation {position:relative;inset:auto;grid-row:5;align-self:end;justify-self:center;width:90px;height:78px;margin:0}
  #invitationGate .open-gift-tooltip {font-size:.78rem;top:-5px;padding:8px 14px}
  #invitationGate .gate-sound {position:relative;inset:auto;grid-row:6;justify-self:center;width:auto;min-height:40px;margin:0;padding:0 14px;font-size:.72rem;translate:none;white-space:nowrap}
  #invitationGate .gate-sound .music-bars {width:17px;height:17px}
}
@media(max-width:700px) and (orientation:portrait) and (max-height:650px) {
  #invitationGate .gate-card {grid-template-rows:44px auto minmax(70px,1fr) 32px 104px 40px;gap:5px;padding:14px 20px 12px}
  #invitationGate .gate-heading {font-size:2.3rem}
  #invitationGate #gateTitle {padding-block:4px;font-size:2.1rem}
}
/* Shared entrance and exit motion for every public dialog. */
.dialog.is-visible {animation:popup-backdrop-in .3s ease-out both}
.dialog.is-visible .dialog-panel {animation:popup-panel-in .4s cubic-bezier(.16,1,.3,1) both;transform-origin:50% 60%}
.dialog.is-closing {animation:popup-backdrop-out .26s ease-in both;pointer-events:none}
.dialog.is-closing .dialog-panel {animation:popup-panel-out .26s ease-in both}
@keyframes popup-backdrop-in {from{opacity:0}to{opacity:1}}
@keyframes popup-backdrop-out {from{opacity:1}to{opacity:0}}
@keyframes popup-panel-in {from{opacity:0;transform:translateY(32px) scale(.92)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes popup-panel-out {from{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(20px) scale(.96)}}
@media(prefers-reduced-motion:reduce) {.dialog.is-visible,.dialog.is-visible .dialog-panel,.dialog.is-closing,.dialog.is-closing .dialog-panel {animation:none!important}}
/* Official itinerary and family addresses follow the invitation palette. */
.event-day{margin:0;padding:24px 0 12px;color:var(--jade-900);font-family:var(--serif);font-size:clamp(1.3rem,3vw,1.8rem);font-weight:500;text-transform:capitalize;border-bottom:1px solid var(--line)}
.event-day:not(:first-child){margin-top:32px}
.event-directions{display:flex;flex-direction:column;align-items:flex-start;gap:6px}
.event-place strong{white-space:pre-line}
.event-places{grid-column:3/-1;display:grid;gap:20px;min-width:0}
.event-venue-group{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:24px;align-items:center}
.event-venue-group+.event-venue-group{padding-top:20px;border-top:1px solid var(--line)}
.event-venue-group .event-place{grid-column:auto}
.event-row .event-venue-group .map-link{grid-column:auto}
@media(min-width:1001px){
  .event-row{grid-template-columns:135px minmax(0,1fr) minmax(0,1fr) 88px;column-gap:32px}
  .event-venue-group{grid-template-columns:minmax(0,1fr) 88px;column-gap:32px}
}
@media(min-width:701px) and (max-width:1000px){
  .event-row{grid-template-columns:95px minmax(0,1fr)}
  .event-row>.event-place{grid-column:2}
}
@media(max-width:1000px){.event-places{grid-column:2/-1}}
@media(max-width:1000px){.event-venue-group{grid-template-columns:minmax(0,1fr);gap:8px}.event-venue-group .map-link{justify-self:start}}
@media(max-width:1000px){.event-row .event-directions{grid-column:2/-1;flex-direction:row;flex-wrap:wrap;gap:8px 24px}}
.lunar-date{margin:-20px 0 32px;color:var(--muted);font-style:italic}
.locations{background:var(--ivory)}
.family-locations{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px}
.locations-heading{min-width:0;align-self:center;padding:40px 44px 40px 0}
.locations-heading h2{max-width:8ch;text-wrap:balance}
.locations-description{max-width:440px;margin:28px 0 0;color:var(--muted);font:italic 400 1rem/1.95 var(--serif);letter-spacing:-.015em;white-space:pre-line}
.family-location{min-width:0;overflow:hidden;border:1px solid var(--line);border-radius:8px;background:#fffdf6;box-shadow:0 14px 50px #183c3509;display:flex;flex-direction:column}
.location-sanctuary{width:100%}
.location-sanctuary .family-location-copy{text-align:center}
.location-sanctuary h3{white-space:pre-line;font-size:clamp(1.5rem,7.5vw,3rem)}
.family-location-copy{padding:32px;flex:1}
.family-location .eyebrow{margin:0 0 12px}
.family-location h3{margin:0 0 20px;font:500 clamp(2rem,4vw,3rem)/1.2 var(--serif);color:var(--jade-900)}
.family-parents{white-space:pre-line;min-height:3.4em;margin:0 0 18px}
.family-location address{font-style:normal;color:var(--muted);line-height:1.7}
.family-map-link{display:inline-flex;align-items:center;min-height:44px;margin-top:18px;color:var(--jade-900);font-weight:700;text-decoration:underline;text-underline-offset:6px}
.family-map-link:focus-visible{outline:2px solid var(--jade-900);outline-offset:4px}
.family-map{display:block;width:100%;height:260px;border:0;background:#e8eadf}
.family-location,.family-map{scroll-margin-top:90px}
.family-location:target{outline:2px solid var(--wheat);outline-offset:4px}
@media(max-width:700px){.family-locations{grid-template-columns:1fr;gap:24px}.locations-heading{padding:0 0 8px}.locations-heading h2{max-width:12ch}.location-sanctuary{width:100%}.family-location-copy{padding:26px 24px}.family-parents{min-height:0}.family-map{height:240px}.lunar-date{margin-top:0}.event-day:not(:first-child){margin-top:24px}}
