:root{
  --apple-green:#6E8C3F;
  --gold:#E3A730;
  --orangeade:#E6603C;
  --rouge:#AE3B41;
  --magenta:#8B3B6B;
  --cream:#FBF2E1;
  --paper:#F3E7CE;
  --ink:#2A2118;
  --ink-soft:#5B5042;
  --line:#D8C6A0;
  --shadow: 0 10px 30px rgba(42,33,24,0.12);
}
*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{
  margin:0;
  background:var(--cream);
  color:var(--ink);
  font-family:'Jost',sans-serif;
  font-weight:400;
  line-height:1.6;
  cursor:none;
  overflow-x:hidden;
  opacity:0;
  animation:pageIn .7s ease forwards;
}
body.leaving{animation:pageOut .38s ease forwards;}
@keyframes pageIn{
  from{opacity:0; transform:translateY(14px);}
  to{opacity:1; transform:translateY(0);}
}
@keyframes pageOut{
  to{opacity:0; transform:translateY(-14px);}
}
h1,h2,h3,.display{
  font-family:'Fraunces',serif;
  font-weight:700;
  margin:0 0 .3em;
  letter-spacing:.01em;
}
.script{font-family:'Caveat',cursive;}
a{color:inherit;text-decoration:none;}
img{max-width:100%;display:block;}
.container{max-width:1080px;margin:0 auto;padding:0 28px;}
::selection{background:var(--gold); color:var(--ink);}

/* ---------- custom cursor ---------- */
.cursor-dot, .cursor-ring{
  position:fixed; top:0; left:0; pointer-events:none; z-index:9999;
  border-radius:50%; transform:translate(-50%,-50%);
}
.cursor-dot{ width:8px; height:8px; background:var(--orangeade); }
.cursor-ring{
  width:34px; height:34px; border:2px solid var(--rouge);
  transition:width .18s ease, height .18s ease, border-color .18s ease, background .18s ease, opacity .18s ease;
}
.cursor-ring::before{
  content:"✦"; position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
  font-size:12px; color:var(--rouge); opacity:0; transition:opacity .18s ease;
}
.cursor-ring.hover{
  width:56px; height:56px; background:rgba(230,96,60,.12); border-color:var(--orangeade);
}
.cursor-ring.hover::before{opacity:1;}
@media (hover:none), (max-width:820px){
  .cursor-dot,.cursor-ring{display:none;}
  body{cursor:auto;}
}

/* ---------- decorative texture ---------- */
.grain{
  position:fixed; inset:0; pointer-events:none; z-index:2; opacity:.05; mix-blend-mode:multiply;
  background-image:radial-gradient(circle, #000 1px, transparent 1px);
  background-size:3px 3px;
}
.stripe-band{
  height:14px;
  background:repeating-linear-gradient(115deg, var(--rouge) 0 14px, var(--gold) 14px 28px, var(--apple-green) 28px 42px, var(--magenta) 42px 56px, var(--orangeade) 56px 70px);
  background-size:200% 100%;
  animation:stripeShift 14s linear infinite;
}
@keyframes stripeShift{ to{ background-position:-140px 0; } }

/* ---------- nav ---------- */
header.nav{
  position:sticky; top:0; z-index:50;
  background:rgba(251,242,225,.88); backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line);
}
.nav-inner{
  max-width:1080px; margin:0 auto; padding:14px 28px;
  display:flex; align-items:center; justify-content:space-between;
}
.logo{font-family:'Fraunces',serif; font-weight:900; font-size:22px; letter-spacing:.03em;}
.logo span{color:var(--orangeade);}
nav.links{display:flex; gap:20px; flex-wrap:wrap;}
nav.links a{
  font-size:13px; text-transform:uppercase; letter-spacing:.06em; font-weight:500;
  color:var(--ink-soft); position:relative; padding:4px 0; white-space:nowrap;
}
nav.links a::after{
  content:""; position:absolute; left:0; bottom:0; height:2px; width:0; background:var(--orangeade);
  transition:width .25s ease;
}
nav.links a:hover::after{width:100%;}
nav.links a.active{color:var(--rouge);}
nav.links a.active::after{width:100%;}
.nav-toggle{display:none; background:none; border:2px solid var(--ink); border-radius:8px; padding:8px 10px; font-size:18px; cursor:none;}
@media (max-width:980px){
  nav.links{
    position:absolute; top:100%; left:0; right:0; background:var(--cream);
    flex-direction:column; gap:0; max-height:0; overflow:hidden; border-bottom:1px solid var(--line);
    transition:max-height .35s ease;
  }
  nav.links.open{max-height:520px;}
  nav.links a{padding:14px 28px; border-top:1px solid var(--line); display:block;}
  .nav-toggle{display:block;}
}

