@font-face{font-family:WeddingScript;src:url('fonts/Pacifico-Regular.ttf') format('truetype');font-display:swap}
@font-face{font-family:WeddingHand;src:url('fonts/PatrickHand-Regular.ttf') format('truetype');font-display:swap}
:root{--cream:#fffaf0;--rose:#df718b;--pink:#f3c9ce;--matcha:#9aa477;--ink:#304b3f;--berry:#963e55}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--matcha);color:var(--ink);font:18px/1.55 WeddingHand,'Trebuchet MS',sans-serif}main{width:min(100%,520px);margin:auto;background:var(--cream);overflow:hidden;container-type:inline-size;box-shadow:0 0 50px #203b2724}h1,h2,h3,h4,p,figure{margin:0}h1,h2,.script{font-family:WeddingScript,cursive;font-weight:400;line-height:1.45;text-wrap:balance}h1{font-size:9cqw}h2{font-size:8cqw}h3{font-size:6cqw;line-height:1.3}h4{font-size:4.7cqw;line-height:1.4}p{overflow-wrap:anywhere}button,input,select,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit}button{cursor:pointer}img{display:block;max-width:100%}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid var(--berry);outline-offset:4px}.page{position:relative;min-height:177.78cqw;padding:12cqw 8cqw;text-align:center;isolation:isolate}.button{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:8px 25px;border:0;border-radius:50px;background:var(--ink);color:var(--cream);font-family:WeddingHand,sans-serif;font-size:clamp(16px,4.4cqw,23px);line-height:1.2;letter-spacing:.05em;text-decoration:none;transition:transform .15s,background .15s}.button:hover{background:#3e604a;transform:translateY(-2px)}.button:active{transform:scale(.98)}.button:disabled{opacity:.6;cursor:wait}.kayon-pattern{background-color:var(--pink)}.kayon-pattern:before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background-image:var(--kayon-image);background-size:22cqw 33cqw;background-repeat:repeat;opacity:.12}.cover{padding:11cqw 4cqw 8cqw;display:flex;flex-direction:column;align-items:center;justify-content:space-between;gap:4cqw}.guest{z-index:3;max-width:90%;color:#263b2d}.guest p{font-size:4.3cqw;font-weight:600;line-height:1.4}.guest strong{display:block;font-size:6cqw;line-height:1.3;margin-top:5cqw;overflow-wrap:anywhere}.oval-frame{position:relative;aspect-ratio:3/4;width:80%;isolation:isolate}.cover-frame{width:80%;margin:1cqw 0;transform:rotate(-4deg)}.frame-carving{position:absolute;inset:0;width:100%;height:100%;z-index:2;pointer-events:none}.oval-window{position:absolute;inset:13% 13% 12%;border-radius:50%;overflow:hidden;background:#f9d8d6;box-shadow:inset 0 0 18px #87454922}.frame-character{position:absolute;top:10%;left:0;width:100%;max-width:none;height:auto;transform:scale(1.1);transform-origin:center top;animation:portrait-sway 7s ease-in-out infinite}.frame-photo{width:100%;height:100%;object-fit:cover}.cover-caption{position:relative;z-index:4;width:100%;padding:0 3cqw}.wedding-of{font-size:7cqw}.cover h1{margin:2cqw 0 5cqw;overflow-wrap:anywhere}.cover .button{min-width:52%}.janur{position:absolute;z-index:3;pointer-events:none;width:21cqw;transform-origin:20% 92%;animation:sway 6.5s ease-in-out infinite}.janur-left{left:-3cqw;top:32cqw;transform:rotate(-8deg)}.janur-right{right:-4cqw;bottom:26cqw;scale:-1 1;animation-delay:-3.25s}.cover .janur{width:20cqw;opacity:.95}.diamonds{background-color:var(--cream);background-image:conic-gradient(from 45deg,var(--matcha) 25%,transparent 0 50%,var(--matcha) 0 75%,transparent 0);background-size:40cqw 40cqw}.pink-diamonds{background-image:conic-gradient(from 45deg,#f3c9ce80 25%,transparent 0 50%,#f3c9ce80 0 75%,transparent 0)}.welcome{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:22cqw;padding-bottom:24cqw;gap:6cqw}.welcome-frame{width:90%;transform:rotate(3deg)}.welcome h2{font-size:8cqw;position:relative;z-index:2}.date{font-size:4cqw}.corner-flower{position:absolute;width:34cqw;height:34cqw;background:var(--floral-image) center/contain no-repeat;pointer-events:none;z-index:2;transform-origin:20% 20%;animation:floral-sway 8s ease-in-out infinite}.flower-top{left:-4cqw;top:0;transform:rotate(-32deg)}.flower-bottom{right:-4cqw;bottom:0;transform:rotate(148deg)}.blessing{display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:14cqw 7cqw 0;gap:6cqw}.quote-medallion{position:relative;width:100%;background:var(--pink);border-radius:42% 46% 43% 44%;border:5px double var(--matcha);outline:3px dashed var(--matcha);outline-offset:5px;box-shadow:0 0 0 10px var(--pink);padding:14cqw 8cqw;min-height:65cqw;display:grid;place-items:center;margin:5cqw 0}.quote-medallion:before,.quote-medallion:after{content:'';position:absolute;width:28cqw;height:40cqw;background:url('assets/janur.webp') center/contain no-repeat;pointer-events:none;z-index:-1}.quote-medallion:before{top:-10cqw;right:-6cqw;transform:rotate(18deg)}.quote-medallion:after{bottom:-12cqw;left:-8cqw;transform:rotate(198deg)}.medallion-content{font-size:4.6cqw;line-height:1.55}.quote-source{margin-top:6cqw;font-weight:600}.countdown{display:grid;grid-template-columns:repeat(4,1fr);width:100%;gap:4cqw}.countdown div{position:relative}.countdown div:not(:last-child):after{content:':';position:absolute;top:0;right:-3cqw;font-size:10cqw}.countdown b{display:block;font-size:10cqw;font-weight:400;line-height:1.1;font-variant-numeric:tabular-nums}.countdown span{display:block;font-size:4cqw;margin-top:3cqw}.couple-sticker{width:95cqw;height:59cqw;object-fit:contain;object-position:bottom;margin-top:3cqw}#countdown-status:empty{display:none}#countdown-status{font-size:4cqw}.couple{padding:25cqw 16cqw 14cqw;min-height:200cqw}.curtain{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:fill;z-index:-1;pointer-events:none}.couple-content{position:relative;z-index:1}.couple h2{font-size:7.5cqw}.intro-copy{font-size:3.6cqw;margin:5cqw 0 8cqw;line-height:1.5}.person{margin:6cqw auto 0}.portrait-lace{width:32cqw;height:43cqw;border:2px solid var(--rose);outline:2px dashed var(--rose);outline-offset:5px;border-radius:50%;padding:5px;background:var(--cream);margin:0 auto 5cqw}.portrait-window{width:100%;height:100%;border-radius:50%;overflow:hidden;position:relative;background:var(--pink)}.portrait-photo{width:100%;height:100%;object-fit:cover}.portrait-illustration{position:absolute;top:0;width:200%;max-width:none;height:auto}.portrait-illustration.bride{right:0}.portrait-illustration.groom{left:0}.person h3{font-size:5.7cqw}.person p{font-size:4.2cqw;margin-top:2cqw;line-height:1.5}.instagram{display:inline-flex;align-items:center;gap:6px;color:var(--berry);text-decoration:none;margin-top:2cqw;font-size:5cqw}.instagram span{font-size:3.6cqw}.ampersand{font-size:7cqw;margin:6cqw 0}.couple .janur{width:17cqw;z-index:-1}.couple .janur-left{top:76cqw;left:-3cqw}.couple .janur-right{bottom:30cqw;right:-3cqw}.events{padding:19cqw 6cqw 28cqw;min-height:190cqw}.wavy-panel{position:relative;background:var(--pink);padding:12cqw 8cqw 24cqw;border:5px solid var(--matcha);outline:12px solid var(--pink);border-radius:6cqw;isolation:isolate}.wavy-panel:before{content:'';position:absolute;inset:-20px;z-index:-1;background:radial-gradient(ellipse at center,var(--pink) 64%,transparent 66%) 0 0/32px 32px;border-radius:7cqw;pointer-events:none}.wavy-panel:after{content:'';position:absolute;inset:0;border-radius:inherit;background:var(--pink);z-index:-1}.events h2{font-size:7.6cqw;margin-bottom:8cqw}.event-card{position:relative;text-align:right;margin-top:6cqw;font-size:4.5cqw}.event-card:nth-of-type(even){text-align:left;margin-top:9cqw}.event-card h3{text-transform:uppercase;font-size:5.6cqw;font-weight:600}.event-card h4{font-size:6cqw;margin-top:3cqw}.event-card p{margin-top:2cqw}.event-date{font-weight:600}.event-card .address{font-size:3.9cqw;line-height:1.45;margin-top:4cqw}.event-note{font-size:3.5cqw}.actions{display:flex;align-items:flex-end;flex-direction:column;margin-top:4cqw;gap:8px}.event-card:nth-of-type(even) .actions{align-items:flex-start}.actions .button{font-size:4cqw;padding:8px 18px;min-height:40px}.text-link{font-size:3.5cqw;text-underline-offset:3px}.joglo{position:absolute;right:-3cqw;bottom:0;width:67cqw;height:52cqw;object-fit:contain;object-position:bottom;z-index:2;pointer-events:none}.story{background-color:#526344;padding:8cqw 8cqw 15cqw;min-height:190cqw}.story-collage{height:55cqw;position:relative}.envelope{position:absolute;left:-3cqw;top:0;width:57cqw;height:55cqw;background:#e7bbc1;clip-path:polygon(0 28%,50% 0,100% 28%,100% 100%,0 100%)}.heart-note{position:absolute;top:12cqw;left:5cqw;right:5cqw;background:var(--cream);border:3px dotted var(--pink);border-radius:45% 45% 20% 20%;padding:8cqw 3cqw 10cqw;transform:rotate(-7deg)}.heart-note h2{font-size:6.7cqw;line-height:1.45}.wax-seal{position:absolute;bottom:1cqw;left:21cqw;width:16cqw;height:16cqw;display:grid;place-items:center;background:var(--matcha);border:5px double #66723f;border-radius:48%;font-family:WeddingScript;font-size:4.7cqw;transform:rotate(-12deg);box-shadow:2px 4px 4px #0003}.story-couple{position:absolute;right:-5cqw;top:4cqw;width:37cqw;height:54cqw;object-fit:contain;object-position:top;z-index:1}.lace-paper{position:relative;z-index:2;background:var(--cream);padding:7cqw 5cqw;outline:10px dotted var(--cream);border:6px double var(--cream);box-shadow:0 0 0 7px #fffaf0;max-width:90%;margin:0 0 0 auto}.lace-paper:after{content:'';position:absolute;inset:0;border:2px dashed #9aa47788;pointer-events:none}.story-item{position:relative;padding:5cqw 0}.story-item+.story-item{border-top:1px dashed #9aa47777}.story-item h3{font-family:WeddingScript;font-size:5.3cqw;font-weight:400}.story-item h4{font-size:4.1cqw;font-weight:400;margin-top:3cqw}.story-item p{font-size:3.8cqw;line-height:1.6;margin-top:3cqw}.story-item img{max-height:45cqw;width:100%;object-fit:cover;margin:4cqw 0}.gallery{padding:15cqw 8cqw 24cqw}.gallery h2{position:relative;z-index:1;margin-left:18cqw;margin-bottom:18cqw}.gallery-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7cqw 2.5cqw}.gallery-item{text-decoration:none;min-width:0}.gallery-item img{width:100%;aspect-ratio:4/5;object-fit:cover}.gallery-item span{font-size:3cqw;line-height:1.3;display:block;margin-top:2cqw;overflow-wrap:anywhere}.rsvp{background:var(--matcha);display:grid;align-items:center;padding:22cqw 9cqw;min-height:177.78cqw}.rsvp-oval{position:relative;min-height:115cqw;background:var(--pink);border:3px solid var(--cream);outline:8px dotted var(--pink);box-shadow:0 0 0 7px var(--pink);border-radius:50%;padding:24cqw 8cqw;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9cqw}.rsvp h2{font-size:10cqw}.rsvp-oval p{font-size:4.4cqw;line-height:1.5}.rsvp .button{font-size:4.4cqw;width:100%}.rsvp .janur{width:33cqw}.rsvp .janur-left{top:auto;bottom:-5cqw;left:-9cqw}.rsvp .janur-right{bottom:auto;top:-4cqw;right:-9cqw}.gifts{padding:18cqw 9cqw;min-height:177.78cqw}.gift-medallion{background:#f4ebca;border:4px solid var(--ink);outline:3px dashed var(--pink);outline-offset:-12px;border-radius:24% 32% 28% 24%;padding:12cqw 7cqw;min-height:65cqw;display:flex;flex-direction:column;justify-content:center;gap:9cqw}.gift-medallion h2{font-size:8.3cqw}.gift-medallion p{font-size:4.5cqw}.gift-medallion .button{font-size:4.4cqw}.gratitude-paper{background:var(--pink);border:2px solid #8e7547;outline:2px dashed #8e7547;outline-offset:-9px;border-radius:30% 12% 25% 15%;padding:13cqw 8cqw;margin-top:18cqw;font-size:4.7cqw;line-height:1.6}.gift-janur{position:absolute;right:-6cqw;bottom:0;width:28cqw;height:45cqw;object-fit:contain;transform:rotate(15deg);pointer-events:none}.closing{padding:21cqw 6cqw 22cqw;display:flex;flex-direction:column;align-items:center;justify-content:space-between;gap:5cqw;min-height:177.78cqw}.closing h2{font-size:11cqw}.closing-frame{width:84%;transform:rotate(-4deg)}.closing h3{font:8cqw/1.5 WeddingScript,cursive}.closing p{font-size:4cqw}.batik-border{position:absolute;left:0;right:0;top:0;height:11cqw;background:url('assets/batik-border.svg') center top/22cqw 11cqw repeat-x}.batik-border.bottom{top:auto;bottom:0;transform:rotate(180deg)}.floating-controls{position:fixed;bottom:18px;right:max(12px,calc((100vw - 520px)/2 - 52px));display:grid;gap:10px;z-index:20}.floating-controls button{border-radius:50%;width:40px;height:40px;border:1px solid #fff8;background:var(--ink);color:var(--cream);font:20px system-ui;box-shadow:0 4px 14px #0002}.reading-progress{position:fixed;top:0;left:0;width:0;height:3px;background:var(--ink);z-index:30}dialog{border:2px solid var(--ink);border-radius:22px;background:var(--cream);color:var(--ink);width:min(92vw,460px);max-height:88svh;padding:22px;font-size:18px}dialog::backdrop{background:#193225b8;backdrop-filter:blur(4px)}dialog h2{font-size:30px;text-align:center}dialog h3{font-size:25px}dialog p{margin-top:15px}.dialog-close{display:block;min-width:44px;min-height:44px;margin-left:auto;background:transparent;border:0;color:inherit;font:30px system-ui}#lightbox img{max-height:65svh;margin:auto;object-fit:contain}#lightbox p{text-align:center}form{text-align:left;margin-top:25px}form label{display:block;margin-top:15px;font-size:17px}input,select,textarea{display:block;width:100%;min-height:44px;padding:10px 12px;margin-top:5px;border:1px solid var(--matcha);border-radius:10px;color:var(--ink);background:white;font:16px/1.4 system-ui,sans-serif}textarea{resize:vertical}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.checkbox{display:flex;align-items:flex-start;gap:9px;font-size:15px;line-height:1.5}.checkbox input{width:18px;min-height:18px;margin:2px 0;flex-shrink:0}.honeypot{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}form .button{width:100%;margin-top:23px;font-size:19px}#form-status{white-space:pre-line;font-size:16px}.wishes{margin-top:35px}.wishes article{padding:16px 0;border-top:1px solid #9aa47766}.wishes p{margin-top:8px}.wishes time{font-size:13px}.small{font-size:15px}.gift-card{padding:24px;border:1px solid var(--matcha);border-radius:18px;margin-top:22px;background:#f3c9ce50;text-align:center}.account-number{font:22px system-ui;overflow-wrap:anywhere}.gift-card .button{font-size:17px;margin-top:20px}.qris{margin:25px auto;max-width:280px;text-align:center}.qris img{width:100%;height:auto}.qris figcaption{font-size:16px;margin-top:10px}.gift-address{white-space:normal;text-align:center}#toast{position:fixed;z-index:50;left:50%;bottom:75px;transform:translateX(-50%);background:var(--ink);color:white;padding:12px 20px;border-radius:20px;max-width:90vw;width:max-content;opacity:0;pointer-events:none;transition:opacity .2s;font:14px/1.5 system-ui}#toast.visible{opacity:1}.petals{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:4}.petal{position:absolute;top:-20px;width:7px;height:12px;border-radius:90% 0 90% 10%;background:#b9607866;animation:fall 15s linear infinite}.float{animation:float 6s ease-in-out infinite}.js-motion .reveal{opacity:0;transform:translateY(16px);transition:opacity .6s,transform .6s}.js-motion .reveal.visible{opacity:1;transform:none}.opened .cover-frame{animation:open-frame .7s ease}.motion-off *,.page-hidden *{animation-play-state:paused!important}.motion-off .reveal{opacity:1;transform:none}.motion-off{scroll-behavior:auto}@keyframes sway{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(4deg)}}@keyframes portrait-sway{0%,100%{transform:scale(1.1) rotate(-1deg)}50%{transform:scale(1.1) rotate(1deg)}}@keyframes float{0%,100%{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-5px) rotate(1deg)}}@keyframes fall{0%{transform:translate(0,-20px) rotate(0);opacity:0}10%,90%{opacity:.6}100%{transform:translate(55px,1000px) rotate(300deg);opacity:0}}@keyframes open-frame{50%{transform:rotate(2deg) scale(.97)}}@media(max-width:600px){.floating-controls{right:9px;bottom:14px}.floating-controls button{width:35px;height:35px}.button{min-height:44px}.guest p{font-size:max(15px,4.3cqw)}.guest strong{font-size:max(20px,6cqw)}.person p{font-size:max(15px,4.2cqw)}.intro-copy{font-size:max(14px,3.6cqw)}.story-item p{font-size:max(14px,3.8cqw)}.event-card .address{font-size:max(14px,3.9cqw)}.text-link{font-size:max(13px,3.5cqw)}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.js-motion .reveal{opacity:1;transform:none}}

/* V4: decorative assortment, with kayon replacing the kawung pattern. */
.story.kayon-pattern{background-color:#526344}.story.kayon-pattern:before{opacity:.18}
.decor{position:absolute;pointer-events:none;z-index:2}.wayang{width:22cqw;transform-origin:50% 95%;animation:sway 7s ease-in-out infinite}.wayang-left{left:-3cqw;top:51cqw}.wayang-right{right:-3cqw;top:76cqw;scale:-1 1;animation-delay:-3.5s}.couple .wayang{width:20cqw}.couple .wayang-left{top:62cqw}.couple .wayang-right{top:auto;bottom:20cqw}
.corner-flower:before,.corner-flower:after{display:none}.flower-top{top:-2cqw;left:-4cqw}.flower-bottom{bottom:-3cqw;right:-4cqw;rotate:180deg;animation-delay:-4s}.rsvp .corner-flower{width:38cqw;height:38cqw}.rsvp .flower-top{top:0}.rsvp .flower-bottom{bottom:0}
.events .janur{width:19cqw;z-index:0}.events .janur-left{top:3cqw;left:-4cqw}.events .janur-right{bottom:4cqw;right:auto;left:-3cqw;scale:1 1}.wavy-panel{position:relative;z-index:1}
.gifts{padding-bottom:8cqw}.gift-offering{position:relative;width:58cqw;height:auto;margin:5cqw auto 0;pointer-events:none}.gratitude-paper{position:relative;z-index:1}
@keyframes floral-sway{0%,100%{transform:rotate(-1.5deg)}50%{transform:rotate(1.5deg)}}
@media(prefers-reduced-motion:reduce){.wayang,.corner-flower,.gift-offering{animation:none!important}}

/* V5: one distinct decorative story per section. */
.welcome{padding-top:37cqw}.melati-garland{position:absolute;top:1cqw;left:5%;width:90%;height:34cqw;object-fit:contain;transform-origin:50% 0;animation:floral-sway 9s ease-in-out infinite;pointer-events:none;z-index:2}
.blessing{padding-top:22cqw}.blessing-bouquet{top:-2cqw;right:-5cqw;width:33cqw;height:33cqw;left:auto;rotate:75deg}
.story-collage{height:59cqw}.story .envelope{left:50%;translate:-50% 0;rotate:-5deg}.story{background-image:radial-gradient(#fff4 1px,transparent 1px);background-size:18px 18px}
.gallery h2{margin-left:0;margin-bottom:12cqw}.gallery-item{position:relative;align-self:start;padding:2cqw 2cqw 4cqw;background:#fffdf7;box-shadow:0 3px 10px #304b3f18;border:1px solid #9aa47744}.gallery-item:before{content:"";position:absolute;top:-2cqw;left:28%;width:44%;height:4cqw;background:#f3c9ceaa;rotate:-7deg;z-index:1}.gallery-item:nth-child(3n+2){margin-top:5cqw}.gallery-grid{gap:9cqw 3cqw}
.rsvp{display:flex;flex-direction:column;justify-content:center;gap:5cqw;padding-bottom:8cqw}.rsvp-oval{width:100%}.sirih-ornament{position:relative;width:47cqw;height:auto;pointer-events:none}
.closing{background:var(--pink)}
@media(prefers-reduced-motion:reduce){.melati-garland{animation:none!important}}

/* V7: kawung complements kayon on selected pages only. */
.kawung-pattern:before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:url('assets/kawung.svg') center/24cqw 24cqw repeat;opacity:.25}
.story.kawung-pattern{background-image:none}.story.kawung-pattern:before{filter:brightness(2.8);opacity:.24;background-size:19cqw 19cqw}.closing.kawung-pattern:before{opacity:.2}

.closing-frame .frame-character{top:22%;height:65%;object-fit:contain;transform-origin:center}.couple-sticker{object-fit:contain}
