:root{
  --green:#3A5232; --green-deep:#2A3D24; --wash:#F2F5EF;
  --ink:#1B1F19; --body:#4A5147; --muted:#858C81;
  --line:#E4E7E0; --white:#fff;
  --pad:clamp(1.5rem,5vw,6rem); --gap:clamp(4.5rem,11vh,9rem);
  --ease:cubic-bezier(.2,.7,.2,1);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{background:#fff;color:var(--body);font-family:'Figtree',system-ui,sans-serif;
  font-size:clamp(1rem,.96rem + .22vw,1.09rem);line-height:1.68;-webkit-font-smoothing:antialiased;overflow-x:hidden}

.wrap{max-width:76rem;margin:0 auto;padding-inline:var(--pad)}
.narrow{max-width:46rem}
h1,h2,h3,h4{font-family:'Jost',system-ui,sans-serif;color:var(--ink);font-weight:300;letter-spacing:-.015em;line-height:1.12;text-wrap:balance}
h1{font-size:clamp(2.4rem,5.6vw,4.4rem);line-height:1.05}
h2{font-size:clamp(1.85rem,3.4vw,2.8rem);margin-bottom:1.3rem}
h3{font-size:1.3rem;font-weight:400}
h4{font-size:1.05rem;font-weight:400}
strong{font-weight:500;color:var(--ink)}
p + p{margin-top:1.05rem}
.lede{font-size:clamp(1.08rem,1rem + .45vw,1.3rem);line-height:1.62}
.small{font-size:.9rem;color:var(--muted)}
a{color:inherit}
section{padding-block:var(--gap)}
.rule{height:1px;background:var(--line);border:0}
.center{text-align:center}

/* ---------- scroll progress ---------- */
.progress{position:fixed;top:0;left:0;height:2px;background:var(--green);width:0;z-index:60;
  transform-origin:left;transition:width .1s linear}

/* ---------- header ---------- */
header{position:fixed;top:0;left:0;right:0;z-index:50;background:rgba(255,255,255,.8);
  backdrop-filter:saturate(160%) blur(16px);-webkit-backdrop-filter:saturate(160%) blur(16px);
  border-bottom:1px solid transparent;transition:border-color .4s var(--ease),transform .5s var(--ease)}
header.is-stuck{border-bottom-color:var(--line)}
header.is-hidden{transform:translateY(-100%)}
.bar{max-width:76rem;margin:0 auto;padding:.9rem var(--pad);display:flex;align-items:center;justify-content:space-between;gap:2rem}
.logo{display:flex;align-items:center;text-decoration:none}
.logo img{height:clamp(26px,3.4vw,34px);width:auto;display:block}
.logo span{font-family:'Jost',sans-serif;font-weight:500;font-size:1.15rem;color:var(--green)}
nav{display:flex;gap:2rem;font-size:.95rem}
nav a{text-decoration:none;color:var(--body);position:relative;padding-block:.2rem;transition:color .25s}
nav a::after{content:'';position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--green);
  transform:scaleX(0);transform-origin:right;transition:transform .4s var(--ease)}
nav a:hover{color:var(--green)}
nav a:hover::after,nav a.on::after{transform:scaleX(1);transform-origin:left}
nav a.on{color:var(--green)}
.menu-btn{display:none;background:none;border:0;font:inherit;color:var(--ink);cursor:pointer;padding:.4rem}
@media (max-width:760px){
  nav{position:fixed;inset:3.6rem 0 auto;background:#fff;flex-direction:column;gap:0;padding:1rem var(--pad) 1.5rem;
    border-bottom:1px solid var(--line);transform:translateY(-120%);transition:transform .45s var(--ease)}
  nav.open{transform:none}
  nav a{padding:.75rem 0;border-bottom:1px solid var(--line)}
  .menu-btn{display:block}
}

