@font-face{font-family:'Chorus';src:url(assets/fonts/Chorus.woff) format('woff');font-weight:400;font-style:normal;font-display:swap}
picture{display:contents}
@font-face{font-family:'Crimson Pro';src:url(assets/fonts/CrimsonPro-Regular.woff) format('woff');font-weight:400;font-style:normal;font-display:swap}
:root{--ink:#050813;--navy:#0a1330;--gold:#c9a24b;--champ:#ecd9a8;--ivory:#f6efe0;--serif:'Crimson Pro','Cormorant Garamond',Georgia,serif;--it:'Chorus','Apple Chancery','Zapfino',cursive;--script:'Chorus','Apple Chancery','Zapfino',cursive;--sans:'Crimson Pro',Georgia,serif}
*{box-sizing:border-box;margin:0;padding:0}
html{overflow-x:clip;scroll-behavior:smooth;-webkit-text-size-adjust:100%}
html.locked,html.locked body{overflow:hidden}
body{overflow-x:clip;background:var(--ink);color:var(--ivory);font:400 16px/1.7 var(--sans);-webkit-font-smoothing:antialiased}
body::before{content:"";position:fixed;inset:0;z-index:-1;background:radial-gradient(120% 60% at 50% 0,rgba(20,48,122,.4),transparent 62%),radial-gradient(90% 50% at 50% 100%,rgba(14,42,107,.3),transparent 65%),linear-gradient(#060a1a,#0a1330 50%,#050813)}
#fx{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
a{color:inherit;text-decoration:none}
:focus-visible{outline:2px solid var(--champ);outline-offset:4px}

.s{overflow-x:clip;position:relative;z-index:1;min-height:100svh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:12svh 24px}
.gold{background:linear-gradient(100deg,#b8913a,#fbeec0 38%,#d9b45a 62%,#fbf0c8);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 14px rgba(201,162,75,.22))}
.cap{font-size:.72rem;letter-spacing:.3em;text-transform:uppercase;color:var(--champ);font-weight:400}
h2{font:400 clamp(1.8rem,7.6vw,2.8rem)/1.25 var(--serif);letter-spacing:.1em;text-wrap:balance;margin-bottom:18px}
.lead{font:italic 400 clamp(1.25rem,5vw,1.6rem)/1.5 var(--it);color:var(--ivory);max-width:30ch;margin:0 auto}
.orn{display:block;position:relative;width:min(64vw,240px);height:9px;margin:26px auto;background:linear-gradient(90deg,transparent,var(--gold) 25%,var(--gold) 75%,transparent) center/100% 1px no-repeat}
.orn::after{content:"";position:absolute;left:50%;top:50%;width:7px;height:7px;background:var(--gold);transform:translate(-50%,-50%) rotate(45deg);box-shadow:0 0 0 5px var(--ink)}
.rv{opacity:0;transition:opacity 1.4s ease}.rv.in{opacity:1}

/* nav + floating */
.top{position:fixed;top:0;right:0;z-index:30;padding:max(12px,env(safe-area-inset-top)) 14px 0 0;opacity:0;pointer-events:none;transition:opacity .8s}
.menu-btn{width:46px;height:46px;background:none;border:0;cursor:pointer;display:grid;place-content:center;gap:7px}
.menu-btn span{display:block;width:24px;height:1px;background:var(--champ);transition:transform .3s}
.menu-btn[aria-expanded=true] span:first-child{transform:translateY(4px) rotate(45deg)}
.menu-btn[aria-expanded=true] span:last-child{transform:translateY(-4px) rotate(-45deg)}
.menu{position:fixed;inset:0;z-index:25;background:rgba(5,8,19,.96);display:grid;place-content:center;gap:26px;text-align:center;opacity:0;visibility:hidden;transition:opacity .4s,visibility .4s}
.menu.show{opacity:1;visibility:visible}
.menu a{font:400 1.7rem var(--serif);letter-spacing:.08em;color:var(--champ)}
body.open .top{opacity:1;pointer-events:auto}
.fab{position:fixed;bottom:max(18px,env(safe-area-inset-bottom));z-index:20;width:44px;height:44px;border-radius:50%;border:1px solid rgba(201,162,75,.55);background:rgba(5,8,19,.8);color:var(--champ);font-size:1.1rem;display:grid;place-items:center;cursor:pointer;opacity:0;pointer-events:none;transition:opacity .6s}
.fab[hidden]{display:none}
#mus{left:16px}#up{right:16px}
body.open #mus{opacity:1;pointer-events:auto}
#up.show{opacity:1;pointer-events:auto}
#mus.on{background:var(--gold);color:var(--ink)}
.toast{position:fixed;left:50%;bottom:84px;transform:translateX(-50%);z-index:40;background:var(--champ);color:var(--ink);padding:.6em 1.4em;font-size:.8rem;letter-spacing:.08em;opacity:0;pointer-events:none;transition:opacity .4s}
.toast.show{opacity:1}

/* 2 — flyer */
#invitation{padding:10svh 16px}
.frame{padding:clamp(8px,2.4vw,14px);border:1px solid rgba(201,162,75,.45);box-shadow:0 40px 90px rgba(0,0,0,.7),0 0 70px rgba(20,48,122,.35);transform:scale(.96);transition:opacity 1.4s ease,transform 1.6s cubic-bezier(.2,.7,.2,1)}
.frame.in{transform:none}
.frame img{display:block;width:auto;height:auto;max-width:min(86vw,520px);max-height:82svh}

/* 3 — details */
.date{font-size:clamp(1.8rem,8vw,3.1rem);margin:14px 0 6px}
.day{font:400 1.05rem var(--sans);letter-spacing:.4em;color:var(--champ)}
.time{font:400 .86rem/1.7 var(--sans);letter-spacing:.28em;color:var(--champ);margin-top:18px}
.venue{font:400 clamp(1.3rem,5.6vw,1.9rem)/1.25 var(--serif);letter-spacing:.14em;margin:12px 0 8px}
.addr{font-size:.8rem;letter-spacing:.28em;color:var(--champ)}
.cd{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(8px,4vw,32px);margin:44px auto 40px;max-width:420px}
.cd b{display:block;font:400 clamp(2rem,10vw,3.2rem)/1 var(--serif);letter-spacing:.06em;font-variant-numeric:tabular-nums}
.cd small{font-size:.6rem;letter-spacing:.26em;text-transform:uppercase;color:var(--champ)}
.evday{margin:44px 0 40px}.evday p{font:italic 400 1.45rem var(--it);color:var(--champ)}.evday[hidden],.cd[hidden]{display:none}

/* 4 — celebration */
.hl{list-style:none;margin:40px auto 0;width:min(90vw,520px)}
.hl li{padding:20px 6px;font:400 clamp(1.1rem,4.8vw,1.4rem)/1.4 var(--serif);letter-spacing:.16em;text-transform:uppercase}
.hl li+li{border-top:1px solid rgba(201,162,75,.25)}
#dresscode .cap{margin-top:4px}

/* 5 — register */
.facts{display:flex;flex-wrap:wrap;justify-content:center;gap:26px 40px;margin:38px 0}
.facts b{display:block;font:400 clamp(1.5rem,6.4vw,2.1rem)/1.15 var(--serif);letter-spacing:.1em;color:var(--ivory)}
.facts small{font-size:.62rem;letter-spacing:.26em;text-transform:uppercase;color:var(--champ)}
.qr{background:#fff;padding:clamp(16px,5vw,28px);width:min(82vw,340px);margin:0 auto;box-shadow:0 0 0 1px var(--gold),0 24px 60px rgba(0,0,0,.6)}
.qr img{display:block;width:100%;height:auto}
.scan{margin:30px auto 0;max-width:28ch;line-height:1.9}
.row{display:flex;flex-wrap:wrap;gap:16px;justify-content:center;margin-top:30px}
#closing h2{font:400 clamp(1.8rem,7.6vw,2.8rem)/1.25 var(--serif);letter-spacing:.1em;text-wrap:balance;margin-bottom:18px}

@media (prefers-reduced-motion:reduce){*{animation:none!important;transition-duration:.01s!important;transition-delay:0s!important}html{scroll-behavior:auto}}

.seal::after{content:"";width:60%;height:60%;border-radius:50%;box-shadow:inset 0 2px 4px rgba(0,0,0,.4),0 1px 1px rgba(255,255,255,.4)}
/* dress code image */
.dress{margin-top:34px;padding:clamp(6px,2vw,10px);border:1px solid rgba(201,162,75,.45);box-shadow:0 30px 70px rgba(0,0,0,.6)}
.dress img{display:block;width:min(88vw,497px);height:auto}

/* elegant buttons */
.btn,.open-btn{position:relative;border:1px solid rgba(214,177,92,.85);color:var(--champ);background:transparent;font:400 .92rem var(--serif);letter-spacing:.3em;text-transform:uppercase;cursor:pointer;transition:background .5s,color .5s,box-shadow .5s,opacity .9s,transform .4s}
.btn{display:inline-block;padding:1.05em 2.2em}
.btn::before,.open-btn::before{content:"";position:absolute;inset:4px;border:1px solid rgba(201,162,75,.3);pointer-events:none;transition:border-color .5s}
.open-btn{padding:1.2em 2.2em;font-size:.92rem;color:#f6e7b8;background:radial-gradient(120% 220% at 50% 0,rgba(201,162,75,.22),rgba(201,162,75,.04));animation:breathe 3.8s ease-in-out infinite}
.open-btn::before{inset:5px}
.open-btn span{display:inline-flex;align-items:center;gap:1.1em;margin-right:-.32em}
.open-btn span::before,.open-btn span::after{content:"";width:5px;height:5px;background:var(--gold);transform:rotate(45deg);flex:none;transition:background .5s}
@keyframes breathe{50%{box-shadow:0 0 34px rgba(214,177,92,.35),inset 0 0 20px rgba(214,177,92,.12)}}
@media (hover:hover){
.btn:hover,.open-btn:hover{background:linear-gradient(135deg,#a07c2e,#f4e1a0 45%,#c9a24b);color:#1a1203;box-shadow:0 0 30px rgba(201,162,75,.35)}
.btn:hover::before,.open-btn:hover::before{border-color:rgba(5,8,19,.35)}
.open-btn:hover span::before,.open-btn:hover span::after{background:#1a1203}}
.open-btn:disabled{opacity:0;pointer-events:none;transform:translateY(8px);animation:none}

/* ballroom scene */
.intro{padding:0;min-height:100svh;overflow:hidden;perspective:1500px;background:#04060f;justify-content:center}
.intro>*{position:absolute}
.hall{inset:0;z-index:0;background:radial-gradient(75% 55% at 50% 40%,rgba(242,217,160,.42),rgba(201,162,75,.12) 50%,transparent 72%),linear-gradient(#0b1531,#070b1c 60%,#16120a 60%,#07070a);transition:transform 10s ease-out,filter 1.4s;animation:amb 9s ease-in-out infinite alternate}
@keyframes amb{to{background-position:0 0,0 0;filter:brightness(1.12)}}
.intro.go .hall{transform:scale(1.2)}
.intro.dim .hall{filter:brightness(.5) blur(2.5px);animation:none}
.beam{inset:0;background:linear-gradient(100deg,transparent 38%,rgba(246,229,174,.09) 46%,transparent 54%),linear-gradient(80deg,transparent 52%,rgba(246,229,174,.07) 60%,transparent 68%);animation:sway 14s ease-in-out infinite alternate}
@keyframes sway{to{transform:translateX(5%)}}
.chand{top:-1%;width:24%;fill:#f6e5ae;opacity:0;transition:opacity 3.5s 3s}.c1{left:6%}.c2{left:38%;width:26%}.c3{right:6%}
.go .chand{opacity:.85}
.chand circle{animation:tw 6s ease-in-out infinite}.chand circle:nth-child(3n){animation-delay:-2s}.chand circle:nth-child(3n+1){animation-delay:-4s}
@keyframes tw{50%{opacity:.45}}
.stage{left:30%;right:30%;top:50%;height:6%;background:linear-gradient(#ecd9a8,#7a5f25);opacity:.55;box-shadow:0 0 70px rgba(236,217,168,.5)}
.tables{left:0;right:0;top:64%;height:14%;background:radial-gradient(ellipse 9% 45% at 14% 50%,rgba(236,217,168,.4),transparent 70%),radial-gradient(ellipse 9% 45% at 34% 60%,rgba(236,217,168,.4),transparent 70%),radial-gradient(ellipse 9% 45% at 66% 60%,rgba(236,217,168,.4),transparent 70%),radial-gradient(ellipse 9% 45% at 86% 50%,rgba(236,217,168,.4),transparent 70%)}
.doors{left:0;right:0;top:0;bottom:20%;z-index:3;display:flex;transform-style:preserve-3d}
.doors::after{content:"";position:absolute;left:50%;top:0;bottom:0;width:2px;transform:translateX(-50%);background:#f6e5ae;box-shadow:0 0 26px 8px rgba(242,217,160,.55);animation:gap 3.4s ease-in-out infinite;transition:opacity .8s}
@keyframes gap{50%{box-shadow:0 0 40px 14px rgba(242,217,160,.8)}}
.go .doors::after{opacity:0}
.door{position:relative;flex:1;background:linear-gradient(90deg,#08102a,#132759 50%,#08102a);box-shadow:inset 0 0 0 1px rgba(201,162,75,.45);transition:transform 5.2s cubic-bezier(.5,0,.2,1) 1.6s}
.door::before{content:"";position:absolute;inset:7% 12% 9%;border:1px solid rgba(201,162,75,.6);box-shadow:inset 0 0 0 7px #0a1433,inset 0 0 0 8px rgba(201,162,75,.3)}
.door.l{transform-origin:left}.door.r{transform-origin:right}
.door i{position:absolute;top:44%;height:13%;width:5px;border-radius:3px;background:linear-gradient(#f9ebb6,#8f6a22);box-shadow:0 0 10px rgba(242,217,160,.8)}
.l i{right:7%}.r i{left:7%}
.go .l{transform:rotateY(-108deg)}.go .r{transform:rotateY(108deg)}
.doors.gone{display:none}
.marble{left:0;right:0;bottom:0;height:20%;z-index:4;background:radial-gradient(60% 120% at 50% 0,rgba(242,217,160,.3),transparent 70%),repeating-linear-gradient(100deg,rgba(255,255,255,.03) 0 2px,transparent 2px 38px),linear-gradient(#17130d,#050507);border-top:1px solid rgba(201,162,75,.5)}
.pre,.title{left:0;right:0;top:0;bottom:20%;z-index:6;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:0 22px;gap:14px;background:radial-gradient(70% 60% at 50% 50%,rgba(4,6,15,.7),transparent)}
.pre{transition:opacity 1.2s}.go .pre{opacity:0;pointer-events:none}
.pre h1,.title h1{font:400 clamp(1.8rem,8.4vw,3rem)/1.15 var(--serif);letter-spacing:.1em;text-wrap:balance}
.pre .sub,.title .sub,.cap+.sub{font:italic 400 clamp(1.1rem,4.6vw,1.45rem) var(--it)}
.pre .open-btn{margin-top:18px}
.title{opacity:0;pointer-events:none;transition:opacity 1.6s}
.go .title{opacity:1;transition-delay:5.6s}.show .title{opacity:0;transition-delay:0s;transition-duration:1s}
.sweep{background-image:linear-gradient(100deg,#b8913a 35%,#fff7da 50%,#b8913a 65%);background-size:260% 100%;animation:sw 4.5s ease-in-out 7s 2}
@keyframes sw{from{background-position:120% 0}to{background-position:-20% 0}}
.skip{right:12px;top:max(12px,env(safe-area-inset-top));z-index:9;background:none;border:0;color:var(--champ);font:400 .68rem var(--sans);letter-spacing:.28em;text-transform:uppercase;cursor:pointer;opacity:.75;padding:10px}
.fin .skip{display:none}
.book{z-index:7;left:50%;top:46%;width:min(78vw,340px);aspect-ratio:3/4.1;transform:translate(-50%,-50%) scale(.94);opacity:0;pointer-events:none;transition:opacity 1.4s,transform 1.4s;perspective:1700px;transform-style:preserve-3d}
.show .book{opacity:1;transform:translate(-50%,-50%)}
.pg{inset:0;position:absolute;background:linear-gradient(135deg,#fbf6e8,#efe5c8);color:#14224d;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:8% 7%;gap:7px;box-shadow:inset 0 0 0 7px #f6efe0,inset 0 0 0 8px #c9a24b,0 34px 70px rgba(0,0,0,.75)}
.pg>*{opacity:0;transition:opacity 1.2s}.open .pg>*{opacity:1}
.open .pg>*:nth-child(n){transition-delay:calc(1.4s + var(--i,0)*.22s)}
.pg .cap{color:#7c5d1c;font-size:.58rem}.pg .it{font:italic 400 1.05rem var(--it);color:#3b4468}
.pg .nm{font:400 clamp(1rem,4.6vw,1.3rem)/1.3 var(--serif);letter-spacing:.1em}
.pg .dt{font:400 1.05rem var(--serif);letter-spacing:.12em;margin-top:2px}.pg .tm{font:400 .74rem var(--sans);letter-spacing:.24em;color:#7c5d1c}
.pg .vn{font:400 .72rem/1.8 var(--sans);letter-spacing:.2em;text-transform:uppercase;color:#14224d}
.pg .s-orn{width:70px;margin:6px auto}.pg .s-orn::after{box-shadow:0 0 0 4px #f6efe0}
.cv{position:absolute;inset:0;transform-origin:left center;transform-style:preserve-3d;transition:transform 2.2s cubic-bezier(.65,0,.25,1),opacity .9s 2.4s}
.cv>div{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:10%;gap:10px}
.fr{background:linear-gradient(145deg,#0f2150,#070d26);box-shadow:inset 0 0 0 7px #0a1433,inset 0 0 0 8px #c9a24b,0 34px 70px rgba(0,0,0,.75)}
.fr .ct{font:400 clamp(1.3rem,6vw,1.8rem)/1.25 var(--serif);letter-spacing:.1em}
.fr::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(0,0,0,.55),transparent 60%);opacity:0;transition:opacity 1.1s}
.open .fr::after{opacity:1}
.bk{transform:rotateY(180deg);background:linear-gradient(135deg,#efe5c8,#fbf6e8);box-shadow:inset 0 0 0 7px #f6efe0,inset 0 0 0 8px #c9a24b}
.open .cv{transform:rotateY(-180deg);opacity:0}
.frame{padding:0;border:0;background:none}
.zoom{display:block;background:none;border:0;padding:clamp(8px,2.4vw,14px);border:1px solid rgba(201,162,75,.45);cursor:zoom-in}
.hint{margin-top:16px;opacity:.7}
.lb{position:fixed;inset:0;z-index:60;background:rgba(3,5,12,.96);display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .4s,visibility .4s;overflow:auto;cursor:zoom-out}
.lb.show{opacity:1;visibility:visible}.lb img{max-width:96vw;max-height:96svh;width:auto;height:auto}
.dd{font:400 clamp(1.3rem,5.6vw,1.9rem)/1.3 var(--serif);letter-spacing:.12em;margin:4px 0 18px}
.msg{max-width:32ch;margin-bottom:16px}
@media (prefers-reduced-motion:reduce){.door{transition:none!important}.cv{transition:none!important}}
.pre .open-btn{white-space:nowrap;font-size:.78rem;letter-spacing:.2em;padding:1.15em 1.6em}
.pre .open-btn span{margin-right:-.2em;gap:.9em}
.show .book{transition-delay:.7s}
.hall{animation:none}
.hall::after{content:"";position:absolute;inset:0;background:radial-gradient(60% 50% at 50% 30%,rgba(255,226,150,.2),transparent);animation:pulse 8s ease-in-out infinite alternate}
@keyframes pulse{to{opacity:.35}}
.pre,.title{bottom:0;background:radial-gradient(75% 55% at 50% 50%,rgba(4,6,15,.8),transparent)}

/* ---- reference typography: calligraphic script + spaced classical caps ---- */
body{font-size:17px}
h2,.pre h1,.title h1,.fr .ct,.evday h3{font-family:var(--script);font-weight:400;text-transform:none;letter-spacing:.01em;line-height:1.12;text-wrap:balance}
h2{font-size:clamp(2.5rem,11.5vw,3.8rem);margin-bottom:20px}
.pre h1,.title h1{font-size:clamp(2.7rem,13vw,4.2rem)}
.fr .ct{font-size:clamp(1.9rem,9vw,2.6rem)}
.evday h3{font-size:clamp(2rem,9vw,2.8rem)}
.sub,.lead,.pg .it,.evday p,.card .nm{font-family:var(--it);font-style:normal;letter-spacing:.01em}
.pre .sub,.title .sub{font-size:clamp(1.35rem,5.6vw,1.75rem);color:var(--champ)}
.lead{font-size:clamp(1.4rem,5.6vw,1.8rem);line-height:1.45;color:var(--champ)}
.pg .it{font-size:1.25rem}.evday p{font-size:1.6rem}
.who,.pg .nm{font-family:var(--serif);letter-spacing:.22em;font-size:clamp(.95rem,4.2vw,1.2rem);line-height:1.75;color:var(--champ)}
.pg .nm{color:#14224d;font-size:clamp(.9rem,3.9vw,1.1rem)}
.cap{font-family:var(--serif);font-size:.82rem;letter-spacing:.34em}
.cd b,.facts b,.dd,.venue,.pg .dt{font-variant-numeric:lining-nums;font-feature-settings:"lnum"}
.dd,.venue{letter-spacing:.16em}
.addr,.time,.facts small,.cd small,.pg .vn,.pg .tm,.day{font-family:var(--serif);font-size:.9rem;letter-spacing:.28em}
.cd small,.facts small{font-size:.74rem}
.hl li{letter-spacing:.2em}
.menu a{letter-spacing:.16em}
/* ornament: hairlines with a flourish at the centre */
.orn{--fw:66px;background:linear-gradient(90deg,transparent,var(--gold)) left center/calc(50% - var(--fw)/2 - 4px) 1px no-repeat,linear-gradient(90deg,var(--gold),transparent) right center/calc(50% - var(--fw)/2 - 4px) 1px no-repeat;height:20px}
.orn::after{width:var(--fw);height:20px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 20'%3E%3Cg fill='none' stroke='%23c9a24b' stroke-width='1.1' stroke-linecap='round'%3E%3Cpath id='a' d='M27 10C23 10 22 14.5 18 14.5C14 14.5 12 10.5 15 8.8C17 7.8 19 9.5 18 10.8'/%3E%3Cpath d='M27 10C23 10 22 5.5 18 5.5C14 5.5 12 9.5 15 11.2C17 12.2 19 10.5 18 9.2'/%3E%3Cg transform='matrix(-1 0 0 1 64 0)'%3E%3Cpath d='M27 10C23 10 22 14.5 18 14.5C14 14.5 12 10.5 15 8.8C17 7.8 19 9.5 18 10.8'/%3E%3Cpath d='M27 10C23 10 22 5.5 18 5.5C14 5.5 12 9.5 15 11.2C17 12.2 19 10.5 18 9.2'/%3E%3C/g%3E%3C/g%3E%3Cpath d='M32 5.8L35.6 10L32 14.2L28.4 10Z' fill='%23c9a24b'/%3E%3C/svg%3E") center/contain no-repeat;box-shadow:none;transform:translate(-50%,-50%)}
.s-orn{--fw:38px}.s-orn::after{filter:none}
/* notched ornate buttons */
.btn,.open-btn{--n:11px;isolation:isolate;border:0;background:linear-gradient(135deg,#a07c2e,#f6e5ae 45%,#b8913a);clip-path:polygon(var(--n) 0,calc(100% - var(--n)) 0,100% var(--n),100% calc(100% - var(--n)),calc(100% - var(--n)) 100%,var(--n) 100%,0 calc(100% - var(--n)),0 var(--n));padding:1.1em 2.3em;font:400 .98rem var(--serif);letter-spacing:.32em;color:var(--champ);box-shadow:none;animation:none}
.btn::before,.open-btn::before{content:"";position:absolute;inset:1.5px;z-index:-1;border:0;background:linear-gradient(#0b1531,#070c1f);clip-path:polygon(calc(var(--n) - 1px) 0,calc(100% - var(--n) + 1px) 0,100% calc(var(--n) - 1px),100% calc(100% - var(--n) + 1px),calc(100% - var(--n) + 1px) 100%,calc(var(--n) - 1px) 100%,0 calc(100% - var(--n) + 1px),0 calc(var(--n) - 1px))}
.btn::after,.open-btn::after{content:"";position:absolute;left:18%;right:18%;bottom:2px;height:1px;background:linear-gradient(90deg,transparent,#fff3c4,transparent);box-shadow:0 0 8px #f6e5ae}
.pre .open-btn{font-size:.9rem;letter-spacing:.24em;padding:1.15em 1.8em}
@media (hover:hover){.btn:hover,.open-btn:hover{background:linear-gradient(135deg,#f6e5ae,#c9a24b);color:#14224d;box-shadow:none}.btn:hover::before,.open-btn:hover::before{background:linear-gradient(135deg,#f6e5ae,#d9b45a)}}
.open-btn:disabled{opacity:0;pointer-events:none}
.open-btn span::before,.open-btn span::after{background:var(--gold)}
/* scroll cue on every page */
.cue{position:absolute;left:50%;bottom:max(12px,2.6svh);translate:-50% 0;z-index:9;display:flex;flex-direction:column;align-items:center;gap:8px;padding:8px 14px;font:400 .72rem var(--serif);letter-spacing:.36em;text-transform:uppercase;color:var(--champ);opacity:.8;animation:cuebob 2.6s ease-in-out infinite}
.cue span{margin-right:-.36em}
.cue i{position:relative;display:block;width:1px;height:36px;background:linear-gradient(rgba(201,162,75,.6),transparent);overflow:hidden}
.cue i::after{content:"";position:absolute;left:-1px;top:-6px;width:3px;height:6px;border-radius:2px;background:#f6e5ae;box-shadow:0 0 6px #f6e5ae;animation:cuedrop 2.2s ease-in infinite}
@keyframes cuedrop{to{top:36px}}@keyframes cuebob{50%{transform:translateY(4px)}}
.intro .cue{opacity:0;pointer-events:none;transition:opacity 1.2s 1.6s}.intro.fin .cue{opacity:.85;pointer-events:auto}
.pg .vn{font-size:.8rem;letter-spacing:.16em;line-height:1.7}.pg .tm{font-size:.82rem;letter-spacing:.2em}.pg .dt{letter-spacing:.1em}

/* ---- envelope + table-setting background ---- */
.hall{background:linear-gradient(rgba(5,8,19,.5),rgba(5,8,19,.72)),url(assets/table.jpg) center/cover;filter:blur(2.5px)}
.intro.go .hall{transform:scale(1.08)}
.pre{background:none;gap:12px;z-index:6}
.go .pre{opacity:1;pointer-events:none}.show .pre{opacity:0;transition:opacity 1.2s}
.env{position:relative;width:min(80vw,360px);aspect-ratio:3/2;margin:8px 0 6px;cursor:pointer;perspective:1300px;filter:drop-shadow(0 26px 30px rgba(0,0,0,.7));transition:transform 1.6s cubic-bezier(.4,0,.2,1),opacity 1.2s}
.env>*{position:absolute;inset:0}
.pap{background:linear-gradient(160deg,rgba(40,70,160,.25),rgba(5,10,40,.55)),url(assets/paper.jpg) 0 0/250px auto}
.eb{background:linear-gradient(#040928,#0a1642);border-radius:3px}
.env>.ef{z-index:2;clip-path:polygon(0 0,50% 56%,100% 0,100% 100%,0 100%);border-radius:3px}
.env>.fl{z-index:3;bottom:auto;height:56%;clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:50% 0;background:linear-gradient(rgba(80,110,200,.22),rgba(5,10,40,.45)),url(assets/paper.jpg) 0 0/250px auto;transition:transform 1.1s cubic-bezier(.5,0,.2,1) .35s,z-index 0s .75s}
.go .env>.fl{transform:rotateX(180deg);z-index:0}
.env>.sl{inset:auto;left:50%;top:56%;width:17%;aspect-ratio:1;translate:-50% -50%;z-index:4;border-radius:50% 46% 52% 48%/48% 52% 46% 50%;background:radial-gradient(circle at 35% 30%,#efd49a,#c28d44 46%,#6c4318);box-shadow:inset 0 0 0 2px rgba(255,235,190,.25),inset 0 -3px 6px rgba(0,0,0,.35),0 5px 12px rgba(0,0,0,.6);animation:sealglow 3s ease-in-out infinite;transition:opacity .5s,scale .6s}
.sl::after{content:"";position:absolute;inset:18%;border-radius:50%;box-shadow:inset 0 1px 3px rgba(0,0,0,.45),0 1px 1px rgba(255,235,190,.35)}
@keyframes sealglow{50%{box-shadow:inset 0 0 0 2px rgba(255,235,190,.25),inset 0 -3px 6px rgba(0,0,0,.35),0 0 24px 5px rgba(239,212,154,.5)}}
.go .env>.sl{opacity:0;scale:1.5;animation:none}
.show .env{transform:translateY(38%) scale(.9);opacity:0}
.pre .open-btn{margin-top:10px}
.book{transform:translate(-50%,-26%) scale(.5)}
.show .book{opacity:1;transform:translate(-50%,-50%) scale(1);transition:opacity 1s,transform 1.8s cubic-bezier(.2,.8,.2,1);transition-delay:0s}
.env{margin-top:calc(min(80vw,360px)*.34)}

/* ---- v8: photographic-paper envelope, silent reveal of the original flyer ---- */
:root{--ivory:#f4f2ee;--silver:#b7bfd0}
.hall{background:linear-gradient(rgba(4,9,34,.72),rgba(3,8,30,.86)),url(assets/table.jpg) center/cover}
.cd small,.facts small,.addr{color:var(--silver)}
.show .pre{opacity:1}
.show .pre>:not(.env){opacity:0;transition:opacity 1s}
.pre .open-btn{opacity:0;transition:opacity 1.2s}.ready .pre .open-btn{opacity:1}.go .pre .open-btn{opacity:0}
.done .pre{display:none}
.env{width:min(84vw,380px);transform:none;opacity:1;animation:floatin 2.4s cubic-bezier(.16,.8,.2,1) .15s both;filter:drop-shadow(0 22px 26px rgba(0,0,0,.6))}
@keyframes floatin{from{opacity:0;transform:translateY(80px) rotateX(18deg) rotateZ(-2.5deg) scale(.9)}to{opacity:1;transform:none}}
.show .env{transform:none;opacity:1}
.env::after{content:"";position:absolute;left:6%;right:6%;bottom:-16px;height:24px;background:radial-gradient(ellipse at center,rgba(0,0,0,.6),transparent 70%);filter:blur(7px);z-index:-1}
.pap{background:linear-gradient(135deg,rgba(255,255,255,.1),transparent 42%,rgba(0,0,0,.32)),linear-gradient(160deg,rgba(40,70,160,.22),rgba(4,9,40,.5)),url(assets/paper.jpg) 0 0/250px auto}
.env>.fl{background:linear-gradient(180deg,rgba(150,175,255,.13),rgba(0,0,0,.34)),linear-gradient(160deg,rgba(40,70,160,.2),rgba(4,9,40,.45)),url(assets/paper.jpg) 0 0/250px auto}
.env>.ef{box-shadow:inset 0 0 0 1.5px rgba(214,177,92,.55)}
.fold{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.fold path{fill:none;vector-effect:non-scaling-stroke}
.fold .sh{stroke:rgba(0,0,0,.45);stroke-width:4px;filter:blur(1.5px)}
.fold .fo{stroke:#dcc07a;stroke-width:1.3px;opacity:.85}
.env>.fly{inset:auto;left:50%;top:50%;z-index:1;transform-origin:50% 50%;will-change:transform;box-shadow:0 10px 30px rgba(0,0,0,.5)}
.fly img{display:block;width:100%;height:auto}
.env>.sl{background:radial-gradient(circle at 35% 28%,#f3dca4,#c7943f 45%,#6c4318);overflow:hidden}
.sl::before{content:"";position:absolute;inset:0;border-radius:inherit;background:linear-gradient(115deg,transparent 38%,rgba(255,246,214,.85) 50%,transparent 62%) -150% 0/250% 100% no-repeat;animation:glint 4.2s ease-in-out 2.8s infinite}
@keyframes glint{55%,100%{background-position:150% 0}}
.go .sl::before{animation:none}
.mainfly{inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;visibility:hidden;pointer-events:none;padding:0 12px}
.fin .mainfly{visibility:visible}
.mainfly .zoom{position:relative;display:block;padding:0;border:0;background:none;cursor:zoom-in;pointer-events:auto}
.mainfly .zoom img{display:block;width:auto;height:auto;max-width:min(86vw,520px);max-height:76svh;box-shadow:0 30px 70px rgba(0,0,0,.7)}
.mainfly .zoom::after{content:"";position:absolute;inset:-10px;border:1px solid rgba(201,162,75,.5);opacity:0;transition:opacity .9s}
.fin .zoom::after{opacity:1}
.mainfly .hint{margin:4px 0 0;opacity:0;transition:opacity 1s .4s}.fin .mainfly .hint{opacity:.7}
.intro.fin{padding-bottom:70px}

/* ---- v9: supplied envelope video (silent) ---- */
.intro{background:#040509}
.ptop,.pbot{display:flex;flex-direction:column;align-items:center;gap:12px}
.vid{left:50%;top:50%;translate:-50% -50%;width:min(100vw,56.25svh);height:auto;aspect-ratio:9/16;z-index:2;background:#05060a;object-fit:cover;pointer-events:none;transition:opacity 1.3s;-webkit-mask-image:linear-gradient(transparent,#000 7%,#000 93%,transparent);mask-image:linear-gradient(transparent,#000 7%,#000 93%,transparent)}
.vidmode .hall{opacity:0;transition:opacity 1.6s,transform 10s,filter 1.4s}
.vidmode.vend .hall{opacity:1}
.vidmode.vend .vid{opacity:0}
.vidmode .pre{justify-content:space-between;padding:calc(7svh + env(safe-area-inset-top)) 22px calc(8svh + env(safe-area-inset-bottom))}
.vidmode .pre .env{display:none}
.vidmode .pre .pbot{gap:16px}
.vidmode .pre h1{font-size:clamp(2.3rem,11vw,3.6rem)}
.intro:not(.vidmode) .vid{display:none}

/* v11 additions */
.honouree{margin:6px auto 26px;max-width:26ch;line-height:1.5}
.dress+.dress{margin-top:26px}
.dress img{width:min(90vw,640px)}
.regbtn{margin:30px 0 0;text-align:center}
.regbtn .btn{min-height:48px;transition:transform .25s,box-shadow .4s}
.regbtn .btn:active{transform:scale(.97)}
@media (hover:hover){.regbtn .btn:hover{transform:translateY(-2px);box-shadow:0 10px 30px rgba(201,162,75,.3)}}
.mainfly .zoom{position:relative}
.shim{position:absolute;inset:clamp(0px,0px,0px);pointer-events:none;overflow:hidden;opacity:0;transition:opacity 1.6s 1s;
 -webkit-mask:url(assets/flyer-mask.png) center/100% 100% no-repeat;mask:url(assets/flyer-mask.png) center/100% 100% no-repeat}
.fin .shim{opacity:1}
.shim::before{content:"";position:absolute;top:-10%;bottom:-10%;left:0;width:38%;transform:translateX(-120%) skewX(-18deg);
 background:linear-gradient(90deg,transparent,rgba(255,244,200,.55) 42%,rgba(255,252,232,.95) 50%,rgba(255,244,200,.55) 58%,transparent);
 mix-blend-mode:screen;animation:goldglide 8s cubic-bezier(.4,0,.3,1) 1.5s infinite;will-change:transform}
@keyframes goldglide{0%{transform:translateX(-120%) skewX(-18deg)}38%,100%{transform:translateX(330%) skewX(-18deg)}}
@media (prefers-reduced-motion:reduce){.shim::before{animation:none;opacity:0}}

/* ================= v14 enhancements ================= */
/* --- section headings: metallic champagne-gold shimmer, clipped to the letters --- */
h2.gold,.pre h1.gold{background:linear-gradient(105deg,#b8913a 0%,#d4b05a 30%,#e8cf8f 41%,#fff7dc 50%,#e8cf8f 59%,#d4b05a 70%,#b8913a 100%);background-size:250% 100%;background-position:100% 0;-webkit-background-clip:text;background-clip:text;color:transparent;animation:goldshimmer 5.6s cubic-bezier(.45,.05,.35,1) infinite}
@keyframes goldshimmer{0%{background-position:100% 0}62%,100%{background-position:0 0}}

/* --- CTA unit: pulsing label + navy / champagne-gold button --- */
.cta{display:flex;flex-direction:column;align-items:center;gap:14px}
#details .cta{margin-top:6px}
.cta-label{display:block;font:400 .76rem var(--serif);letter-spacing:.38em;margin-right:-.38em;text-transform:uppercase;color:#ead08f;opacity:.72;animation:ctalbl 2.9s ease-in-out infinite}
@keyframes ctalbl{0%,75%,100%{opacity:.7;text-shadow:0 0 0 rgba(236,205,130,0)}38%{opacity:1;text-shadow:0 0 14px rgba(236,205,130,.8),0 0 3px rgba(255,238,175,.55)}}
.cta-glow{display:inline-block;filter:drop-shadow(0 0 7px rgba(214,177,92,.32));transition:filter .5s}
.cta .btn{min-height:50px;display:inline-flex;align-items:center;justify-content:center;color:#ead08f;background:linear-gradient(105deg,#9c7a2e 0%,#c9a24b 32%,#fff0bd 50%,#c9a24b 68%,#9c7a2e 100%);background-size:260% 100%;background-position:100% 0;animation:btnedge 6.5s cubic-bezier(.45,.05,.35,1) infinite;-webkit-tap-highlight-color:transparent}
.cta .btn::before{background:linear-gradient(105deg,transparent 42%,rgba(246,229,174,.17) 50%,transparent 58%) 100% 0/260% 100% no-repeat,linear-gradient(#0b1531,#070c1f);animation:btnsheen 6.5s cubic-bezier(.45,.05,.35,1) infinite}
@keyframes btnedge{0%{background-position:100% 0}62%,100%{background-position:0 0}}
@keyframes btnsheen{0%{background-position:100% 0,0 0}62%,100%{background-position:0 0,0 0}}
.btn:active{transform:scale(.97)}
@media (hover:hover){
.btn:hover{background:linear-gradient(135deg,#c9a24b,#ffe9a8 50%,#c9a24b);color:#f6e5ae;box-shadow:none;transform:translateY(-2px)}
.btn:hover::before{background:linear-gradient(#0e1a3d,#0a1330)}
.cta .btn:hover{background:linear-gradient(105deg,#c9a24b,#ffe9a8 50%,#c9a24b) 0 0/100% 100%}
.cta .btn:hover::before{background:linear-gradient(105deg,transparent 42%,rgba(246,229,174,.17) 50%,transparent 58%) 100% 0/260% 100% no-repeat,linear-gradient(#0e1a3d,#0a1330)}
.cta:hover .cta-glow{filter:drop-shadow(0 0 12px rgba(236,205,130,.55))}}
.regbtn .btn:hover{box-shadow:none}

/* --- hybrid cinematic scroll reveal --- */
.rv,.rv.in{opacity:1;transition:none}
html.rvjs{--ease:cubic-bezier(.22,.7,.2,1)}
html.rvjs .rv>*{--ry:24px;--rd:.9s;opacity:0;transform:translate3d(0,var(--ry),0) scale(var(--rs,1));clip-path:var(--rclip,none);transition:opacity var(--rd) var(--ease) var(--dl,0s),transform var(--rd) var(--ease) var(--dl,0s),clip-path calc(var(--rd) * 1.25) var(--ease) var(--dl,0s)}
html.rvjs .rv>*.in{opacity:1;transform:none;clip-path:var(--rclipend,none)}
html.rvjs .rv>h2{--ry:28px}
html.rvjs .cine .rv>*{--ry:36px;--rd:1.3s}
html.rvjs .cine .rv>h2{--ry:44px;--rd:1.5s}
html.rvjs .cine .rv>.orn{--ry:0px;--rd:1.4s;transform-origin:50% 50%;transform:scaleX(.15);opacity:0}
html.rvjs .cine .rv>.orn.in{transform:none;opacity:1}
html.rvjs .cine .rv>.dress{--ry:12px;--rs:1;--rd:.6s;--dl:0s;transition:opacity .6s ease-out,transform .6s ease-out}
html.rvjs .cine .rv>.qr{--ry:20px;--rs:.93;--rd:1.4s}
html.rvjs .hl li{opacity:0;transform:translate3d(0,16px,0);transition:opacity .8s var(--ease) calc(.2s + var(--i,0) * .1s),transform .8s var(--ease) calc(.2s + var(--i,0) * .1s)}
html.rvjs .hl.in li{opacity:1;transform:none}
@media (max-width:600px){
html.rvjs .rv>*{--ry:18px;--rd:.8s}
html.rvjs .cine .rv>*{--ry:24px;--rd:1.05s}
html.rvjs .cine .rv>h2{--ry:28px;--rd:1.2s}
}

@media (prefers-reduced-motion:reduce){
h2.gold,.pre h1.gold{background-size:100% 100%;background-position:0 0}
.cta-label{opacity:1}
.cta .btn{background-position:50% 0}
.cta .btn::before{background:linear-gradient(#0b1531,#070c1f)}
}
/* short screens: keep the flyer + "tap to enlarge" clear of the menu button and the scroll cue */
.mainfly{padding:56px 12px 104px}
.mainfly .zoom img{max-height:min(76svh,calc(100svh - 210px))}
