:root{color-scheme:dark;--white:#f3efe8;--gold:#e7d7bc;--muted:#b6c0cd}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#04070c;color:var(--white);font-family:Arial,Helvetica,sans-serif}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer;touch-action:manipulation}button:disabled{cursor:wait;opacity:.6}button:focus-visible,a:focus-visible{outline:2px solid var(--gold);outline-offset:6px}a{color:inherit;text-decoration:none}#experience{position:fixed;inset:0;isolation:isolate;overflow:hidden}.fallback,#universe,.vignette{position:absolute;inset:0;width:100%;height:100%}.fallback{object-fit:cover;opacity:.8;transition:opacity .8s}#universe{touch-action:none;cursor:grab}#universe:active{cursor:grabbing}.vignette{pointer-events:none;background:radial-gradient(ellipse at center,transparent 25%,#04070c45 85%,#04070caa 100%);z-index:1}.cover{position:absolute;inset:0;z-index:3;display:flex;flex-direction:column;justify-content:space-between;padding:max(35px,env(safe-area-inset-top)) 5vw max(28px,env(safe-area-inset-bottom));background:linear-gradient(90deg,#04070cba,#04070c66 50%,#04070caa);transition:opacity 1.5s,visibility 1.5s}.cover.leaving{opacity:0;visibility:hidden;pointer-events:none}.cover-top,.cover-bottom{display:flex;justify-content:space-between;align-items:center;gap:20px;font-size:12px;letter-spacing:2.6px;color:#c6cbd2}.cover-top{padding-bottom:22px;border-bottom:1px solid #ffffff22}.cover-center{text-align:center;padding:30px 0}.overline{font-size:12px;letter-spacing:4px;color:var(--gold);line-height:1.8;margin:0 0 22px}h1{font-family:Georgia,'Times New Roman',serif;font-size:clamp(82px,15vw,216px);letter-spacing:-.065em;font-weight:400;line-height:1;margin:0;text-shadow:0 8px 55px #0004}.period{color:var(--gold)}.fine-line{width:40px;height:1px;background:var(--gold);margin:32px auto 24px}.cover-caption{font-family:Georgia,serif;font-style:italic;font-size:clamp(18px,2vw,24px);margin:0;color:#dedcd6}.enter{display:inline-flex;align-items:center;gap:40px;margin-top:38px;padding:15px 25px 15px 29px;background:#ffffff06;border:1px solid #e7d7bc66;border-radius:2px;font-size:14px;letter-spacing:1.5px;transition:background .3s,border .3s}.enter:hover{border-color:var(--gold);background:#ffffff15}.button-star{font-size:18px;color:var(--gold)}#load-note{font-size:14px;margin:10px auto 0;color:var(--muted);max-width:340px;min-height:20px}.cover-bottom{padding-top:22px;border-top:1px solid #ffffff22}.date{font-family:Georgia,serif;font-size:25px;letter-spacing:3px;color:var(--gold)}.date i{font-style:normal;color:#a6b1bd;margin:0 9px}.scene-ui{position:absolute;inset:0;pointer-events:none;z-index:2;opacity:0;transition:opacity 1.5s}.scene-ui.visible{opacity:1}.scene-ui[hidden],.birthday[hidden]{display:none}.scene-ui button,.scene-ui a{pointer-events:auto}header{position:absolute;top:0;width:100%;padding:max(28px,env(safe-area-inset-top)) 4vw;display:flex;justify-content:space-between;gap:20px;background:linear-gradient(#04070c77,transparent)}.wordmark{background:none;border:0;padding:4px 0;font-size:12px;letter-spacing:2.5px;text-align:left}.wordmark span{display:block;color:var(--gold);font-family:Georgia,serif;font-size:18px;margin-top:5px;letter-spacing:3px}.utility{display:flex;gap:23px;align-items:flex-start}.utility button{background:#04070c22;border:0;color:#d6dce3;font-size:14px;padding:8px}#fullscreen{width:38px;height:38px}svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.3}.arrival{position:absolute;left:8vw;top:36%;transition:opacity 2s,transform 2s}.arrival.faded{opacity:0;transform:translateY(-12px)}h2{font-family:Georgia,'Times New Roman',serif;font-weight:400;font-size:clamp(45px,6.7vw,96px);line-height:1.1;letter-spacing:-.035em;margin:0}h2 em{font-weight:400;font-style:italic;color:var(--gold)}.scene-bottom{position:absolute;bottom:0;left:0;width:100%;padding:25px 4vw max(25px,env(safe-area-inset-bottom));display:flex;align-items:flex-end;justify-content:space-between;gap:25px;background:linear-gradient(transparent,#04070c99)}.image-credit{font-size:12px;letter-spacing:1.7px;line-height:2}.image-credit>span{display:block;font-size:14px;letter-spacing:3px;color:var(--gold)}.image-credit a{color:#b6c0cd;font-size:12px}.image-credit a:hover{color:var(--white)}.explore-tools{text-align:center}.zoom-tools{display:inline-flex;align-items:center;border:1px solid #ffffff33;background:#04070c44;border-radius:25px;padding:3px}.zoom-tools button{background:none;border:0;min-width:38px;min-height:38px;font-size:21px}.zoom-tools #reset{font-size:14px;padding:0 14px}.gesture-hint{font-size:12px;letter-spacing:1.5px;color:#c4ccd6;line-height:1.6;margin:12px 0 0}.wish-button{background:#04070c55;border:1px solid #e7d7bc77;border-radius:2px;padding:14px 20px;font-family:Georgia,serif;font-size:17px;white-space:nowrap}.wish-button span{font-size:13px;margin-left:18px;color:var(--gold)}.wish-button:hover{background:#e7d7bc15}.birthday{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:100px 24px 150px;background:#04070c88;backdrop-filter:blur(3px);pointer-events:auto;animation:appear 1s ease}.birthday p:not(.overline){font-family:Georgia,serif;font-size:clamp(18px,2vw,24px);line-height:1.7;color:#dededb;margin:28px 0}.text-button{padding:10px 0;background:none;border:0;border-bottom:1px solid #e7d7bc66;font-size:14px;letter-spacing:1px}.no-script{position:fixed;inset:0;background:#04070caa;display:grid;place-content:center;text-align:center;padding:30px;font-family:Georgia,serif;font-size:30px;z-index:9}.no-script p{font:16px Arial,sans-serif}@keyframes appear{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@media(max-width:600px){.cover{padding:25px 6vw max(24px,env(safe-area-inset-bottom))}.cover-top,.cover-bottom{font-size:12px;letter-spacing:1px}.cover-top{gap:15px}.cover-bottom{flex-wrap:wrap}.cover-bottom>span:last-child{display:none}.cover-center{padding:22px 0}.overline{font-size:12px;letter-spacing:2px}h1{font-size:clamp(80px,23vw,138px)}.fine-line{margin-top:28px}.cover-caption{font-size:19px}.enter{margin-top:30px;padding:14px 24px;gap:28px}header{padding:22px 6vw}.utility{gap:10px}.utility button{font-size:12px}.arrival{left:8vw;top:35%}.scene-bottom{padding:20px 6vw max(22px,env(safe-area-inset-bottom));display:grid;grid-template-columns:1fr 1fr;gap:20px}.explore-tools{grid-column:1 / -1;grid-row:1;text-align:center}.gesture-hint{font-size:12px;letter-spacing:.5px}.image-credit{font-size:12px}.image-credit a{letter-spacing:.4px}.wish-button{justify-self:end;padding:12px 14px;font-size:16px}.wish-button span{margin-left:9px}.birthday{padding-bottom:220px}.birthday h2{font-size:clamp(44px,11vw,70px)}.birthday p:not(.overline){font-size:18px;margin:23px 0}}@media(max-height:560px) and (min-width:601px){.cover{padding:18px 5vw}.cover-center{padding:8px 0}h1{font-size:100px}.overline{margin-bottom:10px}.fine-line{margin:15px auto}.enter{margin-top:17px}.cover-bottom,.cover-top{padding:10px 0}.arrival{top:25%}h2{font-size:55px}.birthday{padding:60px 20px 95px}.birthday p:not(.overline){margin:15px 0;font-size:18px}.gesture-hint{display:none}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
/* Photograph, then light: a quiet prelude before the 3D reveal. */
#universe{transition:opacity 1.8s;outline:none}.cover[hidden],.photo-story[hidden]{display:none}.photo-story{position:absolute;inset:0;z-index:2;background:#030509;transition:opacity 4s;isolation:isolate}.photo-story img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;object-position:center}.story-copy{position:absolute;left:0;right:0;bottom:0;text-align:center;padding:80px 24px max(34px,env(safe-area-inset-bottom));background:linear-gradient(transparent,#030509e8 62%);color:#e3e6eb}.story-copy p{font-family:Georgia,serif;font-size:16px;line-height:1.8;margin:0;letter-spacing:.2px}.story-copy p+p{color:#c1cbd8}.story-copy button{margin-top:24px;font-size:14px;pointer-events:auto}.photo-story.transforming{pointer-events:none}.transforming .story-copy{opacity:0;transform:translateY(10px);transition:opacity 1s,transform 1s}.explore-tools{opacity:.42;transition:opacity .5s}.explore-tools:hover,.explore-tools:focus-within{opacity:1}.scene-bottom{background:linear-gradient(transparent,#03050944)}.vignette{background:radial-gradient(ellipse at center,transparent 42%,#03050930)}#experience{background:#030509}.image-credit{max-width:230px}#scene-ui .arrival{display:none}@media(max-width:600px){.story-copy{padding:70px 20px max(28px,env(safe-area-inset-bottom))}.story-copy p{font-size:14px}.image-credit{max-width:155px}.image-credit a{font-size:12px}.explore-tools{opacity:.65}.gesture-hint{font-size:12px}}@media(prefers-reduced-motion:reduce){#universe,.photo-story{transition:none}.story-copy{transition:none}}
.photo-story.transforming{transition:none}

/* The same quiet space, now gathered into the Roman observatory. */
.chapter-actions{display:flex;flex-direction:column;align-items:flex-end;gap:8px;pointer-events:auto}
.chapter-button{font-family:Arial,sans-serif;font-size:14px;letter-spacing:.3px}
.quiet-wish{font-size:12px;padding:6px 0;border-bottom-color:transparent;color:#c8ccd5}
.roman-chapter[hidden],.roman-birthday[hidden]{display:none}
.roman-chapter{position:absolute;inset:0;z-index:2;pointer-events:none;opacity:0;transition:opacity 1.2s;color:var(--white);outline:none}
.roman-chapter.is-open{opacity:1}
.roman-chapter button,.roman-chapter a{pointer-events:auto}
.roman-header{padding:max(28px,env(safe-area-inset-top)) 4vw;background:linear-gradient(#04070c44,transparent);z-index:2}
#roman-fullscreen{width:38px;height:38px}
.roman-gesture-hint{position:absolute;top:87px;left:20px;right:20px;margin:0;text-align:center;font:12px/1.6 Arial,sans-serif;letter-spacing:1.4px;color:#afb6c0;opacity:0;transition:opacity 1.5s;pointer-events:none}
.dedication-ready .roman-gesture-hint{opacity:.65}
.roman-introduction{position:absolute;bottom:166px;left:20px;right:20px;text-align:center;opacity:0;transform:translateY(12px);transition:opacity 1.7s,transform 1.7s;pointer-events:none;text-shadow:0 2px 18px #030509}
.introduced .roman-introduction{opacity:1;transform:none}
.roman-introduction .overline{font-size:12px;letter-spacing:3px;margin-bottom:14px}
.roman-introduction h2{font-size:clamp(32px,3.5vw,52px);letter-spacing:-.025em;line-height:1.15}
.roman-introduction h2 em{color:var(--gold);font-style:italic}
.roman-introduction>p:last-child{font:16px/1.8 Georgia,serif;color:#c9cbd0;margin:18px 0 0}
.roman-bottom{position:absolute;bottom:0;left:0;width:100%;padding:25px 4vw max(28px,env(safe-area-inset-bottom));display:flex;justify-content:space-between;align-items:flex-end;gap:24px;background:linear-gradient(transparent,#03050977)}
.roman-bottom .image-credit{max-width:270px}
.roman-bottom .image-credit>span{font-size:12px;letter-spacing:2px}
.roman-bottom .image-credit a{font-size:12px;letter-spacing:1px}
.roman-dedication{text-align:center;position:absolute;left:50%;bottom:27px;transform:translateX(-50%) translateY(8px);opacity:0;transition:opacity 1.4s,transform 1.4s;pointer-events:none}
.dedication-ready .roman-dedication{opacity:1;transform:translateX(-50%)}
.roman-dedication p{font:italic 17px/1.5 Georgia,serif;color:var(--gold);margin:0 0 14px}
.roman-dedication .wish-button{font-size:16px;padding:13px 24px;pointer-events:auto}
.roman-wish{font-size:12px;color:#c5c8ce;border-bottom-color:transparent;min-height:44px}
.roman-wish span{color:var(--gold);margin-left:13px}
.roman-birthday{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;justify-content:center;align-items:center;background:#04070cf2;text-align:center;padding:32px;animation:appear 1s ease;pointer-events:auto}
.roman-birthday p:not(.overline){font:19px/1.8 Georgia,serif;color:#d8d8d6;margin:28px 0 19px}
.wish-signoff{font:italic 16px/1.7 Georgia,serif;color:var(--gold)}
.roman-birthday .text-button{margin-top:38px;color:var(--gold)}
.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
/* The certificate fills the viewport, with no card, border or surrounding page. */
.certificate-dialog{position:fixed;inset:0;margin:0;padding:0;width:100vw;height:100dvh;max-width:none;max-height:none;background:#030509;color:var(--white);border:0;border-radius:0;overflow:hidden;box-shadow:none}
.certificate-dialog[open]{animation:appear .8s ease both}
.certificate-dialog::backdrop{background:#030509}
.certificate-paper{position:absolute;inset:0;overflow:auto;background:#030509}
.certificate-paper img{display:block;position:absolute;inset:0;width:100%;height:100%;object-fit:contain;max-height:none;user-select:none}
.certificate-topbar,.certificate-bottom{position:absolute;left:0;right:0;display:flex;justify-content:space-between;align-items:center;gap:20px;padding:16px 24px;pointer-events:none;z-index:1}
.certificate-topbar{top:0;padding-top:max(16px,env(safe-area-inset-top))}
.certificate-bottom{bottom:0;padding-bottom:max(16px,env(safe-area-inset-bottom))}
.certificate-topbar button,.certificate-bottom button,.certificate-bottom a{pointer-events:auto;background:#030509dd;border:1px solid #e7d7bc55;border-radius:0;color:var(--white);font:13px/1.5 Arial,sans-serif;letter-spacing:.4px;padding:11px 15px;min-height:44px}
.certificate-topbar button:hover,.certificate-bottom button:hover,.certificate-bottom a:hover{background:#e7d7bc15;border-color:#e7d7bc99}
.certificate-topbar button>span,.certificate-bottom span{margin-right:9px;color:var(--gold)}
.certificate-bottom span{margin-left:12px;margin-right:0}
.certificate-dialog :focus-visible{outline-color:var(--gold);outline-offset:3px}
.certificate-dialog.zoomed .certificate-paper img{position:relative;inset:auto;width:180%;height:auto;min-height:100%;max-width:none;object-fit:contain;object-position:top center}
@media(max-width:600px){
  .chapter-actions{align-items:flex-end;justify-self:end;max-width:190px;gap:3px}.chapter-button{white-space:normal;text-align:left;font-size:12px;line-height:1.5;padding:10px 12px}.chapter-button span{margin-left:4px}.quiet-wish{font-size:12px}
  .roman-header{padding:22px 6vw}.roman-introduction{bottom:209px;left:22px;right:22px}.roman-introduction .overline{font-size:12px;letter-spacing:1.7px;margin-bottom:12px}.roman-introduction h2{font-size:32px;line-height:1.2}.roman-introduction>p:last-child{font-size:14px;line-height:1.7;margin-top:14px}.roman-introduction>p:last-child br{display:none}
  .roman-header .utility{gap:3px}.roman-header .utility button{padding:8px 5px;font-size:12px}.roman-gesture-hint{top:92px;font-size:12px;letter-spacing:.4px}
  .roman-bottom{padding:20px 6vw max(22px,env(safe-area-inset-bottom));gap:14px;min-height:80px}.roman-bottom .image-credit{max-width:160px}.roman-bottom .image-credit>span{font-size:12px;letter-spacing:.5px}.roman-bottom .image-credit a{font-size:12px;letter-spacing:.3px}.roman-wish{font-size:12px;white-space:nowrap}.roman-wish span{margin-left:4px}
  .roman-dedication{bottom:98px;width:100%;padding:0 22px}.roman-dedication p{font-size:16px;margin-bottom:12px}.roman-dedication .wish-button{font-size:15px;padding:12px 22px}
  .roman-birthday h2{font-size:52px}.roman-birthday p:not(.overline){font-size:16px;line-height:1.8}.wish-signoff{font-size:14px}
  .certificate-topbar,.certificate-bottom{padding-left:14px;padding-right:14px;gap:12px}.certificate-topbar button,.certificate-bottom button,.certificate-bottom a{font-size:12px;padding:10px 12px}.certificate-dialog.zoomed .certificate-paper img{width:260%;min-height:100%}
}
@media(max-height:700px){.roman-introduction{bottom:153px}.roman-introduction .overline{margin-bottom:9px}.roman-introduction h2{font-size:32px}.roman-introduction>p:last-child{font-size:14px;line-height:1.5;margin-top:12px}}
@media(max-width:600px) and (max-height:700px){.roman-introduction{bottom:195px}.roman-introduction h2{font-size:28px}.roman-dedication{bottom:90px}.roman-dedication p{margin-bottom:9px}}
@media(max-height:500px) and (min-width:601px){.roman-introduction{bottom:111px}.roman-introduction h2{font-size:26px}.roman-introduction .overline{display:none}.roman-introduction>p:last-child{font-size:14px;margin-top:8px}.roman-introduction>p:last-child br{display:none}.roman-dedication{bottom:16px}.roman-dedication p{display:none}.roman-bottom{padding-top:12px;padding-bottom:16px}.roman-bottom .image-credit{font-size:12px}}
@media(prefers-reduced-motion:reduce){.roman-chapter,.roman-introduction,.roman-dedication{transition:none}.certificate-dialog[open]{animation:none}}
/* The Golden Record ritual begins the journey. */
/* The dedication leads; source credits sit quietly behind it. */
.image-credit>span{font-family:Georgia,'Times New Roman',serif;font-size:18px;letter-spacing:.2px;line-height:1.6}.image-credit a{letter-spacing:.15px;color:#a4aeb9}.gesture-hint,.roman-gesture-hint{letter-spacing:.2px}
.voyager-credit{letter-spacing:.15px}.voyager-credit>span{color:#98a3af}
.music-toggle{position:absolute;z-index:6;top:85px;left:4vw;display:flex;align-items:center;gap:8px;background:#030509b0;border:1px solid #e7d7bc44;border-radius:2px;padding:8px 12px;font-size:12px;letter-spacing:.5px;min-height:34px}.music-toggle[hidden]{display:none}
.music-toggle::before{content:'';display:block;width:15px;height:15px;border-radius:50%;background-image:url('golden-record.jpg');background-size:202% 113%;background-position:right center;animation:record-spin 24s linear infinite;animation-play-state:paused}.music-playing .music-toggle::before{animation-play-state:running}
.voyager-chapter[hidden]{display:none}.voyager-chapter{position:absolute;inset:0;z-index:4;outline:none;background:#030509f2;animation:appear 1.3s ease;overflow:hidden;transition:background 2s}.voyager-label{font-size:12px;letter-spacing:2px;color:var(--gold);padding-top:10px}
.voyager-art{position:absolute;left:8%;right:8%;top:12%;height:42%;perspective:1100px;pointer-events:none;z-index:2}.voyager-craft{position:absolute;left:4%;top:5%;width:42%;max-width:480px;mix-blend-mode:screen;opacity:.85;mask-image:radial-gradient(ellipse at center,#000 30%,#000c 50%,transparent 75%);animation:voyager-drift 24s ease-in-out infinite alternate}
.record-orbit{position:absolute;right:10%;top:5%;width:clamp(200px,26vw,340px);aspect-ratio:1;transform:rotateX(var(--tilt-x,22deg)) rotateY(var(--tilt-y,-16deg));transform-style:preserve-3d;transition:transform .25s;pointer-events:auto;filter:drop-shadow(0 0 40px #b28b301d)}
.record-disc{position:absolute;inset:0;border:0;padding:0;background:#030509;border-radius:50%;overflow:hidden;animation:record-spin 28s linear infinite;animation-play-state:paused;cursor:pointer;box-shadow:0 0 0 1px #dcb76e44;transition:box-shadow .4s}.record-engaged.music-playing .record-disc,.music-playing .record-engaged .record-disc{animation-play-state:running}.record-disc:hover,.needle-dragging .record-disc{box-shadow:0 0 0 1px #e7d7bcaa,0 0 42px #b28b3033}.record-disc:disabled{opacity:1;cursor:default}.record-disc img{position:absolute;width:202%;height:113%;max-width:none;left:-100%;top:-7%;object-fit:fill;pointer-events:none;user-select:none}
.record-play-icon{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:grid;place-items:center;width:56px;height:56px;border:1px solid #e7d7bc99;border-radius:50%;background:#030509aa;color:var(--gold);font:18px Arial,sans-serif;padding-left:3px;box-shadow:0 0 24px #0005;transition:opacity .8s}.record-engaged .record-play-icon{opacity:0}
.record-needle{position:absolute;width:66%;height:44px;background:transparent;border:0;padding:0;right:-20%;top:4%;transform:rotate(var(--needle-angle,-72deg));transform-origin:right center;cursor:grab;touch-action:none;z-index:3;transition:transform .8s cubic-bezier(.2,.7,.3,1);outline-offset:2px}.record-needle::before{content:'';position:absolute;left:0;right:0;top:21px;height:2px;background:linear-gradient(90deg,#dfcaa4,#f4e9d6);box-shadow:0 0 8px #e7d7bc55}.needle-grip{position:absolute;right:-7px;top:14px;width:16px;height:16px;border:1px solid var(--gold);border-radius:50%;background:#11151d;box-shadow:0 0 0 7px #e7d7bc0d}.record-needle::after{content:'';position:absolute;left:-4px;top:16px;width:12px;height:12px;border:1px solid #ebd0a2;background:#9f7d46;border-radius:2px}.needle-dragging .record-needle{transition:none;cursor:grabbing}.record-engaged .record-needle{transform:rotate(-30deg)}.record-needle:disabled{opacity:1;cursor:default}
.voyager-copy{position:absolute;left:24px;right:24px;bottom:105px;text-align:center;z-index:3;transition:opacity 1.5s,transform 2s}.voyager-copy .overline{font-size:12px;letter-spacing:2.5px;margin-bottom:14px}.voyager-copy h2{font-size:clamp(34px,4.2vw,62px);line-height:1.08}.voyager-copy>p:not(.overline){font:16px/1.7 Georgia,serif;color:#c9cbd0;margin:20px 0}.voyager-copy .text-button{display:block;margin:0 auto;border-bottom-color:#e7d7bc33;color:#aab3c0;font-size:12px}.voyager-status:empty{display:none}.voyager-copy .voyager-status{font:14px/1.5 Arial,sans-serif;color:var(--gold);margin:12px 0 0}
.voyager-credit{position:absolute;bottom:25px;left:4vw;right:4vw;display:flex;justify-content:space-between;align-items:flex-end;font:12px/1.8 Arial,sans-serif;letter-spacing:1px;color:#aab3c0;z-index:3;transition:opacity 1.5s}.voyager-credit span{text-align:right}.certificate-utilities{display:flex;gap:12px;pointer-events:auto}
#voyager-light{position:absolute;inset:0;width:100%;height:100%;z-index:4;pointer-events:none}.voyager-chapter.departing{background:transparent}.departing .record-orbit{pointer-events:none}
.photo-story.voyager-arrival{transition:none}.voyager-arrival .story-copy{opacity:0;pointer-events:none}.story-copy{transition:opacity 1.2s}.photo-story.voyager-arrival img{filter:none}
@keyframes record-spin{to{transform:rotate(360deg)}}@keyframes voyager-drift{from{transform:translate(-8px,5px) rotate(-3deg)}to{transform:translate(22px,-10px) rotate(2deg)}}
@media(max-width:600px){.music-toggle{top:75px;left:6vw;padding:6px 10px;font-size:12px}.roman-gesture-hint{top:116px}.voyager-label{font-size:12px;max-width:170px;text-align:right;line-height:1.6;letter-spacing:1px}.voyager-art{left:5%;right:5%;top:18%;height:30%}.voyager-craft{width:57%;left:0;top:0}.record-orbit{width:190px;right:12%;top:10%}.record-play-icon{width:44px;height:44px;font-size:15px}.voyager-copy{bottom:90px}.voyager-copy h2{font-size:32px}.voyager-copy .overline{font-size:12px;letter-spacing:1px;margin-bottom:12px}.voyager-copy>p:not(.overline){font-size:15px;margin:16px 0}.voyager-credit{left:6vw;right:6vw;font-size:12px;letter-spacing:.3px}.voyager-credit span{max-width:105px}.certificate-utilities{gap:5px}.certificate-topbar{gap:5px}.certificate-topbar button{padding:8px;font-size:12px}}
@media(max-height:800px) and (min-height:601px) and (min-width:601px){.voyager-art{top:12%;height:35%}.voyager-craft{max-width:330px}.record-orbit{width:250px}.voyager-copy{bottom:95px}.voyager-copy h2{font-size:42px}.voyager-copy>p:not(.overline){margin:14px 0}}
@media(max-height:600px) and (min-width:601px){.voyager-art{top:12%;height:42%;left:12%;right:12%}.voyager-craft{width:32%;max-width:250px}.record-orbit{width:190px;right:10%;top:0}.voyager-copy{bottom:65px}.voyager-copy h2{font-size:30px}.voyager-copy .overline{display:none}.voyager-copy>p:not(.overline){font-size:14px;margin:10px}.voyager-credit{bottom:12px}}
@media(max-height:500px) and (min-width:601px){.voyager-art{left:6%;right:52%;top:22%;height:58%}.voyager-craft{width:65%;left:0}.record-orbit{width:130px;right:0;top:35%}.voyager-copy{left:50%;right:4%;bottom:66px}.voyager-copy h2{font-size:28px}}
@media(prefers-reduced-motion:reduce){.voyager-craft,.record-disc,.music-toggle::before{animation:none}.voyager-chapter{animation:none}.record-needle,.record-orbit{transition:none}}
/* A birthday letter unfolds around the existing, uninterrupted sky. */
header:has(.chapter-controls){z-index:5}.chapter-controls{position:relative;pointer-events:auto}.chapter-controls>summary{list-style:none;display:grid;place-items:center;width:44px;height:44px;cursor:pointer;color:#c9cbd0;outline-offset:4px}.chapter-controls>summary::-webkit-details-marker{display:none}.chapter-controls>summary:focus-visible{outline:2px solid var(--gold)}.chapter-controls>summary svg{width:24px;height:24px;fill:currentColor;stroke:none}.chapter-controls[open]>summary{color:var(--gold)}
.control-panel{position:absolute;right:0;top:52px;width:280px;padding:20px;background:#090d15f5;border:1px solid #e7d7bc33;box-shadow:0 16px 70px #0008;backdrop-filter:blur(12px);text-align:left;animation:appear .2s ease}.control-panel .control-help{font:14px/1.7 Arial,sans-serif;letter-spacing:.1px;color:#c9cbd0;margin:0 0 18px}.control-panel .utility{gap:8px;align-items:center;margin:14px 0}.control-panel .utility button{padding:8px 5px;font-size:13px}.control-panel .text-button{font-size:14px;padding:9px 0;margin:0 0 12px}.control-panel .source-note{display:block;font:12px/1.8 Arial,sans-serif;letter-spacing:.1px;color:#a4aeb9;padding-top:14px;border-top:1px solid #e7d7bc22;margin:0}.control-panel .source-note+.source-note{border:0;padding-top:12px}
.sky-note{font:italic 19px/1.5 Georgia,serif;color:var(--gold);margin:0}.scene-bottom{padding-bottom:max(35px,env(safe-area-inset-bottom));align-items:center}.chapter-button{font-family:Georgia,serif;font-size:17px;padding:12px 20px}.gift-signature{font:italic 14px/1.6 Georgia,serif;color:#bdc3cc}.roman-introduction{bottom:166px}.roman-introduction h2{font-size:clamp(32px,3.5vw,48px)}.roman-introduction>p:last-child{margin-top:18px}.roman-bottom{min-height:120px;background:linear-gradient(transparent,#03050955)}.roman-birthday h2::after{content:'';display:block;width:40px;height:1px;background:#e7d7bc88;margin:28px auto 0}.roman-birthday p:not(.overline){margin-top:22px}.wish-signoff{max-width:440px}
@media(max-width:600px){.cover-top{font-size:10px;letter-spacing:1.2px}.cover-caption{max-width:280px;margin:0 auto;line-height:1.6}.control-panel{width:260px;max-width:calc(100vw - 44px);top:48px;padding:18px}.sky-note{font-size:16px;max-width:155px}.scene-bottom{gap:20px;padding-bottom:max(28px,env(safe-area-inset-bottom))}.chapter-actions{max-width:none}.chapter-button{font-size:15px;white-space:nowrap;text-align:center;padding:11px 15px}.chapter-button span{margin-left:12px}.roman-introduction{bottom:195px}.roman-introduction h2{font-size:28px}.roman-introduction>p:last-child{max-width:290px;margin:14px auto 0}.roman-bottom{min-height:80px;gap:15px}.gift-signature{font-size:12px;max-width:140px}.roman-dedication{bottom:90px}.roman-birthday{padding:24px}.roman-birthday h2{font-size:48px}.roman-birthday p:not(.overline){font-size:16px}.wish-signoff{font-size:15px;max-width:290px}.roman-birthday .text-button{margin-top:28px}}
@media(max-height:500px) and (min-width:601px){.roman-introduction{bottom:100px;left:48%;right:5%;text-align:right}.roman-introduction h2{font-size:26px}.roman-introduction>p:last-child{font-size:14px;max-width:300px;margin-left:auto}.roman-birthday h2{font-size:40px}.roman-birthday h2::after{margin-top:12px}.roman-birthday p:not(.overline){font-size:16px;margin:15px 0 10px}.roman-birthday .text-button{margin-top:18px}.roman-birthday .overline{margin-bottom:10px}}
/* One clear invitation, slower musical phrases, and a way back at every step. */
.cover{background:radial-gradient(ellipse at 50% 48%,#12151c88,#030509dc 75%);padding-left:5vw;padding-right:5vw}.cover::before{content:'';position:absolute;left:50%;top:50%;width:min(68vw,580px);aspect-ratio:1;transform:translate(-50%,-50%);border:1px solid #e7d7bc0c;border-radius:50%;box-shadow:0 0 120px #c6a26307;pointer-events:none}.cover-top,.cover-bottom{border:0;font-size:11px;letter-spacing:2px}.cover-center{position:relative;padding:20px 0}.cover-center h1{font-size:clamp(78px,12vw,178px);letter-spacing:-.05em}.cover-center .overline{margin-bottom:20px;font-size:12px;letter-spacing:4px}.cover-caption{margin:22px auto 0;font-size:20px;color:#d3d0c8}.cover-play{display:inline-flex;flex-direction:column;align-items:center;gap:22px;margin-top:45px;padding:10px 20px;border:0;background:none;letter-spacing:1.5px;font-size:15px}.play-orb{display:grid;place-items:center;position:relative;width:96px;height:96px;border-radius:50%;background:linear-gradient(145deg,#f4e9d7,#d5bb88);box-shadow:0 0 38px #d7b5762b,0 6px 34px #0008;color:#070a10;transition:box-shadow .4s,transform .4s}.play-orb::before{content:'';position:absolute;inset:-12px;border:1px solid #e7d7bc55;border-radius:50%;animation:play-beacon 4s ease-in-out infinite}.play-orb svg{width:31px;height:31px;fill:#080b11;stroke:none;transform:translateX(2px)}.cover-play:hover .play-orb{transform:scale(1.05);box-shadow:0 0 56px #d7b57644,0 6px 34px #0008}.cover-play:disabled .play-orb::before{animation:none}.cover-play:focus-visible{outline:2px solid var(--gold);outline-offset:12px;border-radius:60px}
@keyframes play-beacon{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.07)}}
.record-play-icon{width:88px;height:88px;font-size:27px;color:#080b11;background:linear-gradient(145deg,#f4e9d7,#d5bb88);border-color:#fff1d9;box-shadow:0 0 28px #edd7a75c,0 5px 22px #0009}.record-needle{transition-duration:1.6s}.departing .voyager-craft{animation-duration:var(--flight-time,18s)}.departing .record-orbit{animation-duration:var(--disc-flight-time,13s)}.departing header{opacity:1;pointer-events:auto;transition:none;background:linear-gradient(#03050988,transparent)}body:not(.music-playing) .departing .voyager-craft,body:not(.music-playing) .departing .record-orbit{animation-play-state:paused}
.step-back,header .wordmark{background:none;border:0;font:13px/1.6 Arial,sans-serif;letter-spacing:.5px;padding:8px 0;color:#e3ddd2;min-height:44px;pointer-events:auto;white-space:nowrap}.chapter-dateline{font:11px/1.8 Arial,sans-serif;letter-spacing:1.6px;color:#b7b6b5;padding-top:12px}.photo-header{z-index:5;pointer-events:auto;background:linear-gradient(#030509aa,transparent)}.photo-story.transforming .photo-header{pointer-events:auto}.photo-story .photo-name{font-size:22px;color:var(--gold);margin-bottom:4px}.sky-note{font-style:normal;font-size:19px;letter-spacing:.1px}.sky-date{font:12px/1.8 Arial,sans-serif;letter-spacing:.6px;color:#b0b7c0;margin:4px 0 0}.sky-caption{max-width:290px}.note-navigation{display:flex;align-items:center;justify-content:center;gap:30px;margin-top:34px}.roman-birthday .note-navigation .text-button{margin:0;font-size:14px}.roman-birthday .note-navigation .wish-button{font-size:16px}
.letter-chapter[hidden]{display:none}.letter-chapter{position:absolute;inset:0;z-index:7;background:radial-gradient(ellipse at 40% 35%,#11151d,#030509 80%);color:var(--white);outline:none;animation:appear 2s ease}.letter-chapter header{position:absolute;background:linear-gradient(#030509e8,transparent)}.letter-page{width:min(720px,100%);height:calc(100dvh - 170px);margin:90px auto 0;padding:12px 45px 60px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#e7d7bc44 transparent}.letter-page .overline{margin-bottom:18px;letter-spacing:3px}.letter-page h2{font-size:clamp(42px,5vw,68px);line-height:1.15}.letter-rule{width:45px;height:1px;background:#e7d7bc88;margin:30px 0}.letter-salutation{font:22px/1.8 Georgia,serif;color:var(--gold);margin:0 0 22px}.letter-content{font:18px/2 Georgia,serif;color:#e3dfd6;white-space:pre-wrap}.letter-content p{margin:0 0 1.5em}.letter-placeholder{margin-top:20px;color:#8e98a5;font:italic 15px/1.8 Georgia,serif}.letter-placeholder i{display:block;height:1px;background:#e7d7bc17;margin-top:30px}.letter-placeholder i:last-child{width:65%}.letter-chapter[data-ready=true] .letter-placeholder{display:none}.letter-footer{position:absolute;bottom:25px;left:0;right:0;text-align:center}.letter-footer .text-button{font-size:14px;color:var(--gold);padding:12px;min-height:44px}.letter-footer span{margin-left:12px}.music-toggle{z-index:8}
@media(max-width:600px){.cover-top{font-size:10px;letter-spacing:1px}.cover-caption{font-size:18px}.cover-play{margin-top:38px;gap:20px}.play-orb{width:84px;height:84px}.cover::before{width:85vw}.cover-bottom{padding-top:12px}.record-play-icon{width:72px;height:72px;font-size:23px}.photo-story .photo-name{font-size:18px}.photo-header{padding:22px 6vw}.chapter-dateline{font-size:10px;letter-spacing:1px}.sky-note{font-size:16px;max-width:175px}.sky-caption{max-width:175px}.sky-date{font-size:11px}.note-navigation{gap:20px;flex-wrap:wrap;margin-top:30px}.roman-birthday .note-navigation .wish-button{font-size:15px;padding:12px 16px}.letter-page{margin-top:88px;padding:10px 28px 50px;height:calc(100dvh - 165px)}.letter-page h2{font-size:42px}.letter-page .overline{font-size:11px;margin-bottom:14px}.letter-rule{margin:24px 0}.letter-salutation{font-size:20px}.letter-content{font-size:17px;line-height:1.9}.letter-footer{bottom:15px}}
@media(max-height:600px){.cover{padding-top:20px;padding-bottom:16px}.cover-top,.cover-bottom{padding:8px 0}.cover-center{padding:5px 0}.cover-center h1{font-size:74px}.cover-center .overline{margin-bottom:10px}.cover-caption{margin-top:14px;font-size:17px}.cover-play{margin-top:24px;gap:14px;padding:0 14px}.play-orb{width:66px;height:66px}.play-orb::before{inset:-9px}.letter-page{margin-top:65px;height:calc(100dvh - 130px)}.letter-page h2{font-size:38px}.letter-chapter header{padding-top:15px}.note-navigation{margin-top:20px}}
@media(prefers-reduced-motion:reduce){.play-orb::before,.letter-chapter{animation:none}.play-orb{transition:none}}

/* Voyager carries the song through a quiet field of stars into Bowen's sky. */
#voyager-space{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none}
.voyager-story[hidden],#voyager-instruction[hidden]{display:none}
.voyager-story{animation:voyager-voice 1.8s ease both}
.voyager-copy{bottom:90px;transition:opacity 2.6s ease,transform 2.6s ease}
.voyager-track{font:18px/1.6 Georgia,serif;color:var(--gold);margin:24px 0 0}
.voyager-track span{display:block;font:14px/1.7 Arial,sans-serif;letter-spacing:.5px;color:#aab3c0;margin-top:7px}
.voyager-art{perspective:1400px}
.voyager-craft{transform-origin:center;will-change:transform,opacity}
.record-engaged .voyager-craft,.departing .voyager-craft,.departing .record-orbit{animation:none}
.record-engaged .record-orbit{transition:none;will-change:transform,opacity}
.departing .voyager-copy{opacity:1;transform:none}
.flying .voyager-copy{opacity:0;transform:translateY(-12px);pointer-events:none}
.voyager-chapter header{z-index:6}
@keyframes voyager-voice{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}
@media(max-width:600px){
  .voyager-art{top:19%;height:28%}
  .voyager-craft{width:45%;left:-2%;top:28%}
  .record-orbit{width:176px;right:28px;top:0}
  .voyager-copy{bottom:92px;left:22px;right:22px}
  .voyager-copy h2{font-size:32px;line-height:1.12}
  #voyager-journey-title{font-size:29px}
  .voyager-copy .overline{font-size:11px;letter-spacing:1.8px;margin-bottom:15px}
  .voyager-track{font-size:17px;margin-top:19px}
  .voyager-track span{font-size:13px;margin-top:5px}
}
@media(max-height:600px) and (min-width:601px){
  .voyager-copy{bottom:52px}
  .voyager-track{font-size:16px;margin-top:12px}
  .voyager-track span{font-size:12px;margin-top:3px}
}
@media(max-height:700px) and (max-width:600px){
  .voyager-art{top:19%;height:24%}
  .record-orbit{width:158px}
  .voyager-copy{bottom:64px}
  .voyager-copy h2{font-size:30px}
  #voyager-journey-title{font-size:27px}
}
@media(prefers-reduced-motion:reduce){.voyager-story{animation:none}.voyager-copy{transition:none}.voyager-craft,.record-engaged .record-orbit{will-change:auto}}

/* A birthday cover opens onto a record that waits for her touch. */
.cover-center h1{font-size:clamp(76px,9.6vw,142px);line-height:.96;letter-spacing:-.045em}
.cover-center h1 em{font-weight:400;font-style:italic;color:var(--gold)}
.cover-recipient{font:400 38px/1.2 Georgia,serif;letter-spacing:-.025em;margin:26px 0 0;color:var(--white)}
.cover-caption{font-size:18px;margin:16px auto 0;color:#bcb9b3}
.cover-open{display:inline-flex;align-items:center;gap:36px;min-height:54px;margin-top:34px;padding:15px 24px;background:#e7d7bc0a;border:1px solid #e7d7bc77;border-radius:2px;font-size:14px;letter-spacing:.7px;transition:background .35s,border-color .35s}
.cover-open>span:last-child{font-size:21px;color:var(--gold)}
.cover-open:hover{background:#e7d7bc19;border-color:var(--gold)}
.voyager-art{left:8%;right:8%;top:16%;height:43%}
.record-orbit{left:50%;right:auto;top:0;width:min(32vw,42dvh,390px);transform:translateX(-50%) rotateX(var(--tilt-x,22deg)) rotateY(var(--tilt-y,-16deg))}
.voyager-chapter[data-story=record] .voyager-craft{visibility:hidden}
.voyager-copy{left:24px;right:24px;bottom:max(54px,7dvh)}
.voyager-copy h2{font-size:clamp(36px,3.8vw,54px);line-height:1.08}
#voyager-instruction{font-family:Arial,sans-serif;font-size:13px;letter-spacing:.4px;color:#b8b7b3;margin:24px 0 0}
@media(max-width:600px){
  .cover-center h1{font-size:clamp(52px,16.8vw,88px)}
  .cover-recipient{font-size:31px;margin-top:25px}
  .cover-caption{font-size:17px;margin-top:14px}
  .cover-open{margin-top:32px;gap:32px;padding:14px 23px}
  .voyager-art{left:5%;right:5%;top:16%;height:38%}
  .record-orbit{left:50%;right:auto;top:0;width:min(60vw,31dvh,250px)}
  .voyager-craft{left:-2%;top:87%;width:45%}
  .voyager-copy{left:20px;right:20px;bottom:max(58px,8dvh)}
  .voyager-copy h2{font-size:clamp(30px,8.5vw,38px)}
  #voyager-journey-title{font-size:clamp(27px,7.5vw,34px)}
  .voyager-track{font-size:17px;margin-top:20px}
  #voyager-instruction{font-size:12px;margin-top:22px}
}
@media(max-height:600px){
  .cover-center h1{font-size:clamp(44px,12dvh,68px)}
  .cover-recipient{font-size:27px;margin-top:16px}
  .cover-caption{font-size:16px;margin-top:12px}
  .cover-open{min-height:46px;margin-top:22px;padding:10px 22px}
}
@media(max-height:600px) and (min-width:601px){
  .voyager-art{left:5%;right:52%;top:22%;height:64%}
  .record-orbit{width:min(25vw,49dvh,270px)}
  .voyager-craft{left:0;top:0;width:65%;max-width:250px}
  .voyager-copy{left:50%;right:5%;bottom:14%;text-align:left}
  .voyager-copy h2{font-size:34px}
  .voyager-track{margin-top:16px}
  #voyager-instruction{font-size:12px;margin-top:20px}
}

/* The name belongs to the greeting; the sky belongs to the birthday. */
.cover{background:radial-gradient(ellipse at 50% 46%,#04070cb8,#030509ed 78%)}
.cover::before{width:min(76vw,760px);aspect-ratio:1.35;transform:translate(-50%,-50%) rotate(-18deg);border-color:#e7d7bc10;box-shadow:none}
.cover-center{width:100%;max-width:900px;margin:0 auto;padding:20px 0}
.cover-center h1{font-size:clamp(52px,6.5vw,86px);line-height:1.12;letter-spacing:-.035em}
.birthday-greeting,.birthday-recipient{display:block}
.cover-center h1 .birthday-recipient{font-size:1.04em;margin-top:5px}
.cover-dedication{margin-top:30px}
.dedication-star{display:block;font:23px/1 Georgia,serif;color:#dbc5a0}
.cover-caption{max-width:none;font:400 21px/1.75 Georgia,serif;color:#d3cfc6;margin:18px auto 0}
.cover-open{margin-top:30px}
#load-note:empty{display:none}
.story-copy .photo-dedication{font:italic clamp(23px,2.4vw,33px)/1.35 Georgia,serif;color:var(--white);margin:0 0 14px}
.photo-story .photo-name{font-size:17px;color:var(--gold);margin-bottom:6px}
.story-copy .photo-context{font:15px/1.8 Arial,sans-serif;letter-spacing:.1px;color:#bfc5ce}
.story-copy button{margin-top:20px}
.roman-introduction{bottom:146px}
.roman-introduction h2{font-size:clamp(32px,3.2vw,46px)}
.roman-introduction>p.roman-context{font:15.5px/1.8 Arial,sans-serif;max-width:660px;margin:18px auto 0;color:#c2c8d1}
.roman-context span{display:block}
.roman-dedication p{font:12px/1.7 Arial,sans-serif;letter-spacing:1.5px;color:#bdaf99;margin-bottom:12px}

/* A claimed point of light grows into the untouched original certificate. */
#certificate-light{position:absolute;inset:0;width:100%;height:100%;z-index:2;pointer-events:none}
.certificate-intro{position:absolute;inset:0;z-index:3;pointer-events:none}
.certificate-intro[hidden],#certificate-light[hidden]{display:none}
.certificate-pixel{position:absolute;left:50%;top:50%;width:6px;height:6px;transform:translate(-50%,-50%);background:#eee0c6;box-shadow:0 0 12px #e7d7bc99,0 0 45px #e7d7bc22}
.certificate-intro-copy{position:absolute;left:20px;right:20px;top:calc(50% + 40px);text-align:center}
.certificate-intro-copy .overline{font-size:12px;letter-spacing:2.8px;margin-bottom:13px}
.certificate-recipient{font:32px/1.3 Georgia,serif;color:var(--white);margin:0}
.certificate-number{font:14px/1.8 Arial,sans-serif;letter-spacing:4px;color:var(--gold);margin:15px 0 0}
.certificate-topbar,.certificate-bottom{z-index:4}
.certificate-dialog[data-reveal=opening] .certificate-paper{animation:pixel-to-certificate var(--certificate-time,6800ms) cubic-bezier(.22,.61,.36,1) both;will-change:clip-path,transform}
.certificate-dialog[data-reveal=opening] .certificate-intro{animation:pixel-dedication var(--certificate-time,6800ms) linear both}
.certificate-dialog[data-reveal=opening] .certificate-pixel{animation:pixel-pulse 2s ease-in-out both}
.certificate-dialog[data-reveal=opening] .certificate-bottom{opacity:0;pointer-events:none}
.certificate-dialog[data-reveal=ready] .certificate-bottom{animation:appear 1.2s ease both}
.certificate-dialog[data-reveal=opening] #certificate-zoom{visibility:hidden}
@keyframes pixel-to-certificate{
  0%,24%{opacity:0;clip-path:inset(49.95% 49.95%);transform:perspective(1200px) rotateX(10deg) scale(.92)}
  34%{opacity:1;clip-path:inset(49.85% 43%)}
  48%{opacity:1;clip-path:inset(49.65% 0);transform:perspective(1200px) rotateX(7deg) scale(.98)}
  92%,100%{opacity:1;clip-path:inset(0);transform:perspective(1200px) rotateX(0) scale(1)}
}
@keyframes pixel-dedication{0%{opacity:0}10%,28%{opacity:1}42%,100%{opacity:0}}
@keyframes pixel-pulse{0%{box-shadow:0 0 4px #e7d7bc44;transform:translate(-50%,-50%) scale(.7)}65%{box-shadow:0 0 20px #e7d7bccc,0 0 60px #e7d7bc22;transform:translate(-50%,-50%) scale(1.2)}100%{transform:translate(-50%,-50%) scale(1)}}
@media(max-width:600px){
  .cover::before{width:100vw;aspect-ratio:1.25}
  .cover-center h1{font-size:clamp(35px,10.8vw,60px)}
  .cover-center h1 .birthday-recipient{font-size:1.12em;margin-top:7px}
  .cover-dedication{margin-top:27px}
  .cover-caption{font-size:18px;line-height:1.75;margin-top:17px}
  .cover-open{margin-top:29px}
  .photo-header .chapter-dateline{font-size:10px;letter-spacing:.55px;max-width:210px;text-align:right}
  .story-copy{padding-top:64px}
  .story-copy .photo-dedication{font-size:24px;margin-bottom:12px}
  .photo-story .photo-name{font-size:16px}
  .story-copy .photo-context{font-size:14px;line-height:1.8}
  .roman-introduction{bottom:182px;left:22px;right:22px}
  .roman-introduction .overline{display:none}
  .roman-introduction h2{font-size:28px;line-height:1.18}
  .roman-introduction>p.roman-context{font-size:14px;line-height:1.7;max-width:346px;margin:16px auto 0}
  .roman-context span+span{margin-top:5px}
  .roman-dedication{bottom:89px}
  .roman-dedication p{font-size:11px;letter-spacing:1.2px;margin-bottom:10px}
  .certificate-recipient{font-size:29px}
  .certificate-intro-copy .overline{font-size:11px;letter-spacing:1.8px}
}
@media(max-height:600px){
  .cover-center{padding:5px 0}
  .cover-center h1{font-size:clamp(34px,8dvh,48px)}
  .cover-dedication{margin-top:18px}
  .cover-caption{font-size:17px;margin-top:12px;line-height:1.6}
  .cover-open{margin-top:20px}
}
@media(max-height:500px) and (min-width:601px){
  .roman-introduction{bottom:95px;left:48%;right:4%;text-align:right}
  .roman-introduction h2{font-size:25px}
  .roman-introduction>p.roman-context{font-size:13px;line-height:1.6;margin:12px 0 0 auto}
  .roman-dedication{bottom:16px}
  .roman-dedication p{display:none}
}
@media(prefers-reduced-motion:reduce){
  .certificate-dialog[data-reveal=opening] .certificate-paper{animation:none;will-change:auto}
  .certificate-dialog[data-reveal=opening] .certificate-intro{display:none}
}

/* A quiet curtain between the birthday greeting and her first touch of the record. */
.opening-chapter[hidden]{display:none}
.opening-chapter{position:absolute;inset:0;z-index:7;background:#020306;outline:none;display:grid;place-items:center}
#opening-back{position:absolute;top:32px;left:5vw;z-index:2;color:#aca79d}
#opening-line{margin:0;text-align:center;font:400 clamp(27px,3vw,42px)/1.5 Georgia,serif;letter-spacing:-.015em;color:#e6e0d5;opacity:0;padding:24px}
#opening-line em{font-weight:400;color:var(--gold)}
.opening-stars{position:absolute;inset:0;pointer-events:none}
.opening-stars i{position:absolute;width:1px;height:1px;background:#d8d6ce;border-radius:50%;opacity:.38}
.opening-stars i:nth-child(1){left:18%;top:27%}.opening-stars i:nth-child(2){left:76%;top:34%;opacity:.21}
.opening-stars i:nth-child(3){left:64%;top:76%;opacity:.3}.opening-stars i:nth-child(4){left:32%;top:66%;opacity:.18}
.opening-stars i:nth-child(5){left:86%;top:61%;opacity:.27}
/* Crisp spacecraft surfaces, separated from the photographic Golden Record. */
canvas.voyager-craft{left:50%;top:2%;width:min(62vw,680px);max-width:none;height:auto;aspect-ratio:1.38;transform:translateX(-50%);mix-blend-mode:normal;mask-image:none;animation:none;opacity:0;filter:none}
.flight-verse{position:absolute;z-index:5;left:24px;right:24px;bottom:13dvh;text-align:center;pointer-events:none;opacity:0}
.flight-verse>span{display:block;min-height:20px;font:12px/1.6 Arial,sans-serif;letter-spacing:4px;color:#b5aa95;margin-bottom:18px}
.flight-verse>span:empty{display:none}
.flight-verse>p{margin:0;font:400 clamp(24px,2.6vw,36px)/1.4 Georgia,serif;color:#dcd8cf;letter-spacing:-.015em}
@media(max-width:600px){
  #opening-back{top:27px;left:6vw}
  #opening-line{font-size:28px}
  canvas.voyager-craft{left:50%;top:2%;width:94vw;max-width:none;aspect-ratio:1.16}
  .flight-verse{left:24px;right:24px;bottom:16dvh}
  .flight-verse>p{font-size:24px}
}
@media(max-height:600px) and (min-width:601px){
  canvas.voyager-craft{left:54%;top:-8%;width:40vw;aspect-ratio:1.3}
  .flight-verse{left:50%;right:5%;bottom:18%;text-align:left}
  .flight-verse>p{font-size:25px}
}

/* The last gifts are opened through light and a handwritten envelope. */
.certificate-bottom{left:auto;right:20px;bottom:max(26px,env(safe-area-inset-bottom));width:208px;display:flex;flex-direction:column;gap:17px;padding:0;background:none}
.gateway-art{display:block;flex-shrink:0;pointer-events:none}
.gateway-copy{display:flex;flex-direction:column;gap:7px;text-align:center}
.gateway-label{display:block;font:400 21px/1.3 Georgia,serif;color:#e7d7bc;letter-spacing:0}
.gateway-hint{display:block;font:11px/1.7 Arial,sans-serif;letter-spacing:.65px;color:#b1aba0}
.certificate-bottom a{font:11px/1.6 Arial,sans-serif;background:transparent;border:0;color:#c0b6a5;min-height:44px;padding:11px 3px;text-align:center}
.pixel-art{position:relative;width:64px;height:64px}
.pixel-orbit{position:absolute;inset:4px;border:1px solid #e7d7bc42;border-radius:50%;transform:rotate(-25deg) scaleY(.48)}
.pixel-orbit:nth-child(2){transform:rotate(53deg) scaleY(.48);border-color:#e7d7bc28}
.pixel-core{position:absolute;left:29px;top:29px;width:6px;height:6px;background:#f1e4cd;box-shadow:0 0 9px #e7d7bc99,0 0 25px #e7d7bc33;animation:gift-breath 6s ease-in-out infinite}
.pixel-spark{position:absolute;left:54px;top:16px;width:2px;height:2px;background:#e7d7bc;box-shadow:0 0 4px #e7d7bc88}
.roman-birthday{background:radial-gradient(ellipse at 50% 38%,#101219 0,#030509 64%);animation:none;overflow-y:auto;justify-content:safe center}
.wish-starlight{font:28px/1 Georgia,serif;color:#d6c5a7;margin-bottom:24px}
.roman-birthday .overline{margin-bottom:16px}
.roman-birthday h2{font-size:clamp(42px,4.6vw,64px);line-height:1.12;outline:none}
.roman-birthday h2::after{margin:24px auto 0}
.roman-birthday p:not(.overline){font-size:18px;line-height:1.8;margin:20px 0 17px}
.roman-birthday .wish-signoff{font-size:16px}
.note-navigation{display:block;margin-top:30px}
.roman-birthday #close-roman-wish{position:absolute;top:24px;left:5vw;margin:0;font:13px/1.6 Arial,sans-serif;min-height:44px;color:#e3ddd2}
.letter-gateway{display:flex;flex-direction:column;align-items:center;gap:7px;margin:0 auto;background:transparent;border:0;border-radius:3px;padding:7px 25px 14px;min-width:220px;transition:background .5s}
.letter-gateway:hover{background:#e7d7bc05}
.envelope-art{width:144px;height:101px;overflow:visible;perspective:800px;color:#d7c19b}
.envelope-art path,.envelope-art rect{stroke:currentColor;stroke-width:.9;stroke-linejoin:round}
.envelope-back{fill:#0a0d13;stroke-opacity:.5}
.envelope-paper rect{fill:#1b1c22;stroke-opacity:.38}
.envelope-paper path{stroke-opacity:.32}
.envelope-paper{transform:translateY(calc(var(--letter-lift,0) * -32px))}
.envelope-pocket{fill:#080b11;stroke-opacity:.8}
.envelope-folds{fill:none;stroke-opacity:.4}
.envelope-lid{fill:#10131a;transform-origin:90px 30px;transform:rotateX(var(--flap,0deg));transition:transform .8s;backface-visibility:visible}
.envelope-seal{fill:#c7ae80;stroke:#edd9ae;stroke-width:.5;opacity:var(--seal,1)}
.letter-gateway:hover .envelope-lid{transform:rotateX(-15deg)}
.letter-gateway .gateway-hint{margin-top:1px;color:#9f9a92}
.gift-journey[hidden]{display:none}
.gift-journey{position:fixed;inset:0;z-index:30;isolation:isolate;color:#e7d7bc;outline:none}
.gift-journey::before{content:'';position:absolute;inset:0;background:#030509;opacity:var(--veil,0);z-index:-1}
#gift-journey-back{position:absolute;left:5vw;top:24px;z-index:3;opacity:var(--back-opacity,1)}
.journey-center{position:absolute;inset:0;display:grid;place-content:center;justify-items:center;pointer-events:none}
.journey-figure{display:grid;place-items:center;will-change:transform,opacity;transform:translate(var(--move-x,0px),var(--move-y,0px)) scale(var(--figure-scale,1));opacity:var(--figure-opacity,1)}
.gift-journey .pixel-art{width:64px;height:64px}
.gift-journey .pixel-core{animation:none;transform:scale(var(--core-scale,1));box-shadow:0 0 12px #e7d7bcaa,0 0 55px #e7d7bc22}
.gift-journey .pixel-orbit{opacity:var(--orbit-opacity,1);transition:none}
.gift-journey .envelope-art{width:144px;height:101px}
.gift-journey .envelope-lid{transition:none}
#journey-caption{position:absolute;top:calc(50% + 108px);left:20px;right:20px;text-align:center;font:italic 24px/1.6 Georgia,serif;letter-spacing:-.01em;margin:0;opacity:var(--caption-opacity,0)}
.roman-birthday.is-arriving>.wish-starlight{animation:gift-copy-arrival 2.8s ease both}
.roman-birthday.is-arriving>.overline{animation:gift-copy-arrival 2.6s .1s ease both}
.roman-birthday.is-arriving>h2{animation:gift-copy-arrival 2.8s .25s ease both}
.roman-birthday.is-arriving>p:not(.overline){animation:gift-copy-arrival 2.8s .55s ease both}
.roman-birthday.is-arriving>.wish-signoff{animation:gift-copy-arrival 2.8s .85s ease both}
.roman-birthday.is-arriving>.note-navigation{animation:gift-copy-arrival 2.8s 1.15s ease both}
.letter-chapter.is-arriving .letter-page>.overline,.letter-chapter.is-arriving .letter-page>h2{animation:letter-unfold 2.8s ease both}
.letter-chapter.is-arriving .letter-rule{animation:rule-unfold 2.5s .45s ease both;transform-origin:left}
.letter-chapter.is-arriving .letter-salutation{animation:gift-copy-arrival 2.6s .75s ease both}
.letter-chapter.is-arriving .letter-content,.letter-chapter.is-arriving .letter-placeholder{animation:gift-copy-arrival 2.8s 1s ease both}
@keyframes gift-breath{0%,100%{opacity:.65;transform:scale(.85)}50%{opacity:1;transform:scale(1.12)}}
@keyframes gift-copy-arrival{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}
@keyframes letter-unfold{from{opacity:0;transform:perspective(900px) rotateX(7deg) translateY(18px)}to{opacity:1;transform:perspective(900px) rotateX(0) translateY(0)}}
@keyframes rule-unfold{from{transform:scaleX(0);opacity:0}to{transform:scaleX(1);opacity:1}}
@media(max-aspect-ratio:17/10){
  .certificate-bottom{left:0;right:0;bottom:max(15px,env(safe-area-inset-bottom));width:auto;gap:6px;align-items:center;padding:0 16px}
  .certificate-bottom a{min-height:34px;padding:7px 12px}
  .certificate-dialog:not(.zoomed) .certificate-paper img{height:100%;top:0}
}
@media(max-width:600px){
  .roman-birthday{padding:76px 23px 32px}
  .wish-starlight{font-size:24px;margin-bottom:21px}
  .roman-birthday h2{font-size:43px}
  .roman-birthday h2::after{margin:20px auto 0}
  .roman-birthday .overline{font-size:10px;letter-spacing:1.8px;margin-bottom:15px}
  .roman-birthday p:not(.overline){font-size:16px;margin:17px 0 15px}
  .roman-birthday .wish-signoff{font-size:14px;max-width:290px}
  .note-navigation{margin-top:20px}
  .letter-gateway{padding:4px 20px 12px;gap:5px}
  .envelope-art{width:132px;height:92px}
  .letter-gateway .gateway-label{font-size:21px}
  .roman-birthday #close-roman-wish,#gift-journey-back{left:6vw;top:20px}
  .certificate-dialog:not(.zoomed) .certificate-paper img{height:100%;top:0}
  #journey-caption{font-size:22px}
}
@media(max-height:700px){
  .roman-birthday{padding-top:64px;padding-bottom:24px}
  .wish-starlight{margin-bottom:15px;font-size:22px}
  .roman-birthday h2{font-size:40px}
  .roman-birthday h2::after{margin:16px auto 0}
  .roman-birthday p:not(.overline){margin:14px 0;font-size:16px}
  .note-navigation{margin-top:12px}
  .envelope-art{width:126px;height:88px}
}
@media(prefers-reduced-motion:reduce){
  .pixel-core,.roman-birthday.is-arriving>*,.letter-chapter.is-arriving .letter-page>*{animation:none!important}
  .envelope-lid,.letter-gateway{transition:none}
  .letter-gateway:hover .envelope-lid{transform:none}
  .journey-figure{will-change:auto}
}

/* A quiet, readable letter. Its words arrive once, at the reader's pace. */
@font-face{font-family:'Bowen Letter Serif';src:url('letter-serif.woff2') format('woff2');font-style:normal;font-weight:400;font-display:swap}
.letter-chapter{background:radial-gradient(ellipse at 50% 28%,#111319 0,#05070c 68%);animation:none}
.letter-chapter header{z-index:2;background:linear-gradient(#05070c,#05070ce8 66%,transparent)}
.letter-page{width:min(820px,100%);height:calc(100dvh - 112px);margin:96px auto 0;padding:22px 66px 58px;outline:none;overscroll-behavior:contain;scroll-behavior:auto;scrollbar-width:thin;scrollbar-color:#bda9843b transparent}
.letter-page:focus-visible{outline:none}
.letter-page>.overline{font-size:10px;letter-spacing:2.8px;color:#a79b87;margin-bottom:17px}
.letter-page h2{font-size:46px;line-height:1.18;letter-spacing:-.025em}
.letter-page h2 em{color:#dfcfb1}
.letter-rule{width:42px;background:#c8b18b70;margin:27px 0 37px}
.letter-content{font-family:'Bowen Letter Serif','Noto Serif CJK SC','Source Han Serif SC','Songti SC','STSong','SimSun',serif;font-weight:400;font-size:18.5px;line-height:2.15;letter-spacing:.045em;color:#d9d6cf;white-space:normal;text-align:left;overflow-wrap:break-word;line-break:strict;font-synthesis:none}
.letter-content>p{margin:0 0 1.5em;text-indent:2em}
.letter-content .letter-salutation{font:inherit;font-size:23px;line-height:1.8;text-indent:0;color:#e8dfcc;margin:0 0 25px;letter-spacing:.055em}
.letter-content .letter-first-wish{text-indent:0;color:#e2dac9;margin-bottom:1.7em}
.letter-content .letter-heart{text-indent:0;text-align:center;font-size:21px;line-height:2;color:#e4d2b1;margin:2em 0;padding:9px 0;letter-spacing:.055em}
.letter-closing{margin-top:2.2em;padding-bottom:5px}
.letter-closing .letter-goodnight{color:#e4dac5;text-indent:0;margin:0 0 35px}
.letter-closing address{font:inherit;font-size:15px;line-height:2;text-align:right;font-style:normal;letter-spacing:.08em;color:#a9a397}
.letter-closing address span,.letter-closing time{display:block}
.letter-closing .letter-author{font-size:22px;letter-spacing:.13em;color:#e2d6bf;margin-bottom:10px}
.letter-page .letter-footer{position:static;margin:46px 0 0;padding:28px 0 0;border-top:1px solid #e7d7bc17;text-align:center}
.letter-page .letter-footer .text-button{font:11px/1.8 Arial,sans-serif;letter-spacing:.6px;color:#a59b89;border-bottom-color:#e7d7bc35;min-height:44px}
.letter-content[data-animated=true] [data-letter-part]{opacity:0;transform:translateY(6px);transition:opacity 1.25s ease,transform 1.25s ease}
.letter-content[data-animated=true] [data-letter-part].is-readable{opacity:1;transform:none}
.letter-chapter.is-arriving .letter-content{animation:gift-copy-arrival 2.1s .45s ease both}
@media(max-width:600px){
  .letter-page{height:calc(100dvh - 99px);margin-top:85px;padding:14px 29px 48px}
  .letter-page>.overline{font-size:9px;letter-spacing:2.5px;margin-bottom:13px}
  .letter-page h2{font-size:34px;line-height:1.2}
  .letter-rule{width:32px;margin:23px 0 31px}
  .letter-content{font-size:16.5px;line-height:2.1;letter-spacing:.025em}
  .letter-content>p{margin-bottom:1.45em}
  .letter-content .letter-salutation{font-size:21px;margin-bottom:24px}
  .letter-content .letter-first-wish{margin-bottom:1.55em}
  .letter-content .letter-heart{font-size:18.5px;letter-spacing:.015em;margin:1.9em 0;line-height:2.1}
  .letter-closing .letter-goodnight{font-size:16px;margin-bottom:28px}
  .letter-closing address{font-size:13px}
  .letter-closing .letter-author{font-size:20px}
  .letter-page .letter-footer{margin-top:36px;padding-top:21px}
}
@media(max-height:600px) and (min-width:601px){
  .letter-page{margin-top:73px;height:calc(100dvh - 86px);padding-top:12px}
  .letter-page h2{font-size:38px}
  .letter-rule{margin:22px 0 29px}
}
@media(prefers-reduced-motion:reduce){
  .letter-content[data-animated=true] [data-letter-part]{opacity:1;transform:none;transition:none}
}
@media(max-width:600px),(max-height:600px){
  .letter-chapter header .chapter-dateline{display:none}
  #letter-chapter:not([hidden])~#music-toggle{left:auto;right:6vw;top:20px;bottom:auto;min-height:44px;font-size:11px;padding:8px 11px;background:#05070caa;border-color:#e7d7bc29}
}


/* The original certificate fills the scene before its pixel becomes a wish. */
.certificate-bottom{left:auto;right:24px;width:auto;bottom:max(16px,env(safe-area-inset-bottom));padding:0;gap:0}
@media(max-width:600px){.certificate-bottom{right:14px;bottom:max(16px,env(safe-area-inset-bottom))}}

/* Quiet controls, an independent journey clock, and first-visit guidance. */
.cover-top{justify-content:center}.cover-bottom{min-height:36px}
#playback-controls{position:absolute;z-index:22;top:85px;left:4vw;display:flex;gap:8px;align-items:center}
#playback-controls[hidden]{display:none}#playback-controls .music-toggle{position:static}
.journey-pause{min-height:34px;padding:8px 12px;border:1px solid #e7d7bc35;border-radius:20px;background:#030509b0;color:#d6cbbb;font:11px Arial,sans-serif;cursor:pointer}
#gift-journey-pause{position:absolute;right:5vw;top:24px;z-index:4}
.journey-paused #experience *,.journey-paused #experience *::before,.journey-paused #experience *::after{animation-play-state:paused!important}
.explore-hint{position:absolute;top:93px;left:50%;transform:translateX(-50%);width:max-content;max-width:88vw;text-align:center;color:#e7d7bcb3;font:11px/1.8 Arial,sans-serif;letter-spacing:.04em;pointer-events:none;animation:hint-appear 1.8s ease both}
.explore-hint span{color:#e7d7bc78}.explore-hint[hidden]{display:none}@keyframes hint-appear{from{opacity:0}to{opacity:1}}
.replay-control{display:block;margin:0 0 15px;padding:8px 0;color:#ded3c3;background:none;border:0;text-align:left;font:12px Arial,sans-serif;cursor:pointer}
#opening-continue{position:absolute;bottom:15%;left:50%;transform:translateX(-50%)}
#certificate-beacon{position:fixed;z-index:3;width:10px;height:10px;border-radius:2px;background:#fff3cc;box-shadow:0 0 14px 6px #ffe6a5b3,0 0 48px 16px #edbd634d;pointer-events:none}
.certificate-menu{pointer-events:auto;position:relative}.certificate-menu summary{min-width:34px;min-height:34px;display:grid;place-items:center;cursor:pointer}.certificate-menu .control-panel{right:0;top:42px}
.wish-menu{position:absolute;right:5vw;top:22px}.letter-menu{position:relative;margin:0 24px 0 0}.letter-menu .control-panel{bottom:40px;top:auto;right:auto;left:0}.letter-footer{display:flex;align-items:center;justify-content:center}
#letter-chapter:not([hidden])~#playback-controls{left:auto;right:4vw;top:20px}
/* The original certificate stays intact; the next chapter is visibly approaching. */
.certificate-paper{inset:76px 0 142px}
.certificate-bottom{left:0;right:0;bottom:max(15px,env(safe-area-inset-bottom));width:auto;gap:7px;align-items:center;padding:0 20px;pointer-events:none}
.certificate-next{width:min(320px,100%);text-align:center;pointer-events:auto}
.journey-paused .certificate-dialog[open],.journey-paused .certificate-dialog[data-reveal=ready] .certificate-bottom{animation:none;opacity:1}
#certificate-next-copy{margin:0 0 13px;color:#e7d7bc;font:italic 18px/1.4 Georgia,serif}
.certificate-progress{height:1px;width:140px;margin:0 auto;background:#e7d7bc25;overflow:visible}
#certificate-progress-fill{display:block;width:100%;height:1px;background:#e7d7bc;box-shadow:0 0 7px #e7d7bc66;transform:scaleX(0);transform-origin:left}
.certificate-bottom #certificate-continue{display:block;margin:3px auto 0;min-height:40px;padding:9px 18px;border:0;background:transparent;font:11px/1.5 Arial,sans-serif;letter-spacing:.7px;color:#d1c5b0}
.certificate-bottom #certificate-continue:hover{color:#fff4da;background:#e7d7bc0a}
.certificate-bottom #certificate-continue span{margin:0;color:inherit}.certificate-bottom #certificate-continue span+span{margin-left:9px}
.certificate-bottom a{min-height:30px;padding:4px 10px;font-size:10px;color:#9e978b}
@media(max-width:600px){.certificate-paper{inset:114px 0 157px}.certificate-bottom{left:0;right:0;padding:0 18px;bottom:max(15px,env(safe-area-inset-bottom));gap:7px}#certificate-next-copy{font-size:17px}.certificate-bottom a{min-height:30px;padding:4px 10px}}
@media(max-height:500px){.certificate-paper{inset:70px 0 104px}.certificate-bottom{bottom:8px;gap:0}#certificate-next-copy{font-size:15px;margin-bottom:7px}.certificate-bottom #certificate-continue{min-height:32px;padding:5px 14px}.certificate-bottom a{min-height:24px;padding:2px 8px}}
@media(max-width:600px){#playback-controls{top:75px;left:6vw;gap:6px}#playback-controls button{font-size:10px;padding:7px 10px;min-height:34px}.explore-hint{top:122px;font-size:10px}.explore-hint span{display:block}.certificate-topbar{padding:12px;gap:8px;align-items:flex-start}.certificate-utilities{display:grid;grid-template-columns:auto auto;gap:5px}.certificate-utilities button{font-size:10px;padding:7px 9px}.certificate-menu{grid-column:1;grid-row:2}.certificate-menu summary{font-size:18px}#letter-chapter:not([hidden])~#playback-controls{right:6vw;top:20px}.letter-footer .control-panel{width:170px}}
