@import url('fonts.css');
:root{--paper:#f6efe5;--ink:#3a4540;--muted:#7b7a6d;--rose:#914b60;--gold:#a18454;--line:#4a564023;--serif:'Cormorant Garamond',Georgia,serif;--ease:cubic-bezier(.2,.75,.2,1)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font:14px 'DM Sans',sans-serif;transition:background 1s,color .6s;overflow-x:hidden}body[data-scene="2"],body[data-scene="4"],body[data-scene="6"]{--paper:#111724;--ink:#eee6dd;--muted:#b1afba;--rose:#d7adba;--gold:#d1b784;--line:#d2c4b92b;background:#111724}button,a{-webkit-tap-highlight-color:transparent;touch-action:manipulation}button{font:inherit;color:inherit;cursor:pointer;min-height:44px}button:disabled{opacity:.3;cursor:default}button:focus-visible,a:focus-visible{outline:2px solid var(--gold);outline-offset:5px}button[hidden],[hidden]{display:none!important}a{color:inherit}h1,h2,h3,p,figure{margin:0}h1,h2,h3{font-weight:500}h1 em,h2 em{color:var(--rose);font-weight:400}p{font-size:13px;line-height:1.9;color:var(--muted)}.eyebrow{font-size:8px;letter-spacing:2.5px;line-height:1.8;font-weight:600;color:var(--gold);display:block}.eyebrow i{display:inline-block;width:22px;height:1px;background:var(--gold);vertical-align:middle;margin-right:10px}h2{font:500 clamp(45px,5.4vw,78px)/1.02 var(--serif);letter-spacing:-2px}.handnote{font:28px 'Italianno',cursive;color:#8c826b}.text-link{border:0;border-bottom:1px solid #a88b6744;background:none;padding:9px 0;font-size:10px;color:var(--rose)}.text-link:hover{border-bottom-color:var(--rose)}.button{border:1px solid var(--line);border-radius:3px;padding:17px 24px;display:inline-flex;align-items:center;justify-content:space-between;gap:32px;font-size:11px;letter-spacing:.2px;transition:transform .3s,background .3s}.button:hover{transform:translateY(-3px)}.primary{background:#3c5750;color:#fff8ea;border-color:#3c5750;box-shadow:0 8px 25px #34493a13}.primary:hover{background:#2d453f}.button>span{font-size:21px}.round-button{width:45px;height:45px;display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;background:none;font-size:20px;transition:background .3s}.round-button:hover{background:#ac8c5d14}
.texture{position:fixed;inset:0;pointer-events:none;z-index:40;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23000' filter='url(%23n)' d='M0 0h180v180H0z'/%3E%3C/svg%3E")}.masthead{height:98px;padding:0 5%;display:flex;align-items:center;justify-content:space-between;gap:20px;position:relative;z-index:10}.date-mark{text-decoration:none;display:flex;gap:10px;align-items:center}.date-mark>b{font:500 47px/.9 var(--serif);letter-spacing:-2px}.date-mark>span{font-size:8px;letter-spacing:2px;line-height:1.5}.date-mark small{font-size:5px;letter-spacing:1.2px;display:block;margin-top:4px;opacity:.6}.masthead-centre{font-size:7px;letter-spacing:3px;opacity:.55}.map-trigger{border:1px solid var(--line);background:transparent;border-radius:40px;padding:9px 16px;display:flex;gap:19px;align-items:center;font-size:9px}.map-trigger>span{font-size:24px;color:var(--gold)}
#sky{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;opacity:0;transition:opacity 1s}body[data-scene="2"] #sky,body[data-scene="4"] #sky,body[data-scene="6"] #sky{opacity:1}main{position:relative;z-index:1}.scene{display:none;max-width:1500px;margin:0 auto;min-height:calc(100svh - 98px);padding:35px 7% 115px;position:relative;isolation:isolate}.scene.active{display:flex;animation:scene-in .9s var(--ease) both}.journey-footer{position:fixed;z-index:20;left:5%;right:5%;bottom:15px;display:flex;align-items:center;justify-content:space-between;gap:28px;min-height:62px;padding:0 18px;border:1px solid var(--line);background:color-mix(in srgb,var(--paper) 84%,transparent);backdrop-filter:blur(18px);border-radius:6px;box-shadow:0 6px 35px #17291f08}.footer-map{border:0;background:none;padding:0;display:flex;gap:12px;align-items:center;font-size:9px;white-space:nowrap}.footer-map>span{font-size:24px;color:var(--gold)}.journey-progress{height:1px;background:var(--line);width:min(26vw,340px);overflow:visible;position:relative}.journey-progress>span{position:absolute;left:0;top:-1px;height:3px;background:var(--gold);width:14.285%;transition:width .8s var(--ease)}.journey-arrows{display:flex;align-items:center;gap:17px}.journey-arrows button{background:none;border:0;font:25px var(--serif);width:38px;padding:0}.journey-arrows>span{font-size:9px;letter-spacing:1px}.journey-arrows i{font-style:normal;opacity:.45;margin-left:7px}.journey-arrows b{font-weight:500}
/* 01 — An invitation, rather than the old question. */
.invitation.active{display:grid;grid-template-columns:1fr 1.1fr;align-items:center;max-width:none;padding:20px 7% 115px;min-height:calc(100svh - 98px)}.invitation-copy{position:relative;z-index:3;max-width:610px;padding:15px 0}.invitation h1{font:500 clamp(58px,6.25vw,95px)/.96 var(--serif);letter-spacing:-3px;margin:25px 0 24px}.invitation h1 em{color:#768363}.invitation-prose{font-size:13px;line-height:1.9;max-width:350px}.cover-art{position:absolute;inset:-98px 0 0 48%;overflow:hidden;z-index:-1}.cover-painting{position:absolute;inset:-3%;background:url('assets/cloud-garden.webp') 53% center/cover;transform:translate(var(--px,0px),var(--py,0px)) scale(1.045);will-change:transform}.cover-art:after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,var(--paper),#f6efe50d 28%,transparent 70%),linear-gradient(0deg,var(--paper),transparent 30%);pointer-events:none}.cover-sun{position:absolute;inset:-20%;background:radial-gradient(ellipse at 45% 35%,#fff8d947,transparent 60%);animation:light-breathe 12s ease-in-out infinite alternate}.cover-date{position:absolute;left:37%;top:17%;font:400 clamp(110px,15vw,220px)/.8 var(--serif);letter-spacing:-10px;color:#4d665c;opacity:.7;text-align:center;z-index:2;text-shadow:0 1px 35px #fff5d8}.cover-date>span{display:block;font:8px 'DM Sans',sans-serif;letter-spacing:8px;margin-top:16px;margin-left:14px}.cover-bird{position:absolute;width:160px;top:42%;left:8%;z-index:2;filter:drop-shadow(0 8px 15px #34594a22);animation:bird-float 10s ease-in-out infinite}.bird-b{left:auto;right:6%;top:54%;transform:scaleX(-1);width:125px;animation-delay:-5s;animation-name:bird-float-back}.art-corner-note{position:absolute;bottom:115px;right:10%;font:30px 'Italianno',cursive;color:#3f5546;z-index:2}.invitation .handnote{display:block;margin-top:17px;font-size:25px}.countdown{margin:27px 0 25px;max-width:310px;border-top:1px solid #8d9a7544;border-bottom:1px solid #8d9a7544;padding:14px 0 13px}.countdown-label{font-size:6px;letter-spacing:2px;color:#7b8068}.countdown-numbers{display:flex;align-items:flex-start;gap:16px;margin:8px 0 9px;justify-content:flex-start}.countdown-numbers>span{min-width:42px;text-align:center}.countdown-numbers b{font:500 33px/1 var(--serif);font-variant-numeric:tabular-nums}.countdown-numbers small{display:block;font-size:5px;letter-spacing:1.4px;margin-top:5px;color:#8d8c75}.countdown-numbers>i{font:23px var(--serif);color:#acac90;font-style:normal}.countdown-zone{display:block;font-size:5px;letter-spacing:1.3px;color:#8d8c75}.birthday-today{font:italic 32px var(--serif);color:#8b5869;padding:6px 0}.birthday-today>small{font:7px 'DM Sans',sans-serif;letter-spacing:2px;display:block;margin-top:8px}
/* 02 — A tiny, personal gallery. */
.museum.active{align-items:center;gap:7%}.museum-intro{width:42%;max-width:480px}.museum h2{margin:21px 0 23px;font-size:clamp(48px,5vw,76px)}.museum-art{position:relative;width:51%;padding:35px 0 42px;perspective:1000px}.museum-frame{padding:15px 15px 0;background:#fffaf0;box-shadow:0 20px 50px #42352718;transform:rotate(-3deg) rotateY(var(--museum-r,0deg));transition:transform .8s var(--ease);position:relative;z-index:2}.photo-mat{position:relative;padding:22px;background:#eee6d8;border:1px solid #b8aa8d44}.photo-rotator{aspect-ratio:1.2;position:relative;overflow:hidden;background:#b7a795}.photo-rotator img{position:absolute;left:50%;top:50%;width:83.333%;height:120%;object-fit:cover;transform:translate(-50%,-50%) rotate(-90deg);transition:opacity .3s,filter .5s;filter:saturate(.8)}.museum-frame figcaption{display:flex;justify-content:space-between;font-size:6px;letter-spacing:1px;padding:16px 2px 18px;color:#857661}.museum-frame figcaption>span:last-child{font-size:16px;line-height:1}.frame-shadow{position:absolute;inset:18px -14px 60px;background:#cfbd9c33;transform:rotate(4deg);border:1px solid #bca98a44}.museum-script{font:34px 'Italianno',cursive;display:block;text-align:center;margin-top:30px;color:#947768}.museum-controls{display:flex;gap:20px;align-items:center;margin:28px 0 30px}.museum-controls>span{font:italic 24px var(--serif)}.museum-controls i{font-style:normal;font:9px 'DM Sans',sans-serif;color:#9e9381;letter-spacing:1px;margin-left:4px}.museum-wall-label{border-left:1px solid #a58a633f;padding:3px 0 4px 19px}.museum-wall-label>span{font-size:6px;letter-spacing:1.7px;color:#8f8269}.museum-wall-label p{font:italic 22px/1.45 var(--serif);color:#856c69;margin:14px 0}.museum-wall-label small{font-size:5px;letter-spacing:1.2px;color:#9b8f79}.photo-miniatures{display:flex;justify-content:center;gap:10px;margin-top:14px}.photo-miniatures button{width:32px;min-height:8px;height:8px;background:transparent;border:0;border-bottom:2px solid #aa92783d;padding:0}.photo-miniatures button[aria-pressed=true]{border-color:#8f5b6a}
/* 03 — Paper stars, six different wishes. */
.wishes.active{display:block;max-width:1250px;padding-top:20px}.wishes-top{text-align:center}.wishes h2{margin:17px 0 18px;color:#e8e3d8}.wishes h2 em{color:#d9c396}.wishes-top>p{color:#abaec2;font-size:12px}.wish-constellation{position:relative;width:min(850px,100%);height:330px;margin:15px auto 0}.wish-threads{position:absolute;inset:0;width:100%;height:100%;fill:none;stroke:#c4b18b29;stroke-width:1;stroke-dasharray:2 8}.wish-stars{position:absolute;inset:0}.paper-star{position:absolute;width:60px;min-height:60px;height:60px;background:none;border:0;padding:0;display:grid;place-items:center;transform:translate(-50%,-50%);filter:drop-shadow(0 0 12px #d7b3702b);animation:paper-star-float 7s ease-in-out infinite}.paper-star svg{width:100%;height:100%;transition:transform .4s,filter .4s}.paper-star:hover svg{transform:scale(1.16) rotate(12deg);filter:brightness(1.2)}.paper-star.unfolded{filter:drop-shadow(0 0 18px #ffdc9d88)}.paper-star.unfolded:after{content:'✓';position:absolute;bottom:-10px;right:0;color:#e8cc97;font-size:10px}.wish-reading{position:absolute;left:26%;right:26%;top:35%;text-align:center;pointer-events:none}.wish-reading>span{color:#c4ae84;font-size:24px;display:block;margin-bottom:10px}.wish-reading>p{font:italic 25px/1.3 var(--serif);color:#e3d5c4}.wish-reading small{display:block;font:6px 'DM Sans',sans-serif;letter-spacing:2px;color:#c4ac84;margin-bottom:11px}.wishes-bottom{display:flex;justify-content:center;gap:30px;align-items:center}.wishes-bottom>span{font-size:6px;letter-spacing:2px;color:#a8a6af}.wishes-bottom .text-link{font-size:9px;color:#d7bc8c}.wish-cat{position:absolute;width:120px;right:3%;bottom:100px;opacity:.85;pointer-events:none}.wish-cat img{width:100%;display:block}.wish-cat span{font:18px 'Italianno',cursive;display:block;text-align:center;color:#c4b18b;white-space:nowrap;transform:translateX(-15px)}
/* 04 — A living bouquet, made with her. */
.bouquet.active{align-items:center;gap:7%;background:radial-gradient(ellipse at 80% 50%,#e1d2bb40,transparent 60%)}.bouquet-copy{width:43%;max-width:470px}.bouquet h2{margin:20px 0 23px}.bouquet-stage{width:50%;position:relative;padding-top:20px}.bouquet-arch{position:absolute;inset:3% 5% 13%;border-radius:48% 48% 0 0;border:1px solid #ae96784a;background:radial-gradient(ellipse at 50% 10%,#ead8cc88,#e1d9c555);z-index:-1}.bouquet-stage>svg{width:100%;display:block;overflow:visible}.bouquet-date{position:absolute;right:0;top:0;font:italic 25px var(--serif);color:#a9987c;transform:rotate(7deg)}.bouquet-script{display:block;font:31px 'Italianno',cursive;color:#966776;text-align:center;margin-top:-16px}.bouquet-count{display:block;text-align:center;font-size:5px;letter-spacing:2px;color:#9b826e;margin-top:10px}.flower-choices{display:flex;flex-direction:column;margin-top:24px;width:100%;max-width:340px;border-top:1px solid var(--line)}.flower-choices button{display:flex;align-items:center;gap:14px;text-align:left;border:0;border-bottom:1px solid var(--line);background:none;padding:14px 0;transition:padding .3s}.flower-choices button:hover{padding-left:7px}.flower-choices span{font:500 23px var(--serif)}.flower-choices small{font:8px 'DM Sans',sans-serif;display:block;color:#9c8679;margin-top:3px}.flower-choices b{font-size:17px;font-weight:400;margin-left:auto;color:#aa8e68}.swatch{display:block;width:20px;height:20px;border-radius:50%;box-shadow:inset -3px -3px 6px #0002}.rose-swatch{background:#85364e}.daisy-swatch{background:#fff8dd;border:1px solid #c7b67d}.tulip-swatch{background:#c78c9c}.bouquet-note{font:italic 20px/1.4 var(--serif);color:#976b72;min-height:2.9em;margin:16px 0 10px;max-width:330px}.bouquet-tools{display:flex;gap:24px}.bouquet-tools .text-link{font-size:9px}.grown-flower{transform-box:fill-box;transform-origin:center bottom;animation:flower-grow 1.1s var(--ease) both}.grown-stem{stroke-dasharray:520;stroke-dashoffset:520;animation:stem-grow 1s var(--ease) forwards}
/* 05 — A new cinema, with familiar favourites. */
.cinema.active{display:block;max-width:1400px;padding-top:20px}.cinema-heading{text-align:center}.cinema h2{font-size:clamp(43px,4.8vw,68px);margin:15px 0 15px}.cinema-heading p{font-size:11px;color:#ac9ba6}.cinema-layout{display:grid;grid-template-columns:1.7fr 1fr;gap:5%;align-items:center;margin-top:30px}.cinema-screen{position:relative;aspect-ratio:1.55;overflow:hidden;background:#060813;border:9px solid #0c0d15;outline:1px solid #c1a2ac33;box-shadow:0 15px 70px #0004}.cinema-screen>img{width:100%;height:100%;object-fit:cover;filter:brightness(.7) saturate(.75);transition:filter 1s,transform 9s;transform:scale(1.04)}.cinema-screen.playing>img{filter:brightness(.45) saturate(.85);transform:scale(1.13)}.cinema-screen[data-film="1"]>img{position:absolute;left:50%;top:50%;width:64.5%;height:155%;object-fit:cover;transform:translate(-50%,-50%) rotate(-90deg) scale(1.01)}.cinema-screen[data-film="1"].playing>img{transform:translate(-50%,-50%) rotate(-90deg) scale(1.12)}.cinema-screen[data-film="2"]>img{object-position:50% 30%}.cinema-projector{position:absolute;inset:0;pointer-events:none;background:linear-gradient(0deg,#080a12c9,transparent 55%),repeating-linear-gradient(transparent 0 3px,#fff1 4px);opacity:.6}.cinema-reel-label{position:absolute;top:15px;left:17px;font-size:5px;letter-spacing:1.8px;color:#e2c6b8;z-index:2}.cinema-play{position:absolute;inset:0;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:none;border:0;color:#fff3df}.cinema-play>span{display:grid;place-items:center;font-size:15px;width:62px;height:62px;border:1px solid #eee0c783;border-radius:50%;background:#17132144;backdrop-filter:blur(8px);padding-left:3px}.cinema-play small{font-size:6px;letter-spacing:2px}.cinema-caption{position:absolute;bottom:24px;left:8%;right:8%;font:italic 29px/1.3 var(--serif);text-align:center;color:#fff0e0;pointer-events:none;text-shadow:0 3px 20px #000}.film-choices{border-top:1px solid #d9b4bf2b}.film-choices button{border:0;border-bottom:1px solid #d9b4bf2b;background:none;text-align:left;padding:16px 0;display:flex;align-items:center;gap:16px;width:100%;opacity:.55;transition:opacity .4s,padding .4s}.film-choices button:hover,.film-choices button[aria-pressed=true]{opacity:1;padding-left:6px}.film-choices button>span{font:italic 20px var(--serif);color:#bd8e9c}.film-choices button>div{font:24px var(--serif);color:#ecdad5}.film-choices small{font:8px 'DM Sans',sans-serif;display:block;margin-top:4px;color:#a78e9a}.film-choices b{font-size:17px;font-weight:400;margin-left:auto;color:#b38a9a}.cinema-ticket{display:flex;margin-top:25px;background:#ebdfc9;color:#4c383c;transform:rotate(3deg);position:relative;box-shadow:0 5px 20px #0002;min-height:115px}.cinema-ticket>div:first-child{flex:1;padding:20px 18px;display:flex;flex-direction:column;gap:7px}.cinema-ticket span{font-size:6px;letter-spacing:2px}.cinema-ticket b{font:500 28px var(--serif);letter-spacing:1px}.cinema-ticket small{font-size:5px;letter-spacing:1.1px;color:#8e746a}.ticket-stub{border-left:1px dashed #aa8d8077;width:74px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:3px;position:relative}.ticket-stub:before,.ticket-stub:after{content:'';position:absolute;left:-6px;width:12px;height:12px;border-radius:50%;background:#111724}.ticket-stub:before{top:-6px}.ticket-stub:after{bottom:-6px}.ticket-stub>b{font-size:34px}.ticket-stub i{font:15px var(--serif);color:#93586b}.cinema-footnote{font:italic 22px/1.3 var(--serif);text-align:center;color:#b89aa4;margin-top:24px}
/* 06 — Three different open-when letters. */
.letters.active{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:20px}.letters-heading{text-align:center}.letters h2{margin:17px 0 21px}.letters-heading p{font-size:12px}.letter-shelf{display:flex;gap:25px;width:100%;margin:45px 0 35px;justify-content:center;perspective:1000px}.letter-envelope{width:29%;max-width:320px;aspect-ratio:1.3;position:relative;border:1px solid #c5ae9a;background:linear-gradient(35deg,#e4cebc 49.6%,transparent 50%),linear-gradient(-35deg,#ecd8c6 49.6%,#f2e3d1 50%);box-shadow:0 13px 30px #473c2910;transition:transform .6s var(--ease),box-shadow .6s;transform:rotate(-4deg);padding:30px 15px 50px}.letter-envelope:nth-child(2){transform:translateY(-10px) rotate(2deg);background:linear-gradient(35deg,#d9d9c9 49.6%,transparent 50%),linear-gradient(-35deg,#e3e3d2 49.6%,#ebebdc 50%)}.letter-envelope:nth-child(3){transform:rotate(5deg);background:linear-gradient(35deg,#e0c4c7 49.6%,transparent 50%),linear-gradient(-35deg,#e9d2d1 49.6%,#f1ded9 50%)}.letter-envelope:hover{transform:translateY(-12px) rotate(0);box-shadow:0 25px 40px #473c2920}.letter-envelope-flap{position:absolute;inset:0;clip-path:polygon(0 0,100% 0,50% 54%);background:#f5eada99;pointer-events:none}.letter-envelope-label{position:relative;z-index:2;font:500 25px/1.2 var(--serif);color:#6b5650;display:block;top:-5px}.letter-envelope-label em{font-weight:400}.wax-seal{position:absolute;left:calc(50% - 21px);top:57%;width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:#9c5a6b;border:3px double #c78d96;color:#f8ddd1;font:italic 26px var(--serif);box-shadow:0 3px 6px #69374930}.letter-envelope>small{position:absolute;bottom:13px;left:10px;right:10px;font-size:5px;letter-spacing:1.5px;color:#967968}.letters-script{font:32px 'Italianno',cursive;color:#a07d76;text-align:center}.letter-dialog{width:min(630px,calc(100% - 28px));max-height:87svh;background:#fbf3e5;color:#4d3e3d;border:1px solid #d8c2ad;border-radius:3px;padding:48px 46px;box-shadow:0 30px 100px #121b3250;overflow:auto}.letter-dialog h3{font:500 39px/1.1 var(--serif);margin:20px 0 25px}.letter-dialog p{font:400 20px/1.55 var(--serif);margin-bottom:18px;color:#685457}.letter-dialog .letter-sign{font:32px 'Italianno',cursive;display:block;margin-top:25px;color:#986274}
/* 07 — Send a birthday wish into a sky full of lanterns. */
.finale.active{display:flex;align-items:center;justify-content:center;min-height:calc(100svh - 98px);max-width:none;padding-top:10px;overflow:hidden}.finale-garden{position:absolute;inset:-98px 0 0;z-index:-2;background:linear-gradient(#07102480,#070d2177),url('assets/finale-night-garden.webp') center/cover;opacity:.75;transition:opacity 2s,filter 2s;animation:garden-breathe 24s ease-in-out infinite alternate}.finale-before{text-align:center;width:100%;position:relative;z-index:3;transition:opacity .7s,transform 1s}.finale-before h2{font-size:clamp(53px,6vw,85px);margin:23px 0 20px}.finale-before h2 em{color:#ddc8b0}.finale-before>p{font-size:12px;color:#c3bbc7}.wish-lantern{display:block;width:180px;height:235px;margin:28px auto 22px;position:relative;border:0;background:none;color:#e4c9ab}.lantern-body{position:absolute;left:40px;right:40px;top:24px;height:135px;display:grid;place-items:center;border-radius:35% 35% 28% 28%;background:radial-gradient(ellipse at 50% 75%,#ffedbd,#e9bc7e 35%,#bc7858 95%);border:1px solid #e8b47e;box-shadow:0 0 45px #f2b87833,inset 0 -12px 20px #a7694777;animation:lantern-hover 5s ease-in-out infinite}.lantern-body:before,.lantern-body:after{content:'';position:absolute;inset:0 21px;border-left:1px solid #9e60365e;border-right:1px solid #9e60365e;border-radius:45%}.lantern-body:after{inset:0 37px;border-color:#9e60363d}.lantern-body>b{font:38px var(--serif);color:#9a4f48;position:relative;z-index:2;font-weight:400}.lantern-body>i{position:absolute;bottom:5px;left:calc(50% - 8px);width:16px;height:29px;background:radial-gradient(ellipse,#fffada,#fff5bc 30%,#f7b55f 65%,transparent);filter:blur(2px);box-shadow:0 0 25px #fff0a5;animation:light-breathe 3s infinite alternate}.lantern-light{position:absolute;inset:-15%;background:radial-gradient(ellipse at 50% 45%,#f1bd7a1a,transparent 62%);z-index:-1;animation:light-breathe 6s infinite alternate}.lantern-string{position:absolute;top:155px;left:50%;width:1px;height:25px;background:#dba57777;animation:lantern-hover 5s ease-in-out infinite}.wish-lantern>small{position:absolute;bottom:2px;left:50%;transform:translateX(-50%);font:25px 'Italianno',cursive;white-space:nowrap;color:#dfc4b4}.wish-lantern:hover .lantern-body{box-shadow:0 0 65px #f2b87866,inset 0 -12px 20px #a7694777}.finale-before-note{font-size:6px;letter-spacing:2px;color:#9f99ac}.finale.released .finale-before{opacity:0;transform:translateY(-50px);pointer-events:none}.finale.released .finale-garden{opacity:.25;filter:blur(4px)}.lanterns{position:absolute;inset:0;pointer-events:none;z-index:1;overflow:hidden}.sky-lantern{position:absolute;bottom:-90px;left:var(--lantern-x);width:var(--lantern-size);height:calc(var(--lantern-size)*1.35);border-radius:35% 35% 28% 28%;background:radial-gradient(ellipse at 50% 80%,#ffe7ab,#d69960 50%,#965b50);box-shadow:0 0 23px #e0a35c55,inset 0 -5px 7px #a8673f88;animation:lantern-rise var(--lantern-duration) var(--lantern-delay) linear infinite;opacity:0}.sky-lantern:after{content:'';position:absolute;inset:5% 32%;border-left:1px solid #8e4c313d;border-right:1px solid #8e4c313d;border-radius:40%}.finale-after{text-align:center;width:100%;position:relative;z-index:3;padding:25px 0 10px;animation:birthday-arrival 2s var(--ease) both}.birthday-to{font:italic 35px var(--serif);color:#d8bdad;margin-top:28px}.birthday-name{font:400 clamp(105px,16vw,220px)/.85 'Italianno',cursive;letter-spacing:-3px;color:#fae2c3;margin:20px 0 25px;text-shadow:0 0 45px #f5d3a129}.finale-love{font:35px 'Italianno',cursive;color:#e5bbca;min-height:1.2em;margin-bottom:24px}.finale-love.typing:after{content:'|';animation:caret 1s steps(2) infinite;font:25px var(--serif);margin-left:5px}.finale-blessing{font:italic 23px/1.5 var(--serif);color:#c4b7c5}.finale-replay{background:#c1a47a13;border-color:#cfb99855;border-radius:35px;color:#ddc6aa;padding:12px 20px;font-size:9px;margin-top:25px}.finale-signature{font:28px 'Italianno',cursive;display:block;color:#a89aae;margin-top:18px}.petal-rain{position:absolute;inset:0;z-index:4;pointer-events:none;overflow:hidden;mask-image:linear-gradient(90deg,#000,#0003 25%,#0000 50%,#0003 75%,#000)}.birthday-petal{position:absolute;top:-60px;width:14px;height:21px;border-radius:85% 0 80% 20%;background:linear-gradient(130deg,#a44a65,#65172e);opacity:0;animation:petal-fall var(--petal-duration) var(--petal-delay) linear infinite}
dialog::backdrop{background:#11162288;backdrop-filter:blur(9px)}.chapter-map{width:min(540px,calc(100% - 28px));max-height:88svh;overflow:auto;padding:40px;background:#f9f0e3;color:#4d3d3f;border:1px solid #d1baa0;border-radius:8px;box-shadow:0 30px 100px #0004}.dialog-close{position:absolute;top:12px;right:15px;border:0;background:none;font-size:27px;color:#9f7e78;min-height:36px;width:36px}.chapter-map h2{font-size:54px;margin:18px 0 25px}.chapter-map .eyebrow{font-size:7px}.chapter-choice{border:0;border-top:1px solid #a98b702f;background:none;width:100%;display:flex;align-items:center;gap:17px;text-align:left;padding:13px 0;transition:padding .3s}.chapter-choice:hover{padding-left:8px}.chapter-choice>span{font:italic 21px var(--serif);color:#a17d69}.chapter-choice b{display:block;font:500 23px var(--serif);color:#4c3b3e}.chapter-choice small{font-size:8px;color:#9b7e75;display:block;margin-top:2px}.chapter-choice>i{margin-left:auto;color:#a88a65;font:23px var(--serif);font-style:normal}.map-note{font:italic 20px var(--serif);color:#967970;display:block;text-align:center;margin-top:22px}body:has(dialog[open]){overflow:hidden}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.tiny-burst{position:fixed;z-index:45;pointer-events:none;color:#a77d53;animation:tiny-burst 1.8s ease-out forwards}
@keyframes scene-in{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes light-breathe{to{opacity:.6;transform:scale(1.05)}}@keyframes bird-float{50%{translate:25px -20px;rotate:5deg}}@keyframes bird-float-back{50%{translate:-20px -14px;rotate:-5deg}}@keyframes paper-star-float{50%{translate:0 -9px;rotate:6deg}}@keyframes flower-grow{from{opacity:0;transform:scale(.1) rotate(-20deg)}to{opacity:1;transform:scale(1) rotate(0)}}@keyframes stem-grow{to{stroke-dashoffset:0}}@keyframes lantern-hover{50%{translate:0 -9px;rotate:2deg}}@keyframes garden-breathe{to{transform:scale(1.045)}}@keyframes lantern-rise{0%{translate:0 0;opacity:0;scale:1}8%{opacity:.8}70%{opacity:.6}100%{translate:var(--lantern-sway) -110vh;scale:.3;opacity:0}}@keyframes birthday-arrival{from{opacity:0;transform:translateY(25px);filter:blur(7px)}to{opacity:1;transform:none;filter:none}}@keyframes petal-fall{10%,80%{opacity:.8}to{translate:100px 110vh;rotate:380deg;opacity:0}}@keyframes caret{50%{opacity:0}}@keyframes tiny-burst{to{translate:var(--bx) var(--by);rotate:var(--br);opacity:0}}
@media(min-width:1650px){.scene{padding-top:60px}.invitation.active{padding-top:50px}.invitation-copy{padding-top:25px}.museum-art{max-width:650px}.wish-constellation{height:400px}.wishes.active{padding-top:35px}.cinema-layout{margin-top:40px}}
@media(max-width:1050px){.masthead-centre{display:none}.invitation h1{font-size:70px}.cover-date{font-size:165px;top:22%;left:31%}.museum.active,.bouquet.active{gap:5%}.museum h2{font-size:57px}.museum-art{width:52%}.museum-intro{width:43%}.photo-mat{padding:15px}.museum-script{font-size:29px}.museum-wall-label p{font-size:20px}.bouquet h2{font-size:58px}.bouquet-copy{width:47%}.bouquet-stage{width:48%}.cinema-layout{grid-template-columns:1.5fr 1fr;gap:4%}.cinema-caption{font-size:25px}.film-choices button>div{font-size:22px}.cinema-ticket>div:first-child{padding:18px 12px}.cinema-ticket b{font-size:24px}.letter-envelope-label{font-size:23px}.letter-shelf{gap:18px}.wish-cat{width:95px;right:2%;bottom:100px}.wish-cat span{font-size:16px}.wish-reading>p{font-size:23px}}
@media(max-width:700px){.masthead{height:80px;padding:0 6%}.date-mark>b{font-size:37px}.date-mark>span{font-size:6px;letter-spacing:1.7px}.date-mark small{font-size:4px;letter-spacing:.7px;max-width:90px}.map-trigger{font-size:8px;padding:7px 12px;gap:10px}.map-trigger>span{font-size:21px}.scene{padding:26px 7% 115px;min-height:calc(100svh - 80px)}h2{font-size:50px;letter-spacing:-1.5px}.eyebrow{font-size:6px;letter-spacing:2px}.journey-footer{left:5%;right:5%;bottom:10px;min-height:61px;padding:0 13px;gap:10px}.footer-map{font-size:8px;gap:8px}.journey-progress{display:none}.journey-arrows{gap:7px}.journey-arrows button{width:36px}.journey-arrows>span{font-size:8px}.journey-arrows i{margin-left:4px}.invitation.active{display:flex;flex-direction:column;align-items:stretch;padding:0 7% 120px;min-height:calc(100svh - 80px)}.cover-art{position:relative;inset:auto;order:0;height:265px;margin:0 -8.2% 0;z-index:0;overflow:hidden}.cover-art:after{background:linear-gradient(0deg,var(--paper),transparent 45%)}.cover-painting{background-position:center 52%;inset:-5%}.cover-date{font-size:155px;top:23px;left:50%;transform:translateX(-50%);letter-spacing:-7px;opacity:.7}.cover-date>span{font-size:6px;letter-spacing:6px;margin-left:8px;margin-top:15px}.cover-bird{width:95px;top:50%;left:8%}.bird-b{width:78px;right:5%;left:auto;top:39%}.art-corner-note{font-size:25px;bottom:18px;right:7%;color:#55705d}.invitation-copy{order:1;padding-top:8px;max-width:none}.invitation h1{font-size:clamp(48px,13vw,68px);letter-spacing:-2px;margin:18px 0 22px;line-height:.98}.invitation-prose{font-size:12px;line-height:1.85}.countdown{margin:23px 0;max-width:310px;padding:13px 0}.countdown-label{font-size:5px;letter-spacing:1.8px}.countdown-numbers{gap:15px;margin:10px 0}.countdown-numbers b{font-size:32px}.countdown-zone{font-size:5px}.invitation .button{font-size:10px;width:100%;max-width:330px;padding:15px 20px}.invitation .handnote{font-size:25px;margin-top:18px}.museum.active{flex-direction:column;gap:25px;padding-top:22px}.museum-intro{width:100%;max-width:none}.museum h2{font-size:52px;margin:17px 0 20px}.museum-intro>p{font-size:12px}.museum-art{width:94%;padding:15px 0 10px;order:0;max-width:480px}.museum-intro{order:1}.museum-frame{padding:11px 11px 0}.photo-mat{padding:14px}.photo-rotator{aspect-ratio:1.2}.museum-frame figcaption{font-size:5px;padding:12px 0 13px;letter-spacing:.8px}.museum-script{font-size:29px;margin-top:22px}.frame-shadow{inset:0 -8px 50px}.photo-miniatures{margin-top:12px}.photo-miniatures button{min-height:30px;padding-top:22px}.museum-controls{margin:23px 0}.museum-wall-label p{font-size:23px}.museum-wall-label small{font-size:5px}.wishes.active{padding-top:20px;padding-bottom:180px;min-height:calc(100svh - 80px)}.wishes h2{font-size:57px;margin:17px 0 20px}.wishes-top>p{font-size:11px}.wish-constellation{height:320px;margin-top:23px;max-width:500px}.paper-star{width:44px;height:44px;min-height:44px}.wish-reading{left:22%;right:22%;top:34%}.wish-reading>p{font-size:23px}.wish-reading>span{font-size:22px}.wish-reading small{font-size:5px;letter-spacing:1.2px}.wishes-bottom{gap:18px;align-items:center}.wishes-bottom>span{font-size:5px;letter-spacing:1.4px}.wishes-bottom .text-link{font-size:8px}.wish-cat{width:60px;right:8%;bottom:83px;opacity:.8}.wish-cat span{font-size:14px;transform:translateX(-32px)}.bouquet.active{flex-direction:column;padding-top:18px;gap:18px}.bouquet-copy{width:100%;max-width:none;order:1}.bouquet-stage{width:93%;max-width:380px;padding-top:0;order:0}.bouquet-arch{inset:0 8% 13%}.bouquet-date{font-size:22px;right:1%;top:6px}.bouquet-script{font-size:27px;margin-top:-15px}.bouquet-count{font-size:5px;margin-top:8px}.bouquet h2{font-size:52px;margin:17px 0 20px}.bouquet-copy>p{font-size:12px}.flower-choices{max-width:none;margin-top:20px}.flower-choices button{padding:13px 0;gap:13px}.flower-choices span{font-size:24px}.flower-choices small{font-size:8px}.bouquet-note{font-size:21px!important;margin-top:17px;max-width:none}.bouquet-tools{gap:26px}.bouquet-tools .text-link{font-size:9px}.cinema.active{padding-top:19px}.cinema h2{font-size:47px;margin:16px 0 18px}.cinema-heading p{font-size:11px}.cinema-layout{grid-template-columns:1fr;gap:25px;margin-top:28px}.cinema-screen{border-width:6px;aspect-ratio:1.4}.cinema-reel-label{font-size:4px;top:11px;left:10px;letter-spacing:1.1px}.cinema-play>span{width:49px;height:49px;font-size:12px}.cinema-play small{font-size:5px}.cinema-caption{font-size:25px;left:7%;right:7%;bottom:22px}.cinema-sidebar{padding:0 4%}.film-choices button{padding:13px 0}.film-choices button>div{font-size:25px}.cinema-ticket{max-width:340px;margin:28px auto 0;min-height:110px}.cinema-ticket>div:first-child{padding:18px 20px}.cinema-ticket b{font-size:28px}.cinema-footnote{font-size:23px;margin-top:26px}.letters.active{padding-top:15px}.letters h2{font-size:53px;margin:18px 0 21px}.letters-heading p{font-size:11px}.letter-shelf{flex-direction:column;align-items:center;margin:33px 0;gap:30px;perspective:none}.letter-envelope{width:88%;max-width:310px;aspect-ratio:1.55;padding-top:24px;transform:rotate(-3deg)}.letter-envelope:nth-child(2){transform:rotate(2deg)}.letter-envelope:nth-child(3){transform:rotate(-2deg)}.letter-envelope-label{font-size:27px}.wax-seal{width:38px;height:38px;left:calc(50% - 19px);font-size:23px;top:56%}.letter-envelope>small{font-size:5px;bottom:12px}.letters-script{font-size:28px;max-width:280px}.letter-dialog{padding:42px 26px 30px}.letter-dialog h3{font-size:35px;margin-bottom:22px}.letter-dialog p{font-size:20px;line-height:1.55}.letter-dialog .letter-sign{font-size:30px}.finale.active{min-height:calc(100svh - 80px);padding-top:20px}.finale-before h2{font-size:58px;line-height:1.01;margin:23px 0}.finale-before>p{font-size:12px}.wish-lantern{margin:24px auto 15px;height:220px}.finale-before-note{font-size:5px;letter-spacing:1.4px}.finale-after{padding:35px 0 10px}.birthday-to{font-size:29px;margin-top:27px}.birthday-name{font-size:139px;letter-spacing:-3px;margin:22px 0 30px}.finale-love{font-size:31px;margin-bottom:24px}.finale-blessing{font-size:23px;line-height:1.5}.finale-after .eyebrow{font-size:5px;letter-spacing:1.6px}.finale-replay{margin-top:24px;font-size:9px}.finale-signature{font-size:27px}.finale-garden{inset:-80px 0 0}.chapter-map{padding:38px 25px 30px}.chapter-map h2{font-size:46px}.chapter-choice{gap:14px;padding:12px 0}.chapter-choice b{font-size:22px}.chapter-choice small{font-size:8px}.chapter-map .eyebrow{font-size:6px}.map-note{font-size:18px}}
@media(max-height:740px) and (min-width:701px){.masthead{height:77px}.scene{min-height:calc(100svh - 77px);padding-top:15px;padding-bottom:105px}.invitation.active{min-height:calc(100svh - 77px);padding-top:5px}.invitation h1{font-size:67px;margin:18px 0}.invitation-prose{font-size:12px;line-height:1.75}.countdown{margin:19px 0;padding:12px 0}.countdown-numbers b{font-size:29px}.invitation .button{padding:14px 22px}.invitation .handnote{font-size:23px;margin-top:13px}.cover-art{top:-77px}.museum h2,.bouquet h2{font-size:57px}.museum-controls{margin:21px 0}.museum-wall-label p{font-size:20px}.wish-constellation{height:280px;margin-top:5px}.wishes h2{font-size:62px;margin:13px 0}.wishes-top>p{font-size:11px}.wishes-bottom{margin-top:0}.wish-reading>p{font-size:23px}.wish-cat{width:95px}.cinema h2{font-size:55px;margin:12px 0}.cinema-layout{margin-top:23px}.cinema-screen{max-height:330px}.film-choices button{padding:12px 0}.cinema-ticket{margin-top:20px;min-height:100px}.cinema-footnote{font-size:21px;margin-top:18px}.letters h2{font-size:62px;margin:13px 0 17px}.letter-shelf{margin:32px 0 25px}.finale-before h2{font-size:62px;margin:17px 0}.wish-lantern{height:200px;margin:15px auto 10px;transform:scale(.9)}.birthday-name{font-size:170px;margin:12px 0 20px}.birthday-to{font-size:29px;margin-top:20px}.finale-love{font-size:31px;margin-bottom:17px}.finale-blessing{font-size:21px}.finale-replay{margin-top:20px}.finale-signature{margin-top:13px}.finale-after{padding-top:10px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.cover-painting{transform:none;will-change:auto}.paper-star{translate:none;rotate:none}.grown-stem{stroke-dashoffset:0}.sky-lantern{opacity:.5;bottom:auto;top:var(--static-top);scale:.7}.birthday-petal{display:none}.tiny-burst{display:none}.scene.active{transform:none}.finale.released .finale-before{transform:none}}

/* Orient the source art on a fixed wrapper; animate only its camera scale. */
.cinema-picture{position:absolute;inset:0}.cinema-picture>img{display:block;width:100%;height:100%;object-fit:cover;filter:brightness(.7) saturate(.75);transform:scale(1.04);transition:filter 1s,transform 9s}.cinema-screen.playing .cinema-picture>img{filter:brightness(.45) saturate(.85);transform:scale(1.13)}.cinema-screen[data-film="1"] .cinema-picture{inset:auto;left:50%;top:50%;width:64.516%;height:155%;transform:translate(-50%,-50%) rotate(-90deg)}.cinema-screen[data-film="2"] .cinema-picture>img{object-position:50% 30%}
@media(max-width:700px){.cinema-screen[data-film="1"] .cinema-picture{width:71.429%;height:140%}}

/* Keep the countdown and invitation within the first phone screen. */
@media(max-width:700px){.cover-art{height:205px}.cover-date{font-size:130px;top:18px}.cover-date>span{margin-top:12px}.cover-bird{width:82px;top:48%}.bird-b{width:68px;top:40%}.art-corner-note{font-size:23px;bottom:12px}.invitation h1{font-size:clamp(38px,10.6vw,48px);line-height:1;letter-spacing:-1.5px;margin:16px 0 18px}.invitation-prose{font-size:11px;line-height:1.8}.countdown{margin:18px 0;padding:12px 0}.invitation .handnote{font-size:24px;margin-top:15px}}
@media(max-width:350px){.cover-art{height:180px}.cover-date{font-size:114px}.invitation h1{font-size:37px}.countdown-numbers{gap:11px}.countdown-numbers>span{min-width:38px}}
