:root{
  --forest:#123524;
  --forest-deep:#0B241A;
  --gold:#C6A15B;
  --gold-light:#E8D2A0;
  --blush:#E8B4BC;
  --cream:#FAF6EE;
  --ink:#182620;
  --serif:'Cormorant Garamond', serif;
  --script:'Meddon', cursive;
  --sans:'Jost', sans-serif;
}

*{box-sizing:border-box; margin:0; padding:0;}
html{scroll-behavior:smooth;}
body{
  background:var(--cream);
  color:var(--ink);
  font-family:var(--sans);
  font-weight:300;
  overflow-x:hidden;
}

@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto;}
  *{animation-duration:0.01ms !important; animation-iteration-count:1 !important; transition-duration:0.01ms !important;}
}

/* subtle grain overlay for texture */
.grain{
  position:fixed; inset:0; pointer-events:none; z-index:999;
  opacity:0.035;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

a{color:inherit; text-decoration:none;}
:focus-visible{outline:2px solid var(--gold); outline-offset:3px;}

/* NAV */
#nav{
  position:fixed; top:0; left:0; right:0; z-index:100;
  display:flex; align-items:center; justify-content:space-between;
  padding:1.1rem 2rem;
  background:rgba(11,36,26,0.0);
  transition:background .4s ease, box-shadow .4s ease;
}
#nav.scrolled{
  background:rgba(11,36,26,0.92);
  backdrop-filter:blur(6px);
  box-shadow:0 4px 20px rgba(0,0,0,0.15);
}
.nav-mark{
  display:flex; align-items:center; gap:0.55rem;
}
.nav-mark-text{
  font-family:var(--serif); font-style:italic; font-size:1.3rem; color:var(--gold-light);
  letter-spacing:0.05em;
}

/* LOGO BADGE (reusable) */
.logo-badge{
  border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  background:radial-gradient(circle, rgba(250,246,238,0.97), rgba(250,246,238,0.88));
  box-shadow:0 0 0 1px rgba(198,161,91,0.55), 0 10px 30px -8px rgba(0,0,0,0.4);
}
.logo-badge img{width:100%; height:100%; object-fit:contain; display:block;}
.logo-badge--sm{width:34px; height:34px; padding:5px;}
.logo-badge--md{width:110px; height:110px; padding:14px; margin:0 auto 1.2rem;}
.logo-badge--lg{width:160px; height:160px; padding:20px; margin:0 auto 1rem;}

.divider-logo{width:120px; height:120px; object-fit:contain;}
#nav ul{list-style:none; display:flex; gap:1.8rem;}
#nav a{
  color:var(--cream); font-size:0.78rem; letter-spacing:0.14em; text-transform:uppercase;
  opacity:0.85; transition:opacity .2s ease, color .2s ease;
}
#nav a:hover{opacity:1; color:var(--gold-light);}
@media (max-width:640px){
  #nav ul{gap:1rem;}
  #nav a{font-size:0.65rem;}
  .nav-mark{font-size:1.1rem;}
}

/* INVITATION GATE */
body.gate-locked{overflow:hidden; height:100vh;}
.gate{
  position:fixed; inset:0; z-index:200;
  display:flex; cursor:pointer;
  perspective:1800px;
}
.gate-panel{
  width:50%; height:100%;
  background:
    radial-gradient(ellipse at center, rgba(198,161,91,0.10), transparent 65%),
    linear-gradient(160deg, var(--forest-deep), var(--forest));
  transition:transform 1.1s cubic-bezier(.7,0,.2,1), opacity 1.1s ease;
  transform-style:preserve-3d;
}
.gate-panel--left{
  border-right:1px solid rgba(198,161,91,0.35);
  transform-origin:left center;
}
.gate-panel--right{
  border-left:1px solid rgba(198,161,91,0.35);
  transform-origin:right center;
}
.gate-seal{
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  display:flex; flex-direction:column; align-items:center; z-index:2;
  transition:opacity .5s ease, transform .5s ease;
}
.gate-hint{
  margin-top:1rem; font-size:0.7rem; letter-spacing:0.2em; text-transform:uppercase;
  color:var(--gold-light); opacity:0.8;
  animation:hintPulse 2.2s ease-in-out infinite;
}
@keyframes hintPulse{ 0%,100%{opacity:0.5;} 50%{opacity:1;} }