/* ---------- page intro ---------- */
.page-head{padding:clamp(8rem,17vh,11rem) 0 clamp(2rem,5vh,3.5rem)}
.page-head .lede{margin-top:1.4rem;max-width:46ch}
.crumb{color:var(--green);font-size:.9rem;font-weight:500;margin-bottom:.9rem}

/* ---------- hero ---------- */
.hero{padding:clamp(8.5rem,19vh,12rem) 0 clamp(2rem,5vh,3.5rem)}
.hero h1{max-width:19ch}
.hero .lede{margin-top:1.7rem;max-width:44ch}
.stage{position:relative;width:100%;aspect-ratio:16/8;overflow:hidden;background:var(--wash);border-radius:2px;
  margin-top:clamp(2.5rem,6vh,4rem)}
.stage video,.stage img{width:100%;height:112%;object-fit:cover;display:block;position:relative;z-index:1;will-change:transform}
.ph{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--muted);
  font-size:.88rem;letter-spacing:.05em;background:linear-gradient(140deg,#EDF1E9,#F7F9F5 60%,#E8EDE4)}
@media (max-width:720px){.stage{aspect-ratio:4/3}}

/* ---------- layout helpers ---------- */
.split{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:clamp(2rem,6vw,5rem)}
@media (max-width:860px){.split{grid-template-columns:1fr;gap:1.5rem}}
.sticky-head{position:sticky;top:6rem;align-self:start}
@media (max-width:860px){.sticky-head{position:static}}

/* ---------- media reveal ---------- */
.media{position:relative;overflow:hidden;background:var(--wash);border-radius:2px}
.media img,.media video{width:100%;height:100%;object-fit:cover;display:block;position:relative;z-index:1;
  transform:scale(1.08);transition:transform 1.5s var(--ease)}
.media::after{content:'';position:absolute;inset:0;z-index:2;background:#fff;transform-origin:bottom;
  transform:scaleY(1);transition:transform 1.05s var(--ease)}
.is-in .media::after{transform:scaleY(0)}
.is-in .media img,.is-in .media video{transform:scale(1)}

/* ---------- project cards (grid) ---------- */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(19rem,1fr));gap:clamp(1.5rem,3vw,2.5rem)}
.card{display:block;text-decoration:none;color:inherit;group:card}
.card .media{aspect-ratio:4/3}
.card:hover .media img{transform:scale(1.05)}
.card h3{margin-top:1.1rem;transition:color .3s}
.card:hover h3{color:var(--green)}
.card .eyebrow{margin-top:.5rem}
.eyebrow{color:var(--green);font-size:.88rem;font-weight:500}
.card .small{margin-top:.5rem}

/* ---------- feature row (home) ---------- */
.feature{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(2rem,5vw,4.5rem);align-items:center}
.feature + .feature{margin-top:var(--gap)}
.feature:nth-of-type(even) .feature__media{order:2}
@media (max-width:860px){.feature{grid-template-columns:1fr;gap:1.75rem}.feature:nth-of-type(even) .feature__media{order:0}}
.feature__media{aspect-ratio:5/4}

/* ---------- facts ---------- */
.facts{margin-top:1.6rem;border-top:1px solid var(--line)}
.facts div{display:flex;justify-content:space-between;gap:1.5rem;padding:.72rem 0;border-bottom:1px solid var(--line);font-size:.95rem}
.facts dt{color:var(--muted)}
.facts dd{color:var(--ink);text-align:right}

/* ---------- buttons ---------- */
.btn-row{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.6rem}
.btn{display:inline-block;text-decoration:none;border-radius:999px;font-family:'Jost',sans-serif;font-weight:400;
  border:1px solid var(--green);white-space:nowrap;cursor:pointer;position:relative;overflow:hidden;
  transition:background .35s var(--ease),color .35s var(--ease),transform .35s var(--ease)}
