/* One coherent motion system, progressively enhanced. */
:root{--motion-ease:cubic-bezier(.2,.75,.2,1)}
.motion-reveal{opacity:1;transform:none}
.motion-on .motion-reveal{transition:opacity 1.1s var(--motion-ease),transform 1.1s var(--motion-ease);transition-delay:var(--reveal-delay,0ms)}
.motion-on .motion-reveal:not(.is-visible){opacity:0;transform:translate3d(0,26px,0)}
.motion-on .motion-reveal.is-visible{opacity:1;transform:none}
.motion-on .motion-reveal:focus-within{opacity:1;transform:none}
.reading-progress{position:fixed;left:0;right:0;top:0;height:3px;background:var(--accent);z-index:100;transform:scaleX(0);transform-origin:left center;pointer-events:none}
.back-to-top{position:fixed;bottom:25px;right:25px;z-index:30;width:44px;height:44px;display:grid;place-items:center;background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:50%;box-shadow:0 4px 20px #0001;font-size:20px;opacity:0;visibility:hidden;transform:translateY(12px);transition:opacity .25s,transform .25s,visibility .25s,background .2s}
.back-to-top.is-shown{opacity:1;visibility:visible;transform:none}.back-to-top:hover{background:var(--ink);color:var(--paper)}
.motion-toggle{background:none;border:0;color:#bfc1b8;padding:0;cursor:pointer;font-size:10px;white-space:nowrap;text-decoration:underline;text-underline-offset:4px}.motion-toggle:hover{color:white}.motion-toggle:disabled{cursor:default;text-decoration:none;color:#a4a89b}
.photo-depth .parallax-frame img{transform:translate3d(0,var(--photo-shift,0px),0) scale(1.10)!important;transition:transform .15s linear!important}
.depth-on .tilt-frame{transform:perspective(1200px) rotateX(var(--tilt-x,0deg)) rotateY(var(--tilt-y,0deg))!important;transition:transform .32s var(--motion-ease)}
.hero-gallery{touch-action:pan-y pinch-zoom;cursor:grab}.hero-gallery.is-dragging{cursor:grabbing}.hero-gallery img{user-select:none;-webkit-user-drag:none}
.scene-navigation{position:absolute;top:23px;left:25px;z-index:5;display:flex;align-items:center;gap:8px}
.scene-navigation button{width:36px;height:36px;background:#f3f1ebe8;border:1px solid #ffffff80;border-radius:50%;display:grid;place-items:center;color:var(--ink);font-size:18px;transition:background .2s,transform .2s}.scene-navigation button:hover{background:var(--accent);color:white;transform:translateY(-2px)}
.swipe-hint{font-size:9px;color:white;letter-spacing:.8px;text-shadow:0 1px 7px #0009;margin-left:6px;opacity:0;transition:opacity .2s}.hero-gallery:hover .swipe-hint,.hero-gallery:focus-within .swipe-hint{opacity:1}
.scene-choice{position:relative;border-bottom-color:transparent!important}.scene-choice:after{content:'';height:2px;background:var(--accent);position:absolute;bottom:-1px;left:0;right:0;transform:scaleX(0);transform-origin:left;transition:transform .35s var(--motion-ease)}.scene-choice.active:after{transform:scaleX(1)}
.button>span,.text-link>span,.expertise-caption>.arrow,.project-caption>.arrow,.circle-link{transition:transform .3s var(--motion-ease),background .25s,color .25s}
.button:hover>span,.button:focus-visible>span{transform:translate(3px,-3px)}
.expertise-card:hover .arrow,.project:hover .arrow{transform:translate(4px,-4px)}
.text-link{transition:color .2s,border-color .2s}.text-link:hover{color:var(--accent);border-color:var(--accent)}.dark .text-link:hover{color:#b8a7ff}.cta .circle-link:hover{transform:rotate(45deg)}
.field input,.field select,.field textarea{transition:border-color .2s,box-shadow .2s}.field:focus-within label{color:#5c3bd5}.field input:focus,.field select:focus,.field textarea:focus{border-bottom-color:var(--accent);box-shadow:0 1px 0 var(--accent)}
.faq-animating{overflow:hidden}.faq summary:after{transition:transform .25s}.faq details[open] summary:after{transform:rotate(180deg)}.faq-answer{display:flow-root}.faq-answer p{margin-bottom:0;padding-bottom:0}
.nav.open{animation:menu-arrive .22s var(--motion-ease)}
@keyframes menu-arrive{from{opacity:0;transform:translateY(-7px)}to{opacity:1;transform:none}}
@media(max-width:800px){.motion-on .motion-reveal:not(.is-visible){transform:translate3d(0,14px,0)}.motion-on .motion-reveal{transition-duration:.9s}.back-to-top{bottom:18px;right:18px;width:40px;height:40px}.scene-navigation{top:16px;left:16px}.scene-navigation button{width:34px;height:34px}.swipe-hint{display:none}}
html[data-motion="reduced"]{scroll-behavior:auto}
html[data-motion="reduced"] *,html[data-motion="reduced"] *:before,html[data-motion="reduced"] *:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
html[data-motion="reduced"] .motion-reveal,html[data-motion="reduced"] .reveal{opacity:1!important;transform:none!important}
html[data-motion="reduced"] .parallax-frame img,html[data-motion="reduced"] .tilt-frame,html[data-motion="reduced"] .project-art,html[data-motion="reduced"] .button:hover,html[data-motion="reduced"] .circle-link:hover{transform:none!important}
html[data-motion="reduced"] .hero-scene:not(.active){opacity:0!important}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.motion-reveal,.reveal{opacity:1!important;transform:none!important}.parallax-frame img,.tilt-frame,.project-art,.button:hover,.circle-link:hover{transform:none!important}}
@media print{.motion-reveal,.reveal{opacity:1!important;transform:none!important}.reading-progress,.back-to-top,.motion-toggle,.scene-navigation{display:none!important}}

/* Editorial entrance: words lift through masks; photography opens in distinct directions. */
.word-mask{display:inline-block;vertical-align:top;overflow:hidden;padding:.18em .12em .22em;margin:-.18em -.12em -.22em}
.word-rise{display:inline-block}
.motion-on .text-reveal.motion-reveal,.motion-on .reveal-composition.motion-reveal{opacity:1;transform:none}
.motion-on .word-rise{transition:transform 1.35s cubic-bezier(.22,1,.36,1);transition-delay:calc(var(--reveal-delay,0ms) + var(--word-delay,0ms))}
.motion-on .text-reveal:not(.is-visible) .word-rise{transform:translate3d(0,135%,0) rotate(2deg)}
.motion-on .text-reveal.is-visible .word-rise{transform:translate3d(0,0,0) rotate(0)}
.motion-on .image-reveal.motion-reveal{opacity:1;transform:none;clip-path:inset(0 0 0 0);transition:clip-path 1.65s cubic-bezier(.22,1,.36,1);transition-delay:var(--reveal-delay,0ms)}
.motion-on .image-reveal:not(.is-visible)[data-image-reveal="curtain"]{clip-path:inset(0 0 100% 0)}
.motion-on .image-reveal:not(.is-visible)[data-image-reveal="side"]{clip-path:inset(0 100% 0 0)}
.motion-on .image-reveal:not(.is-visible)[data-image-reveal="aperture"]{clip-path:inset(48% 0 48% 0)}
.motion-on .image-reveal:not(.is-visible)[data-image-reveal="rise"]{clip-path:inset(100% 0 0 0)}
.motion-on .image-reveal img{scale:1;transition:scale 1.8s cubic-bezier(.22,1,.36,1)!important;transition-delay:var(--reveal-delay,0ms)!important}
.motion-on .image-reveal:not(.is-visible) img{scale:1.07}
.motion-on .site-header .logo,.motion-on .site-header .nav,.motion-on .site-header>.button,.motion-on .site-header .menu-toggle{animation:header-unveil 1.1s cubic-bezier(.22,1,.36,1) both}
.motion-on .site-header .nav{animation-delay:.08s}.motion-on .site-header>.button{animation-delay:.14s}
@keyframes header-unveil{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}
.motion-on .hero-scene{clip-path:inset(0 0 0 100%);transition:clip-path 1.2s cubic-bezier(.22,1,.36,1),opacity .8s ease}
.motion-on .hero-scene.active{clip-path:inset(0 0 0 0)}
.motion-on .hero-period{animation:signature-arrive 1.5s .2s cubic-bezier(.22,1,.36,1) both;transform-origin:center}
@keyframes signature-arrive{from{opacity:0;transform:rotate(-60deg) scale(.65)}to{opacity:1;transform:rotate(0) scale(1)}}
.cta{color:#fff}.page-hero .eyebrow{color:#5c3bd5}
.motion-on .text-reveal:focus-within .word-rise{transform:none}
.motion-on .image-reveal:focus-within{clip-path:none}
@media(max-width:800px){.motion-on .word-rise{transition-duration:1.1s}.motion-on .image-reveal.motion-reveal{transition-duration:1.3s}.motion-on .image-reveal:not(.is-visible) img{scale:1.035}}
html[data-motion="reduced"] .word-rise{transform:none!important}
html[data-motion="reduced"] .image-reveal,html[data-motion="reduced"] .hero-scene{clip-path:none!important}
html[data-motion="reduced"] .image-reveal img{scale:1!important}
@media(prefers-reduced-motion:reduce){.word-rise{transform:none!important}.image-reveal,.hero-scene{clip-path:none!important}.image-reveal img{scale:1!important}}
@media print{.word-rise{transform:none!important}.image-reveal,.hero-scene{clip-path:none!important}.image-reveal img{scale:1!important}}

.detail-photo{overflow:hidden;position:relative}.photo-depth .photo-hero-heading,.photo-depth .page-hero h1{translate:0 var(--title-shift,0px)}
@media(max-width:800px){.photo-depth .parallax-frame img{transform:translate3d(0,var(--photo-shift,0px),0) scale(1.045)!important}}
html[data-motion="reduced"] .photo-hero-heading,html[data-motion="reduced"] .page-hero h1{translate:none!important}
@media(prefers-reduced-motion:reduce){.photo-hero-heading,.page-hero h1{translate:none!important}}

/* Hero title reveal — runs from first paint, no JS dependency */
.hero-title .ht-line{display:block;overflow:hidden;padding:.08em .2em .16em .02em;margin:-.08em -.2em -.16em -.02em}
.hero-title .ht-w,.hero-title .ht-c{display:inline-block;will-change:transform}
.hero-title .ht-word{display:inline-block;white-space:nowrap}
.hero-title .ht-w{animation:ht-rise 1.25s cubic-bezier(.16,1,.3,1) both}
.hero-title .ht-w:nth-child(1){animation-delay:.12s}.hero-title .ht-w:nth-child(2){animation-delay:.22s}
.hero-title .ht-c{animation:ht-char 1.1s cubic-bezier(.16,1,.3,1) both;transform-origin:0 100%}
.hero-title .ht-word:nth-child(1) .ht-c:nth-child(1){animation-delay:.46s}.hero-title .ht-word:nth-child(1) .ht-c:nth-child(2){animation-delay:.5s}.hero-title .ht-word:nth-child(1) .ht-c:nth-child(3){animation-delay:.54s}.hero-title .ht-word:nth-child(1) .ht-c:nth-child(4){animation-delay:.58s}
.hero-title .ht-word:nth-child(2) .ht-c:nth-child(1){animation-delay:.66s}.hero-title .ht-word:nth-child(2) .ht-c:nth-child(2){animation-delay:.7s}.hero-title .ht-word:nth-child(2) .ht-c:nth-child(3){animation-delay:.74s}.hero-title .ht-word:nth-child(2) .ht-c:nth-child(4){animation-delay:.78s}.hero-title .ht-word:nth-child(2) .ht-c:nth-child(5){animation-delay:.82s}
.photo-hero h1.hero-title .hero-period{animation:ht-star 1.3s 1s cubic-bezier(.34,1.56,.64,1) both;transform-origin:50% 55%}
.photo-hero .hero-meta{animation:ht-fade .9s .02s ease-out both}
.photo-hero .hero-intro>*{animation:ht-lift 1s cubic-bezier(.16,1,.3,1) both}
.photo-hero .hero-intro>:nth-child(1){animation-delay:.7s}.photo-hero .hero-intro>:nth-child(2){animation-delay:.8s}.photo-hero .hero-intro>:nth-child(3){animation-delay:.9s}
@keyframes ht-rise{from{transform:translate3d(0,112%,0) rotate(3deg)}to{transform:none}}
@keyframes ht-char{from{transform:translate3d(0,118%,0) rotate(9deg)}to{transform:none}}
@keyframes ht-star{0%{transform:scale(0) rotate(-220deg);opacity:0}55%{opacity:1}100%{transform:none;opacity:1}}
@keyframes ht-fade{from{opacity:0}to{opacity:1}}
@keyframes ht-lift{from{opacity:0;transform:translate3d(0,18px,0)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.hero-title .ht-w,.hero-title .ht-c,.photo-hero h1.hero-title .hero-period,.photo-hero .hero-meta,.photo-hero .hero-intro>*{animation:none!important}}
html[data-motion="reduced"] .hero-title .ht-w,html[data-motion="reduced"] .hero-title .ht-c,html[data-motion="reduced"] .photo-hero h1.hero-title .hero-period,html[data-motion="reduced"] .photo-hero .hero-meta,html[data-motion="reduced"] .photo-hero .hero-intro>*{animation:none!important}
@media print{.hero-title .ht-w,.hero-title .ht-c,.photo-hero h1.hero-title .hero-period,.photo-hero .hero-meta,.photo-hero .hero-intro>*{animation:none!important}}

/* Rotating hero line */
.hero-title .ht-row{display:flex;align-items:flex-start}
.hero-title .ht-rot{display:inline-block;white-space:nowrap;transition:width .9s cubic-bezier(.16,1,.3,1)}
.hero-title .ht-x{display:inline-block;will-change:transform}
.photo-hero h1.hero-title .hero-period{position:relative;left:auto;top:0;margin-left:-.01em;flex:none}
.hero-title .ht-row .ht-line{padding-bottom:.3em;margin-bottom:-.3em}

/* ===== Mobile menu: layered curtain + masked type, matched to the hero ===== */
.nav-num,.nav-meta,.nav-star{display:none}
.menu-toggle .ml-close{display:none}
@media(max-width:800px){
 .site-header .nav,.motion-on .site-header .nav,.nav.open{animation:none}
 .site-header .logo{position:relative;z-index:2;transition:color .3s .62s}
 .menu-open .site-header .logo{color:var(--paper);transition-delay:.2s}
 .menu-toggle{display:flex;align-items:center;gap:12px;position:relative;z-index:2;padding:12px 0;color:var(--ink);font-size:13px;font-weight:600;letter-spacing:.2px;transition:color .3s .62s}
 .menu-open .menu-toggle{color:var(--paper);transition-delay:.2s}
 .menu-toggle[aria-expanded="true"] .ml-open{display:none}.menu-toggle[aria-expanded="true"] .ml-close{display:inline}
 .menu-icon{position:relative;display:inline-block;width:24px;height:10px}
 .menu-icon i{position:absolute;left:0;right:0;top:0;height:1.5px;border-radius:2px;background:currentColor;transition:transform .6s cubic-bezier(.76,0,.24,1),top .6s cubic-bezier(.76,0,.24,1),left .6s cubic-bezier(.76,0,.24,1)}
 .menu-icon i:last-child{top:8.5px;left:35%}
 .menu-toggle[aria-expanded="true"] .menu-icon i:first-child{top:4.25px;transform:rotate(45deg)}
 .menu-toggle[aria-expanded="true"] .menu-icon i:last-child{top:4.25px;left:0;transform:rotate(-45deg)}
 .nav{display:flex;position:fixed;inset:0;z-index:-1;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:0;padding:calc(76px + 5.5vh) 24px calc(26px + env(safe-area-inset-bottom,0px));background:none;border:0;box-shadow:none;overflow-x:hidden;overflow-y:auto;visibility:hidden;pointer-events:none;transition:visibility 0s linear 1.2s}
 .nav.open{visibility:visible;pointer-events:auto;transition-delay:0s}
 .nav::before,.nav::after{content:'';position:fixed;inset:0;clip-path:inset(0 0 100% 0);transition:clip-path .75s cubic-bezier(.76,0,.24,1)}
 .nav::before{background:var(--accent);z-index:-3;transition-delay:.42s}
 .nav::after{background:var(--dark);z-index:-2;transition-delay:.3s}
 .nav.open::before{clip-path:inset(0);transition-delay:0s}
 .nav.open::after{clip-path:inset(0);transition-delay:.11s}
 .nav>a:not(.button){display:grid;grid-template-columns:44px 1fr auto;align-items:center;padding:15px 0;position:relative;color:var(--paper)}
 .nav>a:not(.button):after{content:'';position:absolute;left:0;right:0;bottom:0;width:auto;height:1px;background:#ffffff24;transform:scaleX(0);transform-origin:0 50%;transition:transform .3s}
 .nav>a:hover:after,.nav>a[aria-current]:after{width:auto}
 .nav.open>a:not(.button):after{transform:scaleX(1);transition:transform 1.1s cubic-bezier(.16,1,.3,1)}
 .nav>a:not(.button):before{content:'↗';grid-column:3;grid-row:1;font-size:20px;color:#b8a7ff;opacity:0;transform:translate(-10px,10px);transition:opacity .2s,transform .3s}
 .nav.open>a:not(.button):before{opacity:1;transform:none;transition:opacity .6s,transform .8s cubic-bezier(.16,1,.3,1)}
 .nav-num{display:block;grid-column:1;font:11px monospace;letter-spacing:.6px;color:#b8a7ff;opacity:0;transition:opacity .2s}
 .nav.open .nav-num{opacity:1;transition:opacity .7s}
 .nav-mask{display:block;grid-column:2;overflow:hidden;padding:.1em .1em .16em 0;margin:-.1em -.1em -.16em 0}
 .nav-text{display:inline-block;font-size:clamp(40px,11.4vw,58px);font-weight:400;line-height:1;letter-spacing:-.045em;transform:translate3d(0,115%,0) rotate(5deg);transform-origin:0 100%;transition:transform .34s cubic-bezier(.45,0,.55,.2),color .3s}
 .nav.open .nav-text{transform:none;transition:transform 1.05s cubic-bezier(.16,1,.3,1),color .3s}
 .nav>a[aria-current] .nav-text{font-family:Georgia,'Times New Roman',serif;font-style:italic;letter-spacing:-.035em;color:#b8a7ff}
 .nav>a:not(.button):hover .nav-text,.nav>a:not(.button):active .nav-text{color:#b8a7ff}
 .nav.open>a:nth-of-type(1) .nav-text{transition-delay:.36s}.nav.open>a:nth-of-type(1):after{transition-delay:.3s}.nav.open>a:nth-of-type(1) .nav-num,.nav.open>a:nth-of-type(1):before{transition-delay:.55s}
 .nav.open>a:nth-of-type(2) .nav-text{transition-delay:.43s}.nav.open>a:nth-of-type(2):after{transition-delay:.37s}.nav.open>a:nth-of-type(2) .nav-num,.nav.open>a:nth-of-type(2):before{transition-delay:.62s}
 .nav.open>a:nth-of-type(3) .nav-text{transition-delay:.5s}.nav.open>a:nth-of-type(3):after{transition-delay:.44s}.nav.open>a:nth-of-type(3) .nav-num,.nav.open>a:nth-of-type(3):before{transition-delay:.69s}
 .nav.open>a:nth-of-type(4) .nav-text{transition-delay:.57s}.nav.open>a:nth-of-type(4):after{transition-delay:.51s}.nav.open>a:nth-of-type(4) .nav-num,.nav.open>a:nth-of-type(4):before{transition-delay:.76s}
 .nav>a:nth-of-type(2) .nav-text{transition-delay:.025s}.nav>a:nth-of-type(3) .nav-text{transition-delay:.05s}.nav>a:nth-of-type(4) .nav-text{transition-delay:.075s}
 .nav .button{margin-top:30px;justify-content:space-between;padding:18px 22px;font-size:14px;background:var(--accent);border-color:var(--accent);color:#fff;opacity:0;transform:translateY(18px);transition:opacity .2s,transform .3s}
 .nav.open .button{opacity:1;transform:none;transition:opacity .8s .7s,transform 1s .7s cubic-bezier(.16,1,.3,1),background .2s}
 .nav-meta{display:flex;flex-direction:column;gap:9px;margin-top:auto;padding-top:30px;font-size:12px;letter-spacing:.2px;color:#aaada2;opacity:0;transition:opacity .2s}
 .nav-meta a{font-size:15px;color:var(--paper)}
 .nav.open .nav-meta{opacity:1;transition:opacity .9s .85s}
 .nav-star{display:block;position:fixed;right:-34px;top:31vh;z-index:-1;font:italic 290px/1 Georgia,'Times New Roman',serif;color:var(--accent);opacity:0;transform:scale(.3) rotate(-200deg);transition:opacity .25s,transform .35s;pointer-events:none}
 .nav.open .nav-star{opacity:.55;transform:none;transition:opacity 1s .5s,transform 1.6s .5s cubic-bezier(.16,1,.3,1)}
 .nav-star>span{display:inline-block}
 .nav.open .nav-star>span{animation:nav-star-spin 26s linear infinite}
 .menu-open .back-to-top,.menu-open .reading-progress{opacity:0!important;pointer-events:none!important}
}
@keyframes nav-star-spin{to{transform:rotate(360deg)}}
@media(max-width:800px) and (prefers-reduced-motion:reduce){.nav::before,.nav::after,.nav-text,.nav .button,.nav-meta,.nav-star,.nav>a:after,.nav>a:before{transition-duration:.01s!important;transition-delay:0s!important}.nav-star>span{animation:none!important}}
@media(max-width:800px){html[data-motion="reduced"] .nav::before,html[data-motion="reduced"] .nav::after,html[data-motion="reduced"] .nav-text,html[data-motion="reduced"] .nav .button,html[data-motion="reduced"] .nav-meta,html[data-motion="reduced"] .nav-star{transition-duration:.01s!important;transition-delay:0s!important}html[data-motion="reduced"] .nav-star>span{animation:none!important}}
