/* The opening scene is the environment from which the gallery emerges. */
.hero{height:170svh;min-height:0;overflow:visible;isolation:isolate;--scene-inset:0px;--scene-radius:0px;--scene-scale:1;--copy-opacity:1;--copy-y:0px;--preview-opacity:0;--preview-y:100px;--progress:0;--contour-x:0px;--contour-rotate:0deg}
.hero-scene{position:sticky;top:0;height:100svh;min-height:580px;overflow:hidden;isolation:isolate}
.cinema-shell{position:absolute;inset:var(--scene-inset);border-radius:var(--scene-radius);overflow:hidden;background:#11291f;box-shadow:0 25px 65px #153a2325;transform:translateZ(0);z-index:-3}
.cinema-shell::after{content:'';position:absolute;inset:0;border:1px solid #ffffff72;border-radius:inherit;pointer-events:none;opacity:var(--progress)}
.cinema-shell video{height:100%;width:100%;object-fit:cover;object-position:50% 62%;display:block;transform:scale(var(--scene-scale));will-change:transform}
.cinema-shade{position:absolute;inset:0;background:linear-gradient(90deg,#07170db5 0%,#07170d3b 57%,transparent 85%),linear-gradient(0deg,#07170d8c,transparent 55%);pointer-events:none}
.hero .header{color:#f5f5f0;padding-top:30px;opacity:var(--copy-opacity);transform:translateY(calc(var(--copy-y)*.2))}
.hero .nav{background:linear-gradient(135deg,#ffffff24,#ffffff0c);border-color:#ffffff69;box-shadow:inset 0 1px 1px #fff3,0 8px 26px #0001}
.hero .nav a:hover{background:#ffffff21}
.hero-copy{top:auto;bottom:17%;left:var(--gutter);width:80%;opacity:var(--copy-opacity);transform:translateY(var(--copy-y));pointer-events:none;color:#f5f5f0}
.hero-copy h1{font-size:clamp(58px,7.2vw,122px);letter-spacing:-.06em;line-height:1.02;margin-bottom:24px;text-shadow:0 3px 30px #0b20144d}
.hero-copy h1 span{display:block;animation:opening-type 1.1s cubic-bezier(.18,.75,.2,1) both}
.hero-copy h1 span:nth-child(2){animation-delay:.15s}
.hero-copy p{color:#edf4ed;font-size:clamp(14px,1.2vw,18px);text-shadow:0 1px 8px #0b201480;animation:opening-type 1.1s .3s both}
.hero-copy .action{color:#fff;border-color:#ffffff82;background:linear-gradient(135deg,#ffffff2b,#ffffff0d);animation:opening-type 1.1s .45s both}
.hero-copy .action:hover{background:#ffffff2e}
.hero-contours{position:absolute;right:-8%;top:-10%;width:49%;height:120%;pointer-events:none;transform:translateX(var(--contour-x)) rotate(var(--contour-rotate));opacity:.65;z-index:-1}
.hero-contours svg{width:100%;height:100%;stroke:#f5fffba1;stroke-width:.75;fill:none}
.hero-contours path{stroke-dasharray:2000;stroke-dashoffset:2000;animation:contour-draw 2.8s .25s forwards}
.hero-contours path:nth-child(2){animation-delay:.65s;opacity:.65}
.hero-contours path:nth-child(3){animation-delay:1s;opacity:.35}
.hero-lens{position:absolute;right:-23%;top:-22%;width:55%;height:140%;border:1px solid #ffffff64;border-left:3px solid #ffffff69;box-shadow:inset 15px 0 30px #fff1,-4px 0 10px #ffffff13;border-radius:50%;background:linear-gradient(100deg,#ffffff17,transparent 65%);backdrop-filter:blur(2px);transform:translate3d(var(--mx,0px),var(--my,0px),0) rotate(-22deg);pointer-events:none;z-index:-2}
.hero-preview{bottom:8%;left:var(--gutter);width:43%;height:29%;opacity:var(--preview-opacity);transform:translateY(var(--preview-y));pointer-events:none}
.hero-preview[data-active=true]{pointer-events:auto}
.hero-preview .preview-photo{border-color:#ffffffba;box-shadow:0 15px 35px #001e1930}
.cinema-controls{position:absolute;bottom:36px;left:var(--gutter);right:var(--gutter);display:flex;align-items:center;justify-content:space-between;color:#f5f5f0;z-index:5;translate:0 calc(-1 * var(--scene-inset))}
.cinema-controls .scroll-cue{position:static;display:flex;gap:18px;align-items:center;font-size:11px;letter-spacing:.12em;opacity:.85}
.cinema-controls .scroll-cue svg{width:16px;height:23px;animation:scroll-nudge 2.5s ease-in-out infinite}
.cinema-controls #video-toggle{position:static;width:43px;height:43px;background:#ffffff0f;backdrop-filter:blur(20px);border-color:#ffffff8a}
.scene-progress{position:absolute;left:0;right:0;bottom:0;height:2px;background:#ffffff0f;pointer-events:none}
.scene-progress span{height:100%;width:100%;display:block;background:#a9cbb4;transform-origin:left;transform:scaleX(var(--progress))}
.portfolio{padding-top:64px}
.filters{position:relative;isolation:isolate}
.filter-indicator{position:absolute;top:6px;bottom:6px;left:0;z-index:-1;border-radius:35px;background:var(--ink);box-shadow:0 2px 6px #0b1a142b;transform:translateX(var(--filter-x,6px));width:var(--filter-width,62px);transition:transform .5s cubic-bezier(.2,.8,.2,1),width .5s cubic-bezier(.2,.8,.2,1);pointer-events:none}
.filters button{position:relative;z-index:1;transition:color .3s,background .3s}
.filters button[aria-pressed=true]{background:transparent;box-shadow:none;color:white}
.filters button[aria-pressed=true]:hover{background:transparent}
.photo{animation:none;overflow:visible;opacity:1;transform:none;transition:opacity .7s cubic-bezier(.2,.75,.2,1),transform .8s cubic-bezier(.2,.75,.2,1);transition-delay:calc(var(--i,0)*22ms)}
.js-motion .photo:not(.photo-visible){opacity:0;transform:translateY(35px)}
.photo-image{transition:transform .55s cubic-bezier(.2,.75,.2,1),box-shadow .55s;transform:perspective(900px) rotateX(var(--tilt-x,0deg)) rotateY(var(--tilt-y,0deg));transform-origin:center;box-shadow:0 0 0 transparent}
.photo:hover .photo-image{box-shadow:0 15px 35px #15342418}
.photo .expand{background:linear-gradient(130deg,#ffffff66,#ffffff22);color:white;border-color:#fff8;box-shadow:inset 0 1px 0 #fff8,0 4px 14px #001b1c1a}
.photo-caption{transition:color .25s}.photo:hover .photo-caption{color:var(--ink)}
.gallery{transition:opacity .18s ease,filter .18s ease;scroll-margin-top:110px}.gallery.changing{opacity:.2;filter:blur(3px)}
.outro{min-height:650px;background:#0e2b1f;color:#f5f5f0}
.outro-cinema{position:absolute;inset:0;z-index:-2;overflow:hidden}
.outro-cinema video{width:100%;height:100%;object-fit:cover;object-position:50% 66%;opacity:.58;transform:scale(1.06)}
.outro::after{content:'';position:absolute;inset:0;background:linear-gradient(0deg,#0b1a14a8,#0b1a143b,#0b1a14a8);z-index:-1;pointer-events:none}
.outro-wave{border-color:#ffffff45;background:linear-gradient(120deg,#d7eddf16,#ffffff00 65%);box-shadow:inset -16px 8px 35px #ffffff20,20px -25px 50px #739a8718;z-index:0;animation:outro-drift 14s ease-in-out infinite}
.outro-content{z-index:2}.outro p{color:#dee9df}.outro .action{background:#ffffff17;border-color:#ffffff75;color:#fff}.outro .action:hover{background:#ffffff30}
#outro-video-toggle{position:absolute;bottom:25px;right:var(--gutter);z-index:3;background:#ffffff17;color:#fff}
.footer{background:#0b1a14;color:#c1cec3}
.outro .contact-action{display:flex;width:max-content;max-width:100%;margin:0 auto;background:linear-gradient(135deg,#ffffff30,#ffffff12);border-color:#ffffffa8;font-size:14px;padding:18px 26px}
.revisit-link{display:flex;align-items:center;justify-content:center;gap:13px;width:max-content;margin:23px auto 0;font-size:11px;color:#d7e1d9;transition:color .25s}
.revisit-link:hover{color:#fff}.revisit-link svg{width:16px;height:16px}
@media(max-width:700px){.outro .contact-action{font-size:12px;padding:16px 22px;gap:20px}}
dialog{background:#08180fd9}.lightbox-image-frame{transition:box-shadow .3s;background:#ffffff0f}.lightbox-image-frame img{animation:none;cursor:zoom-in;transition:transform .3s ease;transform-origin:var(--zoom-x,50%) var(--zoom-y,50%)}
.lightbox-image-frame.zoomed{overflow:hidden}.lightbox-image-frame.zoomed img{transform:scale(1.65);cursor:zoom-out}
.lightbox-shell figcaption{transition:opacity .2s}.lightbox-shell figure{animation:viewer-open .35s ease both}
.lightbox-image-frame:focus-visible{outline:2px solid #fff9;outline-offset:5px}
.viewer-flight{position:fixed;z-index:20;object-fit:contain;transform-origin:top left;pointer-events:none;box-shadow:0 20px 60px #00140940}
@keyframes opening-type{from{opacity:0;translate:0 35px;filter:blur(7px)}to{opacity:1;translate:0 0;filter:blur(0)}}
@keyframes contour-draw{to{stroke-dashoffset:0}}
@keyframes scroll-nudge{50%{translate:0 6px}}
@keyframes outro-drift{50%{translate:4% -3%;rotate:3deg}}
@keyframes viewer-open{from{opacity:0;translate:0 10px}to{opacity:1;translate:0 0}}
@media(min-width:1700px){.hero{height:170svh}.hero-copy{bottom:19%}}
@media(max-width:1100px){.hero{min-height:0}.hero-copy{top:auto;bottom:19%;width:87%}.hero-copy h1{font-size:clamp(58px,7.4vw,88px)}.hero-preview{width:52%;height:27%}}
@media(max-width:700px){.hero{height:145svh;min-height:0}.hero-scene{min-height:600px}.hero .header{padding-top:22px}.hero-copy{position:absolute;left:var(--gutter);right:var(--gutter);width:auto;padding:0;top:auto;bottom:20%}.hero-copy h1{font-size:clamp(41px,10.8vw,70px);margin-bottom:22px;letter-spacing:-.055em}.hero-copy p{font-size:13px;line-height:1.8}.hero-copy .action{font-size:12px}.cinema-shell video{object-position:50% 52%}.cinema-shade{background:linear-gradient(0deg,#07170dd1 0%,#07170d42 60%,#07170d2b 100%)}.hero-contours{right:-48%;width:100%;top:-10%;opacity:.5}.hero-lens{width:90%;right:-65%;backdrop-filter:none}.cinema-controls{bottom:26px}.hero-preview{width:72%;height:25%;bottom:15%;left:var(--gutter)}.preview-stage{bottom:-12%}.scene-progress{height:2px}.portfolio{padding-top:40px}.filter-indicator{top:5px;bottom:5px}.outro{min-height:550px}.outro-cinema video{object-position:50% 60%}}
@media(max-height:600px) and (min-width:701px){.hero-scene{min-height:420px}.hero-copy{bottom:19%}.hero-copy h1{font-size:clamp(40px,6vw,68px);margin-bottom:15px}.hero-copy p{margin-bottom:15px;font-size:13px}.hero .header{padding-top:18px}.hero-copy .action{padding:12px 20px}.cinema-controls{bottom:20px}}
@media(prefers-reduced-motion:reduce){.hero{height:100svh;min-height:600px}.hero-scene{position:relative}.hero-preview{display:none}.hero-copy{opacity:1;transform:none}.hero .header{opacity:1;transform:none}.hero-contours path{stroke-dashoffset:0}.js-motion .photo:not(.photo-visible){opacity:1;transform:none}.filter-indicator,.photo,.photo-image,.gallery{transition:none}.scene-progress{display:none}.cinema-shell{inset:0;border-radius:0}.hero-copy h1 span,.hero-copy p,.hero-copy .action{animation:none}.outro-wave{animation:none}.lightbox-image-frame img{transition:none}}
