:root{--cream:#fff6e9;--ivory:#fffaf2;--gold:#b78a4b;--gold-light:#e5c48c;--rose:#b34f68;--ink:#533a30;--invite-width:510px;--map-bottom:21%;--ease:650ms}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;color:var(--ink);font-family:Georgia,'Times New Roman',serif;background:#ecd6b9;background-image:linear-gradient(120deg,#e9c7a1a8,#f8eee2b8),var(--page-bg,none);background-size:cover;background-position:center;background-attachment:fixed}button,a{font:inherit}button{cursor:pointer}button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:3px solid #a93562;outline-offset:4px}button[hidden],[hidden]{display:none!important}#status{position:fixed;top:12px;left:50%;transform:translateX(-50%);z-index:100;color:#603a2f;background:#fff6e9f2;border-radius:10px;padding:8px 15px;box-shadow:0 4px 15px #0002;max-width:90%;font:12px/1.4 system-ui,sans-serif}#status:empty{display:none}.invitation{max-width:var(--invite-width);margin:auto;background:var(--cream);min-height:100vh;box-shadow:0 0 80px #66422245;overflow:hidden}.media-stack{line-height:0}.video-shell{position:relative;width:100%;background:#e8cfac;overflow:hidden;line-height:0;aspect-ratio:9/16}.video-shell video{width:100%;height:100%;display:block;object-fit:contain}.video-shell.failed{min-height:180px;aspect-ratio:9/7;display:grid;place-items:center;background:linear-gradient(140deg,#f6e1c5,#eecdb0)}.video-shell.failed video{display:none}.video-fallback{display:none;text-align:center;padding:24px;color:#7c5045;line-height:1.6;font-size:15px}.failed .video-fallback{display:block}.map-link{position:absolute;bottom:var(--map-bottom);left:50%;transform:translateX(-50%);z-index:3;white-space:nowrap;max-width:90%;overflow:hidden;text-overflow:ellipsis;padding:12px 19px;background:#fff7e9ee;color:#784a39;line-height:1.3;border:1px solid #d7ad76;border-radius:30px;font:600 13px system-ui,sans-serif;text-decoration:none;box-shadow:0 5px 18px #3a241633}.opening{position:fixed;inset:0;z-index:50;background:linear-gradient(155deg,#e2b980,#fbf0df 48%,#bb8d65);display:grid;place-items:center;overflow:hidden}.opening video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;z-index:1}.opening-fallback{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:18px;text-align:center;padding:30px;background:radial-gradient(ellipse,#fff9e9b8,#c6916c44)}.opening-fallback h1{font-size:clamp(44px,10vw,82px);font-weight:400;margin:0;text-shadow:0 3px 20px #fff8}.opening-fallback h1 em{color:var(--rose);font-weight:400}.tiny,.eyebrow{font:600 10px/1.6 system-ui,sans-serif;letter-spacing:.26em}.open-btn{position:absolute;z-index:5;bottom:12%;left:50%;transform:translateX(-50%);padding:16px 28px;border:1px solid #fff8;border-radius:40px;background:#71402dbb;color:white;white-space:nowrap;letter-spacing:.13em;box-shadow:0 10px 40px #0003;animation:pulse 2.3s infinite}.sparkle{color:#f8d89c}.continue-btn{position:absolute;z-index:6;bottom:5%;padding:13px 22px;border:0;border-radius:24px;background:#fff9eb;color:#65422f}.opening.playing .opening-fallback,.opening.playing .open-btn{display:none}.opening:not(.playing) video{opacity:0}.story-section,.gallery-section,.scratch-section{text-align:center;position:relative;padding:65px 22px;background:radial-gradient(ellipse at 50% 20%,#fffdf6,#faead7 70%,#f1d7bc)}.ornament{color:var(--gold);font-size:24px;letter-spacing:.25em}.eyebrow{color:#a87554;margin:20px 0 8px}.story-section h2{font-size:clamp(31px,8vw,44px);font-weight:400;font-style:italic;line-height:1.25;margin:12px 0 18px;color:#9b5662}.story-caption{font-size:14px;letter-spacing:.06em}.section-head h2,.scratch-section h2{font-size:34px;font-weight:400;margin:5px 0 28px}.gallery-section{padding-left:0;padding-right:0;overflow:hidden}.carousel{height:570px;max-height:120vw;min-height:370px;position:relative;touch-action:pan-y;outline-offset:-5px}.carousel-track{height:100%;position:relative;perspective:1100px}.photo-card{position:absolute;top:2%;left:50%;height:94%;width:74%;max-width:365px;border:7px solid #fff9ef;background:#fff;box-shadow:0 15px 35px #513a3040;transition:transform .55s cubic-bezier(.2,.7,.2,1),opacity .55s;overflow:hidden;will-change:transform}.photo-card img{width:100%;height:100%;object-fit:cover;display:block}.playing_cards_3d .photo-card{border-radius:8px}.horizontal_slider .photo-card{border:0;border-radius:15px;width:86%;box-shadow:0 15px 32px #513a3038}.polaroid_stack .photo-card{border:10px solid #fff;border-bottom-width:40px;border-radius:2px}.gallery-controls{display:flex;align-items:center;justify-content:center;gap:28px;margin-top:15px;font:12px system-ui,sans-serif;letter-spacing:.15em}.gallery-controls button{height:43px;width:43px;border:1px solid var(--gold);border-radius:50%;background:#fffaf2;color:#8d5c47;font-size:21px}.gallery-dots{display:flex;justify-content:center;gap:9px;margin-top:19px}.gallery-dots button{border:0;border-radius:50%;background:#d8bca0;width:9px;height:9px;padding:0}.gallery-dots button.active{background:var(--rose);transform:scale(1.25)}.scratch-section{padding-bottom:72px}.scratch-hint{font-size:14px;margin:0 0 25px}.scratch-frame{position:relative;margin:auto;width:min(100%,370px);height:190px;border:7px solid #fff9ef;border-radius:13px;overflow:hidden;box-shadow:0 12px 35px #7e533d2c;background:#fff1d7}.date-underlay{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:14px;padding:10px;background:radial-gradient(circle,#fffaf0,#efd1b3)}.date-underlay span{font:600 10px system-ui,sans-serif;letter-spacing:.18em;color:#a56d56}.date-underlay strong{font-size:clamp(22px,5vw,30px);font-weight:400;color:#974d60}#scratchCanvas{position:absolute;inset:0;width:100%;height:100%;touch-action:pan-y;cursor:crosshair}.reveal-btn{margin-top:24px;border:1px solid #bd9462;background:transparent;border-radius:24px;padding:12px 25px;color:#78513d}.countdown{margin-top:40px;animation:rise .7s both}.countdown-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:20px}.countdown-grid div{padding:16px 2px;border:1px solid #e6caa6;background:#fff9efb5;border-radius:8px;display:flex;flex-direction:column;gap:8px}.countdown-grid strong{font-size:clamp(20px,5vw,32px);font-weight:400;font-variant-numeric:tabular-nums}.countdown-grid span{font:10px system-ui,sans-serif;letter-spacing:.08em}footer{text-align:center;background:#e9d2b5;padding:34px 15px;color:#855f4c}footer p{font-style:italic;font-size:13px}footer span{color:var(--rose)}.music-btn{position:fixed;z-index:40;bottom:20px;right:max(15px,calc((100vw - var(--invite-width))/2 + 15px));background:#fff9eee8;color:#734b3c;border:1px solid #c49b6d;border-radius:30px;padding:11px 14px;box-shadow:0 5px 22px #0002;font:12px system-ui,sans-serif}.music-btn span{margin-left:5px}.reveal-section{transition:opacity .8s,transform .8s}.js-reveal .reveal-section:not(.visible){opacity:.55;transform:translateY(20px)}#effectsLayer{position:fixed;inset:0;pointer-events:none;z-index:45;overflow:hidden}.particle{position:absolute;top:-25px;animation:fall var(--duration,3s) linear forwards;color:var(--rose);font-size:var(--size,14px)}body.effects-cinematic .story-section:before,body.effects-cinematic .scratch-section:before{content:'✦';position:absolute;left:9%;top:30%;font-size:28px;color:#d2a568;animation:pulse 3s infinite}body.effects-cinematic .story-section:after{content:'✧';position:absolute;right:9%;bottom:20%;font-size:35px;color:#d2a568;animation:pulse 3.5s infinite}@keyframes pulse{50%{filter:brightness(1.3);opacity:.65;transform:translateX(-50%) scale(1.04)}}@keyframes fall{to{transform:translate(var(--drift,0px),110vh) rotate(720deg);opacity:0}}@keyframes rise{from{opacity:0;transform:translateY(25px)}to{opacity:1;transform:translateY(0)}}@media(max-width:510px){body{background:var(--cream)}.opening video{object-fit:contain}.music-btn{right:12px;bottom:12px}.story-section,.scratch-section{padding-left:18px;padding-right:18px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.js-reveal .reveal-section:not(.visible){opacity:1;transform:none}}

/* Opening cover is the paused video itself, with an invisible full-surface tap target. */
.opening:not(.playing) video{opacity:1}
.opening .opening-fallback{z-index:0}
.opening video{z-index:1}
.opening.frame-ready .opening-fallback{display:none}
.opening .open-btn{inset:0;left:0;bottom:0;transform:none;width:100%;height:100%;border:0;border-radius:0;background:transparent;box-shadow:none;animation:none;letter-spacing:normal;cursor:pointer}
.opening.playing .open-btn{display:none}
.opening{transition:opacity 700ms ease,visibility 700ms ease}
.opening.closing{opacity:0;visibility:hidden;pointer-events:none}
.whatsapp-btn{position:fixed;z-index:41;right:max(15px,calc((100vw - var(--invite-width))/2 + 15px));bottom:80px;width:49px;height:49px;border-radius:50%;background:#25d366;color:white;display:grid;place-items:center;box-shadow:0 5px 18px #0003}
.whatsapp-btn svg{width:28px;height:28px}
@media(max-width:510px){.whatsapp-btn{right:12px;bottom:72px}}
@media(prefers-reduced-motion:reduce){.opening{transition:none}}

/* Graceful date reveal: keep countdown space reserved, avoid any layout jump. */
.countdown{min-height:122px;opacity:1;transform:translateY(0);visibility:visible;animation:none;transition:opacity 1100ms ease,transform 1100ms ease,visibility 1100ms ease}
.countdown.countdown-pending{opacity:0;transform:translateY(12px);visibility:hidden;pointer-events:none}
#scratchCanvas{transition:opacity 900ms ease;will-change:opacity}
#scratchCanvas.scratch-dissolve{opacity:0;pointer-events:none}
.reveal-btn{transition:opacity 500ms ease,transform 500ms ease}
.reveal-btn.reveal-complete{opacity:0;transform:translateY(-6px);pointer-events:none;visibility:hidden}
@media(prefers-reduced-motion:reduce){.countdown,.reveal-btn,#scratchCanvas{transition:none!important}}

/* Optional discreet credit link below the ending message */
footer .ending-link{display:inline-block;margin:0 0 17px;color:#855f4c;font:11px/1.6 system-ui,sans-serif;letter-spacing:.06em;text-decoration:underline;text-underline-offset:3px}footer .ending-link:hover{color:#974d60}footer .ending-link[hidden]{display:none}

/* Footer ornaments always occupy separate centered lines, with or without credit link. */
footer .footer-ornament{display:block;width:100%;text-align:center;line-height:1.4}
footer .footer-ornament-end{margin-top:13px}
footer .ending-link{display:block;width:fit-content;max-width:100%;margin:0 auto 12px}
footer .ending-link[hidden]{display:none}

/* Optional WhatsApp button: reveal only after the configured delay or at the footer. */
.whatsapp-btn{opacity:0;transform:translateY(9px);pointer-events:none;transition:opacity 400ms ease,transform 400ms ease}
.whatsapp-btn.whatsapp-visible{opacity:1;transform:translateY(0);pointer-events:auto}
.whatsapp-btn img:not([hidden]){display:block}.whatsapp-btn img{width:28px;height:28px;object-fit:contain}
@media(prefers-reduced-motion:reduce){.whatsapp-btn{transition:none;transform:none}}

/* V6: only directly neighboring page videos share a feathered overlap. */
.video-shell.video-blend-next{margin-top:calc(-1 * var(--blend-height,40px));-webkit-mask-image:linear-gradient(to bottom,transparent 0px,#000 var(--blend-height,40px),#000 100%);mask-image:linear-gradient(to bottom,transparent 0px,#000 var(--blend-height,40px),#000 100%)}
.video-shell.video-blend-next[data-blend-mode="cinematic"]{-webkit-mask-image:linear-gradient(to bottom,transparent 0px,#000 var(--blend-height,40px),#000 100%);mask-image:linear-gradient(to bottom,transparent 0px,#000 var(--blend-height,40px),#000 100%)}
@media(prefers-reduced-motion:reduce){.video-shell.video-blend-next{margin-top:0;-webkit-mask-image:none;mask-image:none}}
