/* Direct enquiry feedback, with credentials confined to the server. */
.contact-trap {position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;pointer-events:none}
.form-submit .submit-label {font:inherit;line-height:inherit}
.form-submit:disabled {cursor:default;opacity:.65;transform:none}
form[aria-busy="true"] .form-submit {cursor:wait}
.form-result[data-state="error"] {border-color:#c7a488}
#form-fallback {margin-top:18px;font-size:13px;overflow-wrap:anywhere}
#form-fallback[hidden] {display:none}
/* Natural photo flow for phones and tablets. */
@media(max-width:900px){
 .js:not(.reduced-motion) .album-photo:not(.print-visible):not(:focus-within) {translate:none;scale:1;opacity:1}
 /* Each print contributes its full height, including the white frame. */
 .album-chapter,.chapter-two,.chapter-three {min-height:0;padding:36px max(24px,5.5vw) 65px;overflow:clip}
 .chapter-copy {position:relative;left:auto;top:auto;padding-top:0}
 .chapter-copy>p:last-child {margin-right:0}
 .chapter-photos,.chapter-two .chapter-photos {position:relative;left:auto;top:auto;width:100%;height:auto;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:30px 20px;padding:12px 4px 18px;margin-top:35px}
 .album-chapter .album-photo {position:relative;left:auto;right:auto;top:auto;width:100%;min-width:0;--angle:3deg}
 .chapter-one .photo-main,.chapter-three .photo-main {grid-column:1/-1;width:74%;justify-self:end}
 .chapter-one .photo-side {grid-column:1;margin-top:-45px;--angle:-4deg}
 .chapter-one .photo-third {grid-column:2;margin-top:26px;--angle:4deg}
 .chapter-two .photo-main {grid-column:1/-1;width:100%;--angle:-2deg}
 .chapter-two .photo-side {grid-column:1/-1;width:86%;justify-self:start;margin-top:-12px;--angle:-4deg}
 .chapter-two .photo-third {grid-column:1/-1;width:86%;justify-self:end;margin-top:-12px;--angle:4deg}
 .chapter-three .photo-main {justify-self:start;--angle:-3deg}
 .chapter-three .photo-side {grid-column:1/-1;width:90%;justify-self:end;margin-top:8px;--angle:-3deg}
 .chapter-three .photo-third {grid-column:1/-1;width:90%;justify-self:start;margin-top:-8px;--angle:4deg}
 .album-photo figcaption>span {font-size:11px;line-height:1.4;overflow-wrap:break-word}
}
/* Touch layouts use natural image heights, including short phone viewports. */
@media(max-width:700px){
 .site-header {gap:10px;padding-left:max(20px,env(safe-area-inset-left));padding-right:max(20px,env(safe-area-inset-right))}
 .brand {width:80px}
 .header-cta {min-height:44px;white-space:nowrap;gap:10px;padding:8px 11px}
 .menu-toggle {width:44px;min-width:44px;min-height:44px;align-items:center}
 .mobile-nav {max-height:calc(100svh - 76px);overflow-y:auto}
 .mobile-nav a {min-height:44px;display:flex;align-items:center}
 .intro-pin {height:100svh;min-height:0;--landing-photos-top:max(53%,calc(var(--landing-copy-bottom,300px) + 22px));--phone-print-height:min(69vw,calc(100svh - var(--landing-photos-top) - 24px))}
 .intro-logo {top:max(22px,env(safe-area-inset-top));width:112px}
 .camera-wrap {width:min(72vw,45svh);top:45%}
 .collage-e {top:62%}.collage-f {top:64%;width:25%}.collage-g {top:61%}.collage-j {top:70%;width:28%}
 .scroll-cue {bottom:max(18px,env(safe-area-inset-bottom));gap:8px}
 .scroll-cue>span:first-child {font-size:15px}.scroll-line {height:24px}.scroll-word {font-size:9px}
 .landing-copy {top:clamp(92px,14svh,130px)}
 .landing-copy h1 {font-size:min(11vw,7.8svh)}
 .landing-copy .button {min-height:44px}
 .plane-a {left:6%;top:var(--landing-photos-top);width:calc(var(--phone-print-height) * .66667);height:var(--phone-print-height)}
 .plane-b {left:auto;right:6%;top:var(--landing-photos-top);width:calc((var(--phone-print-height) - 14px) * .6);height:calc((var(--phone-print-height) - 14px) * .4)}
 .plane-c {left:auto;right:10%;top:calc(var(--landing-photos-top) + (var(--phone-print-height) - 14px) * .4 + 14px);width:calc((var(--phone-print-height) - 14px) * .4);height:calc((var(--phone-print-height) - 14px) * .6)}
 .reduced-motion .intro,.no-js .intro {height:100svh;min-height:0}
 .no-js .intro-pin {--landing-copy-bottom:330px}
 .feeling-pin {height:100svh;min-height:0}
 .feeling-extra {top:92px;height:min(58svh,calc(100svh - 280px))}
 .feeling-copy {bottom:40px}
 .feeling-copy h2 {font-size:clamp(44px,min(15.5vw,8svh),72px)}
 .feeling-copy .eyebrow {margin-bottom:12px}
 .feeling-caption {font-size:12px;margin-top:12px}
 .feeling-index {bottom:17px}
 .footer-links {gap:4px 20px}
 .footer-links a,.footer-links button {display:inline-flex;align-items:center;min-height:44px;font-size:12px}
 .privacy-note a {display:inline-flex;align-items:center;min-height:44px;font-size:12px}
 .legal-pages a {display:inline-flex;align-items:center;min-height:44px}
 .legal-toc a {min-height:44px;display:flex;align-items:center}
 .legal-toc ol {gap:4px}
 .legal-back {min-height:44px;display:inline-flex;align-items:center}
 #form-result {scroll-margin-top:100px;padding:20px}
 .form-result .button {width:100%;min-height:48px}
 .copy-button {min-height:44px}
 .message-preview pre {overflow-wrap:anywhere}
 #lightbox {padding-top:max(76px,calc(env(safe-area-inset-top) + 60px));padding-bottom:max(75px,calc(env(safe-area-inset-bottom) + 60px))}
 .lightbox-bar button {min-height:44px;min-width:44px}
 .lightbox-arrow {min-height:48px;min-width:56px;bottom:max(10px,env(safe-area-inset-bottom))}
 #lightbox-image {touch-action:pan-y pinch-zoom}
}
@media(max-width:380px){
 .site-header {gap:8px;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}
 .brand {width:70px}.header-cta {padding:8px 9px;font-size:12px;gap:8px}
 .field-pair {grid-template-columns:minmax(0,1fr);gap:0}
 .form-result .button {font-size:13px;padding:13px 15px}
}
/* A phone held sideways keeps both the camera and landing inside the screen. */
@media(max-width:1000px) and (max-height:550px) and (orientation:landscape){
 .intro-pin {height:100svh;min-height:0}
 .intro {height:280svh}
 .intro-logo {top:12px;width:90px}
 .camera-wrap {width:62svh;top:48%}
 .scroll-cue {bottom:12px;gap:5px}
 .scroll-cue>span:first-child {font-size:12px}.scroll-line {display:none}.scroll-word {font-size:8px}
 .collage-photo.portrait {width:8%}
 .collage-e {top:48%}.collage-g {top:48%}.collage-i {top:30%;left:19%}
 .collage-f,.collage-j {top:70%;width:12%}.collage-h {top:70%}
 .landing-copy {top:90px;width:calc(100% - 2 * var(--gutter))}
 .landing-copy .eyebrow {font-size:8px;margin-bottom:10px}
 .landing-copy h1 {font-size:clamp(28px,4.6vw,42px);white-space:nowrap}
 .landing-copy h1 br {display:none}.landing-copy h1 em {margin-left:.15em}
 .landing-copy .hero-subline {font-size:12px;margin-top:10px;display:inline-block}
 .landing-copy .button {float:right;margin-top:6px;padding:8px 12px;min-height:36px}
 .intro-pin {--landing-height:min(34svh,calc((100vw - 2 * var(--gutter) - 40px) / 2.834));--landing-left:calc((100vw - var(--landing-height) * 2.834 - 40px) / 2)}
 .photo-plane {top:calc(100% - var(--landing-height) - 18px);height:var(--landing-height);right:auto}
 .plane-a {left:var(--landing-left);width:calc(var(--landing-height) * .667)}
 .plane-b {left:calc(var(--landing-left) + var(--landing-height) * .667 + 20px);width:calc(var(--landing-height) * 1.5)}
 .plane-c {left:calc(var(--landing-left) + var(--landing-height) * 2.167 + 40px);width:calc(var(--landing-height) * .667)}
 .reduced-motion .intro,.no-js .intro {height:100svh;min-height:0}
 .feeling-pin {height:100svh;min-height:0}
 .feeling-extra {left:52%;top:90px;width:40%;height:calc(100svh - 110px)}
 .feeling-copy {left:var(--gutter);bottom:40px}
 .feeling-copy h2 {font-size:16svh}
 .feeling-copy .eyebrow {font-size:8px;margin-bottom:10px}
 .feeling-caption {font-size:11px;margin-top:10px}
 .feeling-index {bottom:15px}
 #lightbox {padding-top:55px;padding-bottom:25px}
 .lightbox-bar {top:5px}
 #lightbox-image {max-height:calc(100% - 35px)}
}
/* Phone reading sizes, including phones held sideways. */
@media(max-width:700px),(max-width:1000px) and (max-height:550px){
 html {-webkit-text-size-adjust:100%}
 :root {--eyebrow-size:14px;--eyebrow-tracking:.075em}
 .landing-copy .hero-subline {font-size:15px;line-height:1.5}
 .landing-copy .button {font-size:14px;min-height:44px}
 .portfolio-aside,.chapter-copy>p:last-child,.memory-sequence .memory-description,
 .services .service-row p,.contact-heading>p:not(.eyebrow) {font-size:16px;line-height:1.65}
 .album-photo figcaption>span,.memory-print figcaption>span,.about-main figcaption>span,
 .about-walk figcaption>span {font-size:14px;line-height:1.5}
 .services .service-row div>span,.field label,.form-note,.privacy-note,.privacy-note a,
 .legal-pages a,.legal-toc a,.legal-back,#form-fallback {font-size:14px;line-height:1.65}
 .field input {min-height:50px}
 .field-pair {grid-template-columns:minmax(0,1fr);gap:0}
 .memory-footer {font-size:13px;line-height:1.5;letter-spacing:.025em}
 .memory-controls button {width:48px;height:48px}
 .feeling-caption {font-size:14px;line-height:1.5}
 .feeling-index {font-size:11px}
 .site-footer .footer-links a,.site-footer .footer-links button {font-size:14px;min-height:46px}
 .copyright {font-size:12px;line-height:1.6}
 .legal-copy {font-size:16px}
 .header-cta {font-size:14px}
 .desktop-nav a {display:inline-flex;align-items:center;min-height:44px}
 .lightbox-bar,.lightbox-bar button {font-size:14px;line-height:1.5}
 #lightbox-image {max-height:100%}
}
@media(max-width:700px){
 /* Portraits stay large, whole and staggered instead of sharing a narrow row. */
 .chapter-one .photo-main,.chapter-three .photo-main {width:86%}
 .chapter-one .photo-side {grid-column:1/-1;width:80%;justify-self:start;margin-top:4px}
 .chapter-one .photo-third {grid-column:1/-1;width:80%;justify-self:end;margin-top:6px}
 .chapter-photos {row-gap:34px}
 .memory-cinema .memory-track {--print-height:min(68svh,114vw);padding-top:30px;padding-bottom:44px;gap:24px;scroll-snap-type:x proximity}
 .memory-cinema .memory-print {width:min(calc(var(--print-height) * var(--ratio)),88vw)}
 /* Details have the same visual weight as the surrounding wedding photographs. */
 .memory-details .memory-track {grid-template-columns:minmax(0,1fr);gap:38px;padding-top:42px;padding-bottom:38px}
 .memory-details .memory-print:nth-child(2) {width:78%;justify-self:end;margin-top:0}
 .memory-details .memory-print:nth-child(3) {width:94%;justify-self:start;margin-top:0}
 .memory-details .memory-print.memory-feature {width:100%;margin-top:0;justify-self:stretch}
 .service-row {grid-template-columns:20px minmax(0,1fr);row-gap:20px}
 .service-row>img {grid-column:1/-1;grid-row:auto;margin:12px 0;transform:rotate(-2deg)}
 .service-row>div {grid-column:1/-1}
 .service-row h3 {font-size:clamp(36px,10.5vw,48px)}
 .services .service-row:nth-child(3)>img {width:100%;max-height:none}
 .contact-form-wrap {padding-top:44px}
 .site-footer {padding-bottom:max(30px,env(safe-area-inset-bottom))}
 .album-topline {gap:22px}
 .album-nav {gap:12px;justify-content:space-between;padding-inline:24px}
 .album-nav button {font-size:13px;min-height:46px}
 .album-nav span {font-size:11px;margin-right:5px}
}
@media(max-width:380px){
 .header-cta {font-size:13px}
}
/* Short portrait screens scroll the final photo spread into view at full size. */
@media(max-width:480px) and (orientation:portrait){
 .intro-pin {min-height:max(640px,180vw);--phone-print-height:calc((88vw - 10px) / 1.26667)}
 .scroll-cue {bottom:max(18px,calc(100% - 100svh + 18px))}
 .reduced-motion .intro,.no-js .intro {height:max(100svh,640px,180vw)}
 .no-js .intro-pin {--landing-copy-bottom:380px}
}
@media(max-width:1000px) and (max-height:550px) and (orientation:landscape){
 .landing-copy .hero-subline {max-width:calc(100% - 205px)}
}
/* The fixed-height opening must leave its scroll cue clear on short phones. */
@media(max-width:480px) and (max-height:650px) and (orientation:portrait){
 .collage-e,.collage-g {top:calc(100svh - 220px)}
 .collage-f {top:calc(100svh - 205px)}
 .collage-j {top:calc(100svh - 170px)}
}
/* Phone photographs arrive from alternating sides, in step with the scroll.
   Individual transforms preserve the existing album and film choreography. */
@media(max-width:700px){
 .about,.services {overflow-x:clip}
 .js:not(.reduced-motion) .mobile-photo-motion,
 .js:not(.reduced-motion) .album-photo.mobile-photo-motion:not(.print-visible):not(:focus-within),
 .js:not(.reduced-motion) .memory-details .memory-print.mobile-photo-motion {
  translate:var(--mobile-x,0px) var(--mobile-y,0px);
  rotate:var(--mobile-turn,0deg);
  scale:var(--mobile-scale,1);
  opacity:var(--mobile-opacity,1)!important;
  transition:none;
 }
 .js:not(.reduced-motion) .mobile-photo-motion:focus-within {
  translate:none;rotate:none;scale:1;opacity:1!important;
 }
}
@media(prefers-reduced-motion:reduce){
 .mobile-photo-motion {translate:none!important;rotate:none!important;scale:1!important;opacity:1!important}
}

/* Turnstile fits the dark enquiry area, including narrow phone screens. */
.form-security {margin:28px 0 24px;min-width:0}
.form-security[hidden],#form-security-retry[hidden] {display:none}
.form-security .security-label {font-size:18px;line-height:1.5;margin:0 0 14px;color:inherit}
#form-security-widget {width:100%;min-height:65px}
#form-security-status,.form-security .security-privacy {font-size:14px;line-height:1.6;margin:12px 0 0;color:#c1cab4}
.form-security a {text-decoration:underline;text-underline-offset:3px}
#form-security-retry {display:block;min-height:44px;margin-top:8px;padding:8px 0;background:none;color:inherit;text-decoration:underline;text-underline-offset:4px;font:inherit}