.btn--solid{background:var(--green);color:#fff}
.btn--solid:hover{background:var(--green-deep);transform:translateY(-2px)}
.btn--outline{background:transparent;color:var(--green)}
.btn--outline:hover{background:var(--wash);transform:translateY(-2px)}
.btn--small{padding:.5rem 1.15rem;font-size:.9rem}
.btn--medium{padding:.72rem 1.6rem;font-size:1rem}
.btn--large{padding:.95rem 2.1rem;font-size:1.1rem}

/* ---------- figures ---------- */
.strip{background:var(--wash)}
.figures{display:grid;grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));gap:clamp(1.5rem,4vw,3rem)}
.figures b{display:block;font-family:'Jost',sans-serif;font-weight:300;color:var(--green);
  font-size:clamp(2.2rem,4.5vw,3.2rem);line-height:1;letter-spacing:-.02em;margin-bottom:.4rem}

/* ---------- practice ---------- */
.practice{border-top:1px solid var(--line);margin-top:2rem}
.practice > div{padding:1.9rem 0;border-bottom:1px solid var(--line)}
.practice h3{margin-bottom:.45rem}
.practice p{max-width:52ch}

/* ---------- founder ---------- */
.founder{display:grid;grid-template-columns:minmax(0,.75fr) minmax(0,1.25fr);gap:clamp(2rem,6vw,5rem);align-items:center}
@media (max-width:860px){.founder{grid-template-columns:1fr}}
.portrait{aspect-ratio:4/5;max-width:24rem}

/* ---------- details ---------- */
details{border-bottom:1px solid var(--line)}
details:first-of-type{border-top:1px solid var(--line)}
summary{cursor:pointer;list-style:none;padding:1.15rem 0;display:flex;justify-content:space-between;gap:1.5rem;
  color:var(--ink);font-family:'Jost',sans-serif;font-size:1.06rem}
summary::-webkit-details-marker{display:none}
summary::after{content:'+';color:var(--green);transition:transform .3s var(--ease)}
details[open] summary::after{content:'–'}
details .body{padding-bottom:1.3rem;max-width:56ch}

/* ---------- doors ---------- */
.doors{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:1.25rem;margin-top:2.5rem}
.door{display:block;text-decoration:none;padding:1.9rem 1.6rem 2.1rem;border:1px solid var(--line);border-radius:2px;background:#fff;
  transition:border-color .35s var(--ease),background .35s var(--ease),transform .35s var(--ease)}
.door:hover,.door:focus-visible{border-color:var(--green);background:var(--wash);transform:translateY(-3px)}
.door h3{margin-bottom:.5rem}
.door p{font-size:.95rem;color:var(--muted)}

/* ---------- gallery ---------- */
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(16rem,1fr));gap:1rem;margin-top:2rem}
.gallery .media{aspect-ratio:4/3}

/* ---------- map ---------- */
.map{position:relative;aspect-ratio:16/9;overflow:hidden;border:1px solid var(--line);border-radius:2px;margin-top:2rem}
.map iframe{position:absolute;inset:0;width:100%;height:100%;border:0}

