:root{--bg:#0a0b0b;--text:#f1f1ef;--muted:#999a98;--line:#303130;color-scheme:dark}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font:13px/1.625 'Helvetica Neue',Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;transition:background .4s,color .4s}body.light{--bg:#efefec;--text:#171817;--muted:#676865;--line:#ccc;color-scheme:light}a{color:inherit;text-decoration:none}button{color:inherit;font:inherit;border:0;background:none;cursor:pointer;padding:0}a,button{-webkit-tap-highlight-color:transparent}a:hover,button:hover{opacity:.7}a:focus-visible,button:focus-visible{outline:1px solid currentColor;outline-offset:6px}header{position:fixed;z-index:10;top:0;left:0;width:100%;padding:44px 48px;display:flex;align-items:center;justify-content:space-between;background:linear-gradient(var(--bg),transparent)}.brand{text-transform:uppercase;letter-spacing:.09em;font-weight:500}nav{display:flex;gap:30px}nav a{color:var(--muted)}nav a[aria-current=page]{color:var(--text)}footer{position:fixed;z-index:10;bottom:0;padding:28px 48px;width:100%;display:flex;justify-content:space-between;align-items:center;pointer-events:none;background:linear-gradient(transparent,var(--bg));color:var(--muted)}footer a,footer button{pointer-events:auto}.settings{display:flex;gap:26px;align-items:center}#theme{width:24px;height:28px;display:grid;place-items:center}#theme span{display:block;width:10px;height:10px;background:var(--text);border-radius:0}#motion{font-size:11px}#position{font-size:11px;font-variant-numeric:tabular-nums}.film-section{min-height:100svh;display:grid;place-items:center;padding:100px 0}.film{display:block;position:relative;width:66.6667vw;aspect-ratio:2.222;background:#171818;overflow:hidden;color:#fff;isolation:isolate}.film img{width:100%;height:100%;object-fit:cover;display:block;transition:transform 1.4s cubic-bezier(.2,.7,.2,1),opacity .8s}.film iframe{position:absolute;inset:50% auto auto 50%;width:100%;height:125%;transform:translate(-50%,-50%);border:0;pointer-events:none;opacity:0;transition:opacity .8s}.film iframe.ready{opacity:1}.film:after{content:'';position:absolute;inset:0;background:#0002;pointer-events:none;transition:background .6s}.film:hover{opacity:1}.film:hover:after{background:#0004}.film:hover img{transform:scale(1.025)}.caption{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:16px;z-index:2;letter-spacing:.01em}.caption em{font-style:normal;color:#ddd}.watch{position:absolute;left:50%;top:calc(50% + 30px);transform:translate(-50%,8px);opacity:0;transition:.4s;z-index:3;font-size:11px}.film:hover .watch,.film:focus-visible .watch{opacity:1;transform:translate(-50%,0)}main{animation:arrive 1s ease both}@keyframes arrive{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}.archive{padding:160px 8vw 140px;display:grid;grid-template-columns:repeat(2,1fr);gap:60px 32px}.archive .film{width:100%}.archive .caption{inset:auto 0 0;padding:20px;justify-content:flex-start}.archive .watch{display:none}.feature-list{max-width:1100px;margin:auto;padding:170px 48px 150px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:80px}.poster{display:block;width:100%;text-align:left}.poster img{display:block;width:100%;height:60vh;object-fit:contain;transition:transform .7s}.poster:hover img{transform:translateY(-6px)}.poster p{margin-top:25px}.poster span{display:block;color:var(--muted)}.about{width:66.6667%;margin:auto;padding:24vh 0 160px}.about h1{font-size:clamp(24px,2.6vw,44px);font-weight:400;line-height:1.3;letter-spacing:-.025em;max-width:780px;margin:0 0 80px}.about-grid{display:grid;grid-template-columns:1fr 1fr;gap:60px}.about h2{font-size:13px;font-weight:400;color:var(--muted);margin:0 0 22px}.about p{margin:0 0 22px}.about ul{list-style:none;padding:0;margin:0}.about .contact{display:inline-block;margin-top:60px;border-bottom:1px solid var(--line)}dialog{position:fixed;inset:0;margin:0;width:100vw;max-width:none;height:100dvh;max-height:none;background:#080909;color:#eee;border:0;padding:40px 48px;z-index:30}dialog::backdrop{background:#000}dialog[open]{display:flex;flex-direction:column;justify-content:space-between}.player-top,.player-bottom{display:flex;justify-content:space-between;gap:20px}.player-bottom{color:#aaa;margin:0}#screen{height:calc(100dvh - 180px);width:100%;display:grid;place-items:center}#screen iframe{width:100%;height:100%;border:0}.skip{position:fixed;top:-100px;left:20px;z-index:99}.skip:focus{top:20px;background:var(--bg);padding:10px}@media(max-width:700px){header{padding:24px 20px;align-items:flex-start}nav{gap:18px;font-size:12px}.brand{font-size:12px}footer{padding:20px;font-size:11px}#motion{font-size:10px}.settings{gap:12px}#position{display:none}.film{width:calc(100vw - 32px);aspect-ratio:16/10}.film iframe{width:178%;height:160%}.film-section{min-height:90svh}.caption{gap:10px;font-size:12px}.archive{padding:120px 16px;grid-template-columns:1fr;gap:24px}.archive .film{aspect-ratio:16/9}.feature-list{padding:130px 30px;grid-template-columns:1fr;gap:65px}.poster img{height:55vh}.about{width:auto;padding:170px 26px 130px}.about h1{margin-bottom:60px}.about-grid{grid-template-columns:1fr;gap:40px}dialog{padding:24px 20px}.player-bottom{font-size:11px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}

/* Full films on Home; original wide loops in Archive. Never zoom the embed. */
.film{aspect-ratio:16/9;background:#000}
.film img{object-fit:contain;background:#000}
.film iframe{inset:0;width:100%;height:100%;transform:none;background:#000;color-scheme:normal}
.archive .film{aspect-ratio:21/9}
dialog,dialog::backdrop,#screen,#screen iframe{background:#000!important;color-scheme:normal}
dialog{color:#f1f1ef}
@media(max-width:700px){.film{aspect-ratio:16/9}.film iframe{inset:0;width:100%;height:100%;transform:none}.archive .film{aspect-ratio:21/9}}

/* Center the source frame inside a picture-only window without distorting it. */
.film iframe{inset:50% auto auto 50%;transform:translate(-50%,-50%)}
.film img{object-fit:cover}
.cropped-player{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#000}
.picture-window{position:relative;overflow:hidden;flex:none;background:#000}
#screen .picture-window iframe{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:100%;max-height:none}
.crop-controls{height:48px;display:flex;gap:20px;align-items:center;width:min(100%,900px);padding:8px 12px;color:#eee}
.crop-controls input{min-width:40px;flex:1;accent-color:#eee}
@media(max-width:700px){.crop-controls{gap:12px;font-size:11px}}

/* Wide Archive frames with the original two-column spacing. */
.archive{padding:160px 8vw 140px;grid-template-columns:repeat(2,minmax(0,1fr));gap:60px 32px;align-items:start}
.archive .film{width:100%;aspect-ratio:3.45/1!important;height:auto;min-height:0;min-width:0;align-self:start}
.archive .caption{inset:0;padding:20px;justify-content:center;align-items:center}
.poster-static:hover img{transform:none}
@media(max-width:700px){.archive{padding:120px 16px;grid-template-columns:1fr;gap:24px}.archive .caption{font-size:11px;gap:8px;padding:8px}}

/* Seal fractional-pixel seams between the video and its fallback still. */
.archive .film{clip-path:inset(1px)}
.archive .film iframe{transform:translate(-50%,-50%) scale(1.008)}
.archive .film:has(iframe.ready) img{visibility:hidden;transition:visibility 0s .8s}

/* Lowercase typography and a dedicated narrative film page. */
body,button,input,.brand{text-transform:lowercase}
body.project-page{--bg:#000;--text:#f1f1ef;--muted:#999a98;--line:#303130;background:#000;color:var(--text);color-scheme:dark}
.project-detail{max-width:1440px;margin:0 auto;padding:140px 8vw 150px}
.project-film{width:100%;aspect-ratio:16/9;background:#000}
.project-film iframe{display:block;width:100%;height:100%;border:0;background:#000;color-scheme:normal}
.project-copy{padding-top:32px;font-size:13px;line-height:1.65}
.project-copy h1{font:inherit;margin:0}
.project-copy p{margin:0}
.project-copy .project-note{margin-top:24px;color:var(--muted)}
.project-back{display:inline-block;margin-top:36px;color:var(--muted)}
@media(max-width:700px){.project-detail{padding:120px 20px 120px}.project-copy{padding-top:24px}}

/* Shared controls for every full-film player, including the project page. */
.picture-window iframe,#screen .picture-window iframe{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border:0;max-height:none}
.project-film{aspect-ratio:auto;height:calc(min(47.25vw, 680px) + 48px)}
.cropped-player:fullscreen{width:100vw;height:100dvh;padding:24px;background:#000}
@media(max-width:700px){.project-film{height:calc((100vw - 40px)*.5625 + 48px)}.cropped-player:fullscreen{padding:12px}}

/* Pin the viewing area independently of fullscreen's layout changes. */
dialog{overflow:hidden;padding:0}
dialog[open]{display:block}
dialog .player-top,dialog .player-bottom{position:absolute;left:48px;right:48px;min-width:0;margin:0}
dialog .player-top{top:40px;align-items:center}
dialog .player-bottom{bottom:40px}
#screen{position:absolute;inset:88px 48px;width:auto;height:auto;min-height:0;min-width:0;overflow:hidden;display:block}
.cropped-player{min-height:0;min-width:0;overflow:hidden}
.crop-controls{flex-shrink:0}
@media(max-width:700px){dialog .player-top,dialog .player-bottom{left:20px;right:20px}dialog .player-top{top:24px}dialog .player-bottom{bottom:24px}#screen{inset:72px 20px}}

/* Let each film's image take over after its introduction. */
.film .caption{opacity:1;transition:opacity .3s ease}
@media(hover:hover){.film:hover .caption{opacity:0;animation:none;transition-duration:.8s}}


.brand{text-transform:uppercase}

/* Seal Home preview edges and retire the still once the video fade completes. */
.film-section .film{clip-path:inset(1px)}
.film-section .film iframe{transform:translate(-50%,-50%) scale(1.004)}
.film-section .film:has(iframe.ready) img{visibility:hidden;transition:visibility 0s .8s}

/* Keep the still visible until Vimeo reports actual playback. */
.film iframe{opacity:0;transition:none}
.film iframe.ready{opacity:1}
.archive .film:has(iframe.ready) img,.film-section .film:has(iframe.ready) img{visibility:hidden;transition:none}

/* Smaller feature posters and a quieter About introduction. */
.feature-list{max-width:850px}
.poster img{height:min(42vh,420px)}
.about h1{font-size:clamp(20px,2vw,32px);max-width:640px}
@media(max-width:700px){.feature-list{max-width:360px}.poster img{height:min(42vh,340px)}}

/* Vector link arrows keep the same weight and color on iOS and desktop. */
.link-arrow{display:inline-block;width:.85em;height:.85em;margin-left:.12em;vertical-align:-.04em;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}

/* About content and footer share the document flow, so contact never slides under Instagram. */
body.about-page{display:flex;flex-direction:column;min-height:100svh}
body.about-page main{flex:1}
body.about-page footer{position:relative;flex-shrink:0;background:none;padding-bottom:calc(28px + env(safe-area-inset-bottom,0px))}
body.about-page .about{padding-bottom:48px}
.about .contact{max-width:100%;overflow-wrap:anywhere}
@media(max-width:700px){body.about-page footer{padding:20px 20px calc(20px + env(safe-area-inset-bottom,0px))}body.about-page .about{padding-bottom:48px}}

/* Supported Safari fullscreen plus a viewport fallback for restricted mobile browsers. */
.cropped-player:-webkit-full-screen{width:100vw;height:100vh;padding:24px;background:#000}
.cropped-player.is-expanded{position:fixed;inset:0;z-index:60;width:100%;height:100vh;height:100dvh;padding:12px;padding-top:max(12px,env(safe-area-inset-top,0px));padding-right:max(12px,env(safe-area-inset-right,0px));padding-bottom:max(12px,env(safe-area-inset-bottom,0px));padding-left:max(12px,env(safe-area-inset-left,0px));background:#000}
body.video-expanded>header,body.video-expanded>footer{visibility:hidden}
body.video-expanded main{animation:none}
dialog.video-expanded #screen{inset:0}
dialog.video-expanded .player-top,dialog.video-expanded .player-bottom{visibility:hidden}
.crop-controls button{min-height:32px;white-space:nowrap}
@media(max-width:700px){.cropped-player:-webkit-full-screen{padding:12px}.crop-controls{gap:8px;padding-inline:4px}.crop-controls button{min-height:40px}.crop-controls input{width:0;min-width:24px}}

/* Compact film arrows share the site link icon size and stroke. */
dialog .player-bottom{align-items:center}
.film-navigation{display:flex;align-items:center;gap:0;flex-shrink:0}
.film-navigation button{width:44px;height:44px;display:grid;place-items:center;color:inherit;touch-action:manipulation}
.film-navigation .link-arrow{width:1em;height:1em;margin:0;vertical-align:initial}
.film-navigation button:focus-visible{outline-offset:0}
.picture-toggle{position:absolute;inset:0;width:100%;height:100%;z-index:1;touch-action:manipulation}
.picture-toggle:focus-visible{outline-offset:-3px}

/* The player surfaces receive shortcut focus, but are not selectable controls. */
#player:focus,#screen:focus{outline:none}

/* Touch focus should not draw a box around the close control. */
@media (hover:none) and (pointer:coarse){
 #player #close:focus{outline:none;box-shadow:none}
}

/* Keep phone rotation at the intended type scale and within the visible viewport. */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body,main,.poster{min-width:0;max-width:100%}
.film-section{grid-template-columns:minmax(0,1fr)}
.film-section .film{max-width:100%}
/* Let CSS track the viewport in both orientations; never freeze a transient
   visualViewport measurement into a pixel height. Pinch zoom stays native. */
#player{width:100%;max-width:100%;height:100vh;height:100dvh;max-height:100vh;max-height:100dvh}
.cropped-player.is-expanded{height:100vh;height:100dvh}
.player-top #film-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.player-top #close{flex-shrink:0}

/* A wide phone still needs compact controls and films that fit its short height. */
@media (orientation:landscape) and (max-height:600px) and (pointer:coarse){
 header{padding:14px max(20px,env(safe-area-inset-right,0px)) 14px max(20px,env(safe-area-inset-left,0px));align-items:center}
 .brand,nav{font-size:12px}nav{gap:18px}
 footer{padding:10px max(20px,env(safe-area-inset-right,0px)) max(10px,env(safe-area-inset-bottom,0px)) max(20px,env(safe-area-inset-left,0px));font-size:11px}
 #position{display:none}
 .film-section{min-height:100svh;padding:64px max(20px,env(safe-area-inset-right,0px)) 64px max(20px,env(safe-area-inset-left,0px))}
 .film-section .film{width:min(100%,calc((100svh - 128px) * var(--picture-ratio,1.777778)))}
 .caption{font-size:12px;gap:10px}
 .archive{padding:80px max(20px,env(safe-area-inset-right,0px)) 80px max(20px,env(safe-area-inset-left,0px));grid-template-columns:repeat(2,minmax(0,1fr));gap:28px 24px}
 .archive .caption{padding:8px;font-size:11px;gap:4px 10px;flex-wrap:wrap;align-content:center}
 .feature-list{max-width:650px;padding:80px 24px;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px}
 .poster img{height:42svh}
 .about{width:auto;padding:88px max(24px,env(safe-area-inset-right,0px)) 40px max(24px,env(safe-area-inset-left,0px))}
 .about h1{margin-bottom:32px}.about-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:32px}
 .project-detail{padding:80px max(20px,env(safe-area-inset-right,0px)) 80px max(20px,env(safe-area-inset-left,0px))}
 .project-film{height:min(calc((100vw - 40px)*.5625 + 48px),calc(100svh - 128px))}
 #player .player-top,#player .player-bottom{left:max(20px,env(safe-area-inset-left,0px));right:max(20px,env(safe-area-inset-right,0px));font-size:11px}
 #player .player-top{top:max(8px,env(safe-area-inset-top,0px))}
 #player .player-bottom{bottom:max(6px,env(safe-area-inset-bottom,0px))}
 #player #close{min-height:44px}
 #screen{inset:calc(56px + env(safe-area-inset-top,0px)) max(20px,env(safe-area-inset-right,0px)) calc(56px + env(safe-area-inset-bottom,0px)) max(20px,env(safe-area-inset-left,0px))}
 .crop-controls{font-size:11px;gap:8px;padding-inline:4px}
 .crop-controls button{min-height:40px}.crop-controls input{width:0;min-width:24px}
}

.order-preview-banner{position:fixed;bottom:65px;left:50%;transform:translateX(-50%);z-index:200;background:#d5ff69;color:#111;padding:10px 18px;font:12px Arial,sans-serif;white-space:nowrap;border-radius:3px}
