/* La Grande Nuit — RSVP site. Single dark look by design (the brand is a night). */
@font-face{font-family:"Geist Serif";src:url(../fonts/GeistSerifVF.woff2) format("woff2");font-display:swap}
:root{
  --noir:#0A0705; --espresso:#1B110B; --champagne:#F6DCBC; --ivory:#FCEBD3; --copper:#E7A57A; --bordeaux:#5C1526;
  --muted:rgba(246,220,188,.66); --hair:rgba(246,220,188,.32);
  --serif:"Geist Serif",Georgia,"Times New Roman",serif; --sans:"Geist",system-ui,-apple-system,sans-serif;
  --ease:cubic-bezier(.22,.61,.36,1);
  color-scheme:dark;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{height:100%}
body{margin:0;background:var(--noir);color:var(--champagne);font-family:var(--serif);-webkit-font-smoothing:antialiased;overflow-x:hidden}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}

/* backgrounds */
.bgs{position:fixed;inset:0;z-index:0;background:var(--noir)}
.bgs video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transform:scale(1.06);transition:opacity 1.8s var(--ease),transform 9s var(--ease)}
.bgs video.on{opacity:.9;transform:scale(1)}
.shade{position:absolute;inset:0;background:radial-gradient(ellipse 80% 70% at 50% 45%,rgba(10,7,5,.35),rgba(10,7,5,.88)),linear-gradient(to bottom,rgba(10,7,5,.5),rgba(10,7,5,.1) 40%,rgba(10,7,5,.75))}

/* scenes */
main{position:relative;z-index:1}
.scene{position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:clamp(18px,3.2vh,30px);
  padding:max(70px,env(safe-area-inset-top)) max(20px,env(safe-area-inset-right)) max(190px,env(safe-area-inset-bottom)) max(20px,env(safe-area-inset-left));
  opacity:0;filter:blur(8px);transform:scale(1.02);transition:opacity 1.1s var(--ease),filter 1.1s var(--ease),transform 1.4s var(--ease);overflow-y:auto}
.scene.active{opacity:1;filter:none;transform:none}
.scene.leaving{opacity:0;filter:blur(10px);transform:scale(.985)}

.eyebrow{margin:0;font-family:var(--sans);font-weight:500;font-size:11px;letter-spacing:.42em;text-transform:uppercase;color:var(--muted)}
.big,legend.big{margin:0;font-weight:400;font-size:clamp(26px,3.6vw,42px);line-height:1.14;color:var(--ivory);max-width:20ch;text-wrap:balance;text-shadow:0 8px 30px rgba(0,0,0,.5)}
.line{margin:0;font-weight:400;font-size:clamp(24px,3.4vw,36px);color:var(--ivory);text-shadow:0 6px 24px rgba(0,0,0,.6)}
.body{margin:0;font-size:clamp(17px,1.9vw,21px);line-height:1.6;max-width:34ch;color:var(--champagne);text-wrap:pretty}
.accent{margin:0;font-size:clamp(22px,2.8vw,30px);color:var(--copper)}
.sign{margin:8px 0 0;font-family:var(--sans);font-size:11px;letter-spacing:.38em;text-transform:uppercase;color:var(--muted)}
.logo{width:min(560px,82vw);height:auto;filter:drop-shadow(0 18px 30px rgba(0,0,0,.5))}

.cta{position:relative;display:inline-block;font-family:var(--sans);font-weight:500;font-size:12px;letter-spacing:.42em;text-transform:uppercase;color:var(--ivory);text-decoration:none;
  padding:12px 2px 10px .42em;border-bottom:1px solid rgba(246,220,188,.45);transition:border-color .4s,color .4s,letter-spacing .5s var(--ease)}
.cta:hover{border-bottom-color:var(--ivory);letter-spacing:.5em}
.cta:disabled{opacity:.5;cursor:progress}
.cta:focus-visible,.choice:focus-visible,.back:focus-visible,.sound:focus-visible,input:focus-visible{outline:1px solid var(--copper);outline-offset:4px}

