/* A room whose name and inhabitants occupy different planes. */
.spatial-world{background:#252621}
.world:after{box-shadow:inset 0 0 100px #12171130}
.room-atmosphere{position:absolute;inset:-4%;background:url('assets/detail-glance.webp') 60% 45%/cover;filter:blur(28px) brightness(.38);opacity:.9}
.scene-perspective{position:absolute;inset:0;perspective:1000px;perspective-origin:50% 50%;overflow:hidden}
.scene-camera{position:absolute;left:50%;top:50%;width:0;height:0;transform-style:preserve-3d}
.reflection{position:absolute;left:0;top:0;overflow:hidden;backface-visibility:hidden;background:#21211d;box-shadow:0 0 0 .5px rgb(220 216 196 / calc(.25 * (1 - var(--gather,0))))}
.reflection:before,.reflection:after{content:'';position:absolute;z-index:2;top:0;bottom:0;width:2px;pointer-events:none;opacity:calc(1 - var(--gather,0))}
.reflection:before{left:0;background:linear-gradient(180deg,#ddd7ba12,#eee5cc99 37%,#9d98713d 70%,#fff2);box-shadow:1px 0 4px #080b0955}
.reflection:after{right:0;width:1px;background:linear-gradient(180deg,#080b0920,#0b0d09b3 42%,#eee5cc4a 77%,#080b0920)}
.glimpse-photo,.together-photo,.reflection-light,.reflection-shutter{position:absolute;inset:0;background-size:cover;background-repeat:no-repeat}
.together-photo,.gathered-photograph{background-image:url('assets/detail-laughter.webp')}
.reflection-light{inset:-1px -24%;background:linear-gradient(102deg,transparent 46%,#f5ecd822 49.6%,#f5ecd844 50%,#f5ecd808 50.5%,transparent 54%);mix-blend-mode:screen;will-change:transform,opacity}
.gathered-photograph{position:absolute;inset:0;opacity:0;background-repeat:no-repeat;pointer-events:none;will-change:opacity}
.spatial-lettering{position:absolute;left:0;top:0;transform-style:preserve-3d}
.spatial-lettering>span{position:absolute;left:0;top:0;display:block;font-family:var(--display);font-size:clamp(130px,min(18.5vw,26svh),340px);font-weight:400;line-height:.72;letter-spacing:.015em;color:#e8ecc7;white-space:nowrap;text-shadow:0 1px 28px #1a231a18;transform-style:preserve-3d}
.room-letter{position:absolute;left:0;top:0;display:block;transform-origin:0 0;backface-visibility:visible;will-change:transform}
.motion-off .room-letter,.still-view .room-letter{will-change:auto}
.spatial-shade{position:absolute;inset:0;background:linear-gradient(180deg,#11130f70,transparent 26%,transparent 65%,#11130fe8);transition:background .5s}
.still-photograph{position:absolute;inset:0;background:url('assets/detail-glance.webp') 65% center/cover;display:none}
.still-view .scene-perspective{display:none}.still-view .still-photograph{display:block}
.still-view .gathered-photograph{display:none}

.still-view .room-controls,.still-view .gesture-hint{display:none}
.masthead{height:98px;background:linear-gradient(180deg,#14190c66,transparent)}
.masthead .underlined{border-color:#eeeecc50}
.arrival{cursor:default;min-height:650px;height:100svh;touch-action:pan-y pinch-zoom}
.edition{top:128px;font-size:11px;letter-spacing:.02em;gap:26px}
.edition>span:last-child{display:none}
.arrival-action{bottom:109px;left:var(--pad)}
.enter-link{font-size:19px;min-height:52px;gap:42px;border-bottom:1px solid #dbe1c18a;padding-bottom:8px}
.enter-link>span:last-child{font-size:30px;transition:transform .4s var(--ease)}
.enter-link:hover>span:last-child{transform:translate(5px,-5px)}
.room-controls{position:absolute;right:var(--pad);bottom:110px;display:flex;align-items:center;gap:44px}
#gather-reflections{display:flex;align-items:center;gap:14px;font-size:13px;min-height:50px;min-width:211px;user-select:none;touch-action:none}
.gather-symbol{display:block;width:32px;height:40px;flex:0 0 32px}
.gather-symbol svg{display:block;width:100%;height:100%;stroke:currentColor;stroke-width:.85;stroke-linejoin:round}
.gather-left{transform:translateX(calc(var(--gather,0)*4px))}.gather-right{transform:translateX(calc(var(--gather,0)*-4px))}
.gather-middle{opacity:calc(.35 + var(--gather,0)*.65)}
#gather-reflections:hover{color:var(--acid)}
.room-controls button:focus-visible{outline:1px solid #e7e6c4b3;outline-offset:6px}
#another-angle{font-size:12px;gap:18px}
#another-angle:disabled{opacity:.35}
.gesture-hint{display:block;bottom:175px;right:var(--pad);font-size:10px;opacity:.8;max-width:none;visibility:visible!important}
.entering-room .arrival-action,.entering-room .room-controls,.entering-room .gesture-hint{opacity:0;transition:opacity .3s}
body[data-view="arrival"] .site-footer,body[data-view="invitation"] .site-footer{position:absolute;top:auto;bottom:11px;left:var(--pad);right:var(--pad);margin:0}
.room-invitation{display:flex;align-items:center;justify-content:center;min-height:max(760px,100svh);padding:112px 12% 100px 34%;isolation:isolate}
.room-invitation.is-entering{animation:none}
.room-note{background:#e9e7d7;color:#2a3026;width:430px;max-width:100%;padding:25px 36px 29px;transform:rotate(1.2deg);box-shadow:0 1px 2px #10130e26,5px 12px 24px #10130e26,12px 30px 70px #10130e42;animation:note-arrive .95s cubic-bezier(.16,1,.3,1)}
@keyframes note-arrive{from{opacity:0;transform:translateY(24px) rotate(2.4deg)}to{opacity:1;transform:translateY(0) rotate(1.2deg)}}
.note-top{display:flex;align-items:center;justify-content:space-between;gap:15px;font-size:10px;border-bottom:1px solid #6066504a;padding-bottom:12px}
.note-top .quiet{font-size:10px;gap:12px;min-height:36px}
.room-note .quiet:hover,.room-note .host-signature:hover{color:#637343}
.note-salutation{font-size:14px;line-height:1.5;margin-top:21px}
.room-invitation h2{font-family:var(--display);font-size:91px;line-height:.81;color:var(--ink);font-weight:400;margin:23px 0 25px;letter-spacing:0}
.room-note .invitation-seed{font-size:14px;line-height:1.65}
.room-note .host-signature{margin:21px 0 16px;gap:20px;min-height:50px}
.room-note .else-name{font-size:53px}
.room-note .host-signature>span:last-child{font-size:10px;color:#58604c;line-height:1.5}
.room-note .text-action{font-size:15px;width:100%;min-height:49px}
.note-postscript{font-size:10px;line-height:1.65;margin-top:20px;color:#59604e}
.room-invitation .back-to-reflections{position:absolute;left:var(--pad);bottom:104px;margin:0;font-size:12px}
.return-to-note{position:absolute;left:50%;bottom:116px;transform:translateX(-50%);font-size:17px;gap:60px;min-height:50px;border-bottom:1px solid #dce2c580}
.room-invitation:has(.return-to-note:not([hidden])){cursor:default;touch-action:pan-y pinch-zoom}
body[data-view="introduce"] .spatial-shade,body[data-view="review"] .spatial-shade{background:#161c1399}
body[data-view="complete"] .spatial-shade,body[data-view="letter"] .spatial-shade{background:linear-gradient(90deg,#11170deb,#11170d70)}
body[data-view="introduce"] .spatial-lettering,body[data-view="review"] .spatial-lettering,body[data-view="complete"] .spatial-lettering,body[data-view="letter"] .spatial-lettering{display:none}
@media(max-width:1100px) and (min-width:651px){.room-invitation{padding-right:7%;padding-left:32%}.room-note{width:400px;padding:22px 31px}.room-invitation h2{font-size:83px}.room-controls{gap:24px}}
@media(max-width:650px){
 .masthead{height:87px}.scene-perspective{perspective:750px}
 .spatial-lettering>span{font-size:24.5vw}
 .arrival{min-height:640px}.edition{top:113px;font-size:10px}.edition>span:last-child{display:inline}
 .room-atmosphere{background-position:25% center}
 .spatial-shade{background:linear-gradient(180deg,#11170e6b,transparent 26%,transparent 48%,#11170efa)}
 .arrival-action{bottom:176px;right:var(--pad)}.enter-link{font-size:18px;justify-content:space-between;gap:18px;min-height:50px;width:100%}
 .room-controls{left:var(--pad);right:var(--pad);bottom:83px;gap:12px;justify-content:space-between}
 #gather-reflections{font-size:11px;min-width:0;gap:10px}.gather-symbol{width:28px;flex-basis:28px}
 #another-angle{font-size:10px;gap:9px}
 .gesture-hint{left:var(--pad);right:auto;bottom:254px;font-size:10px}
 .room-invitation{padding:125px 27px 163px;min-height:max(820px,100svh);justify-content:center}
 .room-note{width:370px;padding:20px 25px 24px;transform:rotate(1.2deg)}
 .note-top{font-size:9px;gap:8px;padding-bottom:9px}.note-top .quiet{font-size:9px;gap:7px}
 .note-salutation{font-size:13px;margin-top:18px}
 .room-invitation h2{font-size:clamp(58px,18vw,80px);margin:21px 0 23px}
 .room-note .invitation-seed{font-size:13px}.room-note .host-signature{margin-top:18px;margin-bottom:12px}
 .room-note .text-action{font-size:14px}.room-note .else-name{font-size:49px}.note-postscript{font-size:9px;margin-top:17px}
 .room-invitation .back-to-reflections{bottom:88px;font-size:11px;left:var(--pad)}
 .return-to-note{left:var(--pad);right:var(--pad);bottom:167px;transform:none;justify-content:space-between;font-size:17px}
 .note-aside.room-invitation,body.note-aside .room-invitation{min-height:100svh}
 .still-view .arrival-action{bottom:120px}
}
@media(max-width:360px){.room-invitation{padding:111px 20px 158px;min-height:760px}.room-note{padding:18px 22px 22px}.room-invitation h2{font-size:59px}.room-note .invitation-seed{font-size:11.5px}.note-top{font-size:8px}.note-top .quiet{font-size:8px}.note-postscript{font-size:8.5px}.room-note .text-action{font-size:13px}.room-controls{gap:8px}#gather-reflections{font-size:10px;gap:7px}#another-angle{font-size:9px}.edition{gap:17px}}
@media(max-height:740px) and (min-width:651px){.spatial-lettering>span{font-size:clamp(130px,min(18.5vw,23svh),340px)}.room-invitation{min-height:720px;padding-top:107px;padding-bottom:85px}.room-note{padding:19px 31px 21px;width:410px}.note-salutation{margin-top:14px}.room-invitation h2{font-size:78px;margin:19px 0 22px}.room-note .host-signature{margin:16px 0 9px}.note-postscript{margin-top:15px}}

.room-turn{position:absolute;right:var(--pad);bottom:104px;font-size:12px;gap:18px}.still-view .room-turn{display:none}@media(max-width:650px){.room-turn{bottom:88px;font-size:10px;gap:9px}}

/* A composed entrance remains when the spatial view is unavailable or unwanted. */
.still-view #arrival-title{position:absolute;left:var(--pad);top:30%;width:62%;height:auto;overflow:visible;clip:auto;white-space:normal;margin:0;font-family:var(--display);font-size:clamp(130px,15vw,240px);line-height:.8;font-weight:400;color:var(--acid)}
@media(max-width:650px){.still-view #arrival-title{width:calc(100% - var(--pad)*2);font-size:31vw;top:31%}}


/* The whole photographs are source material; the room exposes close fragments. */
.glimpse-photo{transform-origin:50% 50%;will-change:transform;filter:saturate(.45) contrast(1.025)}
.reflection[data-panel="5"]{backface-visibility:visible}
.motion-off .glimpse-photo,.still-view .glimpse-photo{will-change:auto}
.motion-off .reflection-light,.still-view .reflection-light{will-change:auto}
@media(hover:hover){#another-angle>span{transition:transform .4s cubic-bezier(.16,1,.3,1)}#another-angle:hover>span{transform:translateX(5px)}#gather-reflections .gather-symbol{transition:color .3s}#gather-reflections:hover .gather-symbol{color:#faf2d8}}

/* A dark silver closure hides each change of photographic fragment. */
.reflection-shutter{background:linear-gradient(95deg,#171914,#35382f 47%,#22251f 51%,#131611);opacity:0;pointer-events:none}
