@font-face{font-family:'Hanken Grotesk';src:url('assets/hanken-grotesk.ttf') format('truetype');font-weight:400;font-display:swap}
@font-face{font-family:Playfair;src:url('assets/playfair-display.ttf') format('truetype');font-display:swap}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:#d5e3eb;color:#292e23;font-family:'Hanken Grotesk',Arial,sans-serif}a{color:inherit}a:focus-visible{outline:2px solid;outline-offset:8px}.skip{position:fixed;top:-60px;left:20px;z-index:5;padding:10px;background:#f5f3e8}.skip:focus{top:15px}.journey{height:330svh}.stage{height:100svh;position:sticky;top:0;overflow:hidden}canvas{position:absolute;inset:0;width:100%;height:100%;background:url('assets/frames-web/000.webp') center/cover}.shade{position:absolute;inset:0;background:linear-gradient(transparent 64%,rgba(18,27,14,.12) 73%,rgba(18,27,14,.73));opacity:var(--reveal,0);pointer-events:none}.title{margin:0;font-family:Playfair,Georgia,serif;font-weight:400;position:absolute;inset:0;pointer-events:none}.small-title{position:absolute;top:23%;left:50%;transform:translate(-50%,-50%);font-size:23px;letter-spacing:0;padding-left:0;opacity:var(--small,1)}.large-title{position:absolute;top:-.04em;left:0;width:100%;text-align:center;font-size:min(29vw,27svh);line-height:1.02;letter-spacing:-.025em;padding-left:0;opacity:var(--large,0)}.invitation{position:absolute;bottom:24px;left:0;width:100%;text-align:center;font-family:Playfair,Georgia,serif;font-size:14px;font-style:italic;color:#f6f4e9;text-shadow:0 1px 6px #25341d;opacity:var(--small,1)}.bottom{position:absolute;bottom:35px;left:3.5%;right:3.5%;display:grid;grid-template-columns:1.15fr 1fr .85fr;gap:40px;align-items:end;color:#faf8ed;opacity:var(--reveal,0);transform:translateY(calc((1 - var(--reveal,0))*30px));visibility:hidden}.bottom.visible{visibility:visible}.chapter-label{font-family:Playfair,Georgia,serif;font-size:16px;font-style:italic}.chapter-heading h2{font-family:Playfair,Georgia,serif;font-weight:400;font-size:clamp(24px,2.5vw,42px);line-height:1.12;letter-spacing:-.025em;margin:4px 0 0;max-width:13ch}.chapter-text{font-size:12px;line-height:1.8;margin:0;max-width:32ch}.chapter-ending{font-family:Playfair,Georgia,serif;font-size:clamp(23px,2.4vw,40px);font-weight:400;line-height:1.15;letter-spacing:-.025em;margin:0;text-align:right}.beyond{background:#e8eddc;color:#323c26;min-height:90svh;text-align:center;padding:95px 25px 35px;display:flex;align-items:center;flex-direction:column}.section-name{font-family:Playfair,Georgia,serif;font-style:italic;font-size:16px;margin:0}.beyond h2{font-family:Playfair,Georgia,serif;font-weight:400;font-size:clamp(64px,9vw,145px);line-height:1.05;letter-spacing:-.05em;margin:60px 0 35px}.closing{font-size:14px}.beyond a{margin-top:auto;padding-top:55px;font-size:11px;text-underline-offset:5px}
@media(max-width:650px){.journey{height:320svh}.small-title{top:22%;font-size:21px}.large-title{top:10%;font-size:28vw;letter-spacing:-.025em;padding-left:0}.bottom{left:6%;right:6%;bottom:30px;grid-template-columns:1fr 1fr;gap:22px 20px}.chapter-heading{grid-column:1/-1}.chapter-heading h2{max-width:none;font-size:27px}.chapter-label{font-size:14px}.chapter-text{font-size:10px;line-height:1.7}.chapter-ending{font-size:22px}.shade{background:linear-gradient(transparent 55%,rgba(18,27,14,.15) 68%,rgba(18,27,14,.84))}.beyond{min-height:80svh;padding-top:70px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.bottom{transform:none}}

@font-face{font-family:Playfair;src:url('assets/playfair-display-italic.ttf') format('truetype');font-style:italic;font-weight:400;font-display:swap}
#landscape{z-index:0}.title{z-index:1}#foreground{z-index:2;background:none;pointer-events:none}.shade{z-index:3}.bottom,.invitation{z-index:4}
.large-title{color:rgba(243,246,249,.48);font-style:italic;top:13%;font-size:min(47vw,61svh);line-height:1;letter-spacing:-.055em;padding-right:.05em}
@media(max-width:650px){.large-title{top:22%;font-size:46vw}}

.large-title{top:0;opacity:1;transform-origin:50% 0;transform:translateY(var(--title-y,88svh));will-change:transform}

.top-brand{position:absolute;top:28px;left:3.5%;z-index:4;font-family:Playfair,Georgia,serif;font-style:italic;font-weight:400;font-size:30px;line-height:1;letter-spacing:-.055em;color:rgba(243,246,249,.85);opacity:var(--brand-opacity,0);pointer-events:none}
@media(max-width:650px){.top-brand{top:24px;left:6%;font-size:27px}}

.chapter-text,.chapter-ending{opacity:calc(1 - var(--cards,0))}
.vignettes{position:absolute;z-index:4;bottom:35px;right:3.5%;width:60%;display:grid;grid-template-columns:1fr 1fr;gap:22px;visibility:hidden;pointer-events:none}
.vignette{margin:0;opacity:var(--cards,0);transform:translateY(calc((1 - var(--cards,0)) * (100% + 50px)));will-change:transform,opacity}
.vignette img{display:block;width:100%;height:auto;aspect-ratio:900/672;object-fit:cover}
.vignette figcaption{font-size:12px;line-height:1.4;color:#faf8ed;margin-top:10px}
@media(max-width:650px){.vignettes{left:6%;right:6%;width:auto;bottom:30px;gap:14px}.vignette figcaption{font-size:10px}.chapter-heading{transform:translateY(calc(var(--cards,0) * -145px))}}
@media(prefers-reduced-motion:reduce){.vignette,.chapter-heading{transform:none}.vignettes{bottom:140px}}

.vignettes{width:43%;max-width:580px;grid-template-columns:.72fr 1fr;align-items:end;gap:24px}
.vignette.apple img{aspect-ratio:1;object-fit:cover}
.vignette.serpent img{aspect-ratio:1.5;object-fit:cover}
.garden-statement{position:relative}.statement-before{opacity:calc(1 - var(--still,0))}.statement-after{position:absolute;left:0;top:0;opacity:var(--still,0);font-style:italic}
.beyond{min-height:105svh;display:block;text-align:left;padding:85px 7% 75px;background:#e7ebdf}
.beyond h2,.beginning h2{font-family:Playfair,Georgia,serif;font-weight:400;font-size:clamp(56px,8.5vw,140px);line-height:1.08;letter-spacing:-.05em;margin:80px 0 65px}
.beyond h2 em,.beginning h2 em{font-weight:400}
.beyond-copy{display:flex;justify-content:flex-end;gap:7vw;font-size:14px;line-height:1.85}.beyond-copy p{margin:0}.departure{font-family:Playfair,Georgia,serif;font-style:italic;font-size:24px;margin:100px 0 0}
.beginning{padding:85px 7% 0;background:#eee9df;color:#424231;min-height:100svh}
.beginning h2{margin-left:20%}.beginning-copy{margin:0 0 110px 50%;font-size:14px;line-height:1.85}
footer{border-top:1px solid #42423133;padding:28px 0;display:flex;align-items:center;justify-content:space-between;gap:25px;font-size:11px}footer a{text-underline-offset:4px}.footer-brand{font-family:Playfair,Georgia,serif;font-style:italic;font-size:34px;text-decoration:none}
@media(max-width:650px){.vignettes{width:74%;left:auto;right:6%;gap:16px}.vignette figcaption{font-size:9px}.chapter-heading{transform:translateY(calc(var(--cards,0) * -35px))}.beyond,.beginning{padding:60px 6% 0;min-height:auto}.beyond{padding-bottom:60px}.beyond h2,.beginning h2{font-size:14vw;margin:65px 0 40px}.beyond-copy{display:block;font-size:13px}.beyond-copy p+p{margin-top:25px}.departure{margin-top:70px}.beginning-copy{margin:0 0 75px;font-size:13px}footer{flex-wrap:wrap}footer p{display:none}}
@media(prefers-reduced-motion:reduce){.chapter-heading{transform:none}}

.beyond{padding:0 0 70px;background:#e7ebdf}
.beyond-landscape{position:relative;aspect-ratio:5504/3072;overflow:hidden}
.beyond-landscape>img{display:block;width:100%;height:100%;object-fit:cover}
.beyond-landscape>.section-name{position:absolute;top:7%;left:7%}
.beyond-landscape h2{position:absolute;top:19%;left:7%;margin:0;font-size:clamp(45px,6.6vw,112px);line-height:1.06;color:#424c3c}
.beyond-copy{padding:55px 7% 0}.departure{margin:65px 7% 0}
@media(max-width:650px){.beyond{padding:0 0 50px}.beyond-landscape{aspect-ratio:4/5}.beyond-landscape>img{object-position:68% center}.beyond-landscape>.section-name{top:6%;left:6%;font-size:14px}.beyond-landscape h2{top:15%;left:6%;font-size:10vw}.beyond-copy{padding:35px 6% 0}.departure{margin:45px 6% 0}}

/* The next landscape dissolves over the pinned garden before normal scrolling resumes. */
.journey{height:470svh}
.beyond-overlay{position:absolute;inset:0;z-index:5;padding:0;min-height:0;height:100%;opacity:var(--scene-fade,0);pointer-events:none;background:#d5e3eb}
.beyond-overlay .beyond-landscape{height:100%;aspect-ratio:auto}
.beyond-overlay .beyond-landscape>img{object-fit:cover;object-position:68% center}
.beyond-overlay .section-name,.beyond-overlay h2{opacity:var(--scene-title,0)}
.beyond-overlay .beyond-landscape h2{top:18%}
.beyond-details{background:#e7ebdf;padding:0 0 70px;color:#323c26}
@media(max-width:650px){.journey{height:445svh}.beyond-overlay{padding:0}.beyond-overlay .beyond-landscape{aspect-ratio:auto}.beyond-details{padding-bottom:50px}}

/* Keep the wordmark above both landscapes during the dissolve. */
.top-brand{z-index:6}

.beyond-overlay .beyond-landscape>.section-name{left:3.5%}
@media(max-width:650px){.beyond-overlay .beyond-landscape>.section-name{left:6%}}

/* Local highlight veils; the source photographs remain sharp. */
.glow-image{position:relative;overflow:hidden;isolation:isolate}
.beyond-landscape>.glow-image{width:100%;height:100%}
.beyond-landscape>.glow-image>img{display:block;width:100%;height:100%;object-fit:cover;object-position:68% center}
.breathing-glow{pointer-events:none;mix-blend-mode:screen;filter:brightness(.72) contrast(1.8) blur(14px);opacity:.62}
.glow-image>img.breathing-glow{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
canvas.video-glow{z-index:3;background:none}
@media(prefers-reduced-motion:reduce){.breathing-glow{opacity:.15}}

.beyond-overlay .breathing-glow{opacity:1;filter:brightness(.95) contrast(1.8) blur(20px)}
@media(prefers-reduced-motion:reduce){.beyond-overlay .breathing-glow{opacity:.25}}

/* Only the photograph and its glow travel; the text remains pinned above them. */
.journey{height:780svh}
.beyond-overlay .beyond-landscape>.glow-image>img{object-position:calc(var(--panorama-progress,0) * 100%) center}
@media(max-width:650px){.journey{height:750svh}}

.pan-copy-start{opacity:var(--pan-first,1)}.pan-copy-end{position:absolute;top:0;left:0;width:100%;opacity:var(--pan-second,0)}

.beyond-overlay .beyond-landscape h2{left:3.5%;top:50%;transform:translateY(-50%)}
@media(max-width:650px){.beyond-overlay .beyond-landscape h2{left:6%}}

.journey{height:1180svh}
.beyond-overlay .glow-image{transform:translateY(calc(var(--apple-rise,0) * 100svh))}
.beyond-overlay #beyond-title,.beyond-overlay .section-name{opacity:calc(var(--scene-title,0) * (1 - var(--apple-away,0)))}
.apple-scene{position:absolute;inset:0;z-index:5;pointer-events:none;visibility:hidden;transform:translateY(calc((var(--apple-rise,0) - 1) * 100svh));mask-image:linear-gradient(black 0%,black calc(80% + var(--apple-rise,0) * 20%),transparent 100%)}
#apple-film{background:#c9d8e7 url('assets/apple-frames/000.webp') center/cover}
.apple-title{position:absolute;left:3.5%;top:50%;transform:translateY(-50%);z-index:6;font:400 clamp(38px,5.7vw,96px)/1.1 Playfair,Georgia;letter-spacing:-.04em;margin:0;color:#424c3c;opacity:var(--apple-copy,0);visibility:hidden;pointer-events:none}
@media(max-width:650px){.journey{height:1100svh}.apple-title{left:6%;top:76%;font-size:10vw}}

/* Broad sky overlap during the upward move, fully opaque once settled. */
.apple-scene{mask-image:linear-gradient(to bottom,black 0%,black calc(var(--apple-rise,0) * var(--apple-rise,0) * 100%),transparent 100%);opacity:var(--apple-blend,0)}

.beyond-overlay .glow-image{mask-image:linear-gradient(to bottom,transparent 0%,black calc(var(--apple-rise,0) * 65%),black 100%)}

/* Return down through the sky to the final meadow. */
.journey{height:1450svh}
.apple-scene{transform:translateY(calc((var(--apple-rise,0) - 1 - var(--ending,0)) * 100svh))}
.ending-scene{position:absolute;inset:0;z-index:5;background:#d5e3eb;visibility:hidden;transform:translateY(calc((1 - var(--ending,0)) * 100svh));opacity:var(--ending,0);mask-image:linear-gradient(to bottom,transparent 0%,black calc((1 - var(--ending,0)) * 70%),black 100%);pointer-events:none}
.ending-scene img{display:block;width:100%;height:100%;object-fit:cover;object-position:65% center}
.ending-copy{position:absolute;inset:0;z-index:6;visibility:hidden;opacity:var(--ending-copy,0);pointer-events:none;color:#424c3c}
.ending-copy h2{position:absolute;left:3.5%;top:14%;font:400 clamp(34px,4.5vw,76px)/1.12 Playfair,Georgia;letter-spacing:-.035em;margin:0}
.ending-copy a{position:absolute;left:3.5%;bottom:30px;color:#faf8ed;font-size:12px;text-underline-offset:5px;pointer-events:auto;text-shadow:0 1px 5px #323c26}
@media(max-width:650px){.journey{height:1350svh}.ending-scene{background:#d1dbea}.ending-scene img{position:absolute;bottom:0;height:auto;object-fit:contain}.ending-copy h2{left:6%;top:27%;font-size:9vw}.ending-copy a{left:6%}}

.apple-scene{opacity:calc(var(--apple-blend,0) * (1 - var(--apple-exit,0)))}
@media(min-width:651px){.ending-copy h2{top:12%;font-size:clamp(30px,3.5vw,58px);line-height:1.08;max-width:65vw}}

/* An opaque sky under the outgoing film prevents the earlier panorama showing through. */
.ending-sky{position:absolute;inset:0;z-index:5;pointer-events:none;background:linear-gradient(#bdcfe1,#dcdfea);opacity:var(--ending-sky,0)}
.apple-scene{mask-image:linear-gradient(to bottom,black 0%,black calc(var(--apple-rise,0) * var(--apple-rise,0) * (1 - var(--ending,0)) * 100%),transparent 100%)}
.ending-scene{mask-image:linear-gradient(to bottom,transparent 0%,black calc((1 - var(--ending,0)) * 100%),black 100%)}

/* Cards unfold in the bottom bar, around a low horizontal hinge. */
.vignettes{perspective:1000px;perspective-origin:50% 100%}
.vignette{transform-origin:50% 100%;backface-visibility:hidden;transform:rotateX(calc((1 - var(--cards,0)) * 78deg)) rotateY(calc((1 - var(--cards,0)) * -12deg)) scale(calc(.82 + var(--cards,0) * .18));will-change:transform,opacity}
.vignette.serpent{transform:rotateX(calc((1 - var(--cards,0)) * 72deg)) rotateY(calc((1 - var(--cards,0)) * 12deg)) scale(calc(.86 + var(--cards,0) * .14))}
.closing-footer{border:0;margin:0;background:#e7ebdf;color:#424c3c;padding:42px 3.5%;display:flex;align-items:center;justify-content:space-between;gap:28px}
.closing-brand{font:italic 48px Playfair,Georgia;letter-spacing:-.055em;text-decoration:none}
.closing-footer p{font:italic 18px Playfair,Georgia;margin:0}
.closing-footer .restart{font:13px 'Hanken Grotesk',Arial;text-decoration:none;border-bottom:1px solid #424c2666;padding-bottom:5px}
@media(max-width:650px){.closing-footer{padding:32px 6%;flex-wrap:wrap}.closing-footer p{display:block;order:3;width:100%;font-size:16px}.closing-brand{font-size:38px}}
@media(prefers-reduced-motion:reduce){.vignette,.vignette.serpent{transform:none}}

/* Both cards pivot around the viewport's lower-left corner, on distinct axes. */
.vignettes{perspective:1500px;perspective-origin:0% 100%}
.vignette .glow-image{border-radius:12px}
.vignette{transform-origin:var(--hinge-x,0px) var(--hinge-y,100%)}
.vignette.apple{opacity:var(--card-apple,0);transform:rotateZ(calc((1 - var(--card-apple,0)) * 19deg)) rotateY(calc((1 - var(--card-apple,0)) * -32deg))}
.vignette.serpent{opacity:var(--card-serpent,0);transform:rotateZ(calc((1 - var(--card-serpent,0)) * 27deg)) rotateX(calc((1 - var(--card-serpent,0)) * 38deg))}
@media(prefers-reduced-motion:reduce){.vignette.apple,.vignette.serpent{transform:none}}

.footer-note{text-align:center}.scripture-reference{display:block;margin-top:9px;font:11px "Hanken Grotesk",Arial;opacity:.65}@media(max-width:650px){.footer-note{order:3;width:100%;text-align:left}}

/* Portrait compositions: stable scene height, readable copy and room around the subjects. */
@media(max-width:650px){
  html{scroll-padding-top:24px}
  .journey{height:1100svh}
  .top-brand{top:max(22px,env(safe-area-inset-top));left:6%;font-size:28px}
  .large-title{font-size:48vw;letter-spacing:-.065em}
  .bottom{bottom:max(28px,env(safe-area-inset-bottom));gap:18px 16px;align-items:start}
  .chapter-heading{transform:translateY(calc(var(--cards,0) * -35px))}
  .chapter-heading h2{font-size:clamp(28px,7.7vw,36px);max-width:12ch;line-height:1.09}
  .chapter-label{font-size:15px}
  .chapter-text{font-size:12px;line-height:1.55}
  .chapter-ending{font-size:clamp(20px,5.6vw,26px);line-height:1.18;text-align:left}
  .vignettes{left:6%;right:6%;bottom:max(28px,env(safe-area-inset-bottom));width:auto;gap:18px;grid-template-columns:.75fr 1fr}
  .vignette figcaption{font-size:11px;line-height:1.35;margin-top:9px;max-width:16ch}
  .vignette .glow-image{border-radius:10px}
  .invitation{bottom:max(24px,env(safe-area-inset-bottom));font-size:15px}
  .beyond-overlay{background:#d2ddeb}
  .beyond-landscape>.glow-image{position:absolute;bottom:0;height:78%}
  .beyond-overlay .glow-image{mask-image:linear-gradient(to bottom,transparent,black max(12%,calc(var(--apple-rise,0) * 65%)),black)}
  .beyond-overlay .beyond-landscape>.section-name{top:14%;font-size:15px}
  .beyond-overlay .beyond-landscape h2{top:32%;left:6%;width:88%;font-size:clamp(35px,10.3vw,56px);line-height:1.1;letter-spacing:-.04em}
  .apple-title{left:6%;top:78%;font-size:clamp(36px,10.5vw,56px);line-height:1.1}
  .ending-scene{background:linear-gradient(#c7cee5,#d9d9e8)}
  .ending-scene img{width:185%;max-width:none;height:auto;left:-60%;bottom:0;mask-image:linear-gradient(transparent,black 22%)}
  .ending-copy h2{top:23%;left:6%;max-width:88%;font-size:clamp(30px,8.5vw,46px);line-height:1.15;letter-spacing:-.035em}
  .closing-footer{padding:34px 6% max(34px,env(safe-area-inset-bottom));gap:22px}
  .closing-footer .restart{min-height:44px;display:flex;align-items:center;padding:8px 0;font-size:12px}
  .closing-footer p{font-size:19px;line-height:1.4;max-width:26ch}
  .scripture-reference{font-size:12px;margin-top:12px}
}
@media(max-width:650px) and (max-height:700px){
  .chapter-heading h2{font-size:27px}
  .chapter-heading{transform:translateY(calc(var(--cards,0) * -35px))}
  .vignettes{width:76%;left:auto}
  .chapter-text{font-size:11px}
  .ending-copy h2{top:18%;font-size:8vw}
}

@media(max-width:650px){.vignettes{left:auto;width:80%}}
@media(max-width:650px){
  .chapter-heading h2{max-width:none;font-size:clamp(25px,6.9vw,32px)}
  .chapter-heading{transform:translateY(calc(var(--cards,0) * -80px))}
}
@media(max-width:650px) and (max-height:700px){
  .chapter-heading{transform:translateY(calc(var(--cards,0) * -65px))}
  .vignettes{width:72%}
}
