:root{--ink:#102c2a;--cream:#f4efe5;--paper:#fffaf2;--coral:#e56f51;--sage:#a5b69d;--white:#fff;--line:rgba(16,44,42,.16);--serif:"Italiana",Georgia,serif;--sans:"DM Sans",Arial,sans-serif}
*{box-sizing:border-box}
html{scroll-behavior:smooth;background:var(--cream)}
body{margin:0;color:var(--ink);font-family:var(--sans);background:var(--cream);font-weight:400;overflow-x:hidden}
a{color:inherit;text-decoration:none}
button{font:inherit}
img{display:block;width:100%}
.grain{position:fixed;inset:0;z-index:50;pointer-events:none;opacity:.045;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.7'/%3E%3C/svg%3E")}
.intro-sequence{position:fixed;inset:0;z-index:200;background:var(--ink);color:var(--cream);display:grid;place-items:center;transition:opacity .65s ease,visibility .65s;overflow:hidden}.intro-sequence:after{content:"";position:absolute;width:1px;height:0;background:rgba(255,255,255,.28);left:50%;top:0;animation:intro-line 1.5s ease forwards}.intro-mark{text-align:center;position:relative;z-index:1;animation:intro-mark 1.45s cubic-bezier(.2,.7,.2,1) both}.intro-mark strong{display:block;font-family:var(--serif);font-weight:400;font-size:clamp(6rem,14vw,11rem);line-height:.8}.intro-mark span{display:block;margin-top:2rem;text-transform:uppercase;letter-spacing:.42em;font-size:.62rem}.intro-sequence.is-done{opacity:0;visibility:hidden;pointer-events:none}.intro-sequence.skip-intro{display:none}@keyframes intro-mark{0%{opacity:0;transform:translateY(20px) scale(.96)}30%,72%{opacity:1;transform:none}100%{opacity:0;transform:translateY(-12px) scale(1.02)}}@keyframes intro-line{0%{height:0;opacity:0}35%,70%{height:100%;opacity:1}100%{height:100%;opacity:0}}
.site-header{position:absolute;top:0;left:0;right:0;z-index:20;display:flex;align-items:center;justify-content:space-between;padding:28px 4.5vw;color:white;border-bottom:1px solid rgba(255,255,255,.22)}
.brand{display:flex;align-items:center;gap:.75rem}.brand b{font-family:var(--serif);font-size:1.75rem;font-weight:400;line-height:1}.brand span{text-transform:uppercase;letter-spacing:.2em;font-size:.58rem;opacity:.75}
.site-header nav{display:flex;align-items:center;gap:2rem;font-size:.75rem;text-transform:uppercase;letter-spacing:.15em}
.site-header nav a{opacity:.85;transition:opacity .25s}
.site-header nav a:hover{opacity:1}
.site-header .nav-cta{padding:.72rem 1rem;border:1px solid rgba(255,255,255,.52);border-radius:999px}
.hero{position:relative;min-height:100svh;color:white;display:grid;align-items:end;isolation:isolate;overflow:hidden}
.hero-slides,.hero-slide,.hero-wash{position:absolute;inset:0}
.hero-slides{z-index:-3;background:#173d37}
.hero-slide{background-position:center;background-size:cover;opacity:0;transform:scale(1.08);animation:cinema 18s infinite}
.slide-one{background-image:url("assets/hero-pool.jpg");animation-delay:0s}
.slide-two{background-image:url("assets/villa-03.webp");animation-delay:6s}
.slide-three{background-image:url("assets/villa-04.webp");animation-delay:12s}
@keyframes cinema{0%{opacity:0;transform:scale(1.1)}7%,28%{opacity:1}35%,100%{opacity:0;transform:scale(1)}}
.hero-wash{z-index:-2;background:linear-gradient(90deg,rgba(8,27,25,.78) 0%,rgba(8,27,25,.28) 55%,rgba(8,27,25,.15)),linear-gradient(0deg,rgba(8,27,25,.8),transparent 48%)}
.hero:after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(110deg,transparent 34%,rgba(255,255,255,.09) 50%,transparent 66%);transform:translateX(-130%);animation:hero-sheen 9s ease-in-out 2.3s infinite}@keyframes hero-sheen{0%,65%{transform:translateX(-130%)}100%{transform:translateX(130%)}}
.hero-copy{padding:150px 8vw 120px;max-width:1000px}
.eyebrow{margin:0 0 1.4rem;text-transform:uppercase;letter-spacing:.23em;font-size:.69rem;font-weight:600;color:rgba(255,255,255,.78)}
.eyebrow.dark{color:var(--ink)}.eyebrow.coral{color:var(--coral)}.eyebrow.sage{color:#758b72}
h1,h2{margin:0;font-family:var(--serif);font-weight:400;line-height:.88;letter-spacing:-.025em}
h1{font-size:clamp(4.5rem,10.8vw,10rem)}
h1 em,h2 em{font-weight:400;color:#f1b19e}
.hero-intro{max-width:540px;font-size:clamp(1rem,1.5vw,1.22rem);line-height:1.7;color:rgba(255,255,255,.83);margin:2rem 0 2.4rem}
.hero-actions{display:flex;align-items:center;gap:2rem}
.button{display:inline-flex;align-items:center;justify-content:center;gap:.75rem;border-radius:999px;border:0;padding:1rem 1.4rem;font-size:.76rem;text-transform:uppercase;letter-spacing:.13em;font-weight:600;cursor:pointer;transition:transform .25s,background .25s,color .25s}
.button:hover{transform:translateY(-2px)}
.button-light{background:white;color:var(--ink)}
.text-button{border:0;background:none;color:white;padding:.75rem 0;cursor:pointer;font-size:.76rem;text-transform:uppercase;letter-spacing:.12em;border-bottom:1px solid rgba(255,255,255,.45)}
.hero-meta{position:absolute;right:4.5vw;bottom:46px;display:flex;gap:1.8rem;font-size:.69rem;text-transform:uppercase;letter-spacing:.14em;color:rgba(255,255,255,.68)}
.hero-meta span+span:before{content:"·";margin-right:1.8rem}
.scroll-mark{position:absolute;right:4.5vw;top:48%;width:42px;height:70px;border:1px solid rgba(255,255,255,.35);border-radius:999px;display:grid;place-items:start center;padding-top:12px}
.scroll-mark span{display:block;width:3px;height:10px;border-radius:3px;background:#fff;animation:scroll 2s infinite}
@keyframes scroll{0%{transform:translateY(0);opacity:0}30%{opacity:1}70%{opacity:1}100%{transform:translateY(28px);opacity:0}}
.countdown-band{display:flex;align-items:center;justify-content:space-between;gap:4rem;padding:34px 8vw;background:var(--coral);color:var(--ink)}
.countdown-band .eyebrow{margin:0;white-space:nowrap}
.countdown{display:flex;align-items:center;gap:2.4vw}
.countdown div{display:flex;align-items:baseline;gap:.6rem}.countdown strong{font-family:var(--serif);font-size:clamp(2.2rem,4vw,4.2rem);font-weight:400;min-width:1.2em}.countdown span{text-transform:uppercase;letter-spacing:.16em;font-size:.58rem}.countdown i{height:34px;width:1px;background:rgba(16,44,42,.28)}
.story{padding:150px 8vw 170px;display:grid;grid-template-columns:minmax(300px,.85fr) 1.15fr;gap:10vw;background:var(--paper)}
.story-heading{position:sticky;top:110px;height:max-content}
h2{font-size:clamp(3.5rem,7vw,7.2rem)}
.story-heading h2 em,.gallery h2 em{color:var(--coral)}
.story-heading>p:last-child{font-size:1.05rem;line-height:1.8;max-width:440px;margin-top:2.2rem;color:#546b66}
.timeline{list-style:none;margin:0;padding:0}.timeline li{display:grid;grid-template-columns:95px 1fr;gap:2rem;border-top:1px solid var(--line);padding:2.3rem 0}.timeline li:last-child{border-bottom:1px solid var(--line)}
.timeline time{font-family:var(--serif);font-size:1.9rem;color:var(--coral)}
.timeline span{font-size:.65rem;text-transform:uppercase;letter-spacing:.18em;color:#72817e}.timeline h3{font-family:var(--serif);font-weight:400;font-size:clamp(1.55rem,2.4vw,2.25rem);margin:.45rem 0 .65rem}.timeline p{margin:0;color:#60716e;line-height:1.7;font-size:.92rem;max-width:520px}
.villa{display:grid;grid-template-columns:1.15fr .85fr;min-height:850px;background:#d9e1d5}
.villa-visual{position:relative;overflow:hidden;min-height:650px}.villa-visual img{width:100%;height:100%;object-fit:cover;transition:transform 1s}.villa-visual:hover img{transform:scale(1.025)}
.image-tag{position:absolute;bottom:0;right:0;background:var(--cream);padding:1.1rem 1.4rem;font-size:.68rem;text-transform:uppercase;letter-spacing:.15em}.image-tag span{color:var(--coral);margin-right:1rem}
.villa-copy{padding:12vw 7vw;display:flex;flex-direction:column;justify-content:center}.villa-copy h2{font-size:clamp(3.8rem,6.4vw,7rem)}.villa-copy h2 em{color:#71876f}.villa-copy>p:not(.eyebrow){line-height:1.8;color:#4e6661;max-width:530px;margin:2.2rem 0}
.stats{display:grid;grid-template-columns:repeat(4,1fr);margin:1.2rem 0 2.5rem;border-top:1px solid rgba(16,44,42,.18);border-bottom:1px solid rgba(16,44,42,.18)}.stats div{padding:1.4rem 1rem 1.3rem 0}.stats div+div{padding-left:1rem;border-left:1px solid rgba(16,44,42,.18)}.stats dt{font-family:var(--serif);font-size:2.2rem}.stats dd{margin:.2rem 0 0;text-transform:uppercase;letter-spacing:.15em;font-size:.55rem;color:#61736f}
.arrow-link{width:max-content;text-transform:uppercase;letter-spacing:.14em;font-size:.72rem;font-weight:600;padding-bottom:.45rem;border-bottom:1px solid var(--ink)}.arrow-link span{display:inline-block;margin-left:.6rem;transition:transform .2s}.arrow-link:hover span{transform:translate(3px,-3px)}
.gallery{padding:150px 0;background:var(--ink);color:white;overflow:hidden}.gallery-head{padding:0 8vw 80px}.gallery-head h2{font-size:clamp(4rem,8vw,8.5rem)}
.gallery-track{display:flex;align-items:center;gap:2.5vw;padding:0 8vw;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}.gallery-track::-webkit-scrollbar{display:none}.gallery figure{flex:0 0 min(68vw,860px);margin:0;scroll-snap-align:center}.gallery figure.portrait{flex-basis:min(45vw,560px)}.gallery img{height:min(66vw,680px);object-fit:cover;filter:saturate(.84);transition:filter .4s,transform .6s}.gallery figure.wide img{height:min(50vw,560px)}.gallery figure:hover img{filter:saturate(1);transform:scale(.995)}.gallery figcaption{margin-top:1rem;text-transform:uppercase;letter-spacing:.16em;font-size:.63rem;color:rgba(255,255,255,.6);display:flex;justify-content:space-between;gap:1rem}.gallery figcaption span{color:#f0aa96}
.save{position:relative;min-height:90vh;display:grid;place-items:center;text-align:center;color:white;overflow:hidden;background:#0b2422}.save-bg{position:absolute;inset:-4%;background:linear-gradient(rgba(7,28,26,.52),rgba(7,28,26,.8)),url("assets/villa-03.webp") center/cover;animation:breathe 14s ease-in-out infinite alternate}@keyframes breathe{to{transform:scale(1.06)}}.save-content{position:relative;padding:100px 6vw}.save-content h2{font-size:clamp(4rem,8vw,8rem)}.save-content h2 em{color:#f0aa96}.date-lockup{margin:3rem auto 1.2rem;display:flex;align-items:center;justify-content:center;gap:1.3rem}.date-lockup strong{font-family:var(--serif);font-weight:400;font-size:clamp(3rem,6vw,5.8rem)}.date-lockup span{text-transform:uppercase;letter-spacing:.2em;font-size:.65rem}.save-content>p:not(.eyebrow,.date-lockup){line-height:1.75;color:rgba(255,255,255,.7)}.save-actions{margin-top:2.2rem;display:flex;justify-content:center;align-items:flex-start;gap:.8rem}.calendar-action{display:flex;flex-direction:column;align-items:center;gap:.6rem}.calendar-action>span{font-size:.55rem;text-transform:uppercase;letter-spacing:.12em;color:rgba(255,255,255,.55)}.button-coral{background:var(--coral);color:var(--ink)}.button-ghost{color:white;border:1px solid rgba(255,255,255,.5);background:rgba(255,255,255,.04)}
footer{background:#071b1a;color:rgba(255,255,255,.55);display:flex;justify-content:space-between;align-items:center;padding:28px 4.5vw;text-transform:uppercase;letter-spacing:.15em;font-size:.59rem}footer p{margin:0}.footer-sparkle{border:0;background:none;color:inherit;text-transform:uppercase;letter-spacing:.15em;font-size:inherit;cursor:pointer}
#confetti{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:100}
.reveal{opacity:0;transform:translateY(36px);transition:opacity .8s cubic-bezier(.2,.7,.2,1),transform .8s cubic-bezier(.2,.7,.2,1)}.reveal.in-view{opacity:1;transform:none}

/* Scroll-synced day sequence */
.story{--story-text:var(--ink);--story-muted:#60716e;--story-line:rgba(16,44,42,.16);color:var(--story-text);transition:background-color .8s ease,color .8s ease}.story[data-phase="arrival"]{background:#fffaf2}.story[data-phase="golden"]{background:#f0dfc5}.story[data-phase="dinner"]{background:#142c2a;--story-text:#fffaf2;--story-muted:#b9c6c0;--story-line:rgba(255,255,255,.2)}.story[data-phase="morning"]{background:#edf0e7}.story-left{position:sticky;top:85px;height:max-content;align-self:start}.story-heading{position:static}.story-heading>p:last-child,.timeline p,.timeline span{color:var(--story-muted)}.timeline li{min-height:64vh;align-content:center;border-color:var(--story-line);opacity:.38;transition:opacity .55s ease,transform .55s ease}.timeline li.active{opacity:1;transform:translateX(-10px)}.timeline li:last-child{border-color:var(--story-line)}.story-visual{position:relative;margin-top:3rem;height:clamp(250px,31vw,430px);overflow:hidden;border-radius:2px;background:#0f2826}.phase-image{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transform:scale(1.08);transition:opacity .8s ease,transform 1.2s ease}.phase-image.active{opacity:1;transform:scale(1)}.story-visual:after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,rgba(8,29,27,.5),transparent 55%)}.phase-stamp{position:absolute;z-index:2;left:1.4rem;bottom:1.25rem;color:white;display:flex;align-items:baseline;gap:.65rem}.phase-stamp span{text-transform:uppercase;letter-spacing:.18em;font-size:.55rem;opacity:.65}.phase-stamp strong{font-family:var(--serif);font-size:2rem;font-weight:400}

/* Personal cinematic interlude */
.kim-moment{position:relative;min-height:100svh;display:grid;place-items:center;isolation:isolate;overflow:hidden;color:#fff}.kim-moment video,.kim-moment-wash{position:absolute;inset:0;width:100%;height:100%}.kim-moment video{z-index:-2;object-fit:cover}.kim-moment-wash{z-index:-1;background:linear-gradient(90deg,rgba(6,26,24,.84),rgba(6,26,24,.28)),linear-gradient(0deg,rgba(6,26,24,.55),transparent)}.kim-moment-copy{width:min(1100px,84vw);text-align:left}.kim-moment-copy h2{font-size:clamp(4.7rem,10vw,10rem)}.kim-moment-copy h2 em{color:#f1b19e}.kim-moment-copy>p:last-child{max-width:510px;font-size:1.08rem;line-height:1.8;color:rgba(255,255,255,.75)}.k-seal{position:absolute;right:7vw;top:50%;transform:translateY(-50%);font-family:var(--serif);font-size:min(40vw,32rem);line-height:1;color:rgba(255,255,255,.08);pointer-events:none}

/* Gallery controls and lightbox */
.gallery-head{display:flex;justify-content:space-between;align-items:end;gap:3rem}.gallery-controls{display:flex;align-items:center;gap:1rem;padding-bottom:.5rem}.gallery-controls>span{text-transform:uppercase;letter-spacing:.16em;font-size:.58rem;color:rgba(255,255,255,.58)}.gallery-arrow{width:46px;height:46px;border:1px solid rgba(255,255,255,.35);border-radius:50%;background:transparent;color:white;cursor:pointer;transition:background .2s,color .2s}.gallery-arrow:hover{background:#fff;color:var(--ink)}.gallery-open{display:block;width:100%;border:0;padding:0;background:none;cursor:zoom-in;overflow:hidden}.gallery-progress{height:1px;margin:2.2rem 8vw 0;background:rgba(255,255,255,.16)}.gallery-progress span{display:block;width:12.5%;height:100%;background:var(--coral);transition:width .25s ease}.gallery-hint{margin:1rem 8vw 0;text-transform:uppercase;letter-spacing:.16em;font-size:.55rem;color:rgba(255,255,255,.45)}.lightbox{width:100vw;height:100vh;max-width:none;max-height:none;margin:0;padding:0;border:0;background:rgba(5,22,21,.96);color:#fff}.lightbox::backdrop{background:rgba(5,22,21,.8)}.lightbox[open]{display:grid;grid-template-columns:80px 1fr 80px;place-items:center}.lightbox figure{margin:0;width:min(1100px,82vw);text-align:center}.lightbox figure img{width:100%;height:min(74vh,760px);object-fit:contain}.lightbox figcaption{margin-top:1rem;text-transform:uppercase;letter-spacing:.16em;font-size:.62rem;color:rgba(255,255,255,.62)}.lightbox-close{position:absolute;right:2rem;top:1.5rem;width:46px;height:46px;border:1px solid rgba(255,255,255,.35);border-radius:50%;background:none;color:#fff;font-size:1.8rem;cursor:pointer}.lightbox-nav{width:48px;height:48px;border:0;background:none;color:#fff;font-size:1.5rem;cursor:pointer}

/* Calendar chooser and closing signature */
.calendar-action{position:relative}.calendar-menu{position:absolute;left:50%;bottom:calc(100% + .8rem);transform:translateX(-50%);width:230px;background:var(--paper);color:var(--ink);padding:.5rem;border-radius:14px;box-shadow:0 20px 55px rgba(0,0,0,.25);z-index:5}.calendar-menu[hidden]{display:none}.calendar-menu button,.calendar-menu a{display:block;width:100%;border:0;background:none;color:inherit;text-align:left;padding:.8rem .9rem;border-radius:9px;font:500 .67rem var(--sans);text-transform:uppercase;letter-spacing:.1em;cursor:pointer}.calendar-menu button:hover,.calendar-menu a:hover{background:#eee6d8}.closing-monogram{display:block;font-family:var(--serif);font-size:5rem;line-height:1;margin-bottom:1rem;color:rgba(255,255,255,.3)}.see-you{font:500 clamp(2.4rem,5vw,4.7rem) "Caveat",cursive!important;color:#f1b19e!important;margin:2.3rem 0 0!important;opacity:0;transform:rotate(-4deg) translateY(10px);transition:opacity .8s .65s,transform .8s .65s}.save-content.in-view .see-you{opacity:1;transform:rotate(-4deg) translateY(0)}footer b{font:400 1.1rem var(--serif);color:#fff}
@media (max-width:900px){.site-header nav a:not(.nav-cta){display:none}.hero-copy{padding-left:6vw;padding-right:6vw}.hero-meta{left:6vw;right:6vw;bottom:30px;gap:.7rem;flex-wrap:wrap}.hero-meta span+span:before{margin-right:.7rem}.scroll-mark{display:none}.countdown-band{align-items:flex-start;flex-direction:column;gap:1.3rem;padding:30px 6vw}.countdown{width:100%;justify-content:space-between}.countdown div{display:block}.countdown strong,.countdown span{display:block}.countdown i{height:50px}.story{grid-template-columns:1fr;padding:110px 6vw;gap:3rem}.story-left{position:static}.story-visual{height:55vw;min-height:290px}.timeline li{min-height:auto}.timeline li.active{transform:none}.villa{grid-template-columns:1fr}.villa-copy{padding:100px 6vw}.gallery-head{padding-left:6vw;padding-right:6vw}.gallery-track{padding-left:6vw}.gallery figure{flex-basis:82vw}.gallery figure.portrait{flex-basis:70vw}.gallery-progress{margin-left:6vw;margin-right:6vw}.gallery-hint{margin-left:6vw}.kim-moment-copy{width:88vw}.lightbox[open]{grid-template-columns:54px 1fr 54px}.lightbox figure{width:78vw}}
@media (max-width:560px){.site-header{padding:22px 5vw}.brand span{display:none}.site-header .nav-cta{padding:.58rem .8rem}.hero-copy{padding-bottom:155px}.hero-intro{margin-top:1.5rem}.hero-actions{align-items:flex-start;flex-direction:column;gap:.8rem}.countdown{gap:.7rem}.countdown strong{font-size:2rem}.countdown span{font-size:.48rem}.timeline li{grid-template-columns:68px 1fr;gap:1rem}.timeline time{font-size:1.45rem}.stats{grid-template-columns:repeat(2,1fr)}.stats div:nth-child(3){border-left:0;border-top:1px solid rgba(16,44,42,.18)}.stats div:nth-child(4){border-top:1px solid rgba(16,44,42,.18)}.villa-visual{min-height:520px}.gallery{padding-top:110px}.gallery-head{display:block}.gallery-controls{margin-top:2rem}.gallery figure,.gallery figure.portrait{flex-basis:84vw}.gallery img,.gallery figure.wide img{height:70vw}.save-actions{flex-direction:column;align-items:stretch}.calendar-action{align-items:stretch}.calendar-menu{left:0;transform:none;width:100%}.date-lockup{gap:.6rem}footer{gap:1rem;flex-direction:column;text-align:center}.lightbox[open]{grid-template-columns:40px 1fr 40px}.lightbox-close{right:1rem;top:1rem}.lightbox figure{width:76vw}}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.hero-slide:first-child{opacity:1}.reveal{opacity:1;transform:none}.intro-sequence{display:none}.kim-moment video{display:none}.kim-moment{background:url("assets/hero-pool.jpg") center/cover}.see-you{opacity:1;transform:rotate(-4deg)}}
