:root{
  --ink:#2a1830;
  --ink-2:#3a2343;
  --violet:#6f4c86;
  --violet-deep:#311a40;
  --lilac:#bca7ca;
  --ivory:#fffaf0;
  --ivory-2:#f4eadc;
  --sage:#65705b;
  --gold:#b68a45;
  --gold-light:#e4c98c;
  --wood:#3a281f;
  --shadow:0 24px 70px rgba(32,19,37,.2);
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;background:#f4eadf}
body.wis-body{margin:0;color:var(--ink);background:#f4eadf;font-family:Georgia,'Times New Roman',serif;line-height:1.55}
body.wis-locked{overflow:hidden}
.wis-site{overflow:clip;position:relative;background:linear-gradient(#faf4ec,#efe4dc)}
.wis-site [hidden]{display:none!important}
.wis-site img{display:block;max-width:100%}
.wis-site a{color:inherit;text-decoration:none}
.wis-site button,.wis-site input,.wis-site textarea,.wis-site select{font:inherit}
.wis-site button{cursor:pointer}
.wis-site :focus-visible{outline:3px solid #7b4f8e;outline-offset:4px}
.wis-stage{position:relative;isolation:isolate;overflow:hidden;min-height:420px}
.wis-stage__inner{position:relative;z-index:3;width:min(94%,1440px);margin:auto}
.wis-reveal{opacity:1;transform:none}
.wis-js-ready .wis-reveal{opacity:0;transform:translateY(24px);transition:opacity .75s ease,transform .75s ease}
.wis-js-ready .wis-reveal.is-visible{opacity:1;transform:none}
.wis-crest{display:inline-block;color:#8c6a92;font-size:32px;line-height:1}
.wis-overline,.wis-kicker{font-family:Arial,sans-serif;letter-spacing:.22em;text-transform:uppercase;font-size:11px}
.wis-section-title{margin:0 0 20px;font-weight:500;letter-spacing:.06em;font-size:clamp(24px,2.5vw,38px)}
.wis-section-intro{max-width:360px}
.wis-section-intro h2{font-size:clamp(30px,3.1vw,52px);line-height:.95;margin:0 0 14px;font-weight:500;letter-spacing:-.03em;overflow-wrap:anywhere}
.wis-section-intro p{margin:0 0 18px;color:#5e4b62}

/* floating navigation */
.wis-header{position:sticky;top:14px;z-index:30;width:min(94%,1260px);margin:0 auto -68px;height:56px;border:1px solid rgba(112,76,132,.25);border-radius:999px;background:rgba(255,250,240,.82);backdrop-filter:blur(16px);box-shadow:0 15px 42px rgba(45,28,51,.13);display:flex;align-items:center;gap:18px;padding:7px 12px 7px 20px}
.wis-brand{font-size:16px;font-style:italic;white-space:nowrap;color:#3f2a48;line-height:.9}
.wis-brand small{display:block;font:600 7px/1.2 Arial,sans-serif;letter-spacing:.24em;margin-top:6px}
.wis-rail{display:flex;align-items:center;justify-content:center;gap:clamp(9px,1.35vw,22px);flex:1}
.wis-rail a{font:600 10px/1 Arial,sans-serif;text-transform:uppercase;letter-spacing:.1em;color:#5b4860;padding:9px 4px}
.wis-rail a:hover,.wis-rail a.is-active{color:#7a4d8a}
.wis-menu{display:none;border:0;background:#4e2b5d;color:white;width:38px;height:38px;border-radius:50%}
.wis-music{width:40px;height:40px;border-radius:50%;border:1px solid #c5a166;background:#3d244b;color:#fff4df;box-shadow:0 5px 16px rgba(45,28,51,.22)}

/* universal button shell */
.wis-button{position:relative;z-index:5;border:0;background:linear-gradient(135deg,#3a1f48,#643778 55%,#30193c);color:#fff7e9!important;border-radius:999px;min-height:48px;padding:12px 24px;display:inline-flex;align-items:center;justify-content:center;gap:12px;box-shadow:0 8px 24px rgba(61,36,71,.25),inset 0 0 0 1px rgba(231,204,145,.8);transition:transform .25s ease,box-shadow .25s ease,filter .25s ease}
.wis-button:before{content:'';position:absolute;inset:-5px;border:1px solid rgba(182,138,69,.52);border-radius:999px;pointer-events:none}
.wis-button:hover{transform:translateY(-2px);filter:brightness(1.07);box-shadow:0 12px 30px rgba(61,36,71,.3),inset 0 0 0 1px rgba(245,218,162,.9)}
.wis-button--small{min-height:42px;padding:10px 18px;font-size:13px}

/* opening gate */
.wis-opening{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:28px;background:
 linear-gradient(180deg,rgba(36,20,47,.18),rgba(36,20,47,.45)),
 url('assets/portal.webp') center/cover;color:#fff;overflow:auto}
.wis-opening:before{content:'';position:absolute;inset:-2% -1% auto;height:54%;background:url('assets/art/lavender_wisteria_canopy_border.png') top center/cover no-repeat;filter:drop-shadow(0 12px 20px rgba(35,17,41,.2));pointer-events:none}
.wis-opening:after{content:'';position:absolute;left:-6%;bottom:-6%;width:42vw;max-width:600px;aspect-ratio:3/4;background:url('assets/art/wisteria_garden_corner_cascade.png') bottom left/contain no-repeat;pointer-events:none;filter:drop-shadow(0 20px 24px rgba(32,16,37,.25))}
.wis-opening__content{position:relative;z-index:2;width:min(92vw,640px);padding:54px 36px 38px;text-align:center;background:linear-gradient(180deg,rgba(255,250,240,.88),rgba(247,236,227,.93));color:#38233f;border:1px solid rgba(207,178,194,.86);border-radius:220px 220px 26px 26px;box-shadow:0 28px 80px rgba(34,20,40,.3)}
.wis-opening__content:before{content:'';position:absolute;inset:-70px -48px auto;height:160px;background:url('assets/art/romantic_cascading_wisteria_garland.png') top center/contain no-repeat;pointer-events:none}
.wis-opening h1{font-weight:500;font-size:clamp(36px,5.2vw,74px);line-height:.92;margin:12px 0 16px;overflow-wrap:anywhere}
.wis-opening__verse{max-width:430px;margin:0 auto;color:#65526a}
.wis-opening__guest{display:flex;flex-direction:column;gap:4px;max-width:390px;margin:24px auto 25px;padding:14px 16px;border-block:1px solid rgba(121,82,134,.25)}
.wis-opening__guest small{font:600 9px Arial,sans-serif;letter-spacing:.18em}
.wis-opening__guest strong{font-size:clamp(20px,3vw,30px);font-weight:500;overflow-wrap:anywhere}
.wis-opening__portrait{display:none}
.wis-opening.is-opening{animation:wisGateOut .9s forwards}
@keyframes wisGateOut{to{opacity:0;visibility:hidden;transform:scale(1.025)}}

/* hero / canopy threshold */
.wis-hero{min-height:900px;display:grid;align-items:end;padding:130px 0 86px;background:
 linear-gradient(180deg,rgba(255,250,240,.06),rgba(55,33,62,.3)),
 url('assets/portal.webp') center/cover}
.wis-hero:before{content:'';position:absolute;z-index:1;inset:-4% 0 auto;height:36%;background:url('assets/art/lavender_wisteria_canopy_border.png') top center/cover no-repeat;pointer-events:none;filter:drop-shadow(0 18px 24px rgba(44,26,50,.2))}
.wis-hero:after{content:'';position:absolute;z-index:2;left:-6%;bottom:-12%;width:min(50vw,650px);aspect-ratio:3/4;background:url('assets/art/golden_wisteria_corner_garden.png') left bottom/contain no-repeat;pointer-events:none}
.wis-hero__grid{min-height:680px;display:grid;grid-template-columns:minmax(0,1fr) minmax(340px,1.4fr) minmax(0,1fr);gap:30px;align-items:end}
.wis-hero__center{position:relative;text-align:center;padding:55px 34px 38px;background:rgba(255,249,238,.9);border:1px solid rgba(183,145,173,.48);border-radius:250px 250px 28px 28px;box-shadow:var(--shadow);backdrop-filter:blur(8px)}
.wis-hero__center:before{content:'';position:absolute;inset:-52px -46px auto;height:140px;background:url('assets/art/cascading_lavender_wisteria_garland.png') top center/contain no-repeat;pointer-events:none}
.wis-hero__cover{width:min(76%,330px);aspect-ratio:4/5;margin:0 auto 22px;border-radius:180px 180px 18px 18px;overflow:hidden;box-shadow:0 18px 36px rgba(44,27,52,.22);position:relative}
.wis-hero__cover:after{content:'';position:absolute;inset:0;background:url('assets/art/ornate_wisteria_gilded_photo_frame.png') center/100% 100% no-repeat;pointer-events:none}
.wis-hero__cover img{width:100%;height:100%;object-fit:cover;object-position:center 24%}
.wis-display{font-size:clamp(46px,5.5vw,82px);line-height:.82;font-weight:500;margin:6px 0 14px;overflow-wrap:anywhere;color:#35223d}
.wis-display span{display:block;font-size:.56em;font-style:italic;color:#7a5984;margin:.15em 0}
.wis-date{font:600 11px/1.5 Arial,sans-serif;letter-spacing:.16em;text-transform:uppercase;color:#6b576f}
.wis-hero__verse{max-width:380px;margin:22px auto 0;color:#6a586f;font-style:italic}
.wis-side{align-self:center;background:rgba(255,249,240,.8);border:1px solid rgba(146,110,145,.3);padding:22px;border-radius:24px;box-shadow:0 18px 38px rgba(49,30,55,.12);backdrop-filter:blur(8px)}
.wis-side h3{font-weight:500;font-size:22px;margin:2px 0 8px;overflow-wrap:anywhere}
.wis-side p{margin:0;color:#66556a}
.wis-side--right{justify-self:end}
.wis-hero__mobilephotos{display:none}

/* countdown as cascade clock */
.wis-countdown{padding:72px 0 80px;background:linear-gradient(180deg,#281a32,#3a2745 55%,#281a32);color:#fffaf0;text-align:center}
.wis-countdown:before{content:'';position:absolute;z-index:1;left:50%;top:-40px;transform:translateX(-50%);width:min(1000px,96vw);height:220px;background:url('assets/art/cascading_wisteria_floral_chandelier.png') top center/contain no-repeat;opacity:.86;pointer-events:none}
.wis-countdown__row{position:relative;z-index:3;display:grid;grid-template-columns:repeat(4,minmax(80px,150px));justify-content:center;gap:18px;margin-top:28px}
.wis-time{position:relative;min-height:200px;padding:64px 14px 20px;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;background:linear-gradient(180deg,rgba(255,250,240,.94),rgba(238,225,234,.92));color:#3c2943;border-radius:100px 100px 24px 24px;border:1px solid rgba(214,184,208,.7);box-shadow:0 20px 35px rgba(12,8,17,.25)}
.wis-time:before{content:'';position:absolute;top:-54px;left:50%;transform:translateX(-50%);width:96px;height:140px;background:url('assets/art/cascading_lavender_wisteria_sprig.png') top center/contain no-repeat;pointer-events:none}
.wis-time strong{font-size:clamp(34px,4vw,54px);line-height:1;font-weight:500;font-variant-numeric:tabular-nums}
.wis-time small{font:600 10px Arial,sans-serif;letter-spacing:.12em;text-transform:uppercase;color:#765d7c;margin-top:8px}
.wis-countdown p{position:relative;z-index:3}

/* couple hanging portrait pavilion */
.wis-couple{padding:110px 0 100px;background:linear-gradient(180deg,#fbf5ed,#f0e6dd)}
.wis-couple:before{content:'';position:absolute;z-index:1;left:50%;top:-12px;transform:translateX(-50%);width:min(1180px,96vw);height:230px;background:url('assets/art/ornate_wisteria_pergola_beam.png') top center/contain no-repeat;pointer-events:none}
.wis-couple__grid{display:grid;grid-template-columns:minmax(0,1fr) 150px minmax(0,1fr);gap:34px;align-items:center;max-width:1040px}
.wis-person{position:relative;text-align:center;min-width:0;padding:35px 16px 22px}
.wis-person:before{content:'';position:absolute;z-index:-1;inset:10px 0 0;background:url('assets/art/ornate_wisteria_garden_trellis.png') center/contain no-repeat;opacity:.24}
.wis-person__portrait{position:relative;width:min(100%,340px);aspect-ratio:4/5;margin:auto;overflow:hidden;border-radius:180px 180px 16px 16px;background:#e7d7df;box-shadow:0 22px 45px rgba(53,34,61,.18)}
.wis-person__portrait:after{content:'';position:absolute;inset:0;z-index:2;background:url('assets/art/ornate_wisteria_wedding_portrait_frame.png') center/100% 100% no-repeat;pointer-events:none}
.wis-person__portrait img{width:100%;height:100%;object-fit:cover;object-position:center 25%;transition:transform .7s ease}
.wis-person:hover .wis-person__portrait img{transform:scale(1.035)}
.wis-person__portrait span{display:grid;place-items:center;height:100%;font-size:110px;color:#6d4d77}
.wis-person h2{font-size:clamp(30px,3vw,44px);font-weight:500;margin:18px 0 5px;overflow-wrap:anywhere}
.wis-person p{margin:0;color:#66556b;overflow-wrap:anywhere}
.wis-couple__axis{text-align:center;color:#76567f;letter-spacing:.08em}

/* events pergola walk */
.wis-events{padding:92px 0 100px;background:linear-gradient(180deg,#34223f,#25192f);color:#fff8f1}
.wis-events:before,.wis-events:after{content:'';position:absolute;z-index:1;top:10px;bottom:0;width:min(27vw,390px);background:url('assets/art/ornate_wisteria_pergola_column.png') top center/contain no-repeat;pointer-events:none}
.wis-events:before{left:-8vw}.wis-events:after{right:-8vw;transform:scaleX(-1)}
.wis-events__grid{display:grid;grid-template-columns:minmax(220px,.8fr) repeat(2,minmax(0,1fr)) minmax(180px,.65fr);gap:22px;align-items:center}
.wis-events .wis-section-intro{color:#fff8f1}
.wis-events .wis-section-intro p,.wis-events__quote{color:#d8c9d8}
.wis-parchment{position:relative;color:#3b2b40;background:linear-gradient(180deg,#fffaf0,#f0e4d7);border:1px solid rgba(184,145,170,.55);box-shadow:0 18px 38px rgba(13,8,17,.18)}
.wis-parchment:before{content:'';position:absolute;inset:-9px;border:1px solid rgba(183,139,70,.55);pointer-events:none;border-radius:inherit}
.wis-event{min-height:360px;padding:60px 28px 36px;border-radius:180px 180px 18px 18px;text-align:center;display:flex;flex-direction:column;justify-content:center;overflow:visible}
.wis-event:after{content:'';position:absolute;inset:-38px 8% auto;height:110px;background:url('assets/art/cascading_purple_wisteria_garland.png') top center/contain no-repeat;pointer-events:none}
.wis-event__icon{font-size:28px;color:#8b6a90}.wis-event h3{font-size:31px;font-weight:500;margin:6px 0}.wis-event p,.wis-event address,.wis-event strong{margin:4px 0;overflow-wrap:anywhere}.wis-event address{font-style:normal;color:#65566a}
.wis-events__quote{text-align:center;font-style:italic;font-size:19px}

/* story vine path */
.wis-story{padding:90px 0;background:linear-gradient(180deg,#fbf5ef,#eee3da)}
.wis-story:before{content:'';position:absolute;z-index:1;left:-7vw;top:14%;width:min(48vw,720px);height:70%;background:url('assets/art/sweeping_wisteria_vine_branch.png') left center/contain no-repeat;opacity:.28;pointer-events:none}
.wis-story__layout{display:grid;grid-template-columns:250px minmax(0,1fr);gap:34px;align-items:center}
.wis-story__row{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(220px,1fr);gap:20px;overflow:auto;padding:30px 8px 24px;scroll-snap-type:x mandatory}
.wis-story__card{position:relative;min-height:360px;padding:190px 24px 26px;background:#fffaf0;border:1px solid rgba(158,116,153,.4);border-radius:145px 145px 20px 20px;box-shadow:0 20px 38px rgba(52,34,60,.14);scroll-snap-align:start;overflow:visible}
.wis-story__card:before{content:'';position:absolute;inset:-18px -16px auto;height:120px;background:url('assets/art/cascading_lavender_wisteria_garland.png') top center/contain no-repeat;pointer-events:none}
.wis-story__photo{position:absolute;top:10px;left:50%;transform:translateX(-50%);width:calc(100% - 22px);height:165px;object-fit:cover;object-position:center 25%;border-radius:130px 130px 8px 8px}
.wis-story__card span{color:#886b8c}.wis-story__card h3{font-size:23px;margin:4px 0 8px;font-weight:500}.wis-story__card p{margin:0;color:#66566b;overflow-wrap:anywhere}

/* gallery suspended grove */
.wis-gallery{padding:90px 0 100px;background:linear-gradient(180deg,#2f2038,#20172a);color:#fff8f1}
.wis-gallery:before{content:'';position:absolute;z-index:1;right:-7%;top:-2%;width:min(48vw,670px);height:95%;background:url('assets/art/cascading_lavender_wisteria_corner.png') right top/contain no-repeat;opacity:.62;pointer-events:none}
.wis-gallery__layout{display:grid;grid-template-columns:240px minmax(0,1fr);gap:34px;align-items:center}
.wis-gallery .wis-section-intro{color:#fff}.wis-gallery .wis-section-intro p{color:#d8c9dc}
.wis-gallery__rail{display:flex;gap:20px;align-items:center;overflow:auto;padding:32px 10px 40px;scroll-snap-type:x mandatory}
.wis-archive{position:relative;flex:0 0 clamp(200px,20vw,300px);height:360px;border:0;padding:0;background:#fff;border-radius:150px 150px 18px 18px;overflow:hidden;scroll-snap-align:start;box-shadow:0 22px 46px rgba(10,5,13,.4)}
.wis-archive:after{content:'';position:absolute;inset:0;background:url('assets/art/ornate_wisteria_vintage_frame.png') center/100% 100% no-repeat;pointer-events:none}
.wis-archive:nth-child(3n+2){height:300px;border-radius:18px}
.wis-archive:nth-child(3n+2):after{background-image:url('assets/art/ornate_wisteria_wedding_frame.png')}
.wis-archive img{width:100%;height:100%;object-fit:cover;object-position:center 25%;transition:transform .55s ease}.wis-archive:hover img{transform:scale(1.05)}
.wis-archive__label{position:absolute;z-index:2;left:14px;right:14px;bottom:14px;padding:8px 10px;border-radius:999px;background:rgba(44,26,50,.78);color:white;font-size:11px;backdrop-filter:blur(6px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* maps garden route */
.wis-map{padding:86px 0;background:linear-gradient(180deg,#f8f1e8,#e9ded5)}
.wis-map:before{content:'';position:absolute;z-index:1;left:-7%;bottom:-6%;width:min(44vw,620px);aspect-ratio:3/4;background:url('assets/art/wisteria_garden_corner_overlay.png') left bottom/contain no-repeat;pointer-events:none;opacity:.8}
.wis-map__layout{display:grid;grid-template-columns:1fr 1.55fr .8fr;gap:28px;align-items:center}
.wis-map__visual{position:relative;min-height:380px;background:linear-gradient(rgba(255,250,240,.25),rgba(255,250,240,.25)),url('assets/map-illustration.svg') center/cover;border:12px solid #f8eee6;border-radius:22px;box-shadow:0 22px 44px rgba(52,35,61,.15),0 0 0 1px rgba(126,88,133,.4)}
.wis-map__visual:after{content:'';position:absolute;inset:-34px;background:url('assets/ui/ui-map-reference.png') center/100% 100% no-repeat;pointer-events:none;opacity:.46}
.wis-map__visual span{display:none}
.wis-map__address h3{font-size:30px;font-weight:500;margin:0 0 8px}.wis-map__address address{font-style:normal;color:#66566a;overflow-wrap:anywhere}

/* gift alcove */
.wis-gift{padding:90px 0;background:linear-gradient(180deg,#33233e,#24192d);color:#fff8f1}
.wis-gift:before{content:'';position:absolute;z-index:1;right:-5%;bottom:-10%;width:min(40vw,560px);aspect-ratio:3/4;background:url('assets/art/golden_wisteria_corner_garden.png') right bottom/contain no-repeat;pointer-events:none}
.wis-gift__layout{display:grid;grid-template-columns:280px minmax(0,1fr);gap:32px;align-items:start}
.wis-gift .wis-section-intro{color:#fff}.wis-gift .wis-section-intro p{color:#d8c9dc}
.wis-gift__cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:22px}
.wis-bank{padding:38px 26px 28px;border-radius:26px;min-height:220px;display:flex;flex-direction:column;justify-content:center;gap:7px}
.wis-bank:after{content:'';position:absolute;inset:-18px;background:url('assets/ui/gift-payment-panel-shell.svg') center/100% 100% no-repeat;opacity:.36;pointer-events:none}
.wis-bank small{font:600 10px Arial,sans-serif;letter-spacing:.14em;text-transform:uppercase;color:#755d7d}.wis-bank strong{font-size:27px;font-weight:500;overflow-wrap:anywhere}.wis-bank span,.wis-bank p{color:#66566b;overflow-wrap:anywhere}.wis-bank button{align-self:flex-start;border:0;border-radius:999px;background:#4c2a5a;color:#fff7ea;padding:9px 15px}

/* RSVP correspondence pavilion */
.wis-rsvp{padding:96px 0;background:linear-gradient(180deg,#faf4ec,#eee2d8)}
.wis-rsvp:before{content:'';position:absolute;z-index:1;left:50%;top:-24px;transform:translateX(-50%);width:min(1100px,96vw);height:220px;background:url('assets/art/ornate_wisteria_pergola_beam.png') top center/contain no-repeat;opacity:.7;pointer-events:none}
.wis-rsvp__layout{display:grid;grid-template-columns:250px minmax(0,700px) minmax(170px,.55fr);gap:30px;align-items:start}
.wis-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;padding:42px 34px 32px;border-radius:28px;background:linear-gradient(180deg,rgba(255,250,240,.96),rgba(241,229,220,.98));box-shadow:var(--shadow);border:1px solid rgba(172,134,163,.45)}
.wis-form:after{content:'';position:absolute;inset:-22px;background:url('assets/art/romantic_cascading_wisteria_garland.png') top center/contain no-repeat;pointer-events:none;opacity:.5}
.wis-form label{position:relative;z-index:2;display:flex;flex-direction:column;gap:7px;font-size:13px;color:#4c3b51}.wis-form__wide{grid-column:1/-1}
.wis-form input,.wis-form select,.wis-form textarea{width:100%;max-width:100%;min-width:0;border:1px solid rgba(143,104,143,.35);border-radius:16px;background:#fffdf8;color:#35263c;padding:13px 14px;box-shadow:inset 0 1px 0 white}
.wis-form textarea{resize:vertical;min-height:110px}.wis-form button,.wis-form__status{position:relative;z-index:2}.wis-form__status{grid-column:1/-1;margin:0;font-size:13px}.wis-form__status.is-error{color:#8a2f47}.wis-form__status.is-success{color:#3c6d50}
.wis-rsvp__aside{align-self:end;color:#715e75;font-style:italic;margin:0}

/* wishes trellis */
.wis-guestbook{padding:90px 0 110px;background:linear-gradient(180deg,#2f2038,#21172a);color:#fff8f1}
.wis-guestbook:before{content:'';position:absolute;z-index:1;right:-3%;top:6%;width:min(34vw,500px);height:82%;background:url('assets/art/ornate_wisteria_trellis_panel.png') right center/contain no-repeat;opacity:.34;pointer-events:none}
.wis-guestbook__layout{display:grid;grid-template-columns:230px minmax(0,1fr) minmax(300px,.9fr);gap:26px;align-items:start}
.wis-guestbook .wis-section-intro p{color:#d7cad9}
.wis-wishes{display:grid;gap:13px;max-height:520px;overflow:auto;padding-right:8px}
.wis-wish-card,.wis-wishes__empty{background:rgba(255,250,240,.95);color:#3b2c40;border:1px solid rgba(192,155,184,.5);padding:18px 18px 17px;border-radius:12px 48px 12px 12px;box-shadow:0 12px 24px rgba(10,6,13,.16)}
.wis-wish-card h3{margin:0 0 5px;font-size:18px;font-weight:500}.wis-wish-card p{margin:0;overflow-wrap:anywhere;color:#66566b}
.wis-form--wish{grid-template-columns:1fr;background:#fff9ef;color:#3b2d40}
.wis-form--wish label{color:#4d3b51}.wis-form--wish label,.wis-form--wish .wis-button,.wis-form--wish .wis-form__status{grid-column:1}

/* closing final cascade */
.wis-closing{min-height:760px;padding:150px 0 42px;display:grid;align-items:end;text-align:center;background:
 linear-gradient(180deg,rgba(32,19,39,.15),rgba(32,19,39,.68)),
 url('assets/sunset.webp') center/cover;color:#fffaf1}
.wis-closing:before{content:'';position:absolute;z-index:1;inset:-2% 0 auto;height:55%;background:url('assets/art/lavender_wisteria_canopy_border.png') top center/cover no-repeat;pointer-events:none;filter:drop-shadow(0 18px 24px rgba(26,14,32,.18))}
.wis-closing:after{content:'';position:absolute;z-index:2;left:50%;bottom:0;transform:translateX(-50%);width:min(1050px,96vw);height:440px;background:url('assets/art/ornate_wisteria_garden_archway.png') center bottom/contain no-repeat;pointer-events:none;opacity:.8}
.wis-closing .wis-stage__inner{z-index:4;text-shadow:0 2px 12px rgba(20,10,25,.45)}
.wis-closing h2{font-size:clamp(54px,8vw,110px);font-weight:500;line-height:.86;margin:16px 0}.wis-closing p{font-size:17px}.wis-divider{display:block;margin:24px auto;color:#e6c98f}
.wis-closing__bottom{margin-top:260px;padding-top:18px;border-top:1px solid rgba(255,255,255,.35);display:flex;justify-content:space-between;gap:20px;font:600 10px Arial,sans-serif;letter-spacing:.12em;text-transform:uppercase}.wis-closing__bottom span{overflow-wrap:anywhere}.wis-closing__bottom small{display:block;font-size:7px}

/* generated decorative object from JS */
.wis-floral-object{position:absolute;z-index:2;top:-25px;left:-10vw;width:clamp(250px,34vw,560px);height:clamp(280px,42vw,650px);background:url('assets/art/cascading_purple_wisteria_cluster.png') top center/contain no-repeat;pointer-events:none;filter:drop-shadow(0 15px 18px rgba(42,23,48,.16));transform:translate3d(var(--depth-x,0),var(--depth-y,0),0);transform-origin:top center;animation:wisSway 10s ease-in-out infinite alternate}
.wis-floral-object--right{left:auto;right:-10vw;transform:scaleX(-1) translate3d(var(--depth-x,0),var(--depth-y,0),0);animation-delay:-4s}
@keyframes wisSway{to{rotate:1.8deg;translate:0 -7px}}

/* lightbox */
.wis-lightbox{position:fixed;inset:0;z-index:90;background:rgba(27,17,31,.93);display:grid;place-items:center;padding:28px}.wis-lightbox[hidden]{display:none!important}.wis-lightbox figure{margin:0;max-width:min(86vw,1000px);max-height:84vh;text-align:center}.wis-lightbox img{max-width:100%;max-height:76vh;object-fit:contain;border:8px solid #fff3e9;box-shadow:0 20px 70px #0008}.wis-lightbox figcaption{color:white;margin-top:8px}.wis-lightbox__close,.wis-lightbox__nav{position:absolute;border:1px solid #d7b67f;background:#3b2346;color:white;width:46px;height:46px;border-radius:50%;font-size:25px}.wis-lightbox__close{top:22px;right:22px}.wis-lightbox__nav--prev{left:22px;top:50%}.wis-lightbox__nav--next{right:22px;top:50%}

@media(max-width:1000px){
  .wis-rail{gap:7px}.wis-rail a{font-size:9px}
  .wis-events__grid{grid-template-columns:repeat(2,minmax(0,1fr))}.wis-events__grid>.wis-section-intro,.wis-events__quote{grid-column:1/-1}
  .wis-map__layout{grid-template-columns:1fr 1.5fr}.wis-map__address{grid-column:1/-1}
  .wis-guestbook__layout{grid-template-columns:220px 1fr}.wis-form--wish{grid-column:1/-1}
}
@media(max-width:850px){
  .wis-header{top:8px;margin-bottom:-62px}.wis-menu{display:block}.wis-rail{position:absolute;top:62px;right:0;display:none;flex-direction:column;align-items:stretch;width:min(280px,82vw);padding:12px;border:1px solid rgba(112,76,132,.24);border-radius:20px;background:rgba(255,250,240,.97);box-shadow:0 18px 38px rgba(45,28,51,.16)}.wis-header.is-menu-open .wis-rail{display:flex}.wis-rail a{font-size:11px;padding:11px 12px}
  .wis-hero__grid{grid-template-columns:1fr;max-width:650px}.wis-side{display:none}.wis-hero{padding-top:110px}.wis-hero__center{max-width:620px;margin:auto}
  .wis-couple__grid{grid-template-columns:1fr;max-width:560px}.wis-couple__axis{grid-row:2}
  .wis-story__layout,.wis-gallery__layout,.wis-gift__layout{grid-template-columns:1fr}.wis-story .wis-section-intro,.wis-gallery .wis-section-intro,.wis-gift .wis-section-intro{max-width:580px}
  .wis-map__layout{grid-template-columns:1fr}.wis-map__address{grid-column:auto}
  .wis-rsvp__layout{grid-template-columns:1fr}.wis-rsvp__aside{display:none}
  .wis-guestbook__layout{grid-template-columns:1fr}.wis-form--wish{grid-column:auto}
}
@media(max-width:600px){
  .wis-header{height:52px;padding:6px 8px 6px 15px}.wis-brand{font-size:14px}.wis-brand small{font-size:6px}.wis-music{width:36px;height:36px}.wis-menu{width:36px;height:36px}
  .wis-opening{padding:12px;place-items:end center;background-position:72% center}.wis-opening:before{height:38%;background-size:auto 100%}.wis-opening:after{width:78vw;left:-28%;bottom:-5%}.wis-opening__content{width:100%;padding:34px 18px 24px;border-radius:130px 130px 18px 18px}.wis-opening__content:before{height:110px;inset:-48px -16px auto}.wis-opening h1{font-size:clamp(31px,10vw,46px);line-height:1.02}.wis-opening__guest strong{font-size:20px}
  .wis-hero{min-height:790px;padding:118px 0 45px;background-position:74% center}.wis-hero:before{height:28%;background-size:auto 100%}.wis-hero:after{width:90vw;left:-35%;bottom:-5%}.wis-hero__center{padding:42px 18px 25px;border-radius:120px 120px 20px 20px}.wis-hero__center:before{height:95px;inset:-38px -14px auto}.wis-hero__cover{width:min(72vw,270px)}.wis-display{font-size:clamp(42px,12vw,58px)}
  .wis-countdown{padding:62px 0}.wis-countdown:before{height:145px;top:-28px}.wis-countdown__row{grid-template-columns:repeat(4,1fr);gap:7px}.wis-time{min-height:130px;padding:50px 6px 16px;border-radius:60px 60px 18px 18px}.wis-time:before{width:68px;height:95px;top:-38px}.wis-time strong{font-size:clamp(25px,8vw,34px)}.wis-time small{font-size:8px}
  .wis-couple{padding:90px 0 70px}.wis-couple:before{height:140px}.wis-person{padding-inline:0}.wis-person__portrait{width:min(78vw,310px)}
  .wis-events,.wis-story,.wis-gallery,.wis-map,.wis-gift,.wis-rsvp,.wis-guestbook{padding:66px 0}.wis-events__grid{grid-template-columns:1fr}.wis-events__grid>.wis-section-intro,.wis-events__quote{grid-column:auto}.wis-events:before,.wis-events:after{opacity:.32;width:45vw}.wis-event{min-height:300px;padding:50px 20px 28px}.wis-story__row{grid-auto-columns:minmax(210px,72vw)}.wis-story__card{min-height:340px;padding-top:178px}.wis-gallery__rail{gap:14px}.wis-archive{flex-basis:68vw;height:340px}.wis-archive:nth-child(3n+2){height:290px}.wis-map__visual{min-height:280px}.wis-gift__cards{grid-template-columns:1fr}
  .wis-form{grid-template-columns:1fr;padding:34px 18px 24px}.wis-form__wide{grid-column:1}.wis-form:after{inset:-12px}.wis-wishes{max-height:400px}
  .wis-closing{min-height:640px;padding-top:120px}.wis-closing:before{height:45%;background-size:auto 100%}.wis-closing:after{width:120vw;height:390px}.wis-closing__bottom{margin-top:210px;flex-direction:column;align-items:center}
  .wis-floral-object{width:58vw;height:70vw;left:-34vw;opacity:.72}.wis-floral-object--right{right:-34vw}
}
@media(max-width:390px){.wis-countdown__row{gap:4px}.wis-time{min-height:116px}.wis-time strong{font-size:25px}.wis-form{padding-inline:15px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.wis-js-ready .wis-reveal{opacity:1;transform:none;transition:none}.wis-floral-object{animation:none}.wis-button{transition:none}}