/* ---------- page header banner (non-home pages) ---------- */
.page-hero{
  position:relative; padding:90px 24px 70px; text-align:center; overflow:hidden;
  background:
    radial-gradient(ellipse at 15% 20%, rgba(227,167,48,.3), transparent 55%),
    radial-gradient(ellipse at 88% 80%, rgba(139,59,107,.25), transparent 55%),
    var(--cream);
}
.page-hero .kicker{justify-content:center;}
.page-hero h1{font-size:clamp(38px,7vw,72px); margin-bottom:10px;}
.page-hero p{color:var(--ink-soft); max-width:560px; margin:0 auto; font-size:16px;}
.page-motif{position:absolute; font-size:44px; opacity:.35; animation:float 7s ease-in-out infinite;}
.page-motif.pm1{top:14%; left:7%; color:var(--rouge);}
.page-motif.pm2{bottom:12%; right:9%; color:var(--apple-green); animation-delay:1s;}

/* ---------- hero (home) ---------- */
.hero{
  position:relative; min-height:92vh; display:flex; align-items:center; justify-content:center;
  text-align:center; padding:80px 24px 60px;
  background:
    radial-gradient(ellipse at 20% 20%, rgba(227,167,48,.35), transparent 55%),
    radial-gradient(ellipse at 85% 15%, rgba(139,59,107,.28), transparent 50%),
    radial-gradient(ellipse at 75% 90%, rgba(110,140,63,.3), transparent 55%),
    var(--cream);
  overflow:hidden;
}
.hero-motif{
  position:absolute; font-size:64px; opacity:.5; animation:float 7s ease-in-out infinite;
  filter:saturate(1.1);
}
.hero-motif.m1{top:12%; left:8%; color:var(--rouge); animation-delay:0s;}
.hero-motif.m2{top:20%; right:9%; color:var(--apple-green); animation-delay:1.2s; font-size:48px;}
.hero-motif.m3{bottom:16%; left:12%; color:var(--gold); animation-delay:.6s; font-size:52px;}
.hero-motif.m4{bottom:10%; right:14%; color:var(--magenta); animation-delay:1.8s; font-size:40px;}
@keyframes float{
  0%,100%{transform:translateY(0) rotate(0deg);}
  50%{transform:translateY(-18px) rotate(8deg);}
}
.hero-eyebrow{
  letter-spacing:.35em; text-transform:uppercase; font-size:13px; color:var(--rouge); font-weight:600; margin-bottom:18px;
  opacity:0; animation:riseIn .7s ease .1s forwards;
}
.hero h1{ font-size:clamp(48px,10vw,120px); line-height:.95; margin:0; }
.hero h1 .word{display:inline-block; opacity:0; transform:translateY(28px); animation:riseIn .8s cubic-bezier(.2,.8,.2,1) forwards;}
.hero h1 .word:nth-child(1){animation-delay:.15s;}
.hero h1 .word:nth-child(2){animation-delay:.3s;}
.hero h1 .word:nth-child(3){animation-delay:.45s;}
.hero h1 .amp{color:var(--orangeade); font-style:italic; font-weight:400;}
@keyframes riseIn{ to{opacity:1; transform:translateY(0);} }
.hero-sub{
  margin-top:22px; font-size:clamp(16px,2.4vw,22px); color:var(--ink-soft);
  opacity:0; animation:riseIn .8s ease .6s forwards;
}
.hero-sub strong{color:var(--rouge);}
.countdown{
  display:flex; gap:16px; justify-content:center; margin-top:44px; flex-wrap:wrap;
  opacity:0; animation:riseIn .8s ease .75s forwards;
}
.countdown .box{
  background:var(--ink); color:var(--cream); border-radius:14px; padding:16px 20px; min-width:84px;
  box-shadow:var(--shadow); transition:transform .3s ease;
}
.countdown .box:hover{transform:translateY(-4px);}
.countdown .box b{display:block; font-family:'Fraunces',serif; font-size:30px;}
.countdown .box span{font-size:11px; text-transform:uppercase; letter-spacing:.12em; opacity:.75;}
.scroll-cue{
  position:absolute; bottom:26px; left:50%; transform:translateX(-50%);
  font-size:12px; letter-spacing:.2em; text-transform:uppercase; color:var(--ink-soft);
  display:flex; flex-direction:column; align-items:center; gap:6px;
}
.scroll-cue .line{width:1px; height:34px; background:var(--ink-soft); animation:pulse 1.8s infinite;}
@keyframes pulse{0%,100%{opacity:.2;} 50%{opacity:1;}}

