@font-face{font-family:CoupleScript;src:url('assets/fonts/couple-script.woff2') format('woff2');font-display:swap}@font-face{font-family:WeddingSerif;src:url('assets/fonts/couple-serif-regular.woff2') format('woff2');font-display:swap}@font-face{font-family:WeddingSerif;src:url('assets/fonts/couple-serif-bold.woff2') format('woff2');font-weight:700;font-display:swap}
:root{--ink:#443f39;--muted:#8a8278;--serif:WeddingSerif,Georgia,serif;--script:CoupleScript,cursive;--paper:#fff;--gold:#b7a68c}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:#fff;color:var(--ink);font:16px/1.65 var(--serif);-webkit-font-smoothing:antialiased}main{width:100%;max-width:540px;margin:0 auto;background:white;overflow:hidden}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}button:focus-visible,a:focus-visible{outline:2px solid #93826a;outline-offset:5px}.eyebrow{font-size:11px;line-height:1.5;letter-spacing:1.7px;font-weight:400}.monogram{width:47px;height:57px;object-fit:contain}.hero{position:relative;min-height:100svh;display:flex;align-items:center;justify-content:center;isolation:isolate;background:#fff}.hero-content{position:relative;width:100%;padding:28px 0 30px;text-align:center;opacity:0;transition:opacity 1.5s ease;min-height:100svh;background:url('assets/intro-bg.webp') top center/100% auto no-repeat}.hero.ready .hero-content{opacity:1}.hero-top .monogram{width:36px;height:44px}.hero-top .eyebrow{font-size:11px;letter-spacing:2px;margin:7px 0 14px}.names{font-family:var(--script);font-size:clamp(39px,10.7vw,57px);font-weight:400;line-height:1.1;margin:0;display:flex;flex-direction:column;align-items:center;gap:2px}.names i{font-family:var(--serif);font-size:24px;line-height:1.1;font-weight:400;color:#9a8d7c}.scratch-frame{width:58%;max-width:310px;aspect-ratio:1026/1533;position:relative;margin:20px auto 5px}.scratch-window{position:absolute;inset:11.8% 14% 12%;overflow:hidden;clip-path:polygon(50% 0,69% 4%,80% 9%,85% 15%,100% 25%,100% 78%,93% 86%,81% 89%,77% 95%,58% 98%,50% 100%,42% 98%,23% 95%,19% 89%,7% 86%,0 78%,0 25%,15% 15%,20% 9%,31% 4%);background:#f9f5ef}.scratch-window>img{width:100%;height:100%;object-fit:cover;object-position:50% 18%;display:block}.frame-overlay{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:3}#scratch-canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:crosshair;opacity:1;transition:opacity .9s}.scratch-window.revealed #scratch-canvas{opacity:0;pointer-events:none}.scratch-hint{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;pointer-events:none;gap:12px;font-size:12px;color:#655d54;text-align:center;padding:10px;transition:opacity .3s}.scratch-hand{font-size:31px;animation:glint 2s ease-in-out infinite}.scratch-window.scratching .scratch-hint,.scratch-window.revealed .scratch-hint{opacity:0}.reveal-access{font-size:11px;border:0;background:none;text-decoration:underline;text-underline-offset:4px;color:#82786d;padding:5px 14px}.reveal-message{font-size:11px;margin:3px 10px;min-height:18px;color:var(--muted)}.emboss-button{display:inline-flex;align-items:center;justify-content:center;gap:16px;padding:13px 30px;min-height:44px;border:1px solid #e5e0d8;border-radius:50px;background:linear-gradient(140deg,#fff,#faf9f7);box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 4px #ece9e5,2px 3px 7px #6b64551a,-2px -2px 8px white;font-size:11px;letter-spacing:1px}.open-invitation{min-width:58%;margin-top:10px}.scroll-cue{display:flex;flex-direction:column;align-items:center;font-size:10px;color:#a69a88;margin-top:12px;gap:0}.scroll-cue b{font-size:25px;line-height:1.2;font-weight:400;animation:nudge 2.4s infinite}.opening-video{position:absolute;inset:0;z-index:10;background:#f8f6f0;opacity:1;transition:opacity 1.5s ease;overflow:hidden}.opening-video video{width:100%;height:100%;object-fit:cover;display:block}.hero.ready .opening-video{opacity:0;pointer-events:none}.start-video{position:absolute;bottom:12%;left:50%;transform:translateX(-50%);width:max-content;max-width:90%;background:#fffffff0}.opening-video.playing .start-video{display:none}.skip-video{position:absolute;bottom:28px;left:50%;transform:translateX(-50%);border:0;background:#fff9;padding:8px 18px;border-radius:20px;font-size:11px}.invitation-section{text-align:center;padding-top:32px;background:#fff;scroll-margin-top:20px}.family-heading{font-size:10px;letter-spacing:1px;margin:0 0 12px}.families{display:grid;grid-template-columns:1fr 1fr;gap:18px;padding:0 21px}.families h2{font-size:12px;font-weight:400;letter-spacing:1px;margin:0 0 8px}.families p{font-size:clamp(11px,2.8vw,15px);line-height:1.6;margin:0;white-space:nowrap}.families small{font-size:11px;color:var(--muted);display:block;margin-top:2px}.family-logo{display:block;margin:-3px auto 5px;width:38px;height:46px}.couple-row{display:flex;align-items:flex-start;gap:5px;padding:0 12px}.couple-row>div{flex:1;min-width:0}.couple-row>i{font-style:normal;color:#aaa08f;font-size:23px;line-height:1.6}.couple-name{font-family:var(--script);font-size:clamp(26px,7.4vw,40px);line-height:1.5;white-space:nowrap;display:block}.couple-row small{font-size:11px;display:block}.pearl-divider{width:125px;height:33px;object-fit:contain;display:block;margin:12px auto}.invitation-title{font-size:clamp(17px,4.6vw,24px);font-weight:400;line-height:1.5;margin:12px 18px}.invitation-copy{font-size:13px;line-height:1.7;color:#887f73;margin:0 10px 24px}.event-section{padding:20px 5% 42px;background:linear-gradient(#ffffff00,#ffffff22),url('assets/event-bg.webp') center/cover no-repeat;position:relative}.event-section:before{content:'';position:absolute;left:0;right:0;top:0;height:50px;background:linear-gradient(#fff,transparent);pointer-events:none}.event-tabs{position:relative;display:flex;width:82%;margin:0 auto 10px;border-radius:30px;box-shadow:2px 3px 5px #77736b29,-2px -2px 5px white;background:#f7f6f2e8;border:1px solid #ece8df;padding:3px}.event-tabs button{flex:1;border:0;border-radius:30px;padding:9px 8px;font-size:12px;letter-spacing:1px;background:transparent;color:#a39b8d;min-height:43px}.event-tabs button[aria-selected=true]{background:#fff;box-shadow:2px 2px 4px #857c6a42;color:#51483d}.event-panel{position:relative;isolation:isolate;min-height:460px}.event-frame{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;z-index:-1;pointer-events:none}.event-content{padding:41px 11% 48px;min-height:460px;display:flex;flex-direction:column;align-items:center}.event-hour,.event-date{font-size:clamp(20px,5vw,27px);line-height:1.5;margin:0}.event-date{margin-top:1px;white-space:nowrap}.event-content>.pearl-divider{margin:4px auto 9px}.venue{display:block;text-align:center;line-height:1.5;width:100%;padding:0 3px}.venue strong{font-size:clamp(15px,3.9vw,21px);font-weight:400;display:block;text-transform:uppercase}.venue>span{font-size:13px;display:block;margin-top:7px;color:#847a6e}.map-label{font-size:11px;text-decoration:underline;text-underline-offset:4px;display:block;margin-top:12px;color:#80705a}.venue:hover .map-label{color:#4c3d2c}.countdown-heading{font-size:clamp(10px,2.6vw,14px);letter-spacing:.3px;margin:34px -8px 15px;white-space:nowrap}.countdown{display:flex;justify-content:center;align-items:flex-start;gap:8px;width:100%;font-variant-numeric:tabular-nums}.countdown div{flex:1}.countdown b{font-size:clamp(27px,7vw,36px);font-weight:400;display:block;line-height:1.2}.countdown span{font-size:11px;display:block;color:#857b70}.countdown i{font-style:normal;font-size:21px;color:#b8ad9e;line-height:1.4}.album-section{text-align:center;padding:0 20px 55px;background:#fff;scroll-margin-top:10px}.ribbon{width:calc(100% + 40px);max-width:none;margin:0 -20px;display:block}.album-section>h2{font-size:24px;font-weight:400;line-height:1.4;margin:15px 0 1px}.album-instruction{font-size:12px;color:#9c9184;margin:0 0 12px}.album-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px 5px}.album-card{border:0;background:transparent;padding:0;display:block;min-width:0}.album-frame{position:relative;display:block;aspect-ratio:2/3;width:100%}.album-border{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}.album-cover{position:absolute;inset:7.5% 7.5%;height:85%;width:85%;object-fit:cover;transition:filter .3s}.oval .album-cover{border-radius:50%;inset:8.6% 9%;height:82.8%;width:82%}.rectangle .album-cover{inset:8.9% 10%;height:82.2%;width:80%}.album-card[data-album=Spring] .album-cover{object-position:50% 72%}.album-card[data-album=Summer] .album-cover{object-position:50% 15%}.album-card[data-album=Autumn] .album-cover{object-position:50% 60%}.album-card[data-album=Winter] .album-cover{object-position:55% 50%}.album-card:hover .album-cover{filter:brightness(1.06)}.season-name{font-size:21px;display:block;line-height:1.3}.album-card>small{font-size:10px;display:block;color:#9e8f7b;margin-top:1px}footer{position:relative;text-align:center;padding:70px 20px 35px;background:url('assets/thanks-bg.webp') center/100% 100% no-repeat;min-height:830px;display:flex;flex-direction:column;align-items:center}footer:before{content:'';position:absolute;inset:0 0 auto;height:40px;background:linear-gradient(#fff,transparent);pointer-events:none}footer>.monogram{width:57px;height:68px;margin:0 0 24px}footer h2{font-size:25px;font-weight:400;margin:0 0 24px}footer p{font-size:14px;line-height:1.7;margin:0}footer .pearl-divider{margin:18px auto}.footer-names{font-size:46px;gap:7px;margin:55px 0 38px}.back-top{border:0;background:transparent;padding:12px 20px;margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:8px}.back-top b{font-size:29px;font-weight:400;color:#a18e74}.back-top span{font-size:11px;letter-spacing:1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}#album-viewer{border:0;padding:0;background:#121211;color:#f8f4ed;width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;margin:0}#album-viewer[open]{display:flex;flex-direction:column}#album-viewer::backdrop{background:#121211}.viewer-top{height:80px;display:flex;align-items:center;justify-content:center;padding:20px 65px;flex-shrink:0}.viewer-top h2{font-size:25px;font-weight:400;margin:0}.viewer-top button{position:absolute;right:18px;top:16px;font-size:34px;border:0;background:none;color:#fff;width:48px;height:48px}.viewer-photo{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;position:relative}.viewer-photo img{display:block;max-width:100%;max-height:100%;width:100%;height:100%;object-fit:contain}.viewer-loading{position:absolute;font-size:14px;left:0;right:0;text-align:center;color:#b8afa1;pointer-events:none}.viewer-photo.loaded .viewer-loading{display:none}.viewer-bottom{padding:15px 15px max(22px,env(safe-area-inset-bottom));height:100px;display:flex;align-items:center;justify-content:center;gap:25px;flex-shrink:0}.viewer-bottom button{height:48px;width:55px;border:1px solid #766b5d;border-radius:50px;background:none;color:#fff;font-size:25px}.viewer-bottom span{min-width:70px;text-align:center;font-size:14px}body.album-open{overflow:hidden}body.album-open main{visibility:hidden}@keyframes nudge{50%{transform:translateY(4px)}}@keyframes glint{50%{opacity:.45;transform:translateX(5px)}}@media(min-width:700px){body{background:#faf9f7}main{box-shadow:0 0 45px #6b5a4110}.hero-content{min-height:960px}.hero{min-height:960px}.hero-content{padding-top:32px}.scratch-frame{margin-top:24px}.hero-top .eyebrow{font-size:13px}.hero-top .monogram{width:44px;height:53px}.hero-top .names{gap:5px}.invitation-section{padding-top:45px}.families small,.couple-row small{font-size:13px}.families{gap:35px}.invitation-copy{font-size:16px}.invitation-title{margin-top:20px}.event-content{padding-top:50px;padding-bottom:65px;min-height:555px}.event-panel{min-height:555px}.venue>span{font-size:16px}.map-label{font-size:13px}.countdown-heading{margin-top:45px}.countdown span{font-size:13px}.album-section>h2{font-size:29px}.album-instruction{font-size:15px}.season-name{font-size:26px}.album-card>small{font-size:12px}.album-grid{gap:28px 8px}footer{min-height:960px;padding-top:90px}footer p{font-size:18px}.footer-names{font-size:56px;margin-top:68px}footer h2{font-size:32px}}@media(max-width:360px){.hero-content{padding-top:20px}.hero-top .eyebrow{font-size:10px}.families{gap:10px;padding:0 12px}.families small{font-size:10px}.event-content{padding-left:10%;padding-right:10%}.countdown{gap:4px}.countdown-heading{font-size:9px}.invitation-title{font-size:16px}.event-panel,.event-content{min-height:450px}.couple-name{font-size:25px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}

.event-section:after{content:"";position:absolute;bottom:0;left:0;right:0;height:46px;background:linear-gradient(transparent,#fff);pointer-events:none}.viewer-photo{touch-action:pan-y}.viewer-photo img{-webkit-user-drag:none;user-select:none}

/* Follow the original portrait opening instead of an approximate polygon. */
.scratch-window{inset:0;clip-path:none;background:transparent;-webkit-mask:url('assets/portrait-opening-mask.svg') center/100% 100% no-repeat;mask:url('assets/portrait-opening-mask.svg') center/100% 100% no-repeat}
.scratch-window>img{position:absolute;left:13.35%;top:11.5%;width:73.3%;height:74.2%;object-fit:cover;object-position:50% 18%}
.scratch-hint{padding:18% 16%}
/* Neutral pearl white: apply only to decorative frames, never the photographs. */
.frame-overlay,.event-frame,.album-border{filter:grayscale(1) brightness(1.10)}
footer:before{display:none}
/* The reading order travels from the monogram down to the bride's name. */
.hero-top>.monogram,.hero-top>.eyebrow,.hero-top .names>span,.hero-top .names>i{opacity:0;transform:translateY(-16px)}
.hero.ready .hero-top>.monogram{animation:name-enter .8s .15s both}
.hero.ready .hero-top>.eyebrow{animation:name-enter .8s .35s both}
.hero.ready .hero-top .names>span:first-child{animation:name-enter .9s .6s both}
.hero.ready .hero-top .names>i{animation:name-enter .85s .85s both}
.hero.ready .hero-top .names>span:last-child{animation:name-enter .9s 1.1s both}
@keyframes name-enter{to{opacity:1;transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){.hero.ready .hero-top>.monogram,.hero.ready .hero-top>.eyebrow,.hero.ready .hero-top .names>span,.hero.ready .hero-top .names>i{opacity:1;transform:none}}