/* staged reveal inside the active scene */
.reveal{opacity:0;transform:translateY(16px)}
.scene.active .reveal{animation:rise 1.2s var(--ease) forwards}
.scene.active .reveal:nth-child(2){animation-delay:.35s}.scene.active .reveal:nth-child(3){animation-delay:1.1s}
.scene.active .reveal:nth-child(4){animation-delay:1.8s}.scene.active .reveal:nth-child(5){animation-delay:2.4s}.scene.active .reveal:nth-child(6){animation-delay:2.9s}
@keyframes rise{to{opacity:1;transform:none}}

/* envelope */
.envelope{--w:min(440px,82vw);position:relative;width:var(--w);aspect-ratio:3/2;perspective:1600px;margin:clamp(30px,6vh,70px) 0 6px;transition:transform 1.2s var(--ease),opacity 1s var(--ease)}
.envelope>*{position:absolute}
.env-back{inset:0;background:linear-gradient(160deg,#21160F,#0F0906);box-shadow:0 40px 80px -20px rgba(0,0,0,.85),0 0 0 1px rgba(246,220,188,.18)}
.env-front{inset:0;width:100%;height:100%;z-index:3;filter:drop-shadow(0 -6px 10px rgba(0,0,0,.35))}
.flap{left:0;right:0;top:0;height:60%;z-index:4;transform-origin:50% 0;transform:rotateX(0);transition:transform 1s var(--ease);backface-visibility:visible}
.flap svg{width:100%;height:100%;display:block}
.seal{z-index:5;left:50%;top:58%;width:clamp(56px,16%,74px);aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;
  background:radial-gradient(circle at 36% 30%,#9A3247,#5C1526 55%,#330914);box-shadow:0 6px 14px rgba(0,0,0,.6),inset 0 0 0 3px rgba(0,0,0,.2);display:grid;place-items:center;
  transition:transform .6s var(--ease),opacity .6s var(--ease)}
.seal svg{width:66%}
.card{z-index:2;left:6%;right:6%;top:7%;height:86%;background:linear-gradient(180deg,#140D09,#0A0705);border:1px solid rgba(246,220,188,.4);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:8%;box-shadow:0 10px 30px rgba(0,0,0,.6);
  transition:transform 1.1s var(--ease),box-shadow 1s}
.card::after{content:"";position:absolute;inset:6px;border:1px solid rgba(246,220,188,.14);pointer-events:none}
.card img{width:88%;height:auto}
.card .eyebrow{font-size:8px}
.card-rule{width:40px;height:1px;background:var(--hair)}
.card-note{font-size:12px;color:var(--muted)}
.seal-hint{animation:breathe 3.2s ease-in-out infinite}
@keyframes breathe{50%{transform:translate(-50%,-50%) scale(1.06)}}
/* opening sequence */
.envelope.o1 .seal{transform:translate(-50%,-50%) scale(1.25);opacity:0}
.envelope.o2 .flap{transform:rotateX(180deg)}
.envelope.o3 .flap{z-index:1}
.envelope.o4 .card{transform:translateY(-58%);box-shadow:0 30px 60px rgba(0,0,0,.7)}
.envelope.o5 .card{z-index:6;transform:translateY(-30%) scale(1.45)}
.envelope.o5 .env-back,.envelope.o5 .env-front,.envelope.o5 .flap{opacity:0;transition:opacity .9s var(--ease)}
#invite.opening .line,#invite.opening .cta,#invite.opening>.eyebrow{opacity:0;transform:translateY(10px);transition:opacity .6s,transform .6s}

/* RSVP */
.progress{position:fixed;left:0;right:0;top:0;height:2px;background:rgba(246,220,188,.1)}
.progress i{display:block;height:100%;width:0;background:var(--champagne);transition:width .8s var(--ease)}
form{width:min(560px,100%);position:relative}
.step{border:0;margin:0;padding:0;display:flex;flex-direction:column;align-items:center;gap:26px;min-width:0}
.step.enter{animation:stepIn .8s var(--ease)}
@keyframes stepIn{from{opacity:0;transform:translateY(18px);filter:blur(4px)}}
legend.big{padding:0;margin-bottom:10px;float:none;width:100%;max-width:none}
.field{width:100%;display:block}
.field input{width:100%;background:transparent;border:0;border-bottom:1px solid var(--hair);padding:14px 4px;text-align:center;
  font:400 clamp(20px,2.6vw,26px)/1.3 var(--serif);color:var(--ivory);border-radius:0;transition:border-color .4s}
.field input::placeholder{color:rgba(246,220,188,.42)}
.field input:focus{outline:none;border-bottom-color:var(--champagne)}
.field input[aria-invalid="true"]{border-bottom-color:#E29A9A}
.err{margin:-14px 0 0;min-height:1em;font-family:var(--sans);font-size:13px;color:#E8A4A4}
.err:empty{display:none}
.choices{display:grid;gap:6px;width:min(440px,100%)}
.choice{padding:12px 8px;font-size:clamp(19px,2.2vw,23px);color:var(--ivory);opacity:.82;transition:opacity .4s,color .4s}
.choice+.choice{border-top:1px solid rgba(246,220,188,.16)}
.choice:hover,.choice[aria-pressed="true"]{opacity:1;color:var(--copper)}
.nav{display:flex;gap:28px;align-items:center;justify-content:center;flex-wrap:wrap;margin-top:6px}
.back{font-family:var(--sans);font-size:11px;letter-spacing:.38em;text-transform:uppercase;color:var(--muted);padding:12px 6px}
.back:hover{color:var(--champagne)}

/* thank-you */
.who{color:var(--copper)}

/* chrome */
.sound{position:fixed;z-index:5;top:max(18px,env(safe-area-inset-top));right:max(18px,env(safe-area-inset-right));display:flex;align-items:center;gap:10px;
  font-family:var(--sans);font-size:10px;letter-spacing:.32em;text-transform:uppercase;color:var(--muted);padding:8px}
.bars{display:flex;gap:2px;align-items:flex-end;height:12px}
.bars i{width:2px;height:4px;background:currentColor}
.sound[aria-pressed="true"] .bars i{animation:eq 1s ease-in-out infinite}
.sound[aria-pressed="true"] .bars i:nth-child(2){animation-delay:.2s}.sound[aria-pressed="true"] .bars i:nth-child(3){animation-delay:.4s}
@keyframes eq{50%{height:12px}}
.foot{position:fixed;z-index:2;left:0;right:0;bottom:max(22px,env(safe-area-inset-bottom));display:flex;justify-content:center;pointer-events:none}
.foot img{width:auto}

@media (max-height:640px){.foot{display:none}.scene{padding-bottom:40px}}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.2s!important}
  .bgs video.on{transform:none}
}

/* written text: words appear one by one (site.js splits them) */
.write{display:flex;flex-direction:column;align-items:center;gap:clamp(14px,2.4vh,22px);max-width:40ch}
.write p{margin:0;text-wrap:balance}
.w-lead{font-size:clamp(22px,2.7vw,32px);line-height:1.3;color:var(--ivory);text-shadow:0 6px 24px rgba(0,0,0,.5)}
.w-body{font-size:clamp(16px,1.6vw,19px);line-height:1.65;color:var(--champagne);max-width:36ch}
.w-accent{font-size:clamp(18px,2vw,23px);color:var(--copper)}
.wd{display:inline-block;opacity:0;filter:blur(6px);transform:translateY(6px);transition:opacity .9s var(--ease),filter .9s var(--ease),transform .9s var(--ease);transition-delay:var(--d)}
.scene.active .wd{opacity:1;filter:none;transform:none}
.after{opacity:0;transform:translateY(10px);transition:opacity 1s var(--ease),transform 1s var(--ease);transition-delay:var(--after,2s)}
.scene.active .after{opacity:1;transform:none}
.countdown{color:var(--copper);letter-spacing:.36em}
.countdown:empty{display:none}
#invite .countdown{margin-top:-6px}

.foot{flex-direction:column;align-items:center;gap:14px}
.foot .bwg{height:54px;width:auto;opacity:1}
.foot .houses{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:12px 28px;padding:0 16px}
.foot .houses img{height:var(--h);width:auto;opacity:.92}
.foot img{opacity:1}
@media (max-width:600px){.foot .bwg{height:44px}.foot .houses{gap:10px 18px}.foot .houses img{height:calc(var(--h) * .72)}}
@media (max-height:760px){.foot .houses{display:none}.scene{padding-bottom:120px}}
