:root{--paper:#f8f6f1;--ink:#45433c;--muted:#7a766d;--accent:#8a5550;--line:#dcd7cb;font-family:"Songti SC","Noto Serif CJK SC","STSong",serif;color:var(--ink);background:#e9e6df;scroll-behavior:smooth;scroll-padding-top:40px}*{box-sizing:border-box}body{margin:0}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,.coverflow:focus-visible{outline:2px solid var(--accent);outline-offset:5px}button:active{scale:.97}main{max-width:680px;margin:auto;background:var(--paper);overflow:clip;padding-bottom:70px}p{line-height:1.9;margin:0 0 20px}h1,h2,h3{font-weight:400;margin:0}h2{font-size:28px;line-height:1.65}img{display:block;width:100%;height:100%;object-fit:cover}.topbar{position:absolute;z-index:8;top:0;left:50%;transform:translateX(-50%);width:min(100%,680px);padding:22px 26px;display:flex;justify-content:space-between;color:var(--accent);font:13px Georgia,serif;letter-spacing:2px}.topbar a:first-child{font-size:22px}.topbar span{font-style:italic;font-size:15px}.handwriting{font-family:"Snell Roundhand","Segoe Script","Brush Script MT",cursive;font-size:42px;font-weight:400;line-height:1.4;color:var(--accent);letter-spacing:-1px;margin:12px 0 22px}.film{position:relative;isolation:isolate;overflow:hidden}.film img{filter:saturate(.65) contrast(.91) brightness(1.035) sepia(.12)}.film:after{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;opacity:.13;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.78' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23888888' filter='url(%23g)' opacity='.7' d='M0 0h180v180H0z'/%3E%3C/svg%3E");mix-blend-mode:multiply}.letter-scene{height:100svh;min-height:650px;position:relative;display:flex;align-items:center;justify-content:center;perspective:1300px;background:radial-gradient(ellipse at 50% 46%,#fffdf7 0%,#ece7db 100%);isolation:isolate}.letter-scene:after,.invitation-sheet:after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.08;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.6' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23888888' filter='url(%23n)' d='M0 0h160v160H0z'/%3E%3C/svg%3E")}.opening-heading{position:absolute;top:15%;text-align:center;z-index:2}.opening-heading p{font:12px Georgia;letter-spacing:3px;color:var(--muted);margin-bottom:16px}.opening-heading h1{font-size:26px;letter-spacing:3px}.envelope-stage{position:relative;width:84%;height:250px;perspective:1000px;margin-top:50px}.envelope-back{position:absolute;inset:0;background:#d8ceba;border:1px solid #c7bba3;box-shadow:0 24px 38px #70624b24,0 3px 5px #70624b15}.invitation-sheet{position:absolute;z-index:2;left:5%;width:90%;top:50%;height:min(660px,76svh);min-height:490px;background:#fffdf8;padding:12px;box-shadow:0 18px 40px #4b44382c;transform:translateY(-50%);display:flex;flex-direction:column}.sheet-photo{flex:1;min-height:0}.sheet-photo img{object-position:54% 50%}.sheet-copy{text-align:center;padding:7px 0 9px;flex-shrink:0}.sheet-copy .handwriting{font-size:31px;margin:6px 0}.names{font-size:22px;letter-spacing:3px;margin:5px 0}.names span{font:italic 19px Georgia;color:var(--accent);padding:0 8px}.sheet-date{font:12px Georgia;letter-spacing:1.5px;margin:15px 0 9px}.sheet-copy>p:last-child{font-size:13px;margin:0}.envelope-front{position:absolute;inset:0;z-index:3;filter:drop-shadow(0 -1px 1px #8b7b5820)}.fold-left,.fold-right,.fold-bottom{position:absolute;inset:0;background:#e7decb}.fold-left{clip-path:polygon(0 0,56% 55%,0 100%);background:linear-gradient(120deg,#e5dbc7,#f1e9d9)}.fold-right{clip-path:polygon(100% 0,44% 55%,100% 100%);background:linear-gradient(240deg,#e2d7c2,#f1e9d9)}.fold-bottom{clip-path:polygon(0 100%,0 96%,50% 39%,100% 96%,100% 100%);background:linear-gradient(0deg,#eee6d5,#dfd3bb)}.envelope-flap{position:absolute;inset:0;z-index:4;height:58%;transform-origin:50% 0;clip-path:polygon(0 0,100% 0,50% 100%);background:linear-gradient(#efe7d8,#ded1b8);backface-visibility:hidden;filter:drop-shadow(0 2px 2px #6c5a3930)}.envelope-address{position:absolute;bottom:18px;width:100%;text-align:center;color:#73624b}.envelope-address p{font-size:18px;letter-spacing:3px;margin:0 0 7px}.envelope-address p span{font:italic 15px Georgia;padding:0 6px}.envelope-address>span{font:11px Georgia,serif;letter-spacing:1px}.wax-seal{position:absolute;z-index:5;left:50%;top:45%;transform:translate(-50%,-50%);width:62px;height:62px;border-radius:50%;border:4px solid #945f58;background:radial-gradient(circle at 35% 28%,#b7786f,#86534c);box-shadow:0 4px 8px #61413842,inset 0 0 0 1px #bc8e7c;color:#ead5bf;font-size:26px;text-shadow:0 1px 1px #492520;outline-offset:8px}.opening-hint{position:absolute;bottom:calc(95px + env(safe-area-inset-bottom));font-size:14px;letter-spacing:2px;color:var(--muted)}.opening-hint span{display:block;text-align:center;margin-top:9px}.envelope-back,.envelope-front,.envelope-flap,.wax-seal{display:none}.has-opening .envelope-back,.has-opening .envelope-front,.has-opening .envelope-flap,.has-opening .wax-seal{display:block}.has-opening .invitation-sheet{transform:translateY(-50%) scale(.34)}.has-opening .sheet-photo{min-height:0}.letter-opening:not(.has-opening) .opening-heading,.letter-opening:not(.has-opening) .opening-hint{display:none}.section-pad{padding:76px 38px}.letter{text-align:center;position:relative}.small-title{font-size:14px;letter-spacing:3px;color:var(--muted);margin-bottom:28px}.letter h2{font-size:32px;letter-spacing:2px;margin-bottom:30px}.letter-copy{font-size:16px;letter-spacing:1px}.letter-copy p{line-height:2.2;margin-bottom:24px}.signature{color:var(--accent);font-size:15px;letter-spacing:3px;margin-top:32px}.story-title{text-align:center;padding:10px 20px 38px}.story-title .handwriting{font-size:52px;margin-bottom:8px}.story-title h2{font-size:19px;letter-spacing:2px}.photo{border:0;padding:0;background:#deded5;display:block;width:100%;border-radius:0}.memory{margin:0;background:#fffdf7;padding:10px 10px 0;box-shadow:0 14px 28px #524b3620,0 2px 4px #524b3610;position:relative;transform-origin:center}.memory .photo{aspect-ratio:1.4}.memory figcaption{padding:14px 6px 16px;text-align:center;font-size:13px;line-height:1.8;letter-spacing:1px}.memory-garden{margin:0 30px 60px;rotate:-3deg}.memory-pair{display:flex;gap:16px;align-items:center;margin:0 24px 62px}.memory-forest{width:74%;rotate:4deg}.memory-forest .photo{aspect-ratio:.9}.memory-forest img{object-position:46% 50%}.margin-note{font-size:16px;line-height:2.2;color:var(--accent);letter-spacing:2px}.memory-lake{margin:0 25px 40px;rotate:-2deg}.memory-lake .photo{aspect-ratio:1.3}.album{padding:40px 0 42px;overflow:hidden}.gallery-heading{text-align:center;padding:12px 24px 0}.gallery-heading .handwriting{font-size:33px;margin-bottom:16px}.gallery-heading h2{font-size:22px;letter-spacing:1px}.gallery-heading>p:last-child{font-size:13px;color:var(--muted);margin:12px 0 4px}.coverflow{height:370px;position:relative;touch-action:pan-y;cursor:grab;user-select:none;-webkit-user-select:none}.coverflow:active{cursor:grabbing}.coverflow-stage{position:absolute;inset:20px 0 35px;perspective:900px;transform-style:preserve-3d}.cover-card{position:absolute;left:50%;top:20px;width:235px;height:290px;margin-left:-117.5px;background:#fffdf7;padding:9px 9px 32px;border:1px solid #e4dfd4;box-shadow:0 18px 24px #4a42352b;transform-style:preserve-3d;will-change:transform;cursor:pointer}.cover-card .film{display:block;width:100%;height:100%;pointer-events:none}.cover-card img{pointer-events:none;-webkit-user-drag:none}.cover-card:after{content:"";position:absolute;left:5%;right:5%;height:18px;bottom:-27px;background:#5146321c;filter:blur(12px);border-radius:50%;pointer-events:none}.cover-card:active{scale:1}.album-controls{display:flex;align-items:center;justify-content:center;gap:24px;margin-top:-15px}.album-controls button{border:1px solid var(--line);border-radius:50%;width:44px;height:44px;background:#fffaf4;color:var(--accent);font:20px Georgia}.album-controls button:disabled{opacity:.3;cursor:default}.album-caption{min-width:150px;text-align:center}.album-caption p{font-size:17px;margin:0 0 3px}.album-caption span{font:12px Georgia;letter-spacing:3px;color:var(--muted)}.wedding{text-align:center;padding-top:48px}.wedding>.handwriting{font-size:48px}.wedding h2{font-size:22px;letter-spacing:1px}.wedding-date{margin-top:34px}.wedding-date strong{font:38px Georgia;letter-spacing:2px}.wedding-date p{font-size:15px;letter-spacing:1px;margin:16px 0}.time{font:34px Georgia;color:var(--accent);margin:24px 0}.time span{font:14px "Songti SC",serif;letter-spacing:2px;margin-left:8px}.countdown{display:flex;justify-content:center;gap:10px;margin:30px 0 12px}.countdown div{background:var(--accent);color:var(--paper);padding:12px 10px;width:60px;box-shadow:0 4px 8px #89554b12}.countdown b{font:26px Georgia;display:block}.countdown span{font-size:12px;display:block;margin-top:6px}#countdown-caption{font-size:12px;color:var(--muted);letter-spacing:2px}.text-button{display:inline-flex;gap:18px;padding:12px;border-bottom:1px solid var(--line);font-size:14px}.venue{margin-top:46px;padding:36px 12px 15px;border:1px solid var(--line);background:#fffdf7;box-shadow:0 12px 30px #4b42350d}.venue .small-title{margin-bottom:18px}.venue h3{font-size:25px;letter-spacing:1px}.hall{font-size:18px;letter-spacing:2px;margin:18px 0}.venue address{font-style:normal;font-size:15px;line-height:1.9;color:var(--muted)}.venue-actions{display:flex;gap:10px;justify-content:center;margin-top:26px}.primary{border:1px solid var(--accent);color:var(--paper);background:var(--accent);padding:14px 18px;font-size:14px;display:inline-flex;align-items:center;justify-content:center;gap:14px}.venue-actions button{border:1px solid var(--line);background:transparent;padding:14px;font-size:14px}.venue-tip{font-size:12px;color:var(--muted);margin:20px 0 0}.closing-copy{text-align:center;padding:10px 20px 64px}.closing .handwriting{font-size:34px}.closing h2{font-size:22px;margin:24px 0}.closing-copy>p:not(.handwriting){font-size:14px;letter-spacing:2px}.closing-copy>span{font:14px Georgia;letter-spacing:3px}.bottom-nav{position:fixed;z-index:10;bottom:0;left:50%;transform:translateX(-50%);width:min(100%,680px);display:grid;grid-template-columns:1fr 1fr 1.4fr;align-items:center;background:#f8f6f1e8;backdrop-filter:none;-webkit-backdrop-filter:none;border-top:1px solid #dcd7cb88;padding:10px 20px calc(10px + env(safe-area-inset-bottom));font-size:14px}.bottom-nav a{text-align:center;padding:10px 0}.bottom-nav button{border:0;background:var(--accent);color:white;padding:12px 8px;font-size:14px;letter-spacing:1px}.bottom-nav button span{margin-left:8px}dialog{border:0;max-width:calc(100% - 32px);color:var(--ink)}dialog::backdrop{background:#171713ed}#lightbox{background:transparent;width:100vw;height:100dvh;max-width:100%;max-height:100%;padding:58px 16px 20px;overflow:hidden}#lightbox[open]{display:flex;flex-direction:column;align-items:center;justify-content:center}.lightbox-image{width:100%;height:calc(100% - 60px)}#full-photo{object-fit:contain}.close{position:absolute;right:12px;top:10px;font:32px Georgia;width:44px;height:44px;border:0;background:transparent;color:inherit}#lightbox .close{color:white}.lightbox-controls{display:flex;align-items:center;justify-content:center;gap:32px;color:white;margin-top:10px;font:14px Georgia}.lightbox-controls button{color:white;background:transparent;border:1px solid #ffffff66;width:48px;height:42px;font-size:22px}#share-dialog{width:390px;padding:40px 26px 32px;background:var(--paper);text-align:center}#share-dialog h2{font-size:22px;margin-bottom:18px}#share-dialog p:not(.handwriting){font-size:14px}#share-dialog .primary{width:100%}#toast{position:fixed;bottom:100px;left:50%;transform:translate(-50%,12px);background:#45433c;color:white;padding:13px 20px;font:14px system-ui;z-index:30;opacity:0;pointer-events:none;transition:.2s;max-width:90%;text-align:center}#toast.visible{opacity:1;transform:translate(-50%,0)}@media(min-width:700px){.envelope-stage{width:78%;height:310px}.invitation-sheet{left:12%;width:76%}.opening-heading h1{font-size:32px}.section-pad{padding-left:80px;padding-right:80px}.memory-garden{margin-left:55px;margin-right:75px}.memory-pair{margin-left:55px;margin-right:65px}.memory-lake{margin-left:55px;margin-right:55px}.memory figcaption{font-size:15px;padding:22px 10px}.coverflow{height:420px}.cover-card{width:275px;height:340px;margin-left:-137.5px}.envelope-address{bottom:30px}.envelope-address p{font-size:23px}.album-caption{min-width:180px}}@media(max-width:360px){.section-pad{padding:54px 23px}.opening-heading h1{font-size:23px}.names{font-size:19px;letter-spacing:2px}.sheet-copy .handwriting{font-size:28px}.memory-pair{margin-left:18px;margin-right:18px;gap:12px}.margin-note{font-size:14px}.cover-card{width:215px;margin-left:-107.5px}.venue-actions{gap:6px}.primary{padding:13px 14px}.opening-hint{font-size:13px}}@media(prefers-reduced-motion:reduce){:root{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.memory{rotate:0deg}.cover-card{will-change:auto}}@media(prefers-reduced-transparency:reduce){.bottom-nav{background:var(--paper);backdrop-filter:none}}@media(prefers-contrast:more){.bottom-nav{background:var(--paper);border-color:var(--ink)}}
/* Lace stationery / editorial revision */
@font-face{font-family:WeddingHand;src:url('fonts/handwritten.ttf') format('truetype');font-display:swap;font-weight:400;font-style:normal}
:root{--paper:#fffefa;--accent:#8e5754;--ink:#504940;--muted:#82776e;background:#efede7}.handwriting,.brand-signature{font-family:WeddingHand,"Snell Roundhand",cursive;font-weight:400;letter-spacing:-1.8px}.topbar{align-items:center;padding:18px 25px}.topbar a.brand-signature{font-size:25px;letter-spacing:-1.7px}#music-toggle{position:fixed;right:20px;top:17px;display:flex;gap:7px;align-items:center;color:var(--accent);background:#fffefacb;border:1px solid #b99f903d;border-radius:30px;padding:8px 12px;font-size:12px;letter-spacing:0;backdrop-filter:none}#music-toggle>span:first-child{font-size:19px}#music-toggle[aria-pressed=true]{box-shadow:0 0 0 3px #8e575409}.topbar{position:fixed;z-index:12;pointer-events:none}.topbar>*{pointer-events:auto}.film img{filter:saturate(.43) contrast(.87) brightness(1.06) sepia(.18)}.film:after{opacity:.18}.letter-scene{background:radial-gradient(ellipse at 50% 48%,#fffdf8,#ece7dd)}.opening-heading{top:13%}.opening-heading .handwriting{font-family:WeddingHand,cursive;font-size:27px;letter-spacing:-1px;color:var(--accent);margin-bottom:10px}.opening-heading h1{font-size:22px;letter-spacing:2px}.envelope-stage{width:94%;height:360px;margin-top:65px}.lace-layer{background:transparent url('assets/lace-envelope-sheer-v7.webp') center/contain no-repeat!important;border:0;box-shadow:none;filter:drop-shadow(0 14px 16px #4b3f3322)}.envelope-front{clip-path:polygon(0 49%,100% 49%,100% 100%,0 100%);z-index:3;pointer-events:none}.envelope-back{z-index:1}.envelope-flap{display:none!important}.wax-seal{left:50%;top:72%;height:auto;width:125px;padding:8px 14px;transform:translate(-50%,-50%) rotate(-5deg);border:0;border-radius:0;background:#fffef3ed;color:var(--accent);box-shadow:0 3px 10px #5c483322;text-shadow:none}.wax-seal span{display:block;font:25px WeddingHand,cursive;letter-spacing:-1px}.wax-seal small{display:block;font-size:11px;letter-spacing:2px;margin-top:5px}.film-sheet{height:auto!important;min-height:0;padding:21px 15px 16px;top:50%;left:4%;width:92%;background:#fffdf6;box-shadow:0 10px 28px #4b443820}.film-card-title{text-align:center;font:32px WeddingHand,cursive;color:var(--accent);margin:0 0 17px;letter-spacing:-2px}.video-frame{position:relative;aspect-ratio:16/9;background:#262a25;flex:none}.video-frame video{display:block;width:100%;height:100%;object-fit:contain}.video-frame #play-film{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:10px;color:#fff;border:0;background:#0003;text-shadow:0 2px 5px #0009;font-size:13px}.video-frame #play-film>span:first-child{font-size:48px;line-height:1}.video-frame #play-film[hidden]{display:none}.film-sheet .sheet-copy{padding-top:14px}.sheet-copy .names{font-size:21px}.sheet-copy .english-signature{font-size:32px;margin:6px 0 18px;letter-spacing:-2px}.sheet-date{margin:8px 0}.opening-hint{bottom:90px;font-size:13px}.portrait-intro{padding:30px 0 50px}.cover-landscape{height:430px;overflow:hidden;position:relative}.cover-landscape img{object-position:54% 50%}.cover-landscape:before{content:"";position:absolute;z-index:2;inset:55% 0 0;background:linear-gradient(transparent,var(--paper));pointer-events:none}.portrait-caption{text-align:center;margin-top:-8px;position:relative;z-index:3}.portrait-caption .names{font-size:25px;letter-spacing:4px}.portrait-caption .english-signature{font-size:43px;margin:16px 0 22px;letter-spacing:-2.6px}.portrait-caption>p:last-child{font-size:14px;letter-spacing:2px}.letter{padding-top:16px;padding-bottom:60px}.letter h2{font-size:28px}.letter:after{content:"";display:block;width:1px;height:45px;background:#ad9c8f;margin:40px auto 0}.story-title{padding-bottom:32px}.story-title .handwriting{font-size:44px}.story-title h2{display:none}.editorial-collage{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:160px 190px 155px;gap:12px;padding:0 23px;position:relative}.editorial-photo{margin:0;overflow:hidden}.editorial-photo .photo{height:100%}.editorial-photo img{width:100%;height:100%;object-fit:cover}.garden-photo{grid-area:1/1/3/2}.garden-photo img{object-position:52% 50%}.editorial-monogram{grid-area:1/2/2/3;text-align:center;align-self:center}.editorial-monogram .handwriting{font-size:46px;letter-spacing:-4px}.editorial-monogram p{font-size:13px;margin:15px 0 0;color:var(--muted);letter-spacing:2px}.forest-photo{grid-area:2/2/4/3;margin-top:-16px;z-index:2;margin-left:-25px}.forest-photo img{object-position:42% 50%}.lake-photo{grid-area:3/1/4/2;margin-right:0}.lake-photo img{object-position:54% 50%}.collage-footer{text-align:center;font-size:14px;letter-spacing:2px;margin:28px 0 15px}.gallery-heading .handwriting{font-size:30px;letter-spacing:-2px}.gallery-heading h2{font-size:21px}.cover-card{padding:6px 6px 22px;box-shadow:0 16px 22px #4a423522;background:#fffdf7}.coverflow{touch-action:pan-y pinch-zoom}.wedding>.handwriting{font-size:41px}.wedding-flow{margin:48px 0 0;padding:32px 0 0;border-top:1px solid var(--line);text-align:left}.wedding-flow h3{display:flex;align-items:center;justify-content:center;gap:15px}.wedding-flow h3 .handwriting{font-size:29px;margin:0;letter-spacing:-1.5px}.wedding-flow h3>span:last-child{font-size:16px}.wedding-flow ol{list-style:none;padding:0;margin:30px 0 0}.wedding-flow li{display:flex;align-items:center;gap:22px;position:relative;padding:8px 0 25px}.flow-mark{font:italic 19px Georgia;color:#b29788;min-width:35px;text-align:center}.wedding-flow li:not(:last-child):after{content:"";position:absolute;left:17px;top:48px;bottom:-2px;width:1px;background:#d7c9bd}.wedding-flow li .handwriting{font-size:22px;letter-spacing:-1px;line-height:1.5}.wedding-flow li p{font-size:16px;margin:4px 0 0;letter-spacing:2px}.venue{margin-top:25px;border:0;border-top:1px solid var(--line);box-shadow:none;background:transparent;padding-top:38px}.closing .handwriting{font-size:29px;letter-spacing:-2px}.closing-copy{padding-top:20px}.album-controls button{background:transparent}.sheet-copy .english-signature,.portrait-caption .english-signature{white-space:nowrap}@media(min-width:700px){.envelope-stage{width:86%;height:450px;margin-top:75px}.film-sheet{left:12%;width:76%;padding:24px}.film-card-title{font-size:37px}.cover-landscape{height:610px}.portrait-caption .english-signature{font-size:54px}.editorial-collage{padding:0 45px;grid-template-rows:230px 290px 220px;gap:16px}.forest-photo{margin-left:-45px}.editorial-monogram .handwriting{font-size:62px}.wedding-flow li{gap:35px;padding-bottom:30px}.wedding-flow li .handwriting{font-size:27px}.opening-heading h1{font-size:28px}.opening-heading{top:11%}.opening-hint{bottom:85px}}@media(max-width:360px){.envelope-stage{height:320px}.film-sheet{padding:15px 11px}.film-card-title{font-size:27px}.sheet-copy .english-signature{font-size:28px}.topbar{padding-left:18px}.topbar a.brand-signature{font-size:23px}#music-toggle{right:13px;font-size:11px;padding:7px 9px}.portrait-caption .english-signature{font-size:37px}.editorial-collage{padding:0 18px;grid-template-rows:140px 170px 130px}.wedding-flow li{gap:13px}.wedding-flow li .handwriting{font-size:20px}.closing .handwriting{font-size:24px}.sheet-copy .names{font-size:19px}}

.topbar{position:absolute}#music-toggle{z-index:25;right:max(16px,calc((100vw - 680px)/2 + 16px));pointer-events:auto}

/* White cotton stationery, natural photographs and tangible photo prints. */
:root{--paper:#fffefa;--ink:#514b47;--muted:#8c817a;--accent:#97605c;--line:#e7e1d9;background:#eeece8}
main{background-color:var(--paper);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath d='M0 0h180v180H0z' opacity='.035' filter='url(%23p)'/%3E%3C/svg%3E");box-shadow:0 0 70px #514b4709}
.film img{filter:none}.film:after{display:none}.letter-scene{background:radial-gradient(ellipse at 50% 44%,#fffefa 30%,#f4f1eb 100%)}.letter-scene:after{opacity:.045}.film-sheet{background:#fffefa;border:1px solid #eee8df;box-shadow:0 24px 40px #5045371c,0 2px 3px #50453716}.wax-seal{background:#fffdf7}.bottom-nav{background:#fffefa;backdrop-filter:none;-webkit-backdrop-filter:none;border-color:#e9e2d9;box-shadow:0 -5px 24px #514b4705}.portrait-intro{padding-top:22px}.letter{padding-bottom:42px}.letter:after{height:32px;background:#c7b9ac}.paper-doodle{width:142px;height:142px;object-fit:contain;margin:5px auto 22px;mix-blend-mode:multiply;pointer-events:none}.letter .paper-doodle{width:126px;height:126px;margin:24px auto 0}.star-note{position:relative;color:var(--accent);font-size:24px;letter-spacing:14px;text-align:center;margin:0 0 18px;line-height:1.3}.star-note span{display:inline-block;transform:translateY(-6px);font-size:13px}.editorial-photo{border:5px solid #fffefa;box-shadow:0 10px 22px #51453612,0 1px 2px #51453618}.editorial-monogram:after{content:'✧';display:block;font-size:26px;color:#b79083;margin-top:16px}.gallery-heading{position:relative}.gallery-heading:before{content:'✦';display:block;color:#b29482;font-size:16px;margin-bottom:15px}.cover-card{border-radius:2px;padding:9px 9px 39px;background:#fffefa;border:1px solid #e6e0d7;box-shadow:0 2px 0 #e0d9ce,0 4px 0 #f5f0e7,0 5px 1px #d6cfc4,0 22px 27px #51463629;backface-visibility:hidden}.cover-card .film{border-radius:1px}.cover-card:before{content:'';position:absolute;inset:0;pointer-events:none;border:1px solid #ffffff;z-index:2}.cover-card:after{bottom:-32px;opacity:.8}.paper-caption{position:absolute;bottom:9px;left:8px;right:8px;font:16px WeddingHand,cursive;color:#96766b;letter-spacing:-.8px;pointer-events:none}.coverflow{height:390px}.coverflow-stage{perspective:1000px}.album-controls{margin-top:-15px}.album-controls button{background:#fffefa;box-shadow:0 3px 0 #e9e2d6;transition:box-shadow .18s,background .18s}.album-controls button:active{box-shadow:0 1px 0 #e9e2d6;background:#f4eee6}.countdown div{background:#97605c;box-shadow:0 3px 0 #7f504c,0 9px 15px #97605c16}.venue{border:1px solid #e6dfd6;padding:34px 12px 22px;background:#fffefa;box-shadow:0 3px 0 #f0eae1,0 14px 28px #5146360a;position:relative}.venue:before{content:'♡';position:absolute;top:-16px;left:calc(50% - 22px);width:44px;background:#fffefa;color:var(--accent);font-size:25px}.closing-copy{padding-top:35px}.closing-copy .star-note{margin-bottom:28px}.primary,.bottom-nav button{box-shadow:0 2px 0 #784b47}.wedding-flow li:not(:last-child):after{background:#dfd3c9}
@media(min-width:700px){.coverflow{height:440px}.cover-card{padding:10px 10px 43px}.paper-caption{font-size:18px;bottom:10px}.letter .paper-doodle{width:145px;height:145px}}
@media(prefers-reduced-motion:reduce){.cover-card{will-change:auto}}

/* Newly selected photographs, composed for their landscape originals. */
.garden-photo img{object-position:56% 55%}.forest-photo img{object-position:53% 68%}.lake-photo img{object-position:50% 40%}.golden-memory{margin:45px 25px 28px;padding:9px 9px 0;background:#fffefa;border:1px solid #e6e0d7;box-shadow:0 3px 0 #e9e2d8,0 17px 27px #51463616;transform:rotate(-1deg)}.golden-memory .photo{aspect-ratio:1.45}.golden-memory img{object-position:center}.golden-memory figcaption{text-align:center;padding:16px 4px 10px}.golden-memory .handwriting{font-size:26px;letter-spacing:-1.5px}.golden-memory p{font-size:13px;margin:7px 0 4px;letter-spacing:1px}.video-frame #play-film{font-size:12px}.video-frame #play-film>span:last-child{padding:0 12px;line-height:1.6}@media(min-width:700px){.golden-memory{margin:55px 48px 35px}.golden-memory figcaption{padding:22px 8px 15px}.golden-memory .handwriting{font-size:32px}}@media(prefers-reduced-motion:reduce){.golden-memory{transform:none}}
.envelope-front{clip-path:polygon(0 35%,50% 75%,100% 35%,100% 100%,0 100%)}.wax-seal{top:91%;width:112px;padding:5px 12px;transform:translate(-50%,-50%) rotate(-4deg)}.wax-seal span{font-size:22px}.wax-seal small{font-size:10px;margin-top:2px}
/* Sheer lace lets the invitation remain visible through the pocket. */
.envelope-back{opacity:.66}.envelope-front{opacity:.43;filter:none}.lace-layer{filter:drop-shadow(0 8px 12px #73695712)}.wax-seal{top:91%;background:#fffefa;border:1px solid #eee6dc;box-shadow:0 3px 9px #73695715}

/* Return to embroidered lace, in a clean pearl-white finish. */
.lace-layer{background-image:url('assets/lace-envelope.webp')!important;filter:saturate(.12) brightness(1.14) contrast(.96) drop-shadow(0 14px 20px #52505b20);transform-origin:50% 80%;backface-visibility:hidden}.envelope-back,.envelope-front{opacity:1}.envelope-front{clip-path:polygon(0 49%,100% 49%,100% 100%,0 100%)}.wax-seal{top:73%;width:118px;padding:9px 13px;transform:translate(-50%,-50%) rotate(-5deg);background:#fff;border:1px solid #eeebe5;box-shadow:0 5px 12px #53515b17}.wax-seal span{font-size:25px}.wax-seal small{font-size:11px;margin-top:4px}.film-sheet{background:#fffefc;box-shadow:0 2px 3px #33303b10,0 26px 50px #39334020;border-color:#eeebe5}.film-card-title{margin-bottom:20px}.sheet-copy .english-signature{color:#976560}.garden-photo img{object-position:50% 50%}.cover-card[data-photo="flower-proposal"] img{object-position:56% 55%}.letter-scene{background:radial-gradient(ellipse at 50% 43%,#fff 20%,#f6f4ef 100%)}

/* White cardstock with a narrow scalloped lace trim. */
.lace-layer{background-image:url('assets/lace-cardstock-v9.webp')!important;filter:drop-shadow(0 12px 20px #58515b1b)}.envelope-back{clip-path:polygon(0 45%,100% 45%,100% 100%,0 100%)}.envelope-front{clip-path:polygon(0 35%,50% 72%,100% 35%,100% 100%,0 100%)}.envelope-lid{position:absolute;inset:0;z-index:4;clip-path:polygon(0 0,100% 0,100% 45%,0 45%);transform-origin:50% 45%;backface-visibility:visible;pointer-events:none}.wax-seal{top:76%;width:108px;box-shadow:0 3px 10px #58515b15}.envelope-stage{transform-style:preserve-3d}.letter-opening:not(.has-opening) .envelope-lid{display:none}
.lace-layer{background-size:100% 100%!important}.envelope-back{clip-path:polygon(9.3% 43.5%,90.7% 43.5%,90.7% 94.5%,9.3% 94.5%)}.envelope-front{clip-path:polygon(9.3% 43.5%,50% 76.5%,90.7% 43.5%,90.7% 94.5%,9.3% 94.5%)}.envelope-lid{clip-path:polygon(50% 2.5%,90.7% 43.5%,9.3% 43.5%);transform-origin:50% 43.5%}
.wax-seal{width:128px}.wax-seal span{white-space:nowrap}

/* Fine cotton fibers, confined to the envelope paper surfaces. */
.lace-layer:after{content:'';position:absolute;inset:0;pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='fiber'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.38 .75' numOctaves='3' stitchTiles='stitch'/%3E%3CfeDiffuseLighting lighting-color='%23ffffff' surfaceScale='2.2' diffuseConstant='.9'%3E%3CfeDistantLight azimuth='225' elevation='48'/%3E%3C/feDiffuseLighting%3E%3C/filter%3E%3Cpath d='M0 0h160v160H0z' filter='url(%23fiber)'/%3E%3C/svg%3E");background-size:130px 130px;opacity:.19;mix-blend-mode:multiply}.lake-photo img{object-position:48% 68%}

/* Folded cotton paper, botanical blush wax seal. */
.envelope-stage{width:86%;height:280px;margin-top:90px;transform-style:flat;perspective:1400px}.lace-layer{background:#fffefb!important;filter:none;border:1px solid #e8e4de;box-shadow:0 2px 5px #5e524411;transform-origin:50% 0;backface-visibility:visible}.envelope-back{inset:18% 0 0;clip-path:none;background:#f2eee8!important;box-shadow:0 20px 35px #63584b20,0 3px 5px #63584b12}.envelope-front{inset:18% 0 0;clip-path:polygon(0 0,50% 60%,100% 0,100% 100%,0 100%);z-index:3;background:linear-gradient(145deg,#fffefb,#f8f5ee)!important}.envelope-front:before{content:'';position:absolute;inset:0;background:linear-gradient(33deg,transparent 49.7%,#d9d3c780 50%,transparent 50.3%),linear-gradient(-33deg,transparent 49.7%,#d9d3c770 50%,transparent 50.3%);pointer-events:none}.envelope-lid{inset:18% 0 0;clip-path:polygon(0 0,100% 0,50% 62%);transform-origin:50% 0;z-index:4;background:#fffefa!important}.lace-layer:after{opacity:.22;background-size:145px 145px}.wax-seal{top:52%;left:50%;width:112px;height:144px;padding:0;transform:translate(-50%,-36%);border:0;background:transparent;box-shadow:none;z-index:6}.wax-seal img{width:100%;height:122px;object-fit:contain;pointer-events:none;filter:drop-shadow(0 3px 3px #76524b24)}.wax-seal small{font-size:10px;color:#92716a;letter-spacing:2px;white-space:nowrap;margin:0;padding-top:5px}.film-sheet{left:0;width:100%;top:50%;border:1px solid #eae4dc}.opening-heading{top:12%}.opening-hint{bottom:92px}.letter-opening:not(.has-opening) .film-sheet{opacity:1}.letter-opening:not(.has-opening) .envelope-stage{margin-top:50px}
@media(min-width:700px){.envelope-stage{width:80%;height:340px;margin-top:105px}.film-sheet{left:7%;width:86%}.wax-seal{width:135px;height:176px}.wax-seal img{height:150px}.wax-seal small{font-size:11px}.opening-heading{top:10%}}
@media(max-width:360px){.envelope-stage{height:250px;width:88%}.wax-seal{width:100px;height:130px}.wax-seal img{height:110px}}
.envelope-lid{background:#dcd5ca!important}.envelope-lid:before{content:'';position:absolute;inset:0;background:#fffefa;clip-path:polygon(0 0,100% 0,50% 61.3%)}.wax-seal{width:142px;height:172px;top:49%}.wax-seal img{height:150px}.lace-layer:after{opacity:.17}@media(min-width:700px){.wax-seal{width:160px;height:195px}.wax-seal img{height:172px}}@media(max-width:360px){.wax-seal{width:125px;height:155px}.wax-seal img{height:135px}}

/* One fixed sleeve boundary: the letter cannot pass through its bottom. */
.sheet-slot{position:absolute;inset:0;z-index:2;isolation:isolate;pointer-events:none}.sheet-slot .invitation-sheet{pointer-events:auto;clip-path:none;background:#fffefc;opacity:1}.envelope-stage{isolation:isolate;transform-style:flat}.envelope-front{z-index:3}.envelope-back{z-index:0}.envelope-lid{z-index:4}.letter-opening:not(.has-opening) .sheet-slot{clip-path:none!important}.photo-story{padding-top:20px}.editorial-monogram p{margin-top:0}

/* Tailored sleeve proportions; the opaque letter slides up from below its rim. */
.envelope-stage{width:80%;height:280px}.film-sheet{left:2%;width:96%}@media(min-width:700px){.envelope-stage{width:66%;height:340px}.film-sheet{left:2%;width:96%}}@media(max-width:360px){.envelope-stage{width:84%;height:250px}}

/* Names stay together, with quiet role labels on their left. */
.names{display:flex;align-items:center;justify-content:center;gap:9px;flex-wrap:nowrap}.name-person{display:inline-flex;align-items:center;gap:6px;font-weight:400;white-space:nowrap;letter-spacing:1px}.name-person small{font-size:10px;font-weight:400;letter-spacing:1px;color:var(--muted)}.names .name-amp{padding:0;font-size:17px}.portrait-caption .names{font-size:25px;gap:12px}.film-sheet .names{font-size:20px;gap:8px}.film-sheet .name-person{gap:4px}.film-sheet .name-person small{font-size:9px}.film-sheet .name-amp{font-size:16px}.film-sheet .english-signature{font-size:clamp(25px,7vw,32px)}.bottom-nav{padding-bottom:calc(10px + env(safe-area-inset-bottom))}.sheet-slot{max-width:100%}.venue-actions{flex-wrap:wrap}
@media(max-width:360px){.film-sheet .names{font-size:17px;gap:6px}.film-sheet .name-person{gap:3px}.film-sheet .name-person small{font-size:8px;letter-spacing:0}.portrait-caption .names{font-size:21px;gap:8px}.portrait-caption .name-person{gap:4px}.portrait-caption .name-person small{font-size:9px}.portrait-caption .english-signature{font-size:34px}.bottom-nav{padding-left:12px;padding-right:12px;font-size:13px}.bottom-nav button{font-size:13px}.wedding-date strong{font-size:32px}}
/* Short screens use a flowing invitation so no pinned content sits off-screen. */
@media(max-height:649px),(prefers-reduced-motion:reduce){.letter-scene{height:auto;min-height:0;padding:95px 0 38px;display:block}.envelope-stage{height:auto;width:86%;max-width:470px;margin:0 auto}.sheet-slot{position:relative;inset:auto;clip-path:none!important}.film-sheet{position:relative;left:0;top:auto;width:100%;transform:none!important;visibility:visible!important;opacity:1!important;margin:0}.opening-heading,.opening-hint{display:none}.envelope-back,.envelope-front,.envelope-lid,.wax-seal{display:none!important}.film-card-title{margin-bottom:15px}.sheet-copy .english-signature{margin-bottom:12px}.portrait-intro{padding-top:15px}}
@media(min-height:650px) and (max-height:760px){.envelope-stage{margin-top:65px;height:260px}.film-sheet{padding:16px 12px}.film-card-title{font-size:29px;margin-bottom:12px}.film-sheet .sheet-copy{padding-top:8px}.film-sheet .sheet-copy .english-signature{font-size:28px;margin:5px 0 10px}.opening-heading{top:10%}.opening-hint{bottom:83px}}

/* Role labels belong only to the portrait introduction. */
.portrait-caption .name-person{align-items:baseline}.portrait-caption .name-person small{font-size:8px;line-height:1;letter-spacing:.5px}.portrait-caption .names{align-items:baseline}.film-sheet .names{gap:10px}.venue-logo{display:block;width:190px;max-width:75%;height:auto;object-fit:contain;margin:0 auto 25px}.cover-card[data-photo="rings-kiss-v15"] img{object-position:50% 43%}@media(max-width:360px){.portrait-caption .name-person small{font-size:7px}.venue-logo{width:170px}}

/* A single compact venue signature with no repeated subtitle. */
.venue-brand{display:flex;flex-direction:column;align-items:center;gap:8px;margin:5px auto 22px}.venue-wordmark{display:block;width:205px;max-width:85%;height:auto;overflow:hidden}.venue-brand h3{font-size:23px;line-height:1.4;letter-spacing:2px;margin:0}.venue .small-title{margin-bottom:19px}.venue .hall{margin-top:0}@media(max-width:360px){.venue-wordmark{width:185px}.venue-brand h3{font-size:21px;letter-spacing:1px}}
/* Preserve the complete ring portrait, including both hands. */
.cover-card[data-photo="rings-kiss-v15"] .film{display:flex;align-items:center;background:#fffefa}.cover-card[data-photo="rings-kiss-v15"] img{object-fit:contain;object-position:center;width:100%;height:100%}

/* Small centered attribution at the foot of the invitation. */
.site-footer{display:flex;flex-direction:column;align-items:center;gap:0;padding:8px 16px 10px;color:#7a766d;font:9px/1.8 system-ui,sans-serif;letter-spacing:.1px;text-align:center}.site-footer span{display:block}.site-footer a{display:block;margin-top:6px;padding-top:6px;min-width:180px;border-top:1px solid #dcd7cb}.site-footer a:hover{text-decoration:underline;text-underline-offset:3px}