/* ---------- form ---------- */
form.enquiry{margin-top:2rem;max-width:38rem}
form.enquiry label{display:block;font-size:.86rem;color:var(--muted);margin:1.1rem 0 .35rem}
form.enquiry input,form.enquiry textarea,form.enquiry select{
  width:100%;padding:.72rem .9rem;border:1px solid var(--line);border-radius:2px;font:inherit;color:var(--ink);background:#fff}
form.enquiry textarea{min-height:7rem;resize:vertical}
form.enquiry input:focus,form.enquiry textarea:focus,form.enquiry select:focus{outline:2px solid var(--green);outline-offset:1px;border-color:var(--green)}
.note{background:var(--wash);border-left:3px solid var(--green);padding:.9rem 1.1rem;border-radius:2px;margin-bottom:1.5rem}

/* ---------- contact ---------- */
.contact{display:grid;grid-template-columns:repeat(auto-fit,minmax(13rem,1fr));gap:2rem;margin-top:2.5rem}
.contact a{color:var(--green);text-decoration:none;border-bottom:1px solid rgba(58,82,50,.3)}

/* ---------- cta band ---------- */
.cta{background:var(--wash);text-align:center}
.cta .wrap{max-width:44rem}

footer{border-top:1px solid var(--line);padding-block:3rem;font-size:.9rem;color:var(--muted)}
.foot{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:2rem}
.foot a{text-decoration:none;display:block;padding:.2rem 0;transition:color .25s}
.foot a:hover{color:var(--green)}
.foot h4{color:var(--ink);margin-bottom:.6rem;font-size:.95rem}

/* ---------- motion ---------- */
body{opacity:0;transition:opacity .5s ease}
body.ready{opacity:1}
body.leaving{opacity:0}

.reveal{opacity:0;transform:translateY(1.4rem);transition:opacity .9s var(--ease),transform .9s var(--ease)}
.reveal.is-in{opacity:1;transform:none}
.d1{transition-delay:.09s}.d2{transition-delay:.18s}.d3{transition-delay:.27s}.d4{transition-delay:.36s}

/* headline that wipes up line by line */
.lines span{display:block;overflow:hidden}
.lines span > i{display:block;font-style:inherit;transform:translateY(105%);transition:transform 1s var(--ease)}
.lines.is-in span > i{transform:none}
.lines.is-in span:nth-child(2) > i{transition-delay:.08s}
.lines.is-in span:nth-child(3) > i{transition-delay:.16s}

:focus-visible{outline:2px solid var(--green);outline-offset:3px}

@media (prefers-reduced-motion:reduce){
  body,.reveal,.media::after,.media img,.media video,.lines span > i{
    opacity:1!important;transform:none!important;transition:none!important}
  .media::after{display:none}
}

/* ---------- image hero ---------- */
.vhero{position:relative;min-height:100svh;display:flex;align-items:flex-end;overflow:hidden;background:#12180F}
.vhero__bg{position:absolute;inset:0;z-index:0}
.vhero__bg video,.vhero__bg img{width:100%;height:100%;object-fit:cover;display:block;
  transform-origin:60% 55%;animation:drift 34s ease-in-out infinite alternate}
@keyframes drift{from{transform:scale(1.04)}to{transform:scale(1.13)}}
.vhero__scrim{position:absolute;inset:0;z-index:1;
  background:linear-gradient(to top,rgba(12,18,10,.82) 0%,rgba(12,18,10,.42) 42%,rgba(12,18,10,.24) 100%)}
.vhero__inner{position:relative;z-index:2;width:100%;max-width:76rem;margin:0 auto;
  padding:0 var(--pad) clamp(4rem,11vh,7.5rem)}
.vhero h1{color:#fff;max-width:16ch}
.vhero .lede{color:rgba(255,255,255,.9);margin-top:1.6rem;max-width:46ch}
.vhero .btn--outline{color:#fff;border-color:rgba(255,255,255,.6)}
.vhero .btn--outline:hover{background:rgba(255,255,255,.12);border-color:#fff}
.vhero .btn--solid{background:#fff;color:var(--green);border-color:#fff}
.vhero .btn--solid:hover{background:var(--wash);color:var(--green-deep)}
.scrollcue{position:absolute;left:50%;bottom:1.6rem;transform:translateX(-50%);z-index:2;
  color:rgba(255,255,255,.7);font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;text-align:center}
.scrollcue span{display:block;width:1px;height:2.2rem;background:rgba(255,255,255,.5);margin:.6rem auto 0;
  transform-origin:top;animation:cue 2.4s ease-in-out infinite}
@keyframes cue{0%,100%{transform:scaleY(.3);opacity:.4}50%{transform:scaleY(1);opacity:1}}
@media (max-width:760px){.vhero{min-height:92svh}.vhero h1{max-width:14ch}}

/* dual logo + transparent header over the hero */
.logo{display:block;position:relative;line-height:0}
.logo img{height:clamp(30px,3.8vw,40px);width:auto;display:block;transition:opacity .45s var(--ease)}
.logo img.on-dark{position:absolute;inset:0;opacity:0}
.logo .wordmark{font-family:'Jost',sans-serif;font-weight:500;font-size:1.15rem;color:var(--green);line-height:1.4}
header.over-hero .logo img.on-light{opacity:0}
header.over-hero .logo img.on-dark{opacity:1}
header.over-hero{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border-bottom-color:transparent}
header.over-hero nav a{color:rgba(255,255,255,.88)}
header.over-hero nav a:hover,header.over-hero nav a.on{color:#fff}
header.over-hero nav a::after{background:#fff}
header.over-hero .menu-btn{color:#fff}
header.over-hero .logo .wordmark{color:#fff}
@media (max-width:760px){
  header.over-hero nav{background:#fff}
  header.over-hero nav a{color:var(--body)}
}

/* ---------- process flow ---------- */
.flow{margin-top:clamp(2.5rem,6vh,4rem);display:grid;gap:0;position:relative}
.flow::before{content:'';position:absolute;top:7px;left:0;right:0;height:1px;background:var(--line)}
.flow__line{position:absolute;top:7px;left:0;height:1px;background:var(--green);width:0;transition:width 2.4s var(--ease)}
.flow.is-in .flow__line{width:100%}
.flow__step{position:relative;padding:0 1.2rem 0 0}
.flow__dot{width:15px;height:15px;border-radius:50%;background:#fff;border:1px solid var(--line);position:relative;z-index:2;
  transition:border-color .5s var(--ease)}
.flow.is-in .flow__dot{border-color:var(--green)}
.flow.is-in .flow__dot::after{content:'';position:absolute;inset:4px;border-radius:50%;background:var(--green)}
.flow__step:nth-child(3) .flow__dot{transition-delay:.25s}
.flow__step:nth-child(4) .flow__dot{transition-delay:.65s}
.flow__step:nth-child(5) .flow__dot{transition-delay:1.05s}
.flow__step:nth-child(6) .flow__dot{transition-delay:1.45s}
.flow__step:nth-child(7) .flow__dot{transition-delay:1.85s}
.flow__n{font-family:'Jost',sans-serif;color:var(--muted);font-size:.78rem;letter-spacing:.14em;margin:1.3rem 0 .4rem}
.flow__step h4{font-family:'Jost',sans-serif;font-weight:400;color:var(--ink);font-size:1.02rem;margin-bottom:.35rem}
.flow__step p{font-size:.9rem;color:var(--muted);line-height:1.5}
@media (max-width:860px){
  .flow{grid-template-columns:1fr!important}
  .flow::before,.flow__line{top:0;bottom:0;left:7px;right:auto;width:1px;height:auto}
  .flow.is-in .flow__line{width:1px;height:100%;transition:height 2.4s var(--ease)}
  .flow__step{padding:0 0 2rem 2.2rem}
  .flow__dot{position:absolute;left:0;top:4px}
  .flow__n{margin-top:0}
}

/* ---------- checks ---------- */
.checks{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:0 clamp(2rem,5vw,4rem);margin-top:2.5rem}
.checks div{padding:1.15rem 0;border-bottom:1px solid var(--line);display:flex;gap:.9rem;align-items:baseline}
.checks span{color:var(--green);flex-shrink:0}

/* ---------- hidden projects ---------- */
.feature.is-hidden{display:none}

/* ---------- section images ---------- */
.secimg{display:grid;grid-template-columns:repeat(auto-fit,minmax(13rem,1fr));gap:1rem;margin-top:2rem}
.secimg--one{grid-template-columns:1fr}
.secimg .media{aspect-ratio:4/3}
.secimg--one .media{aspect-ratio:16/9}
.secimg .media img,.secimg .media video{width:100%;height:100%;object-fit:cover;display:block}

/* ---------- device-specific hero media ---------- */
.only-mobile{display:none}
@media (max-width:760px){
  .only-desktop{display:none}
  .only-mobile{display:block}
}
