[hidden]{display:none!important}
.station-nav-track{justify-content:center}.station-link{min-width:100px}.station-link small{font-size:12px}.station-link.is-complete:after{display:none}.station{padding-top:60px}.station-head{gap:50px;grid-template-columns:1fr 1fr}.station-title{position:static}.station h2{font-size:clamp(38px,4vw,62px)}.photo-card img{opacity:1}.photo-card:after{display:none}.station-scene{max-width:1000px;margin:85px auto 15px;text-align:center;scroll-margin-top:200px}.scene-heading h3{font:36px/1.4 var(--serif);margin:0 0 12px}.scene-heading p{color:var(--ink-soft);font-size:17px;margin:0 0 38px}.gesture{font-size:13px;color:var(--ink-soft);margin:18px 0}.scene-heading{transition:opacity .5s}.resolved .gesture{opacity:0}.station-scene button{cursor:pointer}.station-scene button:disabled{cursor:default}
.film-strip{display:flex;gap:22px;padding:30px 25px;background:#283730;overflow:hidden;border-top:14px dotted var(--paper);border-bottom:14px dotted var(--paper)}.film-strip figure{width:33.33%;margin:0;opacity:.1;transform:translateY(24px);transition:opacity 1.2s,transform 1.2s}.film-strip img{width:100%;height:230px;object-fit:cover}.film-strip figcaption{font-size:11px;color:#e4d8bb;letter-spacing:.15em;margin-top:12px}.playing .film-strip figure{opacity:1;transform:none}.playing .film-strip figure:nth-child(2){transition-delay:1.5s}.playing .film-strip figure:nth-child(3){transition-delay:3s}
.picture-puzzle{width:420px;height:320px;display:grid;grid-template-columns:1fr 1fr;margin:auto;gap:5px;padding:8px;background:#e3d6be;transition:gap .8s,padding .8s}.picture-puzzle button{border:0;background-size:200% 200%;transition:filter .3s}.picture-puzzle button.selected{outline:4px solid #b68b45;outline-offset:-4px;filter:brightness(1.2)}.picture-puzzle.solved{gap:0;padding:0;box-shadow:0 15px 40px #173f3520}
.wind-scene{position:relative;overflow:hidden;height:340px;width:780px;margin:auto;border-radius:160px 160px 4px 4px}.wind-scene img{width:100%;height:100%;object-fit:cover;filter:brightness(.75)}.wind-scene>span{position:absolute;bottom:30px;left:0;right:0;font:26px var(--serif);color:white}.wind-lines{position:absolute;inset:0;overflow:hidden}.wind-lines i{position:absolute;width:200px;height:35px;border-top:2px solid #fff9;border-radius:50%;left:-210px;top:25%}.wind-lines i:nth-child(2){top:50%;animation-delay:1.5s!important;width:280px}.wind-lines i:nth-child(3){top:70%;animation-delay:3s!important}.playing .wind-lines i{animation:breeze 4s linear infinite}@keyframes breeze{to{transform:translateX(1100px)}}
.sunset-scene{position:relative;height:340px;background:#cbd6cc;overflow:hidden;border-radius:180px 180px 4px 4px;transition:background 6s}.playing .sunset-scene{background:#e9b88d}.sun{position:absolute;width:90px;height:90px;border-radius:50%;background:#fff1c5;left:calc(50% - 45px);top:30px;transition:transform 7s linear}.playing .sun{transform:translateY(140px)}.sea{position:absolute;top:57%;bottom:0;left:0;right:0;background:repeating-linear-gradient(178deg,#477f80 0 20px,#6c9c9722 21px 23px),#80aaa1}.sunset-scene>span{position:absolute;bottom:30px;left:0;right:0;letter-spacing:.2em;color:white;font-size:13px}.little-boat{position:absolute;top:57%;left:15%;font-size:40px;font-style:normal}.playing .little-boat{animation:sailing 9s ease-in-out forwards}@keyframes sailing{to{transform:translateX(470px)}}
.receipt-scene{height:370px;overflow:hidden;max-width:420px;margin:auto;border-top:10px solid #173f35}.receipt-paper{background:#fffdf8;padding:26px 35px;transform:translateY(-105%);text-align:left;border-bottom:8px dotted var(--paper)}.playing .receipt-paper{animation:printing 5s ease forwards}.receipt-paper small{letter-spacing:.2em}.receipt-paper h3{font:26px var(--serif);margin:12px 0 22px}.receipt-paper p{display:flex;justify-content:space-between;border-bottom:1px dashed #c6bca8;padding-bottom:7px;font-size:15px}.receipt-paper b{font-size:15px}.barcode{height:28px;margin-top:24px;background:repeating-linear-gradient(90deg,#173f35 0 2px,transparent 2px 6px,#173f35 6px 7px,transparent 7px 11px)}@keyframes printing{to{transform:none}}
.wall-scene{position:relative;background:#e4e1d3;height:340px;border-bottom:3px solid #b68b45}.wall-scene svg{width:100%;height:285px}.mountain{fill:#b4bba8}.wall-path{fill:none;stroke:#8d3e43;stroke-width:8;stroke-linejoin:round;stroke-dasharray:1200;stroke-dashoffset:1200}.playing .wall-path{animation:trace-wall 6s linear forwards}.wall-scene span{font:19px var(--serif)}@keyframes trace-wall{to{stroke-dashoffset:0}}
.postcard{position:relative;display:block;width:540px;height:330px;margin:auto;perspective:1200px;border:0;background:none;padding:0}.postcard>span{position:absolute;inset:0;backface-visibility:hidden;transition:transform 1s;box-shadow:0 12px 35px #173f3520}.postcard-front{transform:rotateY(0);background:#fffdf8;padding:14px}.postcard-front img{width:100%;height:255px;object-fit:cover}.postcard-front b{display:block;padding-top:9px;font-size:13px;letter-spacing:.2em}.postcard-back{transform:rotateY(-180deg);background:#fffaf0;display:flex;flex-direction:column;justify-content:center;gap:22px;padding:40px;border:1px solid #cabb9f}.postcard-back b{font:30px/1.7 var(--serif)}.postcard-back small,.postcard-back i{color:var(--wine);font-style:normal}.postcard.turned .postcard-front{transform:rotateY(180deg)}.postcard.turned .postcard-back{transform:rotateY(0)}
.love-scene{padding:35px;background:#e9dfd2}.love-slots{font:65px/1.6 var(--serif);letter-spacing:.12em;color:var(--wine);min-height:110px}.letter-tiles{display:flex;justify-content:center;gap:14px}.letter-tiles button{border:1px solid #b5a58a;background:#fffaf0;color:var(--green);width:65px;height:75px;font:32px var(--serif);box-shadow:0 4px 0 #c7b99f}.letter-tiles button:disabled{opacity:.2;transform:translateY(4px);box-shadow:none}
.coast-window{position:relative;width:680px;height:330px;margin:auto;overflow:hidden;border:16px solid #30483f;border-radius:85px;background:#30483f}.coast-window img{width:100%;height:100%;object-fit:cover}.window-shade{position:absolute;inset:0;background:repeating-linear-gradient(#e4d8c1 0 15px,#d1c3aa 15px 17px);border-bottom:12px solid #b7a37f;transform:translateY(0)}.coast-window>span{position:absolute;bottom:20px;left:0;right:0;color:white;text-shadow:0 1px 5px #000;font:24px var(--serif);pointer-events:none;opacity:0}.resolved .coast-window>span{opacity:1;transition:opacity 1s}.window-slider{display:block;width:380px;margin:28px auto 0;accent-color:var(--green)}
.calendar-scene{position:relative;height:350px;width:280px;margin:auto;perspective:900px}.calendar-page{position:absolute;inset:0;background:#fff9ec;box-shadow:0 14px 35px #28373020;border-top:20px solid var(--wine);display:flex;flex-direction:column;align-items:center;padding:22px}.calendar-page small{letter-spacing:.22em;color:var(--wine);font-size:13px}.calendar-page b{font:155px/1.45 var(--serif);color:var(--green)}.calendar-page span{font-size:12px;letter-spacing:.15em}.calendar-page.old{z-index:2;transform-origin:top}.playing .calendar-page.old{animation:calendar-flip 2s 2s forwards}@keyframes calendar-flip{to{transform:rotateX(-130deg);opacity:0}}
.journey-transition{position:fixed;z-index:90;inset:0;background:#f4efe4f5;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden}.transition-seal{width:180px;height:180px;border:5px double var(--wine);color:var(--wine);border-radius:50%;display:grid;place-items:center;text-align:center;padding:28px;font:27px/1.5 var(--serif);transform:rotate(-12deg);animation:seal-land .65s both}.transition-name{font:25px var(--serif);margin:35px 0;opacity:0;animation:appear .6s .6s forwards}.passing-track{width:340px;border-bottom:1px solid #8d3e4340;position:relative;height:22px;overflow:hidden}.passing-track i{position:absolute;left:-50px;width:45px;height:18px;background:var(--green);border-radius:4px 14px 0 0;animation:passing 2s linear infinite}.curtain{position:absolute;top:0;bottom:0;width:51%;background:#173f35;transition:transform .75s ease}.curtain.left{left:0;transform:translateX(-101%)}.curtain.right{right:0;transform:translateX(101%)}.closing .curtain{transform:translateX(0)}.opening .curtain.left{transform:translateX(-101%)}.opening .curtain.right{transform:translateX(101%)}.opening{background:transparent}.opening .transition-seal,.opening .transition-name,.opening .passing-track{visibility:hidden}@keyframes seal-land{from{opacity:0;transform:scale(2) rotate(-20deg)}to{opacity:1;transform:scale(1) rotate(-12deg)}}@keyframes passing{to{transform:translateX(410px)}}@keyframes appear{to{opacity:1}}
.birthday-arrived .hero,.birthday-arrived .station-nav{display:none}#finale{display:block;position:relative;min-height:calc(100vh - 72px);padding:65px 8vw 85px;background:radial-gradient(ellipse at 48% 35%,#315947,#102a24 72%);color:#f5e8cf;overflow:hidden}.birthday-intro{text-align:center;position:relative;z-index:1}.birthday-intro>p:first-child{color:#d6b775;letter-spacing:.3em;font-size:13px}.birthday-intro h2{font:52px/1.4 var(--serif);margin:16px 0}.birthday-intro>p:last-child{font:19px/1.8 var(--serif);color:#e5d6ba}.birthday-table{display:flex;align-items:center;justify-content:center;gap:100px;max-width:1080px;margin:55px auto 25px;position:relative;z-index:1}.cake{position:relative;width:390px;height:330px;flex-shrink:0}.cake-plate{position:absolute;bottom:5px;left:5px;width:380px;height:44px;border-radius:50%;background:#bd9c62;box-shadow:0 9px 0 #927140,0 25px 50px #0005}.cake-layer{position:absolute;left:40px;width:310px;border-radius:0 0 50% 50%;z-index:2}.cake-layer.lower{bottom:30px;height:115px;background:repeating-linear-gradient(#714735 0 25px,#ad7960 25px 31px,#714735 31px 58px);box-shadow:inset -22px 0 35px #412c2c55}.cake-layer.upper{bottom:105px;height:65px;background:#f4dfb5;border-radius:40%;z-index:3}.cake-top{position:absolute;left:40px;bottom:125px;width:310px;height:86px;background:#faeacb;border-radius:50%;z-index:4;box-shadow:inset 0 0 0 12px #edcfa0}.cake-top span{display:block;text-align:center;padding-top:42px;color:#8b5844;font:17px var(--serif);letter-spacing:.22em}.candles{position:absolute;left:135px;bottom:180px;display:flex;gap:14px;z-index:5}.candle{position:relative}.candle b{font:bold 84px var(--serif);color:#ddad62;text-shadow:2px 3px #8b6439,-1px -1px #ffe6ad}.flame{position:absolute;top:-24px;left:calc(50% - 8px);width:17px;height:30px;border-radius:60% 40% 55% 50%;background:linear-gradient(#fff7c8,#ffb34c);box-shadow:0 0 20px #ffc868,0 0 60px #ffc86877;animation:flicker .9s ease-in-out infinite alternate;transform-origin:bottom}.candle:nth-child(2) .flame{animation-delay:.3s}.blown .flame{opacity:0;transform:scale(0);transition:opacity .6s}.smoke{position:absolute;left:50%;top:-10px;width:6px;height:35px;border-radius:50%;background:#e9e4cb66;filter:blur(4px);opacity:0}.blown .smoke{animation:smoke-up 2.5s ease-out both}@keyframes flicker{to{transform:rotate(7deg) scale(.85,1.12)}}@keyframes smoke-up{20%{opacity:.7}to{opacity:0;transform:translate(14px,-75px) scale(3)}}.wish-area{width:370px}.wish-area h3{font:27px var(--serif);margin:0 0 25px}.wish-area textarea{display:block;width:100%;padding:16px;background:#ffffff0c;border:1px solid #cfb57d66;border-radius:4px;font:17px/1.7 var(--sans);color:#fff4dd;resize:vertical}.wish-area textarea::placeholder{color:#c9c2ab}.wish-area .button{margin-top:22px;background:#ecd4a5;color:#183a2f;border:0;min-width:200px}.birthday-stars{position:absolute;inset:0;pointer-events:none}.birthday-stars i{position:absolute;left:var(--x);top:var(--y);width:3px;height:3px;border-radius:50%;background:#eed39a;opacity:.4;animation:twinkle 4s var(--delay) infinite alternate}@keyframes twinkle{to{opacity:.9;transform:scale(1.8)}}.celebrating .birthday-stars i{width:6px;height:12px;border-radius:1px;animation:confetti 5s var(--delay) infinite}@keyframes confetti{from{transform:translateY(-100px) rotate(0);opacity:0}20%{opacity:.8}to{transform:translateY(450px) rotate(360deg);opacity:0}}.birthday-letter{position:relative;max-width:820px;margin:80px auto 0;padding:55px 65px;color:#263b32;background:#fff8e9;box-shadow:0 20px 60px #0003;animation:letter-in 1.2s both}.birthday-small{font-size:11px;letter-spacing:.2em;color:var(--wine)}.birthday-letter h3{font:32px/1.5 var(--serif);margin:20px 0 28px}.birthday-letter p:not(.birthday-small){font:19px/1.9 var(--serif)}.birthday-sign{display:block;color:var(--wine);font:24px var(--serif);margin-top:35px}.relight-button{margin-top:30px;background:transparent;border:1px solid #b6a27d;color:var(--green)}@keyframes letter-in{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:none}}
.picture-puzzle{width:auto;height:340px;aspect-ratio:var(--photo-ratio,3/4)}
.photo-wall{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-flow:row;gap:18px}.photo-card,.photo-card:nth-child(7n + 1),.photo-card:nth-child(11n + 4),.photo-card.is-featured{grid-column:auto;grid-row:auto;aspect-ratio:4/5}.photo-card img{object-fit:contain;background:#e8e0d2}
.photo-wall.album-layout{display:flex;flex-direction:column;gap:64px;max-width:1160px}
.album-row{display:flex;align-items:center;gap:38px;width:100%}
.album-row .album-photo{flex:1 1 0;min-width:0;aspect-ratio:auto!important;background:none;overflow:visible;align-self:center;padding:0;box-shadow:none}
.album-row .album-photo img{display:block;width:100%;height:auto;max-height:510px;object-fit:contain;background:none;box-shadow:0 10px 26px #21362b13}
.album-row .landscape{flex-grow:1.5}
.album-row-1{justify-content:center;padding:0 9%}
.album-row-1 .album-photo{flex:0 1 850px}
.album-row-1 .portrait{flex-basis:390px}
.album-row-2 .album-photo:nth-child(2){margin-top:80px}
.album-row-2.offset-right .album-photo:nth-child(2){margin-top:0}
.album-row-2.offset-right .album-photo:first-child{margin-top:80px}
.album-row-3{gap:28px;padding:0 3%}
.album-row-3 .album-photo:nth-child(2){margin-top:55px}
.album-row-3 .album-photo img{max-height:350px}
.album-style-1 .album-row-1{justify-content:flex-start;padding-left:3%;padding-right:18%}
.album-style-2 .album-row-1.offset-right{justify-content:flex-end;padding-left:18%;padding-right:3%}
.album-style-3 .album-row-2{gap:65px;padding:0 4%}
.album-photo.in-view img{animation:album-arrive 1.1s ease-out both}
@keyframes album-arrive{from{opacity:.35;transform:translateY(22px)}to{opacity:1;transform:none}}
.journey-note{max-width:680px;align-self:center;margin:12px auto;padding:25px 35px;border-left:2px solid #b79862;color:var(--green);font:23px/1.9 var(--serif)}
.playing .sea{animation:sea-shimmer 5s ease-in-out infinite alternate}
@keyframes sea-shimmer{to{background-position:70px 9px;filter:brightness(1.12)}}
.cruise-ship{width:85px;height:25px;background:#fff6dc;border-radius:0 0 28px 25px;border-bottom:7px solid #8d3e43;top:55%;font-size:0}
.cruise-ship b{position:absolute;bottom:25px;left:10px;width:60px;height:20px;background:repeating-linear-gradient(90deg,#fff6dc 0 8px,#567c7a 8px 12px);border:5px solid #fff6dc}
.cruise-ship em{position:absolute;bottom:45px;left:30px;width:13px;height:12px;background:#8d3e43}
.resolved .coast-window img{animation:coast-drift 4.4s ease-out both}
@keyframes coast-drift{to{transform:scale(1.06) translateX(-1%)}}
.resolved .love-slots{animation:love-glow 1.4s ease-in-out both}
@keyframes love-glow{50%{text-shadow:0 0 24px #bc795c88;transform:scale(1.04)}}
.birthday-letter{scroll-margin-top:100px;transform-origin:top center;animation:unfold-letter 1.2s ease-out both}
@keyframes unfold-letter{from{opacity:0;transform:perspective(1000px) rotateX(-12deg) translateY(25px)}to{opacity:1;transform:none}}
.restart-journey{display:block;position:relative;margin:42px 0 0 auto;padding:8px 15px;color:#e5d6ba;background:transparent;border:1px solid #cfb57d55;border-radius:3px;font:13px var(--sans);cursor:pointer}
.restart-journey:hover,.restart-journey:focus-visible{background:#ffffff12;border-color:#cfb57d}
/* Match the scene's visible animation to its departure; no dead time at the end. */
.film-strip figure{transition-duration:.5s}
.playing .film-strip figure:nth-child(2){transition-delay:.5s}
.playing .film-strip figure:nth-child(3){transition-delay:1s}
.film-strip img{object-fit:contain}
.playing .receipt-paper{animation-duration:1.8s}
.playing .wall-path{animation-duration:2.1s}
.sunset-scene{transition-duration:2.3s}
.sun{transition-duration:2.5s}
.playing .little-boat{animation-duration:2.8s}
.transition-seal{animation-duration:.65s}
.transition-name{animation-duration:.6s;animation-delay:.6s;margin:35px 0}
.curtain{transition-duration:.85s}
.resolved .coast-window>span{transition-duration:.2s}
.resolved .coast-window img{animation-duration:.5s}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-delay:0s!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
