@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Libre+Caslon+Display&display=swap');
:root{--paper:#fff;--bone:#f8f7f4;--ink:#1c1c1a;--muted:#686661;--hair:#deddd8;--red:#b4130d;--red-dark:#930e09;--display:'Libre Caslon Display',Georgia,serif;--ui:'DM Sans',Arial,sans-serif;--max:1280px}
*,*::before,*::after{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--ui);-webkit-font-smoothing:antialiased}body.modal-open{overflow:hidden}img{max-width:100%;display:block}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}button{cursor:pointer}a,button,input,textarea,select{outline-offset:4px}.shell{width:min(var(--max),calc(100% - 104px));margin-inline:auto}
::selection{background:#c3b6a3;color:#111}h1,h2,h3,p,figure,blockquote{margin:0}h1,h2,h3{font-family:var(--display);font-weight:400;letter-spacing:-.035em}h1{font-size:clamp(4.4rem,8.2vw,9.4rem);line-height:.93}h2{font-size:clamp(3.1rem,5.4vw,6.3rem);line-height:.98}h3{font-size:clamp(2rem,3.3vw,3.8rem);line-height:1.05}p{font-size:15px;line-height:1.83;color:var(--muted)}.caps,.eyebrow,.eyebrow-light,.folio{font-size:10px;font-weight:600;letter-spacing:.2em;text-transform:uppercase}.eyebrow{color:var(--ink)}.eyebrow-light{color:#fff}.rule{border:0;border-top:1px solid var(--hair);margin:0}.muted{color:var(--muted)}.overline{font-size:11px;letter-spacing:.15em;text-transform:uppercase}.red{color:var(--red)}
.site-header{height:92px;position:relative;z-index:60;border-bottom:1px solid var(--hair);background:#fff}.nav-inner{height:100%;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:28px}.brand{width:max-content;display:flex;flex-direction:column;gap:4px}.brand-primary{font-family:var(--display);font-size:25px;letter-spacing:-.03em}.brand-secondary{font-size:8.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}.nav-list{display:flex;gap:26px;align-items:center}.nav-list a{font-size:10px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;position:relative;padding:8px 0}.nav-list a:after{content:'';position:absolute;bottom:0;left:0;right:100%;height:1px;background:currentColor;transition:right .3s}.nav-list a:hover:after,.nav-list a[aria-current=page]:after{right:0}.nav-right{display:flex;gap:14px;align-items:center;justify-content:flex-end}.nav-right .nav-phone{font-size:10px;letter-spacing:.08em;white-space:nowrap}.button{border:0;display:inline-flex;justify-content:center;align-items:center;gap:15px;min-height:48px;padding:14px 21px;background:var(--red);color:#fff;font-family:var(--ui);font-size:10px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;transition:background .25s,transform .25s}.button:hover{background:var(--red-dark);transform:translateY(-2px)}.button-light{background:#fff;color:var(--ink)}.button-light:hover{background:#eeeae3}.text-action{font-size:11px;text-transform:uppercase;letter-spacing:.15em;font-weight:600;display:inline-flex;gap:14px;align-items:center;padding-bottom:7px;border-bottom:1px solid var(--ink);transition:gap .25s}.text-action:hover{gap:22px}.text-action.inverse{border-color:#fff}.menu-button{display:none;border:0;padding:10px;background:none;color:inherit;font-size:22px}.mobile-nav{display:none}
body.home .site-header{position:absolute;top:0;width:100%;background:transparent;border-color:rgba(255,255,255,.42);color:#fff}body.home .site-header .brand-secondary{color:#eee}body.home .site-header .button{background:#fff;color:#111}body.home .site-header .button:hover{background:#e8e4dd}
.home-hero{position:relative;min-height:790px;height:100svh;max-height:1200px;overflow:hidden;background:#222;color:#fff}.home-hero img{width:100%;height:100%;object-fit:cover;object-position:center 46%;filter:grayscale(1) brightness(.72)}.home-hero:after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.12),transparent 36%,rgba(0,0,0,.42) 100%);pointer-events:none}.home-hero .hero-frame{position:absolute;inset:0}.hero-bottom{position:absolute;bottom:60px;left:0;right:0;z-index:3}.hero-bottom .shell{display:grid;grid-template-columns:1fr auto;align-items:end;gap:30px}.hero-title{font:400 clamp(4.5rem,8vw,9rem)/.9 var(--display);letter-spacing:-.04em;max-width:930px}.hero-bottom .hero-right{text-align:right;display:flex;flex-direction:column;gap:22px;align-items:flex-end}.hero-bottom .hero-right p{color:#f0f0f0;font-size:12px;max-width:180px;line-height:1.55}.hero-folio{border-top:1px solid #fff;padding-top:12px;min-width:170px}.hero-vertical{position:absolute;z-index:3;top:44%;left:42px;writing-mode:vertical-rl;transform:rotate(180deg);font-size:9px;letter-spacing:.2em;text-transform:uppercase}
.intro-statement{padding:142px 0 145px}.intro-layout{display:grid;grid-template-columns:1fr 1.25fr;gap:8vw}.intro-layout h1{font-size:clamp(4rem,7vw,8rem);max-width:840px}.intro-side{align-self:end;padding-bottom:15px}.intro-side p{font-size:17px;max-width:400px}.intro-side .button{margin-top:35px}.wordline{display:block}.numbers{border-top:1px solid var(--hair);border-bottom:1px solid var(--hair);display:grid;grid-template-columns:2fr repeat(3,1fr)}.numbers>*{padding:35px 38px;border-right:1px solid var(--hair)}.numbers>*:last-child{border-right:0}.numbers strong{display:block;font:400 44px var(--display)}.numbers small{font-size:10px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}.numbers .first strong{font:400 20px/1.3 var(--display)}
.section{padding:138px 0}.section-tight{padding:100px 0}.section-head{display:grid;grid-template-columns:1fr 1fr;gap:6vw;align-items:end;margin-bottom:62px}.section-head .lead{font-size:16px;max-width:460px}.lead-copy{font:400 clamp(1.6rem,2.3vw,2.7rem)/1.22 var(--display);color:var(--ink)}.story-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:9vw;align-items:center}.story-grid .story-image{aspect-ratio:4/5}.story-copy{padding:45px 0}.story-copy h2{margin:25px 0 36px}.story-copy p{max-width:530px;margin-bottom:20px}.story-copy .text-action{margin-top:28px}.photo{overflow:hidden;position:relative;background:#eee}.photo img{width:100%;height:100%;object-fit:cover;transition:transform .7s cubic-bezier(.2,.7,.2,1)}a.photo:hover img,.gallery-photo:hover img{transform:scale(1.035)}.photo-note{display:block;margin-top:12px;font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:#777}
.bone{background:var(--bone)}.service-ledger{border-top:1px solid var(--ink)}.service-item{display:grid;grid-template-columns:70px 1fr 1fr 25px;gap:25px;align-items:center;min-height:122px;padding:25px 0;border-bottom:1px solid var(--hair);transition:padding-left .3s ease}.service-item:hover{padding-left:12px}.service-item .index{font-size:11px;letter-spacing:.13em;color:#888}.service-item h3{font-size:clamp(1.8rem,2.8vw,3.2rem)}.service-item p{max-width:320px;font-size:13px;line-height:1.6}.service-item .arrow{font-size:24px;color:var(--red)}.ledger-footer{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-top:45px}
.full-photo{height:80svh;min-height:600px;position:relative;overflow:hidden;background:#333;color:#fff}.full-photo>img{height:100%;width:100%;object-fit:cover}.full-photo:after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,rgba(0,0,0,.43),rgba(0,0,0,0) 75%)}.full-photo-content{position:absolute;z-index:2;bottom:75px;left:0;right:0}.full-photo h2{max-width:850px}.full-photo p{color:#fff;max-width:520px;margin-top:18px}
.process{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--hair)}.process article{padding:31px 30px 0 0;border-right:1px solid var(--hair);min-height:290px}.process article+article{padding-left:30px}.process article:last-child{border-right:0}.process .num{font:400 45px var(--display);color:#777}.process h3{font-size:34px;margin:25px 0 15px}.process p{font-size:13px}
.testimonial{background:#f5f3ef}.testimonial-layout{display:grid;grid-template-columns:240px 1fr;gap:9vw;align-items:start}.testimonial blockquote{font:400 clamp(2.9rem,4.6vw,5.6rem)/1.08 var(--display);letter-spacing:-.03em}.testimonial .credit{font-size:11px;letter-spacing:.11em;text-transform:uppercase;color:#666;margin-top:40px}.gal-grid{display:grid;grid-template-columns:1.3fr .7fr .9fr;align-items:start;gap:20px}.gal-grid figure:nth-child(2){margin-top:90px}.gal-grid figure:nth-child(3){margin-top:30px}.gal-grid figure .photo{aspect-ratio:3/4}.gal-grid figure:first-child .photo{aspect-ratio:4/5}.gallery-kicker{font-size:11px;text-transform:uppercase;letter-spacing:.13em;margin-top:14px}.gallery-note{font-size:11px;color:#777;margin-top:18px}.price-layout{display:grid;grid-template-columns:1fr 1fr;gap:8vw}.price-amount{font:400 clamp(4rem,7.2vw,8rem) var(--display);letter-spacing:-.045em;margin-bottom:18px}.price-layout p{max-width:480px}.price-list{border-top:1px solid var(--hair);margin-top:32px}.price-list div{padding:14px 0;border-bottom:1px solid var(--hair);display:flex;justify-content:space-between;gap:30px;font-size:13px}
.final-panel{background:#1b1b19;color:#fff;padding:130px 0}.final-panel h2{max-width:1000px}.final-panel p{color:#dededb;max-width:560px;margin:30px 0 40px}.final-panel .button{background:var(--red)}.final-panel .shell{display:grid;grid-template-columns:1fr auto;gap:45px;align-items:end}.final-panel .aside{max-width:260px;padding:15px 0;border-top:1px solid #555;font-size:12px;color:#ddd;line-height:1.8}
.site-footer{background:#fff;padding:90px 0 28px}.foot-grid{display:grid;grid-template-columns:2fr 1fr 1fr 1.3fr;gap:60px}.foot-grid h4{font-size:10px;letter-spacing:.15em;text-transform:uppercase;margin:0 0 23px;font-weight:600}.foot-grid a,.foot-grid p{font-size:12px;line-height:1.8;display:block;margin:0 0 10px;color:#585753}.foot-grid .brand{margin-bottom:26px}.foot-bottom{border-top:1px solid var(--hair);margin-top:90px;padding-top:25px;display:flex;justify-content:space-between;gap:20px;color:#777;font-size:10px;letter-spacing:.07em}
.page-intro{padding:95px 0 100px}.page-intro h1{font-size:clamp(4.7rem,7.3vw,8.4rem);margin:25px 0}.page-intro .intro-row{display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:end}.page-intro .intro-row p{font-size:17px;max-width:520px;padding-bottom:12px}.page-visual{height:66svh;min-height:500px;background:#eee;overflow:hidden}.page-visual img{height:100%;width:100%;object-fit:cover;filter:grayscale(.45)}.about-bio{display:grid;grid-template-columns:.75fr 1.25fr;gap:9vw}.about-bio h2{max-width:550px}.about-bio .body{font:400 26px/1.45 var(--display);color:var(--ink);margin:0 0 24px}.about-bio .body-small{font-size:15px;margin-top:20px}.values-grid{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--hair);border-left:1px solid var(--hair)}.value{padding:36px;border-bottom:1px solid var(--hair);border-right:1px solid var(--hair)}.value h3{font-size:33px;margin:16px 0 11px}.value p{font-size:13px}.value .num{font-size:10px;color:#777}
.services-opening{padding:125px 0 50px}.services-opening h1{max-width:1130px}.services-opening p{font-size:17px;max-width:590px;margin-top:24px}.services-detail{border-top:1px solid var(--ink)}.service-details{border-bottom:1px solid var(--hair)}.service-details summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:70px 1fr auto;align-items:center;gap:30px;padding:32px 0}.service-details summary::-webkit-details-marker{display:none}.service-details summary .number{font-size:11px;color:#888}.service-details summary h2{font-size:clamp(2.5rem,4vw,5rem)}.service-details summary .toggle{font:400 34px var(--display);color:var(--red);transition:transform .3s}.service-details[open] summary .toggle{transform:rotate(45deg)}.service-detail-panel{display:grid;grid-template-columns:1fr 1fr;gap:8vw;padding:0 0 42px 100px;animation:come-in .35s ease}.service-detail-panel p{margin-bottom:20px}.service-detail-panel ul{list-style:none;padding:0;margin:0}.service-detail-panel li{padding:15px 0;border-bottom:1px solid var(--hair);font-size:12px}.service-detail-panel .text-action{margin-top:24px}.styles-list{display:grid;grid-template-columns:repeat(4,1fr);gap:30px;border-top:1px solid var(--hair);padding-top:36px}.styles-list article{border-right:1px solid var(--hair);padding-right:22px}.styles-list article:last-child{border:0}.styles-list h3{font-size:30px;margin:14px 0}.styles-list p{font-size:13px}.styles-list .caps{color:#777}
.reviews-lead{display:grid;grid-template-columns:1fr 1fr;gap:8vw}.review-list{border-top:1px solid var(--hair)}.review-row{display:grid;grid-template-columns:170px 1fr;gap:60px;border-bottom:1px solid var(--hair);padding:50px 0}.review-row .author{font-size:12px;text-transform:uppercase;letter-spacing:.12em}.review-row blockquote{font:400 clamp(2.1rem,3.3vw,3.8rem)/1.18 var(--display)}.gallery-collage{display:grid;grid-template-columns:1fr 1fr;gap:23px}.gallery-collage .photo{aspect-ratio:4/3;cursor:zoom-in}.gallery-collage>figure:nth-child(2) .photo{aspect-ratio:3/4}.gallery-collage>figure:nth-child(3) .photo{aspect-ratio:3/4}.gallery-collage>figure:nth-child(4) .photo{aspect-ratio:4/3}.gallery-collage figure figcaption{font-size:10px;letter-spacing:.13em;text-transform:uppercase;color:#777;margin-top:12px}
.faq-layout{display:grid;grid-template-columns:1fr 1.3fr;gap:8vw}.faq-intro h2{margin-top:20px}.faq-pricing{font:400 70px var(--display);margin-top:33px}.faq-list{border-top:1px solid var(--ink)}details.faq{border-bottom:1px solid var(--hair)}details.faq summary{list-style:none;cursor:pointer;padding:26px 40px 26px 0;position:relative;font-size:15px;line-height:1.5}details.faq summary::-webkit-details-marker{display:none}details.faq summary:after{content:'+';position:absolute;right:6px;top:22px;font:400 30px var(--display);color:var(--red)}details.faq[open] summary:after{content:'−'}details.faq .answer{padding:0 35px 25px 0;font-size:14px}
.contact-layout{display:grid;grid-template-columns:1fr 1.1fr;gap:8vw}.contact-layout h1{font-size:clamp(4.4rem,7vw,8rem)}.contact-layout .intro{font-size:16px;max-width:440px;margin-top:26px}.contact-methods{border-top:1px solid var(--hair);margin-top:62px}.contact-methods div{border-bottom:1px solid var(--hair);padding:18px 0;display:flex;flex-direction:column;gap:8px}.contact-methods span{font-size:10px;letter-spacing:.15em;text-transform:uppercase;color:#777}.contact-methods a{font:400 25px var(--display)}.contact-methods p{font-size:13px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:25px 20px}.field{display:flex;flex-direction:column;gap:9px}.field.full{grid-column:1/-1}.field label{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:#444}.field input,.field select,.field textarea{background:transparent;border:0;border-radius:0;border-bottom:1px solid #aaa;padding:14px 0 12px;outline:none;color:var(--ink);width:100%;font-size:14px}.field input:focus,.field select:focus,.field textarea:focus{border-bottom:2px solid var(--red)}.field textarea{min-height:125px;resize:vertical}.form-note{font-size:11px;margin-top:15px}.thankyou{padding:130px 0;min-height:60vh}.thankyou p{max-width:560px;font-size:17px;margin:25px 0 40px}
.lightbox{padding:0;border:0;max-width:90vw;max-height:90vh;background:#171717;color:#fff}.lightbox::backdrop{background:rgba(0,0,0,.92)}.lightbox img{max-width:88vw;max-height:80vh;object-fit:contain}.lightbox .close{background:#fff;color:#111;border:0;font-size:12px;letter-spacing:.12em;padding:14px;position:absolute;right:0;top:0}
@keyframes come-in{from{opacity:0;transform:translateY(-9px)}to{opacity:1;transform:none}}
.js .reveal{opacity:0;transform:translateY(18px)}.js .reveal.visible{opacity:1;transform:none;transition:opacity .8s ease,transform .8s ease}
@media(max-width:1180px){.nav-list{gap:15px}.nav-right .nav-phone{display:none}.shell{width:calc(100% - 64px)}}
@media(max-width:940px){.nav-inner{grid-template-columns:1fr auto}.nav-list,.nav-right .button{display:none}.menu-button{display:block}.mobile-nav{position:absolute;display:none;left:0;right:0;top:100%;background:#fff;border-bottom:1px solid var(--hair);color:#111;padding:30px 32px}.mobile-nav.open{display:grid;gap:20px}.mobile-nav a{font-size:14px}.hero-title{font-size:clamp(4rem,9vw,7rem)}.story-grid,.intro-layout,.section-head,.price-layout,.faq-layout,.contact-layout,.about-bio,.testimonial-layout{grid-template-columns:1fr}.intro-side{padding:0}.numbers{grid-template-columns:repeat(4,1fr)}.numbers>*{padding:28px 15px}.process{grid-template-columns:repeat(2,1fr)}.process article:nth-child(2){border-right:0}.gal-grid{gap:12px}.foot-grid{grid-template-columns:repeat(2,1fr)}.styles-list{grid-template-columns:repeat(2,1fr)}.styles-list article:nth-child(2){border-right:0}.service-detail-panel{padding-left:0}}
@media(max-width:650px){.shell{width:calc(100% - 34px)}.site-header{height:70px}.home-hero{min-height:600px;height:88svh}.home-hero img{object-position:60% center}.hero-bottom{bottom:34px}.hero-bottom .shell{grid-template-columns:1fr}.hero-bottom .hero-right{text-align:left;align-items:flex-start}.hero-bottom .hero-right p{display:none}.hero-title{font-size:clamp(3.8rem,13.5vw,6rem)}.hero-vertical{display:none}.intro-statement{padding:76px 0 85px}.section{padding:85px 0}.section-tight{padding:70px 0}h1{font-size:clamp(3.5rem,13vw,5.5rem)}h2{font-size:clamp(2.8rem,10vw,4rem)}.intro-layout{gap:35px}.numbers{grid-template-columns:1fr 1fr}.numbers>*{border-bottom:1px solid var(--hair)}.numbers strong{font-size:37px}.section-head{gap:20px;margin-bottom:35px}.story-grid{gap:30px}.story-copy{padding:0}.service-item{grid-template-columns:35px 1fr 25px;min-height:100px;gap:12px}.service-item p{display:none}.service-item h3{font-size:30px}.full-photo{height:65svh;min-height:500px}.full-photo-content{bottom:44px}.process{grid-template-columns:1fr}.process article{border-right:0;border-bottom:1px solid var(--hair);padding:20px 0;min-height:0}.process article+article{padding-left:0}.process h3{margin:10px 0}.testimonial-layout{gap:25px}.gal-grid{grid-template-columns:1fr 1fr}.gal-grid figure:nth-child(3){display:none}.gal-grid figure:nth-child(2){margin-top:60px}.gal-grid figure .photo{aspect-ratio:3/4}.final-panel{padding:85px 0}.final-panel .shell{grid-template-columns:1fr}.foot-grid{grid-template-columns:1fr 1fr;gap:35px}.foot-bottom{flex-direction:column;margin-top:45px}.page-intro{padding:75px 0}.page-intro h1{font-size:clamp(3.6rem,12vw,5.6rem)}.page-intro .intro-row{grid-template-columns:1fr;gap:20px}.page-visual{height:380px;min-height:0}.values-grid{grid-template-columns:1fr 1fr}.value{padding:20px}.service-details summary{grid-template-columns:35px 1fr 20px;gap:10px}.service-details summary h2{font-size:31px}.service-detail-panel{grid-template-columns:1fr;gap:25px}.review-row{grid-template-columns:1fr;gap:14px;padding:35px 0}.styles-list{grid-template-columns:1fr 1fr;gap:20px}.styles-list h3{font-size:24px}.gallery-collage{gap:14px}.contact-layout{gap:55px}.form-grid{grid-template-columns:1fr}.field.full{grid-column:1/-1}.faq-pricing{font-size:60px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.js .reveal{opacity:1;transform:none}}


/* ========================================
   Weddings by Sally · Motion & interaction refinement
   Motion principle: editorial, composed, never theatrical.
   ======================================== */
:root { --ease-expressive: cubic-bezier(.22, 1, .36, 1); }
:focus-visible { outline:2px solid var(--red); outline-offset:5px; }
@media (hover:hover) and (pointer:fine) {
  .button { position:relative; overflow:hidden; transform:translateZ(0); }
  .button:after { content:'↗'; position:absolute; right:20px; opacity:0; transform:translate(-7px,7px); transition:opacity .35s var(--ease-expressive), transform .35s var(--ease-expressive); pointer-events:none; }
  .button:hover:after { opacity:.85; transform:translate(0,0); }
  .button:hover { padding-right:31px; }
  .nav-list a, .foot-grid a { transition:color .26s ease; }
  .nav-list a:hover, .foot-grid a:hover { color:var(--red); }
}
/* Keep the hero navigation visible and invert it as the photograph scrolls away. */
body.home .site-header { position:fixed; top:0; left:0; right:0; transition:color .48s ease,background-color .48s ease,border-color .48s ease,box-shadow .48s ease; }
body.home .site-header .brand-secondary { transition:color .48s ease; }
body.home .site-header .button { transition:background-color .3s,color .3s,transform .3s ease; }
body.home .site-header.is-scrolled,
body.home .site-header.menu-open { background:rgba(255,255,255,.97); color:var(--ink); border-color:var(--hair); box-shadow:0 8px 28px rgba(0,0,0,.035); backdrop-filter:blur(14px); }
body.home .site-header.is-scrolled .brand-secondary,
body.home .site-header.menu-open .brand-secondary { color:var(--muted); }
body.home .site-header.is-scrolled .button,
body.home .site-header.menu-open .button { color:#fff; background:var(--red); }
body.home .site-header.is-scrolled .button:hover,
body.home .site-header.menu-open .button:hover { background:var(--red-dark); }
.home-hero .hero-frame { will-change:transform; }
.home-hero .hero-frame img { transform-origin:center; }
.hero-title { overflow:visible; }
/* One understated 'signature' red point of motion per section, not red everywhere. */
.service-ledger { overflow:hidden; }
.service-item { position:relative; }
.service-item:before { content:''; position:absolute; left:0; bottom:-1px; height:1px; width:100%; background:var(--red); transform:scaleX(0); transform-origin:left; transition:transform .55s var(--ease-expressive); pointer-events:none; }
@media(hover:hover) and (pointer:fine){
  .service-item:hover:before, .service-item:focus-visible:before { transform:scaleX(1); }
  .service-item .arrow { transition:transform .4s var(--ease-expressive); }
  .service-item:hover .arrow { transform:translate(5px,-4px); }
  .service-item h3 { transition:transform .45s var(--ease-expressive); }
  .service-item:hover h3 { transform:translateX(5px); }
}
/* A restrained timeline trace above the process. */
.process { position:relative; }
.process-trace { position:absolute; top:-1px; left:0; width:100%; height:1px; pointer-events:none; }
.process-trace span { display:block; height:1px; width:100%; background:var(--red); transform:scaleX(0); transform-origin:left; }
/* A minimal image reveal: a soft paper-coloured shutter, once per photograph. */
.js.motion-enabled .story-grid .story-image:after,
.js.motion-enabled .gallery-collage figure .photo:after,
.js.motion-enabled .gal-grid figure .photo:after {
  content:''; position:absolute; z-index:2; inset:0; background:var(--bone);
  pointer-events:none; transform:translateX(0); transition:transform 1.1s var(--ease-expressive);
}
.js.motion-enabled .story-grid .story-image.image-entered:after,
.js.motion-enabled .gallery-collage figure .photo.image-entered:after,
.js.motion-enabled .gal-grid figure .photo.image-entered:after { transform:translateX(101%); }
/* Typographic line choreography. Still completely readable with JS disabled. */
.wordline .line-inner { display:inline-block; will-change:transform; }
.js.motion-enabled .service-details summary .toggle,
.js.motion-enabled details.faq summary:after { transition:transform .35s var(--ease-expressive),color .3s; }
.service-details summary:hover .toggle,
.faq summary:hover:after { color:var(--red-dark); }
.service-details, details.faq { scroll-margin-top:120px; }
.service-detail-panel, details.faq .answer { overflow:visible; }
/* Native controls remain accessible; no false submit state. */
.field input:focus-visible,.field textarea:focus-visible,.field select:focus-visible { outline:none; border-bottom:2px solid var(--red); }
@media(max-width:940px){
 .mobile-nav { transform-origin:top center; }
 body.home .site-header.menu-open .menu-button { color:var(--ink); }
}
@media(max-width:650px){
 body.home .site-header { height:70px; }
 .process-trace { display:none; }
 .home-hero .hero-frame { will-change:auto; }
 .service-item:before { display:none; }
}
@media(prefers-reduced-motion:reduce){
 .js.motion-enabled .story-grid .story-image:after,
 .js.motion-enabled .gallery-collage figure .photo:after,
 .js.motion-enabled .gal-grid figure .photo:after { display:none!important; }
 .process-trace { display:none!important; }
 .wordline .line-inner { will-change:auto; }
 body.home .site-header { transition:none; }
}
/* Narrow layouts must never make the fixed navigation wider than the viewport. */
.intro-layout .wordline { overflow:hidden; padding-bottom:.095em; margin-bottom:-.095em; }
@media (hover:hover) and (pointer:fine) {
  /* A single arrow is already present in CTA copy: don't add a second one. */
  .button:after { content:none; }
  .button:hover { padding-right:21px; }
}
@media(max-width:650px){
  .foot-grid { grid-template-columns:minmax(0,1fr); }
  .foot-grid > * { min-width:0; }
  .site-header, .site-header .nav-inner { max-width:100vw; }
  .brand-secondary { max-width:min(240px,75vw); overflow-wrap:anywhere; }
}
@media(max-width:650px){
 .site-footer .brand { width:100%; max-width:100%; }
 .site-footer .brand-secondary { max-width:100%; white-space:normal; }
}

/* ====================================================
 WEDDINGS BY SALLY / SCROLL STORY EDITION — bespoke motion
 No generic cards, no scroll hijacking, meaningful motion only.
 ==================================================== */
.reading-progress{position:fixed;inset:0 0 auto 0;height:2px;z-index:130;pointer-events:none}
.reading-progress span{display:block;width:100%;height:100%;background:var(--red);transform:scaleX(0);transform-origin:left;will-change:transform}
/* Distinct cinema intro: the image responds to scrolling, content remains legible */
.home-hero[data-hero-scroll]{isolation:isolate}
.home-hero .hero-frame{transform-origin:50% 50%}
.home-hero .hero-frame img{will-change:transform}
.home-hero:after{z-index:1}
.hero-bottom,.hero-vertical{z-index:2}
/* Signature scroll story: 3 intentional chapters, sticky image, advancing typography */
.scroll-narrative{position:relative;height:300svh;background:#fff;color:var(--ink);z-index:2}
.narrative-sticky{height:100svh;min-height:640px;position:sticky;top:0;overflow:hidden;display:flex;flex-direction:column;padding:114px max(52px,calc((100vw - var(--max))/2)) 32px;background:#fff}
.narrative-meta,.narrative-footer{display:flex;align-items:center;justify-content:space-between;gap:20px;font:600 10px/1.2 var(--ui);letter-spacing:.19em;text-transform:uppercase}
.narrative-reading{color:var(--muted)}
.narrative-grid{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);align-items:center;gap:min(9vw,144px);flex:1;min-height:0;margin:32px 0}
.narrative-words{position:relative;min-height:400px;height:100%;max-height:650px;display:grid;align-items:center}
.narrative-chapter{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(20px)}
.narrative-chapter.is-current{opacity:1;visibility:visible;pointer-events:auto;transform:none}
.narrative-kicker{font-size:11px;font-weight:600;letter-spacing:.18em;display:flex;align-items:center;gap:16px;text-transform:uppercase;margin-bottom:34px}
.narrative-line{height:1px;width:36px;background:var(--red);display:inline-block}
.narrative-chapter h2{font-size:clamp(4rem,5.7vw,7.4rem);line-height:.97;margin-bottom:34px;letter-spacing:-.045em}
.narrative-chapter h2 em{font-weight:400}
.narrative-chapter p{font-size:clamp(14px,1.05vw,16px);line-height:1.78;max-width:490px}
.narrative-link{font-size:10px;letter-spacing:.14em;text-transform:uppercase;display:inline-flex;gap:16px;align-items:center;border-bottom:1px solid var(--ink);padding-bottom:10px;margin-top:35px;width:fit-content;font-weight:600}
.narrative-link:hover span{transform:translate(3px,-3px)}.narrative-link span{transition:transform .3s ease}
.narrative-images{position:relative;width:100%;height:100%;max-height:635px;min-height:410px;overflow:hidden;background:#ded7cf;isolation:isolate}
.narrative-image{position:absolute;inset:-4% 0;width:100%;height:108%;object-fit:cover;opacity:0;visibility:hidden;transform:scale(1.045);will-change:transform,opacity}
.narrative-image.is-current{opacity:1;visibility:visible}
.narrative-photo-label{position:absolute;z-index:2;bottom:20px;left:20px;color:#fff;letter-spacing:.15em;text-shadow:0 1px 9px #1119;font-size:9px;font-weight:600}
.narrative-footer{border-top:1px solid var(--hair);padding-top:23px;color:#686661}
.narrative-progress{height:1px;background:var(--hair);flex:1;max-width:325px}
.narrative-progress span{height:1px;background:var(--red);width:100%;display:block;transform:scaleX(0);transform-origin:left}
.narrative-count{white-space:nowrap}
.narrative-mobile{display:none}
/* Opacity-based photo parallax; composed rather than floating */
[data-parallax-gallery] figure .photo{isolation:isolate}
[data-parallax-gallery] img{will-change:transform}
/* Ambient one-pixel red focus, tiny hover lift */
.service-ledger .service-item .arrow{transition:transform .4s cubic-bezier(.22,1,.36,1),color .3s}
.service-ledger .service-item:hover .arrow,.service-ledger .service-item:focus-visible .arrow{transform:translate(5px,-4px)}
/* Non-GSAP fallback uses native sticky and scroll events. A no-script visitor sees all three chapters. */
html:not(.js) .scroll-narrative{height:auto}
html:not(.js) .narrative-sticky{position:relative;height:auto;min-height:0}
html:not(.js) .narrative-words{height:auto;max-height:none;display:block}
html:not(.js) .narrative-chapter{position:relative;opacity:1;visibility:visible;pointer-events:auto;transform:none;margin-bottom:80px}
html:not(.js) .narrative-images{display:none}
@media(max-width:1050px){
 .narrative-sticky{padding:104px 42px 28px}
 .narrative-grid{gap:38px}
 .narrative-chapter h2{font-size:clamp(3.5rem,6vw,6.5rem)}
}
@media(max-width:780px){
 .scroll-narrative{height:auto}
 .narrative-sticky{display:none}
 .narrative-mobile{display:grid;gap:0}
 .narrative-mobile article{padding:65px 25px 70px;border-bottom:1px solid var(--hair)}
 .narrative-mobile img{display:block;width:100%;height:55svh;min-height:320px;object-fit:cover;margin-bottom:35px}
 .narrative-mobile article>span{display:block;font-size:10px;font-weight:600;letter-spacing:.15em;margin-bottom:18px}
 .narrative-mobile h2{font-size:clamp(3.5rem,10vw,6rem);margin-bottom:22px}
 .narrative-mobile p{max-width:600px}
}
@media(max-width:650px){.narrative-mobile article{padding:52px 17px 56px}.narrative-mobile img{height:48svh;min-height:270px}}
@media(prefers-reduced-motion:reduce){
 .reading-progress span,.narrative-image{will-change:auto!important}
 .narrative-chapter{transition:none!important}
 .narrative-image{transition:none!important}
}


/* V5 — full-background photographic heroes for every inner page.
   Designed to complement the original full-bleed homepage and retain its GSAP narrative. */
.page-photo-hero {
  isolation:isolate;
  position:relative;
  overflow:hidden;
  display:flex;
  align-items:flex-end;
  min-height:clamp(560px, 76svh, 860px);
  padding:135px 0 82px;
  color:#fff;
  background:#222;
}
.page-photo-hero .page-hero-bg {
  position:absolute;
  inset:0;
  z-index:-2;
  width:100%;
  height:100%;
  max-width:none;
  object-fit:cover;
  object-position:center 45%;
  filter:grayscale(.7) brightness(.79);
  transform:scale(1.025);
  animation:page-hero-settle 1.25s cubic-bezier(.22,1,.36,1) both;
}
.page-photo-hero:before {
  content:"";
  position:absolute;
  inset:0;
  background:linear-gradient(90deg,rgba(9,9,9,.76) 0%,rgba(9,9,9,.47) 48%,rgba(9,9,9,.16) 100%),linear-gradient(0deg,rgba(0,0,0,.25),transparent 65%);
  z-index:-1;
  pointer-events:none;
}
.page-photo-hero .shell {
  position:relative;
  z-index:1;
  width:min(var(--max),calc(100% - 104px));
}
.page-photo-hero h1,
.page-photo-hero h2,
.page-photo-hero p,
.page-photo-hero .eyebrow {color:#fff;}
.page-photo-hero .eyebrow {letter-spacing:.18em;}
.page-photo-hero h1 {max-width:1000px; text-wrap:balance;}
.page-photo-hero.page-intro .intro-row {grid-template-columns:minmax(0,1.3fr) minmax(280px,.7fr);gap:4vw;align-items:end;}
.page-photo-hero.page-intro .intro-row p {max-width:410px;font-size:clamp(15px,1.45vw,18px);line-height:1.7;padding-bottom:8px;color:#eee;}
.page-photo-hero.page-intro .intro-row h1 {font-size:clamp(4.2rem,7.5vw,9rem);margin:20px 0 0;}
.page-photo-hero.services-opening {padding:140px 0 82px;}
.page-photo-hero.services-opening h1 {margin-top:23px;max-width:1000px;}
.page-photo-hero.services-opening p {max-width:630px;color:#eee;font-size:17px;}
.page-photo-hero.hero-contact .page-hero-bg {object-position:center 40%;}
.page-photo-hero.hero-about .page-hero-bg {object-position:center 42%;}
.page-photo-hero.hero-services .page-hero-bg {object-position:center 39%;}
.page-photo-hero.hero-reviews .page-hero-bg {object-position:center 46%;}
.page-photo-hero.hero-faq .page-hero-bg {object-position:center 44%;}
.page-photo-hero.hero-thank-you {min-height:calc(100svh - 92px);align-items:center;padding:110px 0;}
.page-photo-hero.hero-thank-you .shell {max-width:850px;}
.page-photo-hero.hero-thank-you p {color:#eee;}
.page-photo-hero.hero-thank-you .button {background:var(--red);color:#fff;}
.page-photo-hero.hero-thank-you .button:hover {background:var(--red-dark);}
@keyframes page-hero-settle {from {opacity:.84;transform:scale(1.065)}to {opacity:1;transform:scale(1.025)}}
@media(max-width:940px){
  .page-photo-hero.page-intro .intro-row {grid-template-columns:1fr;gap:24px;}
  .page-photo-hero.page-intro .intro-row p {max-width:650px;}
  .page-photo-hero .shell{width:calc(100% - 64px)}
}
@media(max-width:650px){
  .page-photo-hero {min-height:clamp(540px,78svh,760px);padding:108px 0 55px;}
  .page-photo-hero.page-intro .intro-row h1 {font-size:clamp(3.6rem,11vw,6rem);}
  .page-photo-hero.services-opening {padding:108px 0 55px;}
  .page-photo-hero.services-opening h1 {font-size:clamp(3.7rem,11vw,6.3rem);}
  .page-photo-hero.services-opening p {font-size:15px;line-height:1.65;}
  .page-photo-hero .shell{width:calc(100% - 34px)}
  .page-photo-hero .page-hero-bg {object-position:55% center;filter:grayscale(.75) brightness(.78);}
  .page-photo-hero.hero-about .page-hero-bg{object-position:55% center;}
  .page-photo-hero.hero-thank-you{min-height:calc(100svh - 70px)}
}
@media(prefers-reduced-motion:reduce){
  .page-photo-hero .page-hero-bg{animation:none;transform:none;}
}

/* V6: About-page image pacing — one full-photo hero, editorial text, then a
   smaller portrait beside experience; never two consecutive full-width photos. */
.about-experience-layout{
  display:grid;
  grid-template-columns:minmax(0,1fr) minmax(245px,350px);
  align-items:center;
  gap:clamp(50px,8vw,145px);
}
.about-experience-copy{max-width:620px}
.about-experience-copy h2{margin:22px 0 30px}
.about-experience-copy p{max-width:510px;margin:0 0 17px}
.about-experience-action{margin-top:32px}
.about-side-portrait{margin:0;max-width:350px;justify-self:end;width:100%}
.about-side-portrait-image{aspect-ratio:4/5;overflow:hidden;background:#f5f3ef}
.about-side-portrait-image img{
  width:100%;height:100%;object-fit:cover;object-position:center 24%;
  filter:grayscale(.12);display:block;
}
.about-side-portrait .photo-note{margin-top:13px;color:#777;letter-spacing:.08em;font-size:9px}
@media(max-width:940px){
  .about-experience-layout{grid-template-columns:minmax(0,1fr) 260px;gap:35px}
}
@media(max-width:700px){
  .about-experience-layout{grid-template-columns:1fr;gap:34px}
  .about-side-portrait{max-width:260px;justify-self:start}
  .about-experience-copy h2{margin:20px 0 24px}
}

/* Studio attribution — discreet, consistent across all pages. */
.site-footer .foot-bottom .site-credit { white-space: nowrap; }
.site-footer .foot-bottom .site-credit a { color: inherit; text-decoration: none; border-bottom: 1px solid currentColor; text-underline-offset: 3px; transition: opacity .2s ease; }
.site-footer .foot-bottom .site-credit a:hover { opacity: .68; }
.site-footer .foot-bottom .site-credit a:focus-visible { outline: 2px solid currentColor; outline-offset: 4px; }
@media(max-width:767px){ .site-footer .foot-bottom .site-credit {white-space:normal;} }
