:root{--ivory:#FBF8F0;--cream:#F1E8D6;--warm:#E8DAC1;--sage:#899B82;--soft:#C3CBB7;--leaf:#46614B;--deep:#24422F;--brown:#725743;--deepbrown:#4E392D;--wood:#624A38;--earth:#8B6B4F;--gold:#C49A44;--softgold:#D9B978;--darkgold:#7E6126;--white:#fff;--charcoal:#2E2C27;--muted:#675F52;--line:rgba(196,154,68,.36);--shadow:0 24px 64px rgba(36,66,47,.13);--serif:"Cormorant Garamond",Georgia,serif;--script:"Great Vibes",cursive;--sans:"DM Sans",Arial,sans-serif;--container:min(1180px,calc(100% - 32px));--radius:28px}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--ivory);color:var(--charcoal);font:400 16px/1.72 var(--sans);overflow-x:hidden}body.cover-locked{overflow:hidden}img{display:block;max-width:100%}button,input,select,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}a{color:inherit;text-decoration:none}:focus-visible{outline:3px solid rgba(197,161,94,.36);outline-offset:3px}.container{width:var(--container);margin:auto}.container.narrow{max-width:820px}.container.wide{width:min(1320px,calc(100% - 24px))}.section{position:relative;padding:clamp(78px,9vw,132px) 0;overflow:hidden}.text-center{text-align:center}.section-heading{max-width:760px;margin:0 auto 44px;text-align:center}.section-heading h2,.editorial h2,.wishes-column h2{margin:4px 0 12px;font:600 clamp(2.65rem,6vw,5rem)/.98 var(--serif)}.section-heading p,.editorial p{margin:0;color:var(--muted)}.section-kicker,.eyebrow{display:inline-block;color:var(--leaf);font-size:.7rem;font-weight:600;letter-spacing:.24em;text-transform:uppercase}.light{color:rgba(255,255,255,.9)}.btn{min-height:46px;padding:12px 23px;border:1px solid transparent;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;gap:8px;font-size:.84rem;font-weight:600;transition:.25s}.btn:hover{transform:translateY(-2px)}.btn-primary{background:var(--deep);color:white;box-shadow:0 10px 26px rgba(36,66,47,.3)}.btn-outline{border-color:var(--gold);background:transparent;color:var(--deep)}.btn-ghost{border-color:rgba(255,255,255,.48);background:rgba(255,255,255,.08);color:white;backdrop-filter:blur(8px)}.btn-full{width:100%}.scroll-progress{position:fixed;z-index:9999;left:0;top:0;width:0;height:3px;background:linear-gradient(90deg,var(--leaf),var(--gold),var(--earth))}
.cover{position:fixed;inset:0;z-index:5000;min-height:100svh;display:grid;place-items:center;overflow:hidden;transition:opacity 1s,visibility 1s,transform 1.15s,filter 1.15s}.cover.is-open{opacity:0;visibility:hidden;pointer-events:none;transform:scale(1.055);filter:blur(7px)}.cover-bg,.hero-bg,.countdown-bg,.closing-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.cover-overlay{position:absolute;inset:0;background:linear-gradient(180deg,rgba(30,60,40,.34),rgba(20,42,29,.66))}.bamboo-layer,.hero-pattern,.pattern-watermark,.countdown-pattern,.gift-pattern{position:absolute;inset:0;background-image:url('../images/bamboo-pattern.png');background-repeat:repeat;opacity:.07;pointer-events:none}.cover-bamboo{position:absolute;z-index:3;left:-80px;bottom:-90px;width:min(440px,60vw);opacity:.86}.sundanese-shell{position:relative;z-index:4;width:min(92%,710px);min-height:min(88svh,800px);display:grid;place-items:center;border:1px solid rgba(220,197,143,.66);padding:22px;background:rgba(31,49,36,.08);backdrop-filter:blur(1px)}.sundanese-shell:before{content:"";position:absolute;inset:9px;border:1px solid rgba(255,255,255,.25)}.cover-roof{position:absolute;z-index:0;top:-10px;left:50%;transform:translateX(-50%);width:min(560px,86vw);opacity:.4}.cover-card{position:relative;z-index:2;width:min(92%,540px);padding:42px 18px;color:white;text-align:center;text-shadow:0 4px 20px rgba(27,35,27,.28)}.cover-card h1{margin:14px 0 10px;font:600 clamp(3.3rem,12vw,6.5rem)/.88 var(--serif)}.cover-card h1 span{display:block;color:var(--softgold);font:400 .56em/1 var(--script)}.date-line{font-size:.74rem;letter-spacing:.17em;text-transform:uppercase}.sunda-divider{display:flex;align-items:center;justify-content:center;gap:10px;margin:23px 0}.sunda-divider i{width:45px;height:1px;background:rgba(255,255,255,.54)}.sunda-divider b{font-weight:400;color:var(--softgold)}.sunda-divider.dark i{background:rgba(101,117,92,.3)}.sunda-divider.dark b{color:var(--gold)}.guest-label{margin:26px 0 0;font-family:var(--serif)}.guest-name{margin:2px 0 10px;font:600 clamp(1.5rem,5vw,2.1rem)/1.1 var(--serif)}.cover-copy{max-width:390px;margin:0 auto 24px;font-size:.9rem;opacity:.88}.desktop-nav{display:none}
.hero{position:relative;min-height:100svh;display:grid;place-items:center;overflow:hidden;text-align:center}.hero-overlay{position:absolute;inset:0;background:linear-gradient(180deg,rgba(34,72,46,.3),rgba(22,48,32,.64))}.hero-house{position:absolute;z-index:2;left:50%;bottom:-4px;transform:translateX(-50%);width:min(980px,112vw);opacity:.52}.hero-pattern{opacity:.04}.hero-content{position:relative;z-index:3;width:min(92%,880px);padding:100px 0 120px;color:white}.hero-content h2{margin:12px 0;font:600 clamp(3.6rem,14vw,8.6rem)/.8 var(--serif)}.hero-content h2 span{display:block;color:var(--softgold);font:400 .55em/1 var(--script)}.hero-meta{font-size:.76rem;letter-spacing:.16em;text-transform:uppercase}.hero-quote{font:500 1.09rem/1.4 var(--serif);font-style:italic;margin:5px 0 25px}.scroll-cue{position:absolute;z-index:3;bottom:20px;left:50%;transform:translateX(-50%);color:rgba(255,255,255,.78);font-size:.62rem;letter-spacing:.18em;text-transform:uppercase}.scroll-cue span{display:block;width:1px;height:34px;margin:0 auto 7px;background:rgba(255,255,255,.6);animation:cue 1.8s ease-in-out infinite}@keyframes cue{0%,100%{transform:scaleY(.45);transform-origin:top}50%{transform:scaleY(1)}}
.intro-section{background:linear-gradient(180deg,#fffdf8,var(--ivory))}.pattern-watermark{opacity:.035}.mini-ornament{width:min(170px,42vw);margin:0 auto 12px;opacity:.68}.intro-section h2{margin:4px 0 18px;font:600 clamp(2.5rem,6vw,4.8rem)/1 var(--serif)}.lead-serif{font:500 clamp(1.35rem,4vw,2.05rem)/1.45 var(--serif);color:#4b4a42}.quote{color:var(--muted)}
.couple-section{background:linear-gradient(180deg,var(--cream),#f9f4e9)}.couple-grid{display:grid;gap:56px;align-items:center}.person-card{text-align:center;position:relative}.portrait{position:relative;width:min(82vw,350px);aspect-ratio:4/5.2;margin:0 auto 25px;padding:8px;border:1px solid rgba(197,161,94,.45);border-radius:48% 48% 24px 24px;background:rgba(255,255,255,.35)}.portrait>img:first-child{width:100%;height:100%;object-fit:cover;border-radius:inherit}.portrait-frame{position:absolute;inset:-18px;width:calc(100% + 36px);height:calc(100% + 36px);object-fit:fill;pointer-events:none}.person-role{font-size:.66rem;letter-spacing:.21em;color:var(--leaf);font-weight:600}.person-card h3{margin:5px 0 -2px;font:600 clamp(3rem,11vw,5rem)/1 var(--serif)}.full-name{margin:0 0 12px;color:var(--earth);font:500 1.13rem var(--serif)}.person-card>p:not(.full-name){color:var(--muted);font-size:.9rem}.person-card strong{color:var(--charcoal);font-weight:500}.social-link{color:var(--leaf);font-size:.8rem;border-bottom:1px solid rgba(101,117,92,.4)}.couple-center{display:none;text-align:center;max-width:300px;margin:auto}.couple-center>img{width:190px;margin:0 auto -92px;opacity:.36}.monogram{position:relative;width:150px;height:150px;margin:0 auto 18px;border:1px solid var(--gold);border-radius:50%;display:grid;place-items:center;font:600 2.6rem var(--serif);color:var(--deep)}.monogram span{font:400 1.6rem var(--script);color:var(--earth)}.couple-center p{margin:0;font:500 1.1rem var(--serif);font-style:italic;color:var(--leaf)}.couple-center small{color:var(--muted)}.wayang-side{position:absolute;z-index:0;width:min(200px,30vw);opacity:.075;pointer-events:none}.wayang-side-left{left:-25px;bottom:5%}.wayang-side-right{right:-25px;top:18%;transform:scaleX(-1)}
.story-section{background:#fbf8f0}.timeline{position:relative;max-width:920px;margin:auto}.timeline:before{content:"";position:absolute;left:18px;top:0;bottom:0;width:1px;background:linear-gradient(var(--sage),var(--gold),var(--leaf))}.timeline-item{position:relative;padding:0 0 34px 56px}.timeline-dot{position:absolute;left:8px;top:13px;width:21px;height:21px;border-radius:50%;display:grid;place-items:center;background:var(--ivory);border:1px solid var(--gold);color:var(--leaf);font-size:.45rem}.timeline-card{background:rgba(255,255,255,.72);border:1px solid rgba(101,117,92,.18);border-radius:20px;padding:24px;box-shadow:0 14px 38px rgba(64,72,52,.06)}.year{font:600 1.3rem var(--serif);color:var(--earth)}.timeline-card h3{margin:2px 0 5px;font:600 1.72rem var(--serif)}.timeline-card p{margin:0;color:var(--muted);font-size:.92rem}
.countdown-section{position:relative;min-height:570px;display:grid;place-items:center;padding:90px 0;overflow:hidden}.countdown-overlay{position:absolute;inset:0;background:linear-gradient(135deg,rgba(28,60,40,.84),rgba(40,54,34,.74))}.countdown-pattern{opacity:.055;mix-blend-mode:screen}.countdown-house{position:absolute;z-index:1;bottom:-20px;right:-50px;width:min(480px,65vw);opacity:.18}.countdown-inner{position:relative;z-index:2;color:white;text-align:center}.countdown-inner h2{margin:8px 0 32px;font:600 clamp(2.5rem,7vw,4.8rem)/1 var(--serif)}.countdown{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;max-width:720px;margin:auto}.countdown div{padding:17px 8px;border:1px solid rgba(220,197,143,.35);background:rgba(255,255,255,.08);backdrop-filter:blur(7px);border-radius:18px}.countdown strong{display:block;font:600 clamp(2.1rem,8vw,4rem)/1 var(--serif)}.countdown span{font-size:.64rem;letter-spacing:.16em;text-transform:uppercase;opacity:.78}
.event-section{background:var(--ivory)}.event-grid{display:grid;gap:22px}.event-card{position:relative;background:rgba(255,253,248,.9);border:1px solid rgba(197,161,94,.34);border-radius:var(--radius);padding:36px 24px;text-align:center;box-shadow:var(--shadow);overflow:hidden}.bamboo-strip{position:absolute;left:0;right:0;top:0;height:12px;background-image:url('../images/bamboo-pattern.png');opacity:.16}.event-house{width:150px;margin:0 auto 10px;opacity:.28}.event-label{font-size:.68rem;letter-spacing:.19em;color:var(--leaf);font-weight:600}.event-card h3{margin:8px 0 0;font:600 2.1rem var(--serif)}.event-card>p{margin:0 0 18px;color:var(--muted)}.event-card dl{margin:18px 0 24px}.event-card dl div{padding:10px 0;border-top:1px solid rgba(101,117,92,.16)}.event-card dt{font-size:.64rem;letter-spacing:.16em;text-transform:uppercase;color:var(--earth);font-weight:600}.event-card dd{margin:3px 0 0;color:var(--muted);font-size:.9rem}.center-action{text-align:center;margin-top:28px}
.ceremony-section{background:linear-gradient(180deg,#eaf0e4,#f8f2e6)}.ceremony-grid{display:grid;gap:16px}.ceremony-card{position:relative;padding:26px;border:1px solid rgba(197,161,94,.32);border-radius:22px;background:rgba(255,253,248,.72);box-shadow:0 12px 34px rgba(64,72,52,.05);overflow:hidden}.ceremony-card:after{content:"";position:absolute;width:95px;height:95px;right:-34px;bottom:-38px;border:1px solid rgba(101,117,92,.17);border-radius:50%}.ceremony-no{display:block;font:600 2.1rem/1 var(--serif);color:rgba(101,117,92,.22)}.ceremony-time{display:inline-block;margin-top:4px;color:var(--earth);font-size:.68rem;letter-spacing:.14em;text-transform:uppercase}.ceremony-card h3{margin:3px 0 7px;font:600 1.6rem var(--serif)}.ceremony-card p{margin:0;color:var(--muted);font-size:.88rem}.ceremony-jaipong{position:absolute;right:-40px;bottom:-20px;width:min(300px,45vw);opacity:.09}
.gallery-section{background:#f4ecdd}.gallery-grid{columns:2;column-gap:10px}.gallery-item{position:relative;width:100%;border:0;background:none;padding:0;margin:0 0 10px;break-inside:avoid;border-radius:16px;overflow:hidden}.gallery-item img{width:100%;transition:transform .7s}.gallery-item span{position:absolute;right:10px;bottom:10px;padding:6px 10px;border-radius:999px;background:rgba(251,248,240,.84);backdrop-filter:blur(8px);color:var(--deep);font-size:.66rem;opacity:0;transition:.25s}.gallery-item:hover img{transform:scale(1.035)}.gallery-item:hover span{opacity:1}.film-section{background:#edf1e8}.film-frame{width:min(100%,980px);margin:auto;aspect-ratio:16/9;border:1px solid rgba(197,161,94,.4);padding:6px;border-radius:24px;background:#283229;box-shadow:var(--shadow)}.film-frame video{width:100%;height:100%;object-fit:cover;border-radius:18px}
.split{display:grid;gap:40px;align-items:start}.rsvp-section{background:#fbf7ee}.editorial{text-align:center}.editorial-wayang{width:min(240px,65%);margin:24px auto -28px;opacity:.18}.form-card{background:rgba(255,253,248,.9);border:1px solid rgba(101,117,92,.26);border-radius:var(--radius);padding:24px;box-shadow:var(--shadow)}.form-group{margin-bottom:16px}.form-row{display:grid}.form-group label{display:block;margin-bottom:6px;color:var(--leaf);font-size:.74rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.form-group input,.form-group select,.form-group textarea{width:100%;padding:13px 14px;border:1px solid rgba(101,117,92,.24);border-radius:13px;background:#fffdf8;color:var(--charcoal);outline:none;font-size:16px}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--gold);box-shadow:0 0 0 4px rgba(197,161,94,.13)}.form-status{min-height:24px;margin:10px 0 0;text-align:center;font-size:.82rem;color:var(--deep)}.honeypot{position:absolute!important;left:-9999px!important;width:1px!important;height:1px!important;overflow:hidden!important}.wishes-section{background:var(--ivory)}.wishes-list{display:grid;gap:12px;margin:22px 0 15px}.wish-item{padding:18px;border-radius:18px;background:#fffdf8;border:1px solid rgba(101,117,92,.18)}.wish-item header{display:flex;justify-content:space-between;gap:12px;margin-bottom:4px}.wish-item strong{font:600 1.18rem var(--serif)}.wish-item time{font-size:.68rem;color:var(--muted)}.wish-item p{margin:0;color:var(--muted);font-size:.9rem}.text-button{border:0;background:none;padding:0;color:var(--leaf);font-size:.8rem;text-decoration:underline;text-underline-offset:5px}
.gift-section{background:#f0eadc}.gift-pattern{opacity:.045}.gift-grid{display:grid;gap:18px}.gift-card{text-align:center;background:#fffdf8;border:1px solid rgba(197,161,94,.32);border-radius:24px;padding:28px;box-shadow:0 18px 44px rgba(64,72,52,.07)}.gift-icon{display:grid;place-items:center;width:48px;height:48px;margin:0 auto 13px;border:1px solid var(--gold);border-radius:50%;color:var(--leaf)}.gift-card small{display:block;color:var(--leaf);font-weight:600;letter-spacing:.15em}.gift-card strong{display:block;margin:10px 0 0;font:600 1.5rem var(--serif)}.gift-card p{margin:0 0 14px;color:var(--muted);font-size:.84rem}.copy-btn{border:0;background:none;padding:3px 0;color:var(--earth);font-size:.74rem;font-weight:600;border-bottom:1px solid rgba(150,118,92,.3)}.wallet-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:18px}.wallet-card{padding:16px;border-radius:17px;background:rgba(255,253,248,.78);border:1px solid rgba(101,117,92,.2);text-align:center}.wallet-card span{display:block;color:var(--leaf);font-size:.73rem;font-weight:700}.wallet-card strong{display:block;font-size:.82rem;margin:3px 0 5px}.copy-btn.compact{font-size:.67rem}.shipping-card{margin-top:18px;padding:24px;border-radius:24px;border:1px solid rgba(101,117,92,.26);background:linear-gradient(120deg,rgba(195,203,183,.28),rgba(197,161,94,.09));display:grid;gap:18px;align-items:center}.shipping-card h3{margin:4px 0;font:600 1.7rem var(--serif)}.shipping-card p{margin:0;color:var(--muted);font-size:.9rem}.location-section{background:var(--cream)}.map-frame{width:100%;aspect-ratio:1/1;border-radius:24px;overflow:hidden;border:1px solid rgba(101,117,92,.25);box-shadow:var(--shadow)}.map-frame iframe{width:100%;height:100%;border:0}
.share-section{position:relative;padding:88px 0;background:var(--deep);color:white;overflow:hidden}.share-section h2{margin:8px 0;font:600 clamp(2.2rem,8vw,4.6rem)/1 var(--serif)}.share-section p{opacity:.76}.share-jaipong{position:absolute;width:180px;left:5%;bottom:-34px;opacity:.11}.closing{position:relative;min-height:780px;display:grid;place-items:center;overflow:hidden}.closing-overlay{position:absolute;inset:0;background:linear-gradient(180deg,rgba(32,66,44,.3),rgba(24,50,33,.72))}.closing-house{position:absolute;z-index:2;bottom:-2px;left:50%;width:min(980px,112vw);transform:translateX(-50%);opacity:.48}.closing-bamboo{position:absolute;z-index:2;right:-90px;top:-60px;width:min(430px,58vw);opacity:.24}.closing-card{position:relative;z-index:3;width:min(88%,660px);padding:54px 28px;text-align:center;color:white;border:1px solid rgba(220,197,143,.48);background:rgba(35,56,39,.15);backdrop-filter:blur(5px)}.closing-card>p{max-width:480px;margin:12px auto}.with-love{display:block;margin-top:26px;font:400 1.65rem var(--script);color:var(--softgold)}.closing-card h2{margin:4px 0 8px;font:600 clamp(3.2rem,10vw,5.8rem)/1 var(--serif)}.closing-card h2 span{color:var(--softgold);font-family:var(--script)}.sundanese-line{font-family:var(--serif);font-style:italic}.closing-card small{opacity:.76}footer{padding:28px 16px 92px;background:#1E3528;color:rgba(255,255,255,.72);text-align:center;font-size:.72rem}.footer-monogram{width:54px;height:54px;margin:0 auto 10px;border:1px solid rgba(220,197,143,.35);border-radius:50%;display:grid;place-items:center;font:600 1.1rem var(--serif)}
.mobile-nav{position:fixed;z-index:2000;left:50%;bottom:max(14px,env(safe-area-inset-bottom));transform:translateX(-50%);width:min(calc(100% - 24px),520px);display:grid;grid-template-columns:repeat(5,1fr);padding:8px;background:rgba(251,248,240,.91);border:1px solid rgba(101,117,92,.24);border-radius:21px;backdrop-filter:blur(18px);box-shadow:0 12px 38px rgba(64,72,52,.15)}.mobile-nav a{min-height:48px;display:grid;place-items:center;align-content:center;gap:1px;color:#73766c;border-radius:14px;font-size:.94rem}.mobile-nav small{font-size:.57rem}.mobile-nav a.active{background:rgba(157,169,141,.2);color:var(--deep)}.music-toggle{position:fixed;z-index:2200;right:14px;bottom:86px;width:46px;height:46px;border-radius:50%;border:1px solid var(--gold);background:rgba(251,248,240,.93);color:var(--deep);box-shadow:0 8px 28px rgba(64,72,52,.14);font-size:1.12rem}.music-toggle.is-playing{animation:spin 5s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.lightbox{position:fixed;inset:0;z-index:7000;background:rgba(26,31,26,.94);display:grid;place-items:center;padding:24px}.lightbox[hidden]{display:none}.lightbox img{max-width:min(96vw,1100px);max-height:88vh;border-radius:12px}.lightbox-close{position:absolute;top:18px;right:18px;width:46px;height:46px;border-radius:50%;border:1px solid rgba(255,255,255,.28);background:rgba(255,255,255,.08);color:white;font-size:2rem}.toast{position:fixed;z-index:8000;left:50%;bottom:150px;transform:translate(-50%,20px);max-width:calc(100% - 32px);padding:11px 16px;border-radius:999px;background:var(--deep);color:white;font-size:.78rem;opacity:0;visibility:hidden;transition:.3s}.toast.show{opacity:1;visibility:visible;transform:translate(-50%,0)}.reveal{opacity:0;transform:translateY(72px);transition:opacity .7s,transform .7s cubic-bezier(.18,.8,.24,1)}.reveal-left{transform:translateX(-90px)}.reveal-right{transform:translateX(90px)}.reveal.visible{opacity:1;transform:none}
@media(min-width:577px){:root{--container:min(1180px,calc(100% - 56px))}.countdown{grid-template-columns:repeat(4,1fr)}.event-grid,.gift-grid{grid-template-columns:repeat(2,1fr)}.ceremony-grid{grid-template-columns:repeat(2,1fr)}.form-row{grid-template-columns:1fr 1fr;gap:14px}.wallet-grid{grid-template-columns:repeat(4,1fr)}.shipping-card{grid-template-columns:1fr auto}.map-frame{aspect-ratio:16/8}.gallery-grid{columns:3;column-gap:14px}.gallery-item{margin-bottom:14px}}
@media(min-width:992px){footer{padding-bottom:32px}.mobile-nav{display:none}.music-toggle{bottom:24px;right:24px}.desktop-nav{position:fixed;z-index:1800;left:0;right:0;top:0;height:76px;padding:0 max(34px,4vw);display:flex;align-items:center;justify-content:space-between;color:white;transition:.35s}.desktop-nav.scrolled{background:rgba(251,248,240,.92);backdrop-filter:blur(18px);color:var(--charcoal);box-shadow:0 9px 30px rgba(64,72,52,.08)}.brand{display:flex;align-items:center;gap:10px}.brand-monogram{width:40px;height:40px;border:1px solid currentColor;border-radius:50%;display:grid;place-items:center;font:600 .95rem var(--serif)}.brand>span:last-child{display:grid;line-height:1.05}.brand strong{font:600 1rem var(--serif)}.brand small{font-size:.55rem;text-transform:uppercase;letter-spacing:.14em;opacity:.68}.desktop-nav nav{display:flex;gap:20px}.desktop-nav nav a{position:relative;font-size:.65rem;text-transform:uppercase;letter-spacing:.1em}.desktop-nav nav a:after{content:"";position:absolute;left:0;right:100%;bottom:-7px;height:1px;background:var(--gold);transition:right .25s}.desktop-nav nav a:hover:after,.desktop-nav nav a.active:after{right:0}.hero-content{padding-top:140px}.hero-content h2{font-size:clamp(6rem,9.4vw,10rem)}.hero-content h2 span{display:inline-block;font-size:.46em;margin:0 .14em;vertical-align:.2em}.couple-grid{grid-template-columns:1fr .72fr 1fr;gap:46px}.couple-center{display:block}.portrait{width:min(28vw,350px)}.timeline:before{left:50%;transform:translateX(-50%)}.timeline-item{width:50%;padding:0 58px 42px}.timeline-item.left{margin-right:auto;text-align:right}.timeline-item.right{margin-left:auto}.timeline-dot{left:auto;right:-11px}.timeline-item.right .timeline-dot{right:auto;left:-11px}.event-grid{gap:30px;max-width:960px;margin:auto}.event-card{padding:50px 40px}.ceremony-grid{grid-template-columns:repeat(4,1fr)}.gallery-grid{columns:4}.split{grid-template-columns:.9fr 1.1fr;gap:72px;align-items:center}.editorial{text-align:left}.editorial-wayang{margin-left:-30px}.form-card{padding:36px}.wishes-section .split{align-items:start}.map-frame{aspect-ratio:16/6}}
@media(min-width:1450px){:root{--container:1320px}.desktop-nav{padding-inline:6vw}.section{padding-block:140px}}@media(hover:none){.gallery-item span{opacity:1}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.reveal,.reveal-left,.reveal-right{opacity:1;transform:none}}
/* ==== Animasi per menu saat diklik (pergerakan tegas) ==== */
html{scroll-behavior:smooth}section[id]{scroll-margin-top:74px}@media(max-width:991.98px){section[id]{scroll-margin-top:4px;scroll-margin-bottom:80px}}
@keyframes fxRiseBig{0%{opacity:0;transform:translateY(140px) scale(.92)}60%{opacity:1;transform:translateY(-14px) scale(1.02)}100%{opacity:1;transform:none}}
@keyframes fxSweepL{0%{opacity:0;transform:translate(-160px,24px) rotate(-6deg)}60%{opacity:1;transform:translate(16px,-8px) rotate(2deg)}100%{opacity:1;transform:none}}
@keyframes fxSweepR{0%{opacity:0;transform:translate(160px,24px) rotate(6deg)}60%{opacity:1;transform:translate(-16px,-8px) rotate(-2deg)}100%{opacity:1;transform:none}}
@keyframes fxSwing{0%{opacity:0;transform:scale(.2) rotate(-28deg)}70%{opacity:1;transform:scale(1.12) rotate(7deg)}100%{opacity:1;transform:none}}
@keyframes fxBounceUp{0%{opacity:0;transform:translateY(100px) scale(.9)}55%{opacity:1;transform:translateY(-16px)}75%{transform:translateY(7px)}100%{opacity:1;transform:none}}
@keyframes fxTossL{0%{opacity:0;transform:translate(-100px,80px) rotate(-18deg) scale(.85)}60%{opacity:1;transform:translate(12px,-12px) rotate(5deg) scale(1.03)}100%{opacity:1;transform:none}}
@keyframes fxTossR{0%{opacity:0;transform:translate(100px,80px) rotate(18deg) scale(.85)}60%{opacity:1;transform:translate(-12px,-12px) rotate(-5deg) scale(1.03)}100%{opacity:1;transform:none}}
@keyframes fxDropGift{0%{opacity:0;transform:translateY(-100px) rotate(-10deg) scale(.88)}55%{opacity:1;transform:translateY(12px) rotate(6deg)}75%{transform:translateY(-5px) rotate(-3deg)}100%{opacity:1;transform:none}}
@keyframes fxFade{from{opacity:0}to{opacity:1}}
#beranda.fx .hero-content>.eyebrow{animation:fxTrack .85s cubic-bezier(.3,1,.3,1) both}
.hero-char{display:inline-block;font-style:normal;font-family:inherit;font-weight:inherit;font-size:inherit;line-height:inherit;letter-spacing:inherit}
#beranda.fx .hero-char{animation:heroCharUp .8s cubic-bezier(.2,1.7,.3,1) both;animation-delay:calc(200ms + var(--d,0ms))}
#beranda.fx .hero-amp{animation:heroAmp .9s cubic-bezier(.2,1.7,.3,1) both;animation-delay:calc(200ms + var(--and,0ms))}
#beranda.fx .hero-content>.hero-meta{animation:fxHeroUp .85s cubic-bezier(.2,1,.3,1) both;animation-delay:calc(var(--heroEnd,960ms) + 60ms)}
#beranda.fx .hero-content>.hero-quote{animation:fxHeroUp .9s cubic-bezier(.2,1,.3,1) both;animation-delay:calc(var(--heroEnd,960ms) + 180ms)}
#beranda.fx .hero-content>.btn{animation:fxHeroUp .85s cubic-bezier(.2,1.25,.3,1) both;animation-delay:calc(var(--heroEnd,960ms) + 320ms)}
#beranda.fx .scroll-cue{animation:fxFade .9s .7s both}
#mempelai.fx .section-heading{animation:fxSwing .7s cubic-bezier(.2,1.2,.3,1) both}
#mempelai.fx .couple-grid>article{animation:fxSweepL 1s cubic-bezier(.2,1.15,.3,1) both}
#mempelai.fx .couple-grid>article:last-of-type{animation-name:fxSweepR;animation-delay:.2s}
#mempelai.fx .couple-grid>div{animation:fxSwing .95s .3s cubic-bezier(.2,1.6,.3,1) both}
#kisah.fx .timeline-item:not(.right){animation:fxSweepL .95s cubic-bezier(.25,1.4,.4,1) both}
#kisah.fx .timeline-item.right{animation:fxSweepR .95s .15s cubic-bezier(.25,1.4,.4,1) both}
#adat.fx .ceremony-card{animation:fxBounceUp .75s cubic-bezier(.2,1.3,.3,1) both}
#adat.fx .ceremony-card:nth-child(even){animation-delay:.13s}
#acara.fx .event-card{animation:fxBounceUp .85s cubic-bezier(.2,1.35,.3,1) both}
#acara.fx .event-card:last-of-type{animation-delay:.18s}
#acara.fx .center-action{animation:fxBounceUp .85s .36s cubic-bezier(.2,1.3,.3,1) both}
#galeri.fx .gallery-item{animation:fxTossL .62s cubic-bezier(.2,1.3,.3,1) both}
#galeri.fx .gallery-item:nth-child(3n+2){animation-name:fxTossR;animation-delay:.09s}
#galeri.fx .gallery-item:nth-child(3n+3){animation-name:fxTossL;animation-delay:.16s}
#rsvp.fx .editorial{animation:fxSweepL .95s cubic-bezier(.2,1.15,.3,1) both}
#rsvp.fx .form-card{animation:fxSweepR .95s .17s cubic-bezier(.2,1.15,.3,1) both}
#hadiah.fx .gift-card{animation:fxDropGift .8s cubic-bezier(.2,1.3,.3,1) both}
#hadiah.fx .wallet-card{animation:fxBounceUp .8s .15s cubic-bezier(.2,1.3,.3,1) both}
#hadiah.fx .shipping-card{animation:fxBounceUp .85s .26s cubic-bezier(.2,1.3,.3,1) both}
#pembuka.fx .container{animation:fxBounceUp .8s cubic-bezier(.2,1.2,.3,1) both}
.mobile-nav a:active,.desktop-nav nav a:active{transform:scale(.9);transition:transform .1s}
/* ==== Pergerakan ambient semua teks & gambar ==== */
@keyframes kb{from{transform:scale(1)}to{transform:scale(1.32) translate(2.2%,-2.2%)}}@keyframes kbAlt{from{transform:scale(1.32) translate(2.2%,-2.2%)}to{transform:scale(1)}}@keyframes floatY{0%,100%{transform:translateY(0)}50%{transform:translateY(-22px)}}@keyframes floatGentle{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes sway{0%,100%{transform:rotate(-4.5deg) translateX(0)}50%{transform:rotate(4.5deg) translateX(16px)}}@keyframes driftX{0%,100%{transform:translateX(0)}50%{transform:translateX(-42px)}}@keyframes spinSlow{to{transform:rotate(360deg)}}@keyframes breathe{0%,100%{transform:translateY(0);opacity:.9}50%{transform:translateY(-10px);opacity:1}}@keyframes pulsePop{0%,100%{transform:scale(1)}50%{transform:scale(1.1)}}@keyframes bobPhoto{0%,100%{transform:translateY(0) rotate(0deg)}50%{transform:translateY(-16px) rotate(-1.1deg)}}.cover-bg,.hero-bg,.countdown-bg{animation:kb 14s ease-in-out infinite alternate}.closing-bg{animation:kbAlt 14s ease-in-out infinite alternate}.cover-roof{animation:floatGentle 6s ease-in-out infinite}.event-house{animation:sway 5.5s ease-in-out infinite}.mini-ornament,.footer-monogram{animation:pulsePop 4.5s ease-in-out infinite}.sunda-divider b{display:inline-block;animation:spinSlow 10s linear infinite}.monogram{animation:bobPhoto 6.5s ease-in-out infinite}.person-card .portrait{animation:bobPhoto 6s ease-in-out infinite}.hero-quote,.hero-meta,.section-kicker,.eyebrow,.quote,.with-love,.sundanese-line{animation:breathe 8s ease-in-out infinite}
/* ==== Hero beranda: entri huruf, amp, glow & shine ==== */
@keyframes heroCharUp{0%{opacity:0;transform:translateY(120px) rotate(14deg) scale(.6)}55%{opacity:1;transform:translateY(-14px) rotate(-4deg) scale(1.12)}100%{opacity:1;transform:none}}
@keyframes heroAmp{0%{opacity:0;transform:scale(.15) rotate(-40deg)}65%{opacity:1;transform:scale(1.35) rotate(12deg)}100%{opacity:1;transform:none}}
@keyframes fxTrack{from{opacity:0;letter-spacing:.55em}to{opacity:1;letter-spacing:.24em}}
@keyframes fxHeroUp{0%{opacity:0;transform:translateY(80px)}60%{opacity:1;transform:translateY(-10px)}100%{opacity:1;transform:none}}
.hero:before{content:"";position:absolute;inset:0;background:radial-gradient(58% 46% at 50% 58%,rgba(201,157,72,.20),transparent 70%);pointer-events:none;animation:pulseGlow 5s ease-in-out infinite}
@keyframes pulseGlow{0%,100%{opacity:.5}50%{opacity:1}}
.btn-ghost{position:relative;overflow:hidden}
.btn-ghost:after{content:"";position:absolute;top:0;left:-70%;width:42%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.5),transparent);transform:skewX(-20deg);animation:shine 3.4s ease-in-out infinite}
@keyframes shine{0%,52%{left:-70%}86%,100%{left:135%}}
/* ==== Zoom foto saat hover (gambar lebih banyak gerak) ==== */
@media(hover:hover){.gallery-item img{transition:transform .7s cubic-bezier(.16,.85,.26,1)}.gallery-item:hover img,.gallery-item:focus img{transform:scale(1.18) rotate(-1.4deg)}.portrait img{transition:transform .6s cubic-bezier(.16,.85,.26,1)}.person-card:hover .portrait img{transform:scale(1.1)}}
