/* motion layer: effects Lee approved in the motion preview. Hidden starting states only apply once motion.js adds .mo to <html>, so nothing disappears if the script fails. */

/* ---- soft-focus loading ---- */
.mo .sfp{position:relative}
.mo .sfp::after{content:"";position:absolute;inset:-6%;z-index:0;background:var(--lq) center/cover;filter:blur(16px);transform:scale(1.04);opacity:1;transition:opacity .9s ease;pointer-events:none}
.mo .sfp.ok::after{opacity:0}
.mo .sfp>img{position:relative;z-index:1}
.mo img.sfl{opacity:0;filter:blur(12px)}
.mo img.sfl-done{opacity:1;filter:none;transition:opacity .8s ease,filter 1s ease}

/* ---- rise in on scroll ---- */
.mo .mw,.mo .gallery>button{opacity:0;transform:translateY(44px);transition:opacity .9s ease,transform 1s cubic-bezier(.2,.7,.2,1);transition-delay:var(--d,0ms)}
.mo .mw.in,.mo .gallery>button.in{opacity:1;transform:none}
.mo .gallery>button{animation:none}
@media (prefers-reduced-motion:reduce){.mo .mw,.mo .gallery>button{opacity:1;transform:none;transition:none}}

/* ---- portfolio cards: wrapper glow + flick ---- */
.mw{position:relative;min-width:0}
.mw .card{animation:none;position:relative;z-index:1;transition:transform .5s cubic-bezier(.2,.7,.2,1)}
.mw::before{content:"";position:absolute;inset:8% 8% 14% 8%;z-index:0;background:var(--g) center/cover;filter:blur(34px) saturate(1.8);opacity:0;transition:opacity .6s ease;pointer-events:none}
@media (hover:hover){.mw:hover::before{opacity:.7}.mw:hover .card{transform:translateY(-6px)}}
.card img.flick{position:absolute;inset:0;z-index:0;width:100%;height:100%;object-fit:cover;object-position:center 25%;opacity:0;transition:opacity .35s;pointer-events:none}
.card.wide img.flick{object-fit:contain;object-position:center 40%}
.card img.flick.on{opacity:1}
.mo-label{position:fixed;z-index:70;left:0;top:0;pointer-events:none;font:500 11px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;background:var(--fg);color:#0d0c0b;padding:10px 14px;border-radius:999px;opacity:0;transform:translate(-50%,-160%) scale(.6);transition:opacity .2s,transform .25s cubic-bezier(.2,.7,.2,1)}
.mo-label.on{opacity:1;transform:translate(-50%,-160%) scale(1)}
@media (hover:none){.mo-label{display:none}}

/* ---- homepage ticker ---- */
.hm-tick{border-top:1px solid var(--rule);padding-block:clamp(28px,4vw,56px);overflow:hidden}
.tk-row{overflow:hidden;touch-action:pan-y;cursor:grab;user-select:none;-webkit-user-select:none}
.tk-row.drag{cursor:grabbing}
.tk-track{display:flex;width:max-content;will-change:transform}
.tk-track a{font:900 clamp(48px,8vw,120px)/1.05 var(--display);text-transform:uppercase;padding-right:.5em;white-space:nowrap;color:var(--fg);text-decoration:none;transition:color .25s,-webkit-text-stroke-color .25s}
.tk-track a.o{color:transparent;-webkit-text-stroke:1.5px rgba(242,238,232,.8);font-weight:700}
.tk-track a::after{content:"•";display:inline-block;margin-left:.5em;color:rgba(242,238,232,.35);-webkit-text-stroke:0;font-size:.4em;vertical-align:middle}
@media (hover:hover){.tk-track a:hover{color:transparent;-webkit-text-stroke:1.5px var(--fg)}.tk-track a.o:hover{color:var(--fg);-webkit-text-stroke-color:var(--fg)}}

/* ---- homepage recent sets: narrow rail ---- */
.hm-grid.hm-rail{display:flex;gap:14px;overflow-x:auto;scrollbar-width:none;margin-inline:calc(50% - 50vw);padding:4px calc(50vw - 50%) 10px;-webkit-overflow-scrolling:touch;cursor:grab}
.hm-grid.hm-rail::-webkit-scrollbar{display:none}
.hm-grid.hm-rail.drag{cursor:grabbing}
.hm-rail .hm-card{flex:0 0 clamp(200px,21vw,330px)}
@media (max-width:760px){.hm-rail .hm-card{flex-basis:44vw}}
.hm-rail .hm-card strong{font-size:clamp(16px,1.5vw,22px)}
.hm-rail img{pointer-events:none}

/* ---- set page ---- */
.set-wash{position:absolute;left:-10%;right:-10%;top:0;height:900px;z-index:-1;background:var(--w) center/cover;filter:blur(90px) saturate(1.7);opacity:.42;pointer-events:none;-webkit-mask-image:linear-gradient(#000 35%,transparent);mask-image:linear-gradient(#000 35%,transparent)}
main.has-wash{position:relative;isolation:isolate;overflow-x:clip}
.set-head h1.lines{animation:none}
.set-head h1.lines .ln{display:inline-block;overflow:hidden;vertical-align:top;padding-top:.12em;margin-top:-.12em}
.set-head h1.lines .ln+.ln{margin-left:.22em}
.set-head h1.lines .ln>span{display:inline-block;transform:translateY(108%);transition:transform 1.1s cubic-bezier(.2,.7,.2,1);transition-delay:var(--d,0ms)}
.set-head h1.lines.go .ln>span{transform:none}
@media (prefers-reduced-motion:reduce){.set-head h1.lines .ln>span{transform:none;transition:none}}
.mf{overflow-x:auto;overflow-y:hidden;margin:0 0 28px;border-radius:2px;scrollbar-width:none;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;cursor:grab}
.mf::-webkit-scrollbar{display:none}
.mf.drag{cursor:grabbing}
.mf-strip img{pointer-events:none}
.mf-strip{display:flex;gap:6px;width:max-content;background:#111;padding:26px 10px;position:relative;will-change:transform}
.mf-strip::before,.mf-strip::after{content:"";position:absolute;left:0;right:0;height:11px;background:repeating-linear-gradient(90deg,transparent 0 10px,#e8e2d8 10px 22px,transparent 22px 34px);opacity:.85;border-radius:2px}
.mf-strip::before{top:8px}.mf-strip::after{bottom:8px}
.mf-strip button{border:0;padding:0;background:#1a1816;cursor:zoom-in;position:relative;overflow:hidden;height:clamp(120px,18vw,220px)}
.mf-strip img{height:100%;width:auto;display:block}
.mf-strip button span{position:absolute;left:6px;bottom:4px;z-index:2;font:500 10px/1 var(--mono);letter-spacing:.12em;color:#f3a43a}
.mo-follow{position:fixed;z-index:60;left:0;right:0;top:var(--ft,0px);height:50px;display:flex;align-items:center;gap:14px;padding:0 var(--gl,16px);background:rgba(11,10,9,.86);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:1px solid var(--rule);transform:translateY(-120%);opacity:0;transition:transform .45s cubic-bezier(.2,.7,.2,1),opacity .3s;pointer-events:none}
.mo-follow.on{transform:none;opacity:1}
.mo-follow strong{font:800 20px/1 var(--display);text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mo-follow span{font:500 10px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--mute);white-space:nowrap}
@media (max-width:560px){.mo-follow span{display:none}}

/* next set */
.pager.mo-next{display:block;padding-bottom:72px}
.mo-nx{display:grid;grid-template-columns:1.2fr 1fr;align-items:center;gap:clamp(20px,4vw,64px);position:relative;isolation:isolate;overflow:hidden;padding:clamp(24px,4vw,56px);border:1px solid var(--rule);text-decoration:none;color:var(--fg);opacity:0;transform:translateY(30px);transition:opacity 1.1s ease,transform 1.2s cubic-bezier(.2,.7,.2,1)}
.mo-nx.in{opacity:1;transform:none}
.mo-nx .wash{position:absolute;inset:-20%;z-index:-1;background:var(--w) center/cover;filter:blur(90px) saturate(1.6);opacity:.4}
.mo-nx .ph{justify-self:end;width:min(100%,400px);overflow:hidden;aspect-ratio:var(--r,4/5);background:var(--stage)}
.mo-nx .ph img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s cubic-bezier(.2,.7,.2,1)}
@media (hover:hover){.mo-nx:hover .ph img{transform:scale(1.04)}}
.mo-nx strong{display:block;font:900 clamp(52px,8vw,140px)/.86 var(--display);text-transform:uppercase;margin:10px 0 12px}
.mo-nx em{font-style:normal;font:500 11px/1.4 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:color-mix(in srgb,var(--fg) 80%,transparent)}
.mo-nx .go{display:inline-block;margin-top:22px;font:500 11px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;border:1px solid color-mix(in srgb,var(--fg) 35%,transparent);border-radius:999px;padding:11px 16px}
.mo-prev{display:inline-block;margin-top:16px;font:500 11px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--mute);text-decoration:none}
.mo-prev:hover{color:var(--fg)}
@media (max-width:760px){.mo-nx{grid-template-columns:1fr}.mo-nx .ph{justify-self:start;width:70%}}

/* viewer */
.mo-vw{position:fixed;inset:0;z-index:100;background:#000;touch-action:none;overflow:hidden}
.mo-vw[hidden]{display:none}
.mo-vw-track{position:absolute;inset:0;width:300%;display:flex;transform:translateX(-33.3333%)}
.mo-vw-track.anim{transition:transform .38s cubic-bezier(.2,.7,.2,1)}
.mo-vw-slide{width:33.3333%;height:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:center;padding:58px 12px;min-height:0}
.mo-vw-slide img{display:block;width:auto;height:auto;max-width:100%;max-height:calc(100svh - 116px);object-fit:contain;transform-origin:center;user-select:none;-webkit-user-select:none;-webkit-user-drag:none}
.mo-vw-bar{position:absolute;z-index:2;top:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;padding:14px 16px;font:500 11px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--fg)}
.mo-vw-bar button,.mo-vw-nav{background:rgba(0,0,0,.5);border:1px solid rgba(242,238,232,.25);color:var(--fg);border-radius:999px;padding:9px 14px;cursor:pointer;font:inherit}
.mo-vw-nav{position:absolute;z-index:2;top:50%;transform:translateY(-50%);width:46px;height:46px;padding:0;font-size:18px}
.mo-vw-nav.p{left:14px}.mo-vw-nav.n{right:14px}
@media (hover:none){.mo-vw-nav{display:none}}

/* ---- about photo reveal ---- */
.mo .about .ph{position:relative}
.mo .about .ph::after{content:"";position:absolute;inset:0;z-index:2;background:var(--ink,#0b0a09);transform-origin:right;transition:transform 1.6s cubic-bezier(.7,0,.2,1)}
.mo .about .ph img{transform:scale(1.12);transition:transform 2.2s cubic-bezier(.2,.7,.2,1)}
.mo .about.in .ph::after{transform:scaleX(0)}
.mo .about.in .ph img{transform:none}
@media (prefers-reduced-motion:reduce){.mo .about .ph::after{display:none}.mo .about .ph img{transform:none}}

/* ---- footer line: outline that fills ---- */
:is(.foot-cta,.hm-cta) h2 a.mo-fill{position:relative;display:inline-block;color:transparent;-webkit-text-stroke:1.5px var(--fg);transition:none}
:is(.foot-cta,.hm-cta) h2 a.mo-fill:hover{color:transparent}
:is(.foot-cta,.hm-cta) h2 a.mo-fill::after{content:attr(data-fill);position:absolute;left:0;top:0;right:0;white-space:pre;color:var(--fg);-webkit-text-stroke:0;clip-path:inset(0 100% 0 0);transition:clip-path .9s cubic-bezier(.2,.7,.2,1);pointer-events:none}
:is(.foot-cta,.hm-cta) h2 a.mo-fill:hover::after,:is(.foot-cta,.hm-cta) h2 a.mo-fill:focus-visible::after,:is(.foot-cta,.hm-cta) h2 a.mo-fill.fill::after{clip-path:inset(0 0 0 0)}

/* ---- viewfinder cursor (laptops) ---- */
.mo-vf{position:fixed;z-index:110;left:0;top:0;width:46px;height:46px;margin:-23px 0 0 -23px;pointer-events:none;opacity:0;transition:opacity .2s,width .3s cubic-bezier(.2,.7,.2,1),height .3s cubic-bezier(.2,.7,.2,1),margin .3s cubic-bezier(.2,.7,.2,1)}
.mo-vf.show{opacity:1}
.mo-vf.lock{width:30px;height:30px;margin:-15px 0 0 -15px}
.mo-vf i{position:absolute;width:10px;height:10px;border:0 solid #f2eee8;filter:drop-shadow(0 0 1px rgba(0,0,0,.8))}
.mo-vf i:nth-child(1){top:0;left:0;border-top-width:1.5px;border-left-width:1.5px}
.mo-vf i:nth-child(2){top:0;right:0;border-top-width:1.5px;border-right-width:1.5px}
.mo-vf i:nth-child(3){bottom:0;left:0;border-bottom-width:1.5px;border-left-width:1.5px}
.mo-vf i:nth-child(4){bottom:0;right:0;border-bottom-width:1.5px;border-right-width:1.5px}
.mo-vf b{position:absolute;left:50%;top:50%;width:4px;height:4px;margin:-2px;border-radius:50%;background:#e5372f;opacity:0;transition:opacity .2s}
.mo-vf.lock b{opacity:1}
.mo-vf.snap i{animation:movfsnap .25s ease}
.mo-vf.snap b{animation:movfdot .25s ease}
@keyframes movfsnap{0%{border-color:#fff}100%{border-color:#f2eee8}}
@keyframes movfdot{0%{background:#fff}100%{background:#e5372f}}
.mo-flash{position:fixed;z-index:109;width:90px;height:90px;margin:-45px 0 0 -45px;border-radius:50%;pointer-events:none;mix-blend-mode:screen;background:radial-gradient(circle,rgba(255,255,255,.7) 0,rgba(255,250,240,.25) 35%,rgba(255,255,255,0) 65%);animation:moflash .3s ease-out forwards}
@keyframes moflash{0%{opacity:.85;transform:scale(.35)}100%{opacity:0;transform:scale(1.25)}}
html.mo-cur :is(.card img,.hm-card img,.gallery img,.slide img,.mf-strip img,.mo-nx .ph img,.about .ph img,.mo-vw-slide img){cursor:none}
@media (hover:none),(pointer:coarse){.mo-vf,.mo-flash{display:none}}
/* ---- homepage CTA matches the footer line ---- */
.hm-cta h2{font-size:clamp(52px,10vw,150px);line-height:.88}
.hm-cta h2 a{text-decoration:none;color:var(--fg)}

/* ---- publications: one quiet line under the ticker ---- */
.hm-pub{border-top:0;padding-block:clamp(18px,3vw,32px) clamp(48px,7vw,90px)}
.hm-pub .wrap{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px 18px}
.hm-pub .label{margin:0}
.hm-pub .hm-logos{gap:8px 0;font:800 clamp(15px,1.4vw,19px)/1.2 var(--display);color:color-mix(in srgb,var(--fg) 72%,transparent)}
.hm-pub .hm-logos span+span::before{content:"·";margin:0 .7em;color:var(--mute)}
.hm-pub .hm-logos small{display:none}
.hm-tick{border-top:0;padding-bottom:0}

/* ---- recent sets: bigger photos filling the band, title fades in bottom-left over them ---- */
.hm-recent.hm-bleed{padding-block:clamp(20px,3vw,40px)}
.hm-recent.hm-bleed .hm-rail .hm-card{flex-basis:clamp(240px,26vw,430px)}
@media (min-width:900px){
  .hm-recent.hm-bleed>.wrap{position:relative}
  .hm-recent.hm-bleed .hm-rail{padding-left:calc(50vw - 50% + clamp(260px,26vw,420px))}
  .hm-recent.hm-bleed .hm-rail::before{content:none}
  .hm-recent.hm-bleed .hm-head{position:absolute;z-index:3;left:0;padding-left:inherit;bottom:clamp(36px,4vw,60px);margin:0;display:grid;gap:14px;justify-items:start;max-width:clamp(240px,24vw,400px);opacity:0;transform:translateY(24px);transition:opacity 1s ease .2s,transform 1.1s cubic-bezier(.2,.7,.2,1) .2s;pointer-events:none}
  .hm-recent.hm-bleed .hm-head a{pointer-events:auto}
  .hm-recent.hm-bleed .hm-head h2{font-size:clamp(48px,5.5vw,92px);line-height:.88}
  .hm-recent.hm-bleed.in .hm-head{opacity:1;transform:none}
  .hm-recent.hm-bleed>.wrap::after{content:"";position:absolute;z-index:2;top:0;bottom:0;left:calc(50% - 50vw);width:calc(50vw - 50% + clamp(300px,32vw,520px));background:linear-gradient(90deg,var(--ink,#0b0a09) 0,var(--ink,#0b0a09) 45%,rgba(11,10,9,.55) 75%,transparent);pointer-events:none}
}
@media (prefers-reduced-motion:reduce){.hm-recent.hm-bleed .hm-head{opacity:1;transform:none}}

/* ---- recent sets: captions above the soft-focus layer; on laptops the name follows the mouse instead ---- */
.hm-rail .hm-card .cap{z-index:2}
@media (hover:hover) and (pointer:fine){.hm-rail .hm-card .cap{display:none}}
.mo-label.mo-name{display:flex;align-items:baseline;gap:10px;padding:11px 16px;white-space:nowrap}
.mo-label.mo-name strong{font:800 17px/1 var(--display);letter-spacing:0;text-transform:uppercase}

/* ---- ticker heading ---- */
.tk-label{display:flex;justify-content:flex-end;margin-bottom:clamp(12px,2vw,22px)}
.tk-label .label{margin:0;color:var(--mute)}

/* ---- phone menu: the header's blur made the open menu collapse to zero height, so the page showed through ---- */
@media (max-width:760px){
  .top:has(.nav.open){backdrop-filter:none;-webkit-backdrop-filter:none;background:var(--ink)}
  .nav{bottom:auto;height:calc(100dvh - 64px);overflow-y:auto}
}

/* contact form: detail fields that don't apply to the chosen job are hidden */
#form .field[hidden]{display:none}
