@font-face{font-family:Cormorant;src:url('assets/cormorant-garamond.ttf') format('truetype');font-weight:300 700;font-display:swap}
@font-face{font-family:Manrope;src:url('assets/manrope.ttf') format('truetype');font-weight:200 800;font-display:swap}
@font-face{font-family:'NT Valentino';src:url('assets/nt-valentino-regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'NT Valentino';src:url('assets/nt-valentino-italic.woff2') format('woff2');font-weight:400;font-style:italic;font-display:swap}
:root{--bg:#3a271e;--ivory:#fbf7f0;--ivory-soft:#dcc9ad;--ink:#3b2a20;--ink-soft:#7a6352;--brass:#c9a77e;--paper:#ece4d3;--ease:cubic-bezier(.22,.68,.15,1);--env-w:min(76vw,480px);--env-h:calc(var(--env-w)*.68);--unfold-scale:.8}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden}body{font-family:Manrope,sans-serif;color:var(--ivory);background:var(--bg)}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer;border:0;background:none}button:focus-visible,a:focus-visible{outline:2px solid var(--brass);outline-offset:5px}a{color:inherit}[hidden]{display:none!important}
/* A dark chocolate table under a soft lamp: the paper pieces carry the light. */
.ambient{position:fixed;inset:0;background:radial-gradient(ellipse 75% 65% at 50% 52%,#563a2c 0%,#3c291f 55%,#24170f 100%)}.ambient::after{content:'';position:absolute;inset:0;opacity:.09;mix-blend-mode:soft-light;background:url('assets/linen.svg')}
.header{position:fixed;top:26px;left:5%;right:5%;height:44px;display:flex;align-items:center;gap:30px;z-index:25}.brand{font:30px Cormorant,serif;letter-spacing:-2px;text-decoration:none;color:var(--ivory)}.brand span{font-style:italic;color:var(--brass);margin:0 3px}.header #replay{font-size:12px;letter-spacing:.04em;color:var(--ivory-soft);border-bottom:1px solid #fbf7f033;padding:6px 0}.header #replay:hover{color:var(--ivory)}
main{position:fixed;inset:0}.intro{position:absolute;left:0;top:13%;width:100%;text-align:center;transition:opacity .6s,transform .9s var(--ease)}.intro h1{font:400 clamp(46px,6vw,80px)/1 'NT Valentino',serif;margin:0;color:var(--ivory)}.intro h1 em{font-style:italic;font-size:.78em;color:var(--brass);margin:0 .06em}.intro-date{font:italic 21px/1.3 Cormorant,serif;color:var(--ivory-soft);margin:16px 0 0}.intro-date span{color:var(--brass);margin:0 6px}
.scene{position:absolute;left:50%;top:56%;width:var(--env-w);height:var(--env-h);transform:translate(-50%,-50%);perspective:2000px;transition:top 1.1s var(--ease),opacity .8s}
.envelope{position:relative;width:100%;height:100%;transform:rotate(-3deg);transform-style:preserve-3d;transition:transform 1.5s var(--ease)}
.paper-ivory,.fold-face,.fold-inside{background-color:var(--paper);background-image:linear-gradient(#f4eddda3,#f4eddda3),url('assets/ivory-paper.webp');background-size:cover;background-position:center}
.envelope-base{position:absolute;inset:0;border:1px solid #d6c9ad;box-shadow:0 2px 3px #0000004d,0 34px 60px -22px #000000b3,inset 0 0 30px #9c825530;border-radius:2px}
.photo-home{position:absolute;inset:4% auto auto 50%;width:42%;height:92%;transform:translateX(-50%);z-index:1}
.photo-card{position:relative;width:100%;height:100%;overflow:visible;transform-origin:0 0;isolation:isolate}
.photo-card::before,.photo-card::after{content:'';position:absolute;inset:2px;background:linear-gradient(#f2ece0e6,#eae2d5e6),url('assets/ivory-paper.webp') center/cover;border:1px solid #d3cbbb;box-shadow:1px 3px 2px #49382724;pointer-events:none;z-index:-1}
.photo-card::before{transform:rotate(-3.5deg) translate(-4px,6px)}.photo-card::after{transform:rotate(2.7deg) translate(3px,4px)}
.photo-print{--print-tilt:-1.4deg;position:absolute;inset:0;margin:0;padding:3.5% 3.5% 13%;opacity:0;background:linear-gradient(#f8f4ebe8,#f3eee2e8),url('assets/ivory-paper.webp') center/cover;border:1px solid #d8d0be;border-radius:1px 2px 2px 1px;box-shadow:inset 0 0 0 1px #fffdf3,0 1px 0 #b9ad96,0 2px 0 #e9dfcd,1px 4px 4px #3c29152b,3px 18px 26px -12px #3c29154f;transform:rotate(var(--print-tilt));transform-origin:50% 76%;will-change:transform;pointer-events:none}
.photo-print::before{content:'';position:absolute;inset:1px;background:linear-gradient(118deg,#ffffff21 2%,transparent 35%,#80684405 68%,#fffefa32);z-index:2;pointer-events:none}
.photo-print::after{content:'';position:absolute;left:4%;right:4%;bottom:-3px;height:12px;border-radius:50%;box-shadow:0 9px 10px #44301b2c;transform:rotate(-1deg);z-index:-1}
.print-light{position:absolute;inset:1px;z-index:4;border-radius:inherit;pointer-events:none;background:linear-gradient(var(--light-direction,115deg),transparent 12%,#fff9e1a6 38%,#fffdfb24 50%,transparent 66%);opacity:0;mix-blend-mode:screen}
.photo-print.active{opacity:1;z-index:3}.photo-print.queued{opacity:1;z-index:1;transform:perspective(1400px) translate3d(0,8px,-3px) rotateZ(var(--queued-tilt,2.2deg)) rotateY(0) rotateX(0) scale(.97)}.photo-print.departing{opacity:1;z-index:5}
.photo-image{display:block;width:100%;height:100%;object-fit:cover;object-position:center;background:#e8dfce;filter:saturate(.84) contrast(.96);box-shadow:0 0 0 1px #8c795628,inset 0 0 8px #58401c16}
.photo-print figcaption{position:absolute;left:5%;right:5%;bottom:3.4%;display:flex;align-items:baseline;justify-content:space-between;font:italic clamp(11px,1.3vw,17px) Cormorant,serif;letter-spacing:.3px;color:#9b8b76;text-shadow:0 1px #fff9ee}.print-number{font:9px Manrope,sans-serif;letter-spacing:1px}.print-caption{display:flex;align-items:baseline;gap:.4em;min-width:0;white-space:nowrap}.print-date{font-variant-numeric:tabular-nums}.print-country::before{content:"·";margin-right:.4em}.photo-print figcaption{gap:8px;font-size:clamp(11px,1.15vw,15px);color:#806e58}.print-number{flex-shrink:0}.photo-home figcaption{font-size:6px}.photo-home .print-number{font-size:5px}
.fold{position:absolute;z-index:3;transform-style:preserve-3d;transition:transform 1.25s cubic-bezier(.32,.06,.18,1);filter:drop-shadow(0 2px 2px #66533c66)}.fold-face,.fold-inside{position:absolute;inset:0;backface-visibility:hidden;clip-path:var(--fold-shape)}.fold-face::after,.fold-inside::after{content:'';position:absolute;inset:0;background:var(--fold-light)}.fold-inside{filter:brightness(.96)}
.fold-top{inset:0 0 auto;height:61%;transform-origin:50% 0;z-index:6;--fold-shape:polygon(0 0,100% 0,51% 100%,49% 100%);--fold-light:linear-gradient(180deg,#fff9e944,transparent 70%,#78624618)}
.fold-bottom{inset:auto 0 0;height:61%;transform-origin:50% 100%;z-index:5;--fold-shape:polygon(0 100%,100% 100%,51% 0,49% 0);--fold-light:linear-gradient(0deg,#fff9e926,transparent 60%,#8a765b19)}
.fold-left{inset:0 auto 0 0;width:58%;transform-origin:0 50%;--fold-shape:polygon(0 0,100% 49%,100% 51%,0 100%);--fold-light:linear-gradient(90deg,#fff8e930,#83705813)}
.fold-right{inset:0 0 0 auto;width:58%;transform-origin:100% 50%;z-index:4;--fold-shape:polygon(100% 0,0 49%,0 51%,100% 100%);--fold-light:linear-gradient(270deg,#fff8e92e,#83705813)}
.fold-top .fold-inside,.fold-bottom .fold-inside{transform:rotateX(180deg)}.fold-left .fold-inside,.fold-right .fold-inside{transform:rotateY(180deg)}
.seal{position:absolute;left:50%;top:53%;z-index:8;width:88px;height:88px;transform:translate(-50%,-50%);background:url('assets/wax-seal.webp') center/contain no-repeat;filter:hue-rotate(-14deg) saturate(.8) brightness(.45) contrast(1.25) drop-shadow(1px 5px 3px #2a170c80);transition:opacity .5s,translate .6s,scale .6s,rotate .6s}.seal>span{display:block;font:27px Cormorant,serif;color:#fffcee;opacity:.95;text-shadow:0 -1px 1px #0000008c,0 1px 0 #ffffff26;letter-spacing:-2px}.seal em{font-style:italic;font-size:19px;margin:0 2px}.seal:hover{scale:1.04}.envelope-inscription{position:absolute;z-index:7;left:0;right:0;bottom:11%;font:italic 24px 'NT Valentino',serif;text-align:center;color:#9c8d70;text-shadow:0 1px 0 #fffaf0;transition:opacity .4s}
.envelope-address{position:absolute;left:18%;right:18%;bottom:8%;text-align:center;color:#67513a;text-shadow:0 .5px 0 #fff8df99;pointer-events:none;transform:rotate(-1deg)}
.envelope-address-label{display:block;font:500 clamp(6px,calc(var(--env-w)*.018),8px)/1.3 Manrope,sans-serif;letter-spacing:.17em;text-transform:uppercase;margin-bottom:7px;opacity:.72}
.envelope-recipient{display:block;font:italic clamp(16px,calc(var(--env-w)*.054),26px)/1.08 'NT Valentino',serif;overflow-wrap:anywhere;text-wrap:balance}.long-address .envelope-recipient{font-size:clamp(11px,calc(var(--env-w)*.036),18px)}
.envelope-postmark{position:absolute;z-index:7;transition:opacity .4s;right:21%;top:5%;width:14%;height:auto;transform:rotate(13deg);color:#80694e;opacity:.48;mix-blend-mode:multiply;pointer-events:none}
.open-hint{position:absolute;top:calc(56% + var(--env-h)/2 + 40px);left:50%;transform:translateX(-50%);font:italic 22px Cormorant,serif;color:var(--ivory);white-space:nowrap;transition:opacity .4s}.open-hint span{display:block;margin-top:8px;font:500 10px Manrope,sans-serif;font-style:normal;letter-spacing:.18em;text-transform:uppercase;color:var(--ivory-soft);opacity:.75}.open-hint:hover{color:#fff}
.opening .intro,.film-active .intro,.opened .intro,.opening .open-hint,.film-active .open-hint,.opened .open-hint{opacity:0;pointer-events:none}.opening .intro{transform:translateY(-12px)}.opening .scene{top:50%}.opening .envelope{transform:rotate(0deg) scale(var(--unfold-scale))}.opening .seal{opacity:0;translate:0 -20px;scale:.9;rotate:9deg;pointer-events:none}.opening .envelope-inscription{opacity:0}.unfold-top .fold-top{transform:rotateX(180deg)}.unfold-sides .fold-left{transform:rotateY(-180deg)}.unfold-sides .fold-right{transform:rotateY(180deg)}.unfold-bottom .fold-bottom{transform:rotateX(-180deg)}.envelope-gone .scene{opacity:0;pointer-events:none}
.film{position:fixed;inset:0;z-index:10;pointer-events:none}.film-heading{position:absolute;top:88px;left:50%;transform:translateX(-50%);font:16px Cormorant,serif;letter-spacing:.08em;color:var(--ivory-soft);font-variant-numeric:tabular-nums;opacity:0;transition:opacity .8s}.film-ready .film-heading{opacity:1}
.film-frame{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:min(calc(100svh - 235px),calc(68vw * 1.5));width:min(calc((100svh - 235px)*.667),68vw)}
.film-controls{position:absolute;bottom:74px;left:50%;width:min(76vw,560px);transform:translateX(-50%);display:flex;justify-content:space-between;align-items:center;gap:20px;pointer-events:auto;font-size:12px;letter-spacing:.03em;color:var(--ivory-soft)}.film-controls button{padding:10px 0;white-space:nowrap}.film-controls button:hover{color:var(--ivory)}.film-controls #playback-note{font:italic 15px/1.15 Cormorant,serif;letter-spacing:0;text-align:center;max-width:240px}.film-controls{height:38px}
.film-progress{position:absolute;bottom:62px;left:50%;transform:translateX(-50%);display:flex;gap:4px;width:min(76vw,420px)}.film-progress i{height:2px;flex:1;min-width:0;background:#fbf7f021}.film-progress i.current,.film-progress i.done{background:#fbf7f0a6}.sample-note{position:absolute;bottom:30px;left:0;right:0;margin:0;text-align:center;font:italic 13px Cormorant,serif;color:var(--ivory-soft);opacity:.6}
.background-player{position:fixed;left:-400px;top:0;width:240px;height:200px;overflow:hidden;pointer-events:none}.background-player iframe{width:240px;height:200px;border:0}
.music-tools{position:fixed;right:5%;top:36px;z-index:30;display:flex;align-items:center;gap:20px;font-size:12px;letter-spacing:.03em;color:var(--ivory-soft)}.music-tools button{padding:6px 0;border-bottom:1px solid #fbf7f033}.music-tools button:hover{color:var(--ivory)}.music-tools #sound-toggle{display:flex;align-items:center;gap:10px;border:0}.sound-waves{display:flex;align-items:center;gap:2px;height:15px}.sound-waves i{display:block;width:2px;height:11px;background:var(--brass);animation:sound-wave 1s ease-in-out infinite alternate}.sound-waves i:nth-child(2){height:15px;animation-delay:-.4s}.sound-waves i:nth-child(3){height:8px;animation-delay:-.7s}.sound-waves i:nth-child(4){height:12px;animation-delay:-.2s}.music-tools.muted .sound-waves i,.music-tools.paused .sound-waves i{animation:none;height:3px}
@keyframes sound-wave{to{transform:scaleY(.35)}}
.invitation-stage{position:fixed;inset:75px 20px 40px;display:grid;place-items:center;z-index:15}.invitation{position:relative;width:min(440px,calc(100vw - 44px));height:580px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:44px 40px;color:var(--ink);border:1px solid #d6c9ad;box-shadow:inset 0 0 0 1px #fffaf0aa,inset 0 0 40px #9c82552e,0 2px 3px #0000004d,0 40px 80px -30px #000000cc;transform-origin:center}
.card-kicker{font:italic 19px Cormorant,serif;color:var(--ink-soft);margin:0}.names{display:flex;flex-direction:column;align-items:center;font:400 68px/.95 'NT Valentino',serif;margin:20px 0 22px}.names i{font:italic 42px/1 'NT Valentino',serif;color:var(--brass);margin:2px 0 4px}.card-message{font:18px/1.45 Cormorant,serif;margin:0 0 26px}
.card-facts{display:grid;grid-template-columns:1fr 1fr;width:100%;margin:0;padding:16px 0;border-top:1px solid #3b2a2026;border-bottom:1px solid #3b2a2026}.card-facts div+div{border-left:1px solid #3b2a2026}.card-facts dt{font-size:10px;font-weight:500;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:7px}.card-facts dd{font:18px/1.3 Cormorant,serif;margin:0}
.date-note{font:italic 15px Cormorant,serif;margin:18px 0 22px;color:var(--ink-soft)}.details-button{font-size:11px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--ivory);background:var(--ink);padding:14px 24px;border-radius:1px;transition:background .25s}.details-button:hover{background:#56402f}
dialog{color:var(--ink);width:min(540px,calc(100% - 30px));max-height:calc(100svh - 40px);padding:48px;background:linear-gradient(#f4edddc4,#f4edddc4),url('assets/ivory-paper.webp') center/cover;border:1px solid #d6c9ad;box-shadow:0 30px 100px #000000a6}dialog::backdrop{background:#1a100bb3;backdrop-filter:blur(6px)}.close{position:absolute;right:18px;top:12px;font-size:28px;color:var(--ink-soft)}.dialog-kicker{font:italic 19px Cormorant,serif;color:var(--ink-soft);margin:0}h2{font:400 44px/1.1 'NT Valentino',serif;margin:10px 0 28px}.detail-row{display:grid;grid-template-columns:80px 1fr;border-top:1px solid #3b2a2026;padding:20px 0;gap:10px}.detail-row>span{font-size:10px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft);padding-top:8px}.detail-row h3{font:400 27px 'NT Valentino',serif;margin:0 0 6px}.detail-row p{font:17px/1.45 Cormorant,serif;margin:0;color:#5a4637}.detail-row a{display:inline-block;font-size:11px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;text-underline-offset:5px;margin-top:12px}.dialog-signature{font:italic 23px Cormorant,serif;text-align:center;margin:18px 0 0}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.noscript{position:fixed;inset:auto 0 0;background:#f3eee4;color:var(--ink);padding:25px;z-index:100;text-align:center}
/* Trip decorations: little flags planted on the table beside the prints, and a plane that
   crosses photo 5 on the way to Australia. */
/* Flags sit beneath the prints (a swiping print passes over them); the plane flies above. */
.film .film-frame{z-index:2}.film-controls{z-index:3}.trip{position:absolute;inset:0;pointer-events:none;--flag-scale:1;--plane-scale:1}.trip-plane{position:absolute;z-index:4;left:0;top:0;width:210px;height:56px;margin:-28px 0 0 -105px;opacity:0;scale:var(--plane-scale);filter:drop-shadow(0 8px 6px #1a0e0773);will-change:transform}.trip-plane svg{display:block;width:100%;height:100%}.trip-car{position:absolute;z-index:4;left:0;top:0;width:190px;height:72px;margin:-36px 0 0 -95px;opacity:0;scale:var(--car-scale,1);filter:drop-shadow(0 5px 4px #1a0e0766);will-change:transform}.trip-car svg{display:block;width:100%;height:100%}.trip-rapid{width:204px;margin-left:-102px}.trip-tesla{width:216px;margin-left:-108px}.car-wheel{transform-box:fill-box;transform-origin:center}.trip-car.driving .car-wheel{animation:wheel-spin .42s linear infinite}@keyframes wheel-spin{to{transform:rotate(1turn)}}.trip-puff.exhaust{width:9px;height:9px;margin:-4.5px;background:#d9d2c6}.trip-puff{position:absolute;z-index:4;left:0;top:0;width:14px;height:14px;margin:-7px;border-radius:50%;background:var(--ivory);opacity:0}.trip-flag{--pole:108px;--cloth-w:76px;--cloth-h:38px;position:absolute;z-index:1;left:0;top:0;width:0;height:0;opacity:0;scale:var(--flag-scale);transform-origin:0 0}.trip-flag[data-flag=cz],.trip-flag[data-flag=sk],.trip-flag[data-flag=es]{--cloth-w:63px;--cloth-h:42px}.trip-flag[data-flag=ch]{--cloth-w:42px;--cloth-h:42px}.trip-flag[data-flag=id]{--pole:80px;--cloth-w:45px;--cloth-h:30px}.flag-pole{position:absolute;left:-2px;bottom:0;width:4px;height:var(--pole);border-radius:2px;background:linear-gradient(90deg,#f1e3c9,#b68f63 60%,#7d5a3c);box-shadow:0 0 0 .5px #2a170c40}.flag-pole::before{content:'';position:absolute;left:-2.5px;top:-6px;width:9px;height:9px;border-radius:50%;background:#e6cfa7;box-shadow:inset -1px -1px 1px #8d6a46}.flag-cloth{position:absolute;left:1.5px;bottom:calc(var(--pole) - var(--cloth-h) - 3px);width:var(--cloth-w);height:var(--cloth-h);transform-origin:0 50%;filter:drop-shadow(0 3px 3px #1a0e0759)}.flag-cloth svg{display:block;width:100%;height:100%;border-radius:1px}.flag-cloth::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,#fff0 0%,#ffffff2e 30%,#0000 50%,#00000026 75%,#fff0);mix-blend-mode:soft-light}.trip-flag.waving .flag-cloth{animation:flag-wave 1.9s ease-in-out infinite}.trip-flag[data-flag=sk].waving .flag-cloth{animation-delay:-.7s}.flag-shadow{position:absolute;left:-15px;top:-5px;width:32px;height:10px;border-radius:50%;background:radial-gradient(#140a0480,#140a0400 70%)}@keyframes flag-wave{0%,100%{transform:skewY(2deg) scaleX(1)}50%{transform:skewY(-3deg) scaleX(.92)}}
@media(max-width:700px){:root{--env-w:min(82vw,420px)}.header{top:20px;left:6%;right:6%;gap:20px}.brand{font-size:27px}.intro{top:14%}.intro h1{font-size:clamp(40px,11vw,52px)}.intro-date{font-size:18px;margin-top:12px}.scene{top:54%}.open-hint{top:calc(54% + var(--env-h)/2 + 34px);font-size:20px}.seal{width:70px;height:70px}.seal>span{font-size:23px}.film-frame{height:min(calc(100svh - 245px),calc((100vw - 74px)*1.5));width:min(calc((100svh - 245px)*.667),calc(100vw - 74px))}.film-heading{top:84px;font-size:15px}.film-controls{bottom:64px;width:88%;gap:12px;font-size:11px}.film-controls #playback-note{font-size:13px;max-width:150px}.film-progress{bottom:54px;width:88%}.sample-note{bottom:22px;font-size:12px}.photo-print figcaption{font-size:14px}.print-number{font-size:8px}.music-tools{top:30px;right:6%;gap:12px;font-size:11px;max-width:62%;flex-wrap:wrap;justify-content:flex-end}.music-tools #sound-toggle{gap:7px}.header #replay{position:fixed;left:6%;bottom:12px}.invitation-stage{inset:70px 12px 44px}.invitation{padding:40px 24px}.names{font-size:60px}dialog{padding:40px 24px}.detail-row{grid-template-columns:62px 1fr}h2{font-size:38px}}
@media(max-width:360px){.names{font-size:50px}.card-message{font-size:16px}.card-facts dd{font-size:16px}.intro h1{font-size:38px}.photo-print figcaption{font-size:12px}.print-number{font-size:7px}}
@media(max-height:600px) and (min-width:701px){:root{--env-w:340px}.intro{top:9%}.intro h1{font-size:44px}.intro-date{font-size:17px;margin-top:8px}.scene{top:57%}.film-frame{height:calc(100svh - 190px);width:calc((100svh - 190px)*.667)}.film-heading{top:66px}.film-controls{bottom:40px;width:65vw}.film-progress{bottom:32px}.sample-note{bottom:6px}.open-hint{top:calc(57% + var(--env-h)/2 + 22px);font-size:18px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}.photo-print.active{transform:none}}
.resetting *{transition:none!important;animation:none!important}

.seal:focus-visible{border-radius:50%;outline-offset:5px}

.opening .envelope-postmark{opacity:0}.envelope-address{z-index:7;transition:opacity .4s}
/* Little moments: the seal breaking, creatures on the table, and the eclipse proposal. */
.seal-break{position:fixed;z-index:30;pointer-events:none}.seal-break .seal-half{position:absolute;inset:0;left:0;top:0;width:100%;height:100%;display:grid;place-items:center;text-align:center;transform:none;transition:none;opacity:1;translate:none;scale:none;rotate:none}.seal-crumb{position:absolute;left:50%;top:50%;border-radius:45% 55% 40% 60%;background:#3a2117;box-shadow:inset 1px 1px 0 #6b4330}
/* Eclipse darkness falls over the table, prints and flags; only the eclipse and the couple stay lit. */
.eclipse-dim{position:absolute;inset:0;z-index:3;pointer-events:none;opacity:0;background:radial-gradient(circle at var(--dim-x,75%) var(--dim-y,25%),#0a050300 0,#0a05032e 36px,#0a0503c7 150px,#050201f0 420px)}
.moment{position:absolute;left:0;top:0;pointer-events:none;opacity:0}.moment svg{display:block;width:100%;height:100%;overflow:visible}
.moment-kangaroo{z-index:4;width:74px;height:60px;margin:-59px 0 0 -37px;filter:drop-shadow(0 3px 2px #1a0e0759)}
.moment-boat{z-index:4;width:96px;height:72px;margin:-66px 0 0 -48px;filter:drop-shadow(0 3px 2px #1a0e0740)}
.moment-hobbit{z-index:1;width:120px;height:80px;margin-top:-80px;transform-origin:0 100%;scale:var(--moment-scale,1);filter:drop-shadow(0 4px 4px #1a0e0773)}
.hobbit-door{transform-box:fill-box;transform-origin:0 50%;transition:transform 1s cubic-bezier(.3,.7,.3,1)}.moment-hobbit.open .hobbit-door{transform:scaleX(.16) skewY(5deg)}
.hobbit-light,.hobbit-lamp{transition:filter 1s}.moment-hobbit.open .hobbit-light,.moment-hobbit.open .hobbit-lamp{filter:drop-shadow(0 0 7px #ffcf73)}
.moment-proposal{z-index:5;width:110px;height:200px;transform-origin:0 0;scale:var(--moment-scale,1)}
.eclipse{position:absolute;left:50%;top:44px;width:0;height:0}
.eclipse-sun{position:absolute;left:-23px;top:-23px;width:46px;height:46px;border-radius:50%;background:radial-gradient(circle,#fff8e6 0 50%,#ffd27a 60%,#ff9a3c 68%,#ff7a2a00 74%);box-shadow:0 0 18px 6px #ffb34766,0 0 60px 22px #ff8a3a33;opacity:0}
.eclipse-moon{position:absolute;left:-19px;top:-19px;width:38px;height:38px;border-radius:50%;background:radial-gradient(circle at 40% 38%,#1c120d,#070302);opacity:0}
.eclipse-diamond{position:absolute;left:15px;top:-15px;width:8px;height:8px;margin:-4px;border-radius:50%;background:#fff;box-shadow:0 0 8px 3px #fff,0 0 22px 9px #ffe4a8;opacity:0}
.couple{position:absolute;left:-5px;bottom:0;width:120px;height:100px;opacity:0;filter:drop-shadow(-1.2px -1px 0 #ffb06aa6)}
.couple g,.couple path{transform-box:fill-box}.couple .him-kneeling,.couple .her-arms-up,.couple .heart{opacity:0}.couple .ring-glint{transform-origin:center;opacity:0}.couple .heart{transform-origin:center}
.proposal-on #photo-number{opacity:0;transition:opacity .5s}
/* Eclipse darkness: one --eclipse value (0–1, animated in app.js) darkens the table, the
   paper frames and stack, captions and flags. The photographs themselves stay lit. */
.eclipse-dim{z-index:0;opacity:var(--eclipse,0)}
.photo-print{background:linear-gradient(rgb(6 3 2/calc(var(--eclipse,0)*.9)),rgb(6 3 2/calc(var(--eclipse,0)*.9))),linear-gradient(#f8f4ebe8,#f3eee2e8),url('assets/ivory-paper.webp') center/cover}
.photo-card::before,.photo-card::after{filter:brightness(calc(1 - var(--eclipse,0)*.88))}
.photo-print figcaption{opacity:calc(1 - var(--eclipse,0)*.85)}
.trip-flag{filter:brightness(calc(1 - var(--eclipse,0)*.85))}
.photo-print{border-color:color-mix(in srgb,#d8d0be,#060302 calc(var(--eclipse,0)*90%));box-shadow:inset 0 0 0 1px color-mix(in srgb,#fffdf3,#060302 calc(var(--eclipse,0)*90%)),0 1px 0 color-mix(in srgb,#b9ad96,#060302 calc(var(--eclipse,0)*90%)),0 2px 0 color-mix(in srgb,#e9dfcd,#060302 calc(var(--eclipse,0)*90%)),1px 4px 4px #3c29152b,3px 18px 26px -12px #3c29154f}