.gate.open .gate-panel--left{ transform:translateX(-100%) rotateY(-8deg); }
.gate.open .gate-panel--right{ transform:translateX(100%) rotateY(8deg); }
.gate.open .gate-seal{ opacity:0; transform:translate(-50%,-50%) scale(0.7); }
.gate.closing{ pointer-events:none; }
.gate.hidden{ display:none; }

@media (prefers-reduced-motion: reduce){
  .gate-panel{ transition:opacity .4s ease; }
  .gate.open .gate-panel--left, .gate.open .gate-panel--right{ transform:none; opacity:0; }
}

/* HERO */
.hero{
  position:relative;
  min-height:100vh;
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  text-align:center;
  padding:6rem 1.5rem 4rem;
  background:
    radial-gradient(ellipse at 50% -10%, rgba(198,161,91,0.18), transparent 60%),
    linear-gradient(160deg, var(--forest-deep) 0%, var(--forest) 55%, #0e2c1f 100%);
  color:var(--cream);
  overflow:hidden;
}
.hero-mandala{
  position:absolute; width:280px; height:280px; color:var(--gold);
  opacity:0.35; animation:spin 90s linear infinite;
}
.hero-mandala--top{top:-90px; left:50%; transform:translateX(-50%);}
.hero-mandala--bottom{bottom:-110px; right:-70px;}
@keyframes spin{ to{ transform:rotate(360deg);} }
.hero-mandala--top{transform-origin:center;}

.eyebrow{
  font-size:0.72rem; letter-spacing:0.22em; text-transform:uppercase;
  color:var(--gold-light); opacity:0.85; max-width:480px; margin-bottom:1.6rem;
  animation:fadeUp 1s ease both;
}
.hero-names{
  font-family:var(--serif); font-weight:500;
  font-size:clamp(2.4rem, 7vw, 5.2rem);
  line-height:1.05;
  display:flex; flex-direction:column; align-items:center; gap:0.2rem;
  animation:fadeUp 1.1s ease both 0.15s;
}
.hero-names .amp{
  font-family:var(--script); font-weight:400; color:var(--gold);
  font-size:clamp(1.8rem, 5vw, 3.4rem);
  margin:0.1em 0;
}
.hero-sub{
  font-family:var(--serif); font-style:italic; font-size:1.15rem;
  color:var(--gold-light); margin-top:1.2rem; opacity:0.9;
  animation:fadeUp 1.1s ease both 0.3s;
}
.hero-date{
  margin-top:1.6rem; font-size:0.85rem; letter-spacing:0.18em;
  display:flex; gap:0.6rem; align-items:center; color:var(--cream); opacity:0.9;
  animation:fadeUp 1.1s ease both 0.4s;
}
.hero-date .dot{color:var(--gold);}

.countdown{
  margin-top:2.6rem; display:flex; gap:1.1rem;
  animation:fadeUp 1.1s ease both 0.55s;
}
.count-box{
  display:flex; flex-direction:column; align-items:center;
  min-width:64px; padding:0.7rem 0.4rem;
  border:1px solid rgba(198,161,91,0.4);
  border-radius:6px;
  background:rgba(255,255,255,0.03);
}
.count-box span{font-family:var(--serif); font-size:1.7rem; color:var(--gold-light); font-variant-numeric:tabular-nums;}
.count-box small{font-size:0.6rem; letter-spacing:0.14em; text-transform:uppercase; opacity:0.7; margin-top:0.2rem;}

@keyframes fadeUp{ from{opacity:0; transform:translateY(16px);} to{opacity:1; transform:translateY(0);} }

.scroll-cue{
  position:absolute; bottom:2rem; left:50%; transform:translateX(-50%);
  width:22px; height:36px; border:1px solid rgba(250,246,238,0.5); border-radius:20px;
}
.scroll-cue span{
  display:block; width:4px; height:8px; background:var(--gold-light);
  border-radius:2px; margin:6px auto 0; animation:scrollDot 1.8s ease infinite;
}
@keyframes scrollDot{ 0%{opacity:1; transform:translateY(0);} 70%{opacity:0; transform:translateY(12px);} 100%{opacity:0;} }

/* DIVIDER / MONOGRAM */
.divider{display:flex; justify-content:center; padding:3rem 1rem; background:var(--cream);}
.monogram{width:96px; height:96px; color:var(--forest);}
.monogram-letters{font-family:var(--serif); font-size:22px; fill:var(--forest); letter-spacing:1px;}
.monogram-sub{font-family:var(--sans); font-size:8px; fill:var(--gold); letter-spacing:2px;}
.monogram--light{color:var(--gold-light);}
.monogram--light .monogram-letters{fill:var(--cream); font-size:19px;}

/* SECTIONS */
.section{
  padding:2rem 1.5rem 5rem; max-width:1000px; margin:0 auto;
  text-align:center;
}
.section-eyebrow{
  font-size:0.72rem; letter-spacing:0.24em; text-transform:uppercase; color:var(--gold);
  margin-bottom:0.6rem;
}
.section-title{
  font-family:var(--serif); font-weight:500; font-size:clamp(1.9rem, 4vw, 2.8rem);
  color:var(--forest); margin-bottom:2.4rem;
}
.section-title--light{color:var(--cream);}

.reveal{opacity:0; transform:translateY(24px); transition:opacity .8s ease, transform .8s ease;}
.reveal.in{opacity:1; transform:translateY(0);}

/* STORY */
.story-grid{
  display:grid; grid-template-columns:repeat(3, 1fr); gap:2.2rem; text-align:left;
}
.story-block h3{
  font-family:var(--serif); font-size:1.3rem; color:var(--forest); margin-bottom:0.6rem;
  position:relative; padding-bottom:0.5rem;
}
.story-block h3::after{
  content:''; position:absolute; left:0; bottom:0; width:32px; height:2px; background:var(--gold);
}
.story-block p{font-size:0.95rem; line-height:1.7; color:#3c4a42;}
.editable{font-style:italic; color:#6b756e !important;}
@media (max-width:760px){ .story-grid{grid-template-columns:1fr; gap:2rem;} }

/* DETAILS */
.details-card{
  background:var(--forest); color:var(--cream); border-radius:14px;
  padding:2.4rem 2rem; text-align:left;
  box-shadow:0 20px 50px -20px rgba(18,53,36,0.5);
  border:1px solid rgba(198,161,91,0.35);
}
.details-row{display:flex; gap:2rem; flex-wrap:wrap; padding:1rem 0; border-bottom:1px solid rgba(198,161,91,0.2);}
.details-row:last-of-type{border-bottom:none;}
.details-item{display:flex; flex-direction:column; gap:0.3rem; flex:1; min-width:180px;}
.details-item--wide{flex:1 1 100%;}
.details-label{font-size:0.68rem; letter-spacing:0.18em; text-transform:uppercase; color:var(--gold-light); opacity:0.8;}
.details-value{font-family:var(--serif); font-size:1.2rem;}
.map-link{
  display:inline-block; margin-top:1.4rem; font-size:0.82rem; letter-spacing:0.06em;
  color:var(--gold-light); border-bottom:1px solid var(--gold); padding-bottom:2px;
  transition:opacity .2s ease;
}
.map-link:hover{opacity:0.75;}

.colours{margin-top:2.4rem;}
.colours-label{font-size:0.72rem; letter-spacing:0.2em; text-transform:uppercase; color:var(--forest); opacity:0.7;}
.swatches{display:flex; justify-content:center; gap:1.6rem; margin-top:0.9rem; flex-wrap:wrap;}
.swatch{display:flex; align-items:center; gap:0.5rem; font-size:0.85rem; color:#3c4a42;}
.swatch-chip{width:22px; height:22px; border-radius:50%; display:inline-block; box-shadow:0 0 0 3px var(--cream), 0 0 0 4px rgba(0,0,0,0.08);}

/* GALLERY */
.gallery-note{font-size:0.9rem; color:#5a655e; margin-bottom:1.6rem;}

.gallery-tabs{display:flex; justify-content:center; gap:0.8rem; margin-bottom:2.4rem;}
.tab-btn{
  font-family:var(--sans); font-size:0.78rem; letter-spacing:0.1em; text-transform:uppercase;
  padding:0.65rem 1.5rem; border-radius:30px; border:1px solid rgba(18,53,36,0.25);
  background:transparent; color:var(--forest); cursor:pointer;
  transition:background .2s ease, color .2s ease;
}
.tab-btn.active, .tab-btn:hover{background:var(--forest); color:var(--cream); border-color:var(--forest);}

.gallery-panel{display:none;}
.gallery-panel.active{display:block; animation:fadeUp .5s ease both;}

.gallery-toolbar{
  display:flex; align-items:center; justify-content:space-between; gap:1rem;
  margin-bottom:1rem;
}
.gallery-count{font-size:0.8rem; color:#5a655e; letter-spacing:0.04em;}
.gallery-subtitle{font-family:var(--serif); font-size:1.35rem; color:var(--forest); text-align:left;}
.download-all-btn{
  font-family:var(--sans); font-size:0.72rem; letter-spacing:0.08em; text-transform:uppercase;
  padding:0.5rem 1rem; border-radius:20px; border:1px solid var(--gold);
  background:transparent; color:var(--forest); cursor:pointer;
  transition:background .2s ease, color .2s ease; white-space:nowrap;
}
.download-all-btn:hover{background:var(--gold); color:var(--forest-deep);}
.download-all-btn.working{opacity:0.6; pointer-events:none;}

.gallery-subgroup{margin-bottom:3.4rem; text-align:left;}
.gallery-subgroup:last-child{margin-bottom:0;}

/* CAROUSEL — one photo takes centre stage, with soft peeks either side */
.carousel-wrap{ position:relative; }

.carousel{
  position:relative;
}

.carousel-track{
  display:flex;
  gap:1rem;
  overflow-x:auto;
  scroll-snap-type:x mandatory;
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
  padding:0.4rem 13% 0.6rem;
}
.carousel-track::-webkit-scrollbar{ display:none; }
.carousel-track--sub{ padding:0.4rem 18% 0.6rem; }

.carousel-slide{
  position:relative; overflow:hidden; border-radius:16px;
  box-shadow:0 18px 40px -18px rgba(18,53,36,0.4);
  cursor:pointer;
  flex:0 0 auto;
  width:74%;
  aspect-ratio:3/4;
  scroll-snap-align:center;
  opacity:0.55;
  transform:scale(0.92);
  transition:opacity .4s ease, transform .4s ease;
}
.carousel-track--sub .carousel-slide{ width:64%; }
.carousel-slide.is-active{
  opacity:1;
  transform:scale(1);
}

.carousel-slide img{width:100%; height:100%; object-fit:cover; display:block; transition:transform .6s ease;}
.carousel-slide.is-active:hover img{transform:scale(1.045);}

.download-btn{
  position:absolute; left:50%; bottom:14px; transform:translateX(-50%) translateY(8px);
  background:rgba(11,36,26,0.85); color:var(--gold-light);
  font-size:0.72rem; letter-spacing:0.06em; padding:0.5rem 0.9rem; border-radius:20px;
  opacity:0; transition:opacity .25s ease, transform .25s ease;
  white-space:nowrap;
}
.carousel-slide.is-active:hover .download-btn,
.carousel-slide.is-active:focus-within .download-btn{
  opacity:1; transform:translateX(-50%) translateY(0);
}

/* carousel nav arrows */
.carousel-btn{
  position:absolute; top:50%; transform:translateY(-50%);
  width:46px; height:46px; border-radius:50%; z-index:3;
  background:var(--cream); color:var(--forest);
  border:1px solid rgba(198,161,91,0.5);
  font-size:1.4rem; line-height:1; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  box-shadow:0 10px 24px -10px rgba(18,53,36,0.4);
  transition:background .2s ease, color .2s ease, opacity .2s ease;
}
.carousel-btn:hover{ background:var(--forest); color:var(--cream); }
.carousel-btn:disabled{ opacity:0.25; pointer-events:none; }
.carousel-prev{ left:0.5rem; }
.carousel-next{ right:0.5rem; }

/* indicators: dots for short sets, a numeric counter for long ones */
.carousel-indicators{
  display:flex; align-items:center; justify-content:center; gap:0.5rem;
  margin-top:1.1rem;
}
.carousel-dot{
  width:8px; height:8px; border-radius:50%;
  background:rgba(18,53,36,0.22); border:none; cursor:pointer; padding:0;
  transition:background .2s ease, width .2s ease, border-radius .2s ease;
}
.carousel-dot.active{ background:var(--forest); width:22px; border-radius:4px; }
.carousel-counter{
  font-family:var(--serif); font-size:0.95rem; letter-spacing:0.08em; color:var(--forest); opacity:0.75;
}

@media (max-width:760px){
  .carousel-track{ padding:0.4rem 8% 0.6rem; }
  .carousel-track--sub{ padding:0.4rem 8% 0.6rem; }
  .carousel-slide{ width:84%; }
  .carousel-track--sub .carousel-slide{ width:80%; }
  .carousel-btn{ width:38px; height:38px; font-size:1.2rem; }
  .carousel-prev{ left:0.2rem; }
  .carousel-next{ right:0.2rem; }
  .gallery-toolbar{flex-direction:column; align-items:flex-start; gap:0.6rem;}
  .carousel-slide.is-active .download-btn{opacity:1; transform:translateX(-50%) translateY(0); background:var(--forest);}
}

/* LIGHTBOX */
.lightbox{
  position:fixed; inset:0; z-index:300; display:none;
  align-items:center; justify-content:center;
  background:rgba(8,20,14,0.94);
  padding:2rem;
}
.lightbox.active{display:flex;}
.lightbox img{max-width:min(80vw, 900px); max-height:72vh; border-radius:8px; box-shadow:0 30px 70px rgba(0,0,0,0.5);}
.lightbox-close{
  position:absolute; top:1.5rem; right:1.8rem; background:none; border:none;
  color:var(--cream); font-size:1.6rem; cursor:pointer; opacity:0.8;
}
.lightbox-close:hover{opacity:1;}
.lightbox-nav{
  position:absolute; top:50%; transform:translateY(-50%);
  background:rgba(255,255,255,0.08); border:1px solid rgba(198,161,91,0.4); color:var(--cream);
  width:48px; height:48px; border-radius:50%; font-size:1.6rem; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  transition:background .2s ease;
}
.lightbox-nav:hover{background:rgba(198,161,91,0.25);}
.lightbox-prev{left:1.5rem;}
.lightbox-next{right:1.5rem;}
.lightbox-footer{
  position:absolute; bottom:1.6rem; left:50%; transform:translateX(-50%);
  display:flex; align-items:center; gap:1.2rem;
  color:var(--gold-light); font-size:0.8rem; letter-spacing:0.05em;
}
.lightbox-footer .download-btn{position:static; opacity:1; transform:none; background:rgba(198,161,91,0.18);}
@media (max-width:640px){
  .lightbox-nav{width:38px; height:38px; font-size:1.3rem;}
  .lightbox-prev{left:0.5rem;} .lightbox-next{right:0.5rem;}
}

/* VIDEO */
.video-grid{
  display:grid; grid-template-columns:repeat(3, 1fr); gap:1.6rem;
  justify-items:center; text-align:left;
  margin-bottom:1.6rem;
}
.video-card{
  display:flex; flex-direction:column; gap:0.9rem;
  width:100%; max-width:300px;
}
.video-card h3{
  font-family:var(--serif); font-size:1.1rem; color:var(--forest); margin-bottom:0.7rem;
}
.video-frame{
  border-radius:14px; overflow:hidden; box-shadow:0 20px 50px -20px rgba(18,53,36,0.4);
  border:1px solid rgba(198,161,91,0.3);
}
.video-frame video{width:100%; display:block; background:#000; aspect-ratio:9/16; object-fit:cover;}
.video-download-btn{
  align-self:flex-start;
  font-family:var(--sans); font-size:0.72rem; letter-spacing:0.08em; text-transform:uppercase;
  padding:0.55rem 1.1rem; border-radius:20px; border:1px solid var(--gold);
  background:transparent; color:var(--forest);
  transition:background .2s ease, color .2s ease;
  white-space:nowrap;
}
.video-download-btn:hover{background:var(--gold); color:var(--forest-deep);}
.video .gallery-note code{background:#eee4cf; padding:0.15rem 0.4rem; border-radius:4px; font-size:0.8rem;}
@media (max-width:820px){
  .video-grid{grid-template-columns:1fr; gap:2rem;}
}

/* VENDORS */
.vendor-grid{
  display:grid; grid-template-columns:repeat(3, 1fr); gap:1.6rem;
  margin-top:0.4rem;
}
.vendor-card{
  background:var(--forest); color:var(--cream); border-radius:14px;
  padding:1.8rem 1.6rem; text-align:left;
  border:1px solid rgba(198,161,91,0.35);
  box-shadow:0 18px 40px -20px rgba(18,53,36,0.5);
  transition:transform .25s ease, box-shadow .25s ease;
}
.vendor-card:hover{
  transform:translateY(-4px);
  box-shadow:0 24px 50px -18px rgba(18,53,36,0.55);
}
.vendor-role{
  font-size:0.68rem; letter-spacing:0.18em; text-transform:uppercase;
  color:var(--gold); opacity:0.9;
}
.vendor-name{
  font-family:var(--serif); font-weight:500; font-size:1.25rem;
  color:var(--gold-light); margin:0.5rem 0 1.2rem;
  line-height:1.3;
}
.vendor-links{display:flex; flex-direction:column; gap:0.7rem;}
.vendor-link{
  display:flex; align-items:center; justify-content:space-between; gap:0.8rem;
  border:1px solid rgba(198,161,91,0.3); border-radius:8px;
  padding:0.6rem 0.9rem;
  transition:background .2s ease, border-color .2s ease;
}
.vendor-link:hover{
  background:rgba(198,161,91,0.12);
  border-color:var(--gold);
}
.vendor-link-label{
  font-size:0.65rem; letter-spacing:0.12em; text-transform:uppercase;
  color:var(--gold-light); opacity:0.75;
}
.vendor-link-value{
  font-size:0.88rem; letter-spacing:0.02em; color:var(--cream);
}

@media (max-width:900px){
  .vendor-grid{grid-template-columns:repeat(2, 1fr);}
}
@media (max-width:640px){
  .vendor-grid{grid-template-columns:1fr;}
}

/* RSVP */
.rsvp{
  background:linear-gradient(160deg, var(--forest-deep), var(--forest));
  color:var(--cream); border-radius:20px; padding:4rem 1.5rem;
  margin:0 1.5rem 5rem; max-width:none;
}
.rsvp .monogram{margin:0 auto 1.2rem;}
.rsvp-sub{color:var(--gold-light); opacity:0.85; max-width:420px; margin:0 auto 2.2rem; font-size:0.95rem;}
.rsvp-contacts{display:flex; justify-content:center; gap:1.4rem; flex-wrap:wrap;}
.rsvp-contact{
  display:flex; flex-direction:column; gap:0.3rem; align-items:center;
  border:1px solid rgba(198,161,91,0.4); border-radius:12px; padding:1.2rem 2rem;
  min-width:180px; transition:background .2s ease, transform .2s ease;
}
.rsvp-contact:hover{background:rgba(198,161,91,0.1); transform:translateY(-3px);}
.rsvp-name{font-family:var(--serif); font-size:1.1rem; color:var(--gold-light);}
.rsvp-number{font-size:0.95rem; letter-spacing:0.04em;}

/* FOOTER */
.footer{
  text-align:center; padding:2.6rem 1rem 3rem; color:var(--forest);
  font-family:var(--serif); font-size:1.05rem;
}
.footer-tag{
  font-family:var(--sans); font-size:0.72rem; letter-spacing:0.18em; text-transform:uppercase;
  color:var(--gold); opacity:0.8; margin-top:0.4rem;
}