/* ---------- reveal on scroll ---------- */
.reveal{opacity:0; transform:translateY(36px); transition:opacity .8s ease, transform .8s ease;}
.reveal.in{opacity:1; transform:translateY(0);}
.reveal.d1{transition-delay:.08s;} .reveal.d2{transition-delay:.16s;} .reveal.d3{transition-delay:.24s;} .reveal.d4{transition-delay:.32s;}

/* ---------- sections generic ---------- */
section{padding:100px 0; position:relative;}
.kicker{
  font-size:13px; letter-spacing:.3em; text-transform:uppercase; color:var(--rouge); font-weight:600; margin-bottom:10px;
  display:flex; align-items:center; gap:10px;
}
.kicker::before{content:""; width:28px; height:2px; background:var(--rouge); display:inline-block;}
.section-title{font-size:clamp(32px,5vw,54px); margin-bottom:20px;}
.section-intro{max-width:640px; color:var(--ink-soft); font-size:17px; margin-bottom:50px;}
.tint-green{background:var(--apple-green); color:var(--cream);}
.tint-green .kicker,.tint-green .kicker::before{color:var(--paper);}
.tint-green .section-intro{color:#EFE9D9;}
.tint-paper{background:var(--paper);}

/* ---------- our story ---------- */
.story-grid{display:grid; grid-template-columns:1.1fr 1fr; gap:56px; align-items:start;}
@media(max-width:860px){.story-grid{grid-template-columns:1fr;}}
.photo-collage{position:relative; height:420px;}
.photo-frame{
  position:absolute; background:linear-gradient(135deg,#EADFC4,#DCC998);
  border:6px solid var(--cream); box-shadow:var(--shadow);
  display:flex; align-items:center; justify-content:center; text-align:center; padding:12px;
  font-family:'Caveat',cursive; font-size:20px; color:var(--ink-soft);
  transition:transform .4s ease;
}
.photo-frame:hover{transform:scale(1.04) rotate(0deg) !important; z-index:5;}
.photo-frame.f1{width:62%; height:70%; top:0; left:0; transform:rotate(-4deg); z-index:2;}
.photo-frame.f2{width:52%; height:52%; bottom:0; right:0; transform:rotate(5deg); background:linear-gradient(135deg,#E7B9B9,#D98A8A); z-index:3;}
.photo-frame.f3{width:38%; height:38%; top:30%; right:8%; transform:rotate(-8deg); background:linear-gradient(135deg,#C9D4A6,#A9BE7E); z-index:1;}
.story-copy p{margin:0 0 16px; color:var(--ink-soft);}
.fact-row{display:flex; gap:10px; flex-wrap:wrap; margin:22px 0;}
.chip{
  background:var(--cream); border:1px solid var(--line); padding:7px 14px; border-radius:999px; font-size:13px;
  transition:transform .25s ease, background .25s ease;
}
.chip:hover{transform:translateY(-2px); background:var(--gold);}
.lived-map{display:flex; flex-wrap:wrap; gap:10px; margin-top:8px;}
.lived-map span{
  background:var(--ink); color:var(--cream); padding:6px 13px; border-radius:6px; font-size:12px; letter-spacing:.04em;
  position:relative; transition:background .25s ease;
}
.lived-map span:hover{background:var(--rouge);}
.lived-map span::before{content:"✦ ";}

/* ---------- world map (where we've lived) ---------- */
.world-map-wrap{ margin-top:14px; }
.world-map{
  width:100%; height:auto; display:block;
  background:linear-gradient(180deg, rgba(227,167,48,.08), rgba(139,59,107,.06));
  border:1px solid var(--line); border-radius:18px; box-shadow:var(--shadow);
}
.world-map .graticule line{ stroke:var(--ink); stroke-opacity:.08; stroke-width:1; }
.world-map .continent{
  fill:var(--apple-green); fill-opacity:.18; stroke:var(--ink); stroke-opacity:.4; stroke-width:2;
  stroke-linejoin:round;
}
.world-map #routeLine{
  fill:none; stroke:var(--rouge); stroke-width:2.2; stroke-linecap:round; stroke-linejoin:round;
}
.world-map .pin-ring{
  fill:none; stroke:var(--orangeade); stroke-width:2; opacity:.6;
  transform-box:fill-box; transform-origin:center; animation:pinPulse 2.6s ease-out infinite;
}
.world-map .pin-dot{ fill:var(--rouge); stroke:var(--cream); stroke-width:1.5; }
.world-map .pin-label{
  font-family:'Jost',sans-serif; font-size:12px; font-weight:600; fill:var(--ink-soft); letter-spacing:.02em;
}
@keyframes pinPulse{
  0%{ transform:scale(.4); opacity:.65; }
  100%{ transform:scale(2.8); opacity:0; }
}
.world-map .city-pin{
  opacity:0; transform:scale(.4); transform-box:fill-box; transform-origin:center;
  transition:opacity .5s ease, transform .55s cubic-bezier(.34,1.56,.64,1);
}
.world-map-wrap.in .city-pin{ opacity:1; transform:scale(1); }
.world-map .city-pin:hover .pin-dot{ fill:var(--orangeade); }
.map-caption{ margin-top:14px; font-size:13px; color:var(--ink-soft); }
.map-caption .script{ font-size:17px; color:var(--rouge); }

/* ---------- schedule ---------- */
.timeline{max-width:760px; margin:0 auto;}
.day-block{margin-bottom:56px;}
.day-head{ display:flex; align-items:baseline; gap:14px; margin-bottom:22px; }
.day-num{ font-family:'Fraunces',serif; font-size:40px; font-weight:900; color:var(--orangeade); }
.day-date{color:var(--ink-soft); font-size:14px; letter-spacing:.08em; text-transform:uppercase;}
.event{
  display:grid; grid-template-columns:110px 1fr; gap:18px; padding:16px 0; border-top:1px dashed var(--line);
  transition:padding-left .25s ease, background .25s ease;
}
.event:hover{padding-left:10px; background:rgba(227,167,48,.12);}
.event:last-child{border-bottom:1px dashed var(--line);}
.event time{font-weight:600; color:var(--rouge); font-size:14px;}
.event .what{font-family:'Fraunces',serif; font-size:19px; font-weight:600;}
.event .note{color:var(--ink-soft); font-size:14px; margin-top:2px;}

/* ---------- travel ---------- */
.info-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:26px;}
@media(max-width:820px){.info-grid{grid-template-columns:1fr;}}
.info-card{
  background:var(--cream); border-radius:16px; padding:28px; box-shadow:var(--shadow);
  border-top:5px solid var(--gold); transition:transform .3s ease;
}
.info-card:hover{transform:translateY(-6px);}
.info-card:nth-child(2){border-top-color:var(--orangeade);}
.info-card:nth-child(3){border-top-color:var(--magenta);}
.info-card h3{font-size:19px; margin-bottom:10px;}
.info-card p{color:var(--ink-soft); font-size:15px; margin:0;}

/* ---------- dress code ---------- */
.palette{display:flex; gap:16px; flex-wrap:wrap; margin:36px 0 46px;}
.swatch{text-align:center; font-size:12px; letter-spacing:.04em; color:var(--ink-soft);}
.swatch .chip-color{width:74px; height:74px; border-radius:50%; margin-bottom:8px; box-shadow:var(--shadow); transition:transform .3s ease;}
.swatch:hover .chip-color{transform:scale(1.12) rotate(8deg);}
.attire-grid{display:grid; grid-template-columns:1fr 1fr; gap:24px;}
@media(max-width:760px){.attire-grid{grid-template-columns:1fr;}}
.attire-card{background:#fff; border:1px solid var(--line); border-radius:14px; padding:24px; transition:box-shadow .3s ease;}
.attire-card:hover{box-shadow:var(--shadow);}
.attire-card h3{font-size:17px; color:var(--rouge);}
.attire-card ul{margin:10px 0 0; padding-left:18px; color:var(--ink-soft); font-size:14px;}
.inspo-note{margin-top:34px; font-family:'Caveat',cursive; font-size:22px; color:var(--ink-soft);}

/* ---------- activities ---------- */
.activity-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:18px;}
@media(max-width:920px){.activity-grid{grid-template-columns:repeat(2,1fr);}}
@media(max-width:560px){.activity-grid{grid-template-columns:1fr;}}
.activity-card{
  background:rgba(251,242,225,.08); border:1px solid rgba(251,242,225,.35); border-radius:14px; padding:22px;
  color:var(--cream); transition:transform .3s ease, background .3s ease;
}
.activity-card:hover{transform:translateY(-6px); background:rgba(251,242,225,.16);}
.activity-card .tag{font-size:11px; text-transform:uppercase; letter-spacing:.14em; opacity:.75;}
.activity-card h3{font-size:17px; margin:8px 0 6px; color:#fff;}
.activity-card p{font-size:13.5px; opacity:.85; margin:0;}

/* ---------- rsvp ---------- */
.rsvp-wrap{max-width:640px; margin:0 auto; background:#fff; border-radius:20px; padding:44px; box-shadow:var(--shadow);}
.field{margin-bottom:20px;}
.field label{display:block; font-size:13px; letter-spacing:.04em; margin-bottom:7px; color:var(--ink-soft); text-transform:uppercase;}
.field input, .field select, .field textarea{
  width:100%; padding:12px 14px; border:1.5px solid var(--line); border-radius:10px; font-family:'Jost',sans-serif; font-size:15px;
  background:var(--cream);
}
.field input:focus, .field select:focus, .field textarea:focus{outline:2px solid var(--orangeade); outline-offset:1px;}
.checkboxen{display:flex; flex-wrap:wrap; gap:12px 22px;}
.checkboxen label{
  display:flex; align-items:center; gap:8px; font-size:14px; text-transform:none; color:var(--ink);
  flex:0 0 auto; max-width:100%;
}
.checkboxen input[type="checkbox"]{flex-shrink:0; width:17px; height:17px; margin:0;}
.btn{
  display:inline-block; background:var(--rouge); color:#fff; border:none; padding:14px 30px; border-radius:999px;
  font-family:'Jost',sans-serif; font-weight:600; letter-spacing:.05em; text-transform:uppercase; font-size:13px;
  cursor:none; transition:transform .2s ease, background .2s ease;
}
.btn:hover{background:var(--orangeade); transform:translateY(-2px);}
#rsvpMsg{margin-top:18px; font-family:'Caveat',cursive; font-size:22px; color:var(--apple-green); display:none;}

/* ---------- registry ---------- */
.registry-box{
  max-width:640px; margin:0 auto; text-align:center; background:var(--cream); border:2px dashed var(--gold);
  border-radius:20px; padding:50px 36px;
}

/* ---------- faq ---------- */
.faq{max-width:760px; margin:0 auto;}
.faq-item{border-bottom:1px solid var(--line);}
.faq-q{
  display:flex; justify-content:space-between; align-items:center; padding:22px 4px; cursor:none;
  font-family:'Fraunces',serif; font-weight:600; font-size:18px;
}
.faq-q .plus{transition:transform .3s ease; color:var(--orangeade); font-size:22px;}
.faq-item.open .plus{transform:rotate(45deg);}
.faq-a{max-height:0; overflow:hidden; transition:max-height .35s ease;}
.faq-a p{color:var(--ink-soft); padding:0 4px 22px; margin:0; font-size:15px;}

/* ---------- contact / footer ---------- */
.contact-card{
  max-width:520px; margin:0 auto; text-align:center; background:#fff; border-radius:20px; padding:44px; box-shadow:var(--shadow);
}
footer{
  background:var(--ink); color:var(--paper); padding:50px 0 30px; text-align:center;
}
footer .monogram{font-family:'Fraunces',serif; font-size:26px; margin-bottom:10px;}
footer .notes{font-size:12px; opacity:.6; margin-top:18px; letter-spacing:.03em;}
footer .foot-links{display:flex; gap:18px; justify-content:center; flex-wrap:wrap; margin-top:18px; font-size:12px; text-transform:uppercase; letter-spacing:.08em; opacity:.75;}
footer .foot-links a:hover{color:var(--gold);}
