/* jonasroams v5, dual-theme editorial. Aperture toggle drives [data-theme]. */

/* ---------- theme tokens ---------- */
:root,
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#101511;
  --bg-elevated:#171C16;
  --bg-card:#1B211A;
  --ink:#F3F0E6;
  --ink-soft:#AEB6A7;
  --ink-faint:#7C8578;
  --slate:#8FB0C4;
  --slate-deep:#5B7A8C;
  --moss:#8AAE86;
  --moss-deep:#43594B;
  --moss-fill:#3A4E3F;
  --line:rgba(243,240,230,.13);
  --line-strong:rgba(243,240,230,.22);
  --plate:#ECE7DA;              /* light plate behind white-bg product shots */
  --grain-blend:overlay;
  --grain-opacity:.05;
  --nav-solid:rgba(16,21,17,.86);
}
:root[data-theme="light"]{
  color-scheme:light;
  --bg:#F4F1E8;
  --bg-elevated:#ECE7DA;
  --bg-card:#E4DECD;
  --ink:#1E2620;
  --ink-soft:#55604F;
  --ink-faint:#8A9284;
  --slate:#3E5A6B;
  --slate-deep:#2C4351;
  --moss:#43594B;
  --moss-deep:#2B3B31;
  --moss-fill:#43594B;
  --line:rgba(30,38,32,.14);
  --line-strong:rgba(30,38,32,.26);
  --plate:#FFFFFF;
  --grain-blend:multiply;
  --grain-opacity:.035;
  --nav-solid:rgba(244,241,232,.88);
}

:root{
  --serif:'Cormorant Garamond', Georgia, 'Times New Roman', serif;
  --sans:'Archivo', -apple-system, BlinkMacSystemFont, sans-serif;
  --ease:cubic-bezier(.22,1,.36,1);
  --frame:16px;
  --nav-h:84px;
}

*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background:var(--bg);
  color:var(--ink);
  font-family:var(--sans);
  line-height:1.7;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
  transition:background .5s var(--ease),color .5s var(--ease);
}
body.nav-open{overflow:hidden}
img,svg,video{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
ul{list-style:none}
:focus-visible{outline:2px solid var(--slate);outline-offset:3px;border-radius:2px}

.wrap{max-width:1220px;margin:0 auto;padding:0 44px}
@media(max-width:700px){.wrap{padding:0 22px}}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

.eyebrow{font-family:var(--sans);font-size:11px;letter-spacing:.32em;text-transform:uppercase;color:var(--slate);font-weight:500}
h1,h2,h3{font-family:var(--serif);font-weight:400;letter-spacing:-.01em;color:var(--ink)}
.lead{font-family:var(--serif);font-style:italic;font-weight:300;color:var(--ink-soft)}

.btn{
  display:inline-flex;align-items:center;gap:10px;
  font-family:var(--sans);font-size:12px;letter-spacing:.14em;text-transform:uppercase;
  padding:15px 28px;border-radius:100px;border:1px solid var(--line-strong);
  cursor:pointer;background:none;color:var(--ink);
  transition:background .4s var(--ease),border-color .4s var(--ease),color .4s var(--ease);
}
.btn-fill{background:var(--moss-fill);border-color:var(--moss-fill);color:#F3F0E6}
.btn-fill:hover{background:var(--moss-deep);border-color:var(--moss-deep)}
.btn-line:hover{border-color:var(--slate);color:var(--slate)}
.btn[aria-disabled="true"]{opacity:.5;cursor:not-allowed}

/* ---------- motion primitives ---------- */
.reveal{opacity:0;transform:translateY(30px);transition:opacity .9s var(--ease),transform .9s var(--ease)}
.reveal.is-visible{opacity:1;transform:translateY(0)}
@media(prefers-reduced-motion:reduce){
  .reveal{opacity:1!important;transform:none!important;transition:none!important}
  .veil{display:none!important}
  .marquee-track{animation:none!important}
  .aperture-blades{transition:none!important}
  *{scroll-behavior:auto!important}
}

/* ---------- grain ---------- */
.grain{position:fixed;inset:0;z-index:250;pointer-events:none;
  opacity:var(--grain-opacity);mix-blend-mode:var(--grain-blend)}

/* ---------- nav ---------- */
.nav{
  position:fixed;top:0;left:0;right:0;z-index:200;
  display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:22px 44px;
  transition:padding .5s var(--ease),background .5s var(--ease),border-color .5s var(--ease);
  border-bottom:1px solid transparent;
}
/* The nav only sits over photography on pages with a full-bleed hero. There it
   needs a dark scrim and forced light ink; everywhere else it uses theme ink so
   a light page does not get a dark band across the top. One `color` on .nav
   drives every child (links, aperture toggle, menu button) so nothing is missed. */
.nav{color:var(--ink)}
body.has-hero .nav:not(.scrolled){color:#F3F0E6}
body.has-hero .nav:not(.scrolled)::before{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:linear-gradient(180deg,rgba(6,9,7,.66),rgba(6,9,7,.28) 55%,transparent);
}
.nav.scrolled{
  padding:12px 44px;background:var(--nav-solid);
  backdrop-filter:blur(16px) saturate(1.1);-webkit-backdrop-filter:blur(16px) saturate(1.1);
  border-bottom-color:var(--line);
}
@media(max-width:700px){.nav,.nav.scrolled{padding-left:22px;padding-right:22px}}

/* brand icon: two pre-coloured PNGs, one shown at a time via CSS. Deliberately
   plain <img> tags rather than CSS mask-image — mask-image on a url() silently
   fails to paint in Safari when the page is opened via file:// (double-click
   preview), which is how this logo went "missing" during local testing. Plain
   <img> has no such restriction and works identically under file:// and http. */
.nav-brand{display:flex;align-items:center;gap:12px;flex-shrink:0;color:inherit}
.brand-icon{width:48px;height:36px;flex-shrink:0;object-fit:contain}
.brand-icon.variant-dark{display:none}
:root[data-theme="light"] .brand-icon.variant-light{display:none}
:root[data-theme="light"] .brand-icon.variant-dark{display:inline-block}
/* over an unscrolled hero the nav sits on photography, so ink is forced white
   regardless of theme (see body.has-hero rule further down) */
body.has-hero .nav:not(.scrolled) .brand-icon.variant-light{display:inline-block!important}
body.has-hero .nav:not(.scrolled) .brand-icon.variant-dark{display:none!important}
.nav .mark{font-family:var(--serif);font-style:italic;font-size:21px;color:inherit;line-height:1}

.nav-right{display:flex;align-items:center;gap:26px}
.nav-links{display:flex;align-items:center;gap:32px}
.nav-links>li{position:relative}
.nav-links a,.nav-links button{
  background:none;border:none;font:inherit;cursor:pointer;
  color:inherit;                 /* buttons do not inherit colour from the UA sheet */
  font-size:12px;letter-spacing:.14em;text-transform:uppercase;
  display:inline-flex;align-items:center;gap:6px;position:relative;padding-bottom:3px;
}
.nav-links>li>a::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;
  background:currentColor;transform:scaleX(0);transform-origin:right;transition:transform .4s var(--ease)}
.nav-links>li>a:hover::after,.nav-links>li>a.active::after{transform:scaleX(1);transform-origin:left}
.caret{font-size:9px;transition:transform .3s var(--ease)}
.has-dropdown:hover .caret,.has-dropdown:focus-within .caret,.has-dropdown.open .caret{transform:rotate(180deg)}

.dropdown{
  position:absolute;top:100%;left:50%;transform:translate(-50%,8px);
  width:max-content;min-width:250px;max-width:min(340px,calc(100vw - 32px));
  padding:16px;margin-top:14px;
  background:var(--bg-elevated);border:1px solid var(--line);border-radius:12px;
  box-shadow:0 24px 60px rgba(0,0,0,.35);
  opacity:0;visibility:hidden;
  transition:opacity .3s var(--ease),transform .3s var(--ease),visibility .3s;
}
.has-dropdown:hover .dropdown,.has-dropdown:focus-within .dropdown{
  opacity:1;visibility:visible;transform:translate(-50%,0);
}
.dropdown a{
  display:flex;flex-direction:column;align-items:flex-start;gap:1px;
  padding:9px 10px;border-radius:7px;text-transform:none;letter-spacing:0;
  font-size:15px;font-family:var(--serif);color:var(--ink);
}
.dropdown a::after{display:none}
.dropdown a:hover{background:var(--bg-card)}
.dropdown a small{font-family:var(--sans);text-transform:uppercase;letter-spacing:.14em;font-size:9.5px;color:var(--ink-faint)}
.dropdown .divider{height:1px;background:var(--line);margin:9px 0}
.dropdown .view-all{color:var(--slate);font-family:var(--sans);text-transform:uppercase;letter-spacing:.12em;font-size:11px;padding:6px 10px}
.dropdown .dd-group{font-family:var(--sans);text-transform:uppercase;letter-spacing:.2em;
  font-size:9.5px;color:var(--ink-faint);padding:10px 10px 4px}

/* ---------- aperture theme toggle ---------- */
.aperture{
  display:inline-flex;align-items:center;gap:9px;flex-shrink:0;
  border:1px solid currentColor;border-radius:100px;
  padding:6px 13px 6px 8px;background:transparent;
  cursor:pointer;color:inherit;opacity:.72;
  transition:opacity .35s var(--ease),background .35s var(--ease);
}
body.has-hero .nav:not(.scrolled) .aperture{background:rgba(6,9,7,.3)}
.aperture:hover{opacity:1}
.aperture svg{width:19px;height:19px;overflow:visible}
.aperture-blades{transform-origin:50% 50%;transition:transform .7s var(--ease),opacity .5s var(--ease)}
.aperture-blades path{fill:currentColor;opacity:.9}
/* dark theme = stopped down (f/22): blades closed in */
:root[data-theme="dark"] .aperture-blades{transform:rotate(0deg) scale(1)}
:root[data-theme="light"] .aperture-blades{transform:rotate(42deg) scale(.42)}
.aperture-stop{
  font-family:var(--sans);font-size:10.5px;letter-spacing:.1em;
  width:2.7em;text-align:left;overflow:hidden;height:1.25em;position:relative;
}
.aperture-stop span{display:block;transition:transform .5s var(--ease)}
:root[data-theme="light"] .aperture-stop span{transform:translateY(-1.25em)}

.nav-toggle{display:none}

/* ---------- mobile nav (rebuilt) ---------- */
@media(max-width:860px){
  /* backdrop-filter on .nav would become the containing block for the fixed
     menu panel below, collapsing it to the nav's own height. Use a solid bar on
     mobile instead: no blur, no containing block, better legibility anyway. */
  .nav.scrolled{
    backdrop-filter:none;-webkit-backdrop-filter:none;
    background:var(--bg);
  }
  .nav-right{gap:14px}
  .nav-links{
    position:fixed;top:0;left:0;z-index:205;
    background:var(--bg);
    flex-direction:column;align-items:stretch;justify-content:flex-start;
    gap:0;
    width:100vw;max-width:100vw;
    height:100vh;height:100dvh;
    padding:calc(var(--nav-h) + 18px) 22px calc(env(safe-area-inset-bottom,0px) + 40px);
    overflow-y:auto;overscroll-behavior:contain;
    opacity:0;visibility:hidden;transition:opacity .35s var(--ease),visibility .35s;
  }
  .nav-links.open{opacity:1;visibility:visible}
  .nav-links>li{border-bottom:1px solid var(--line);text-align:left}
  .nav-links a,.nav-links>li>button,
  .nav.scrolled .nav-links a,.nav.scrolled .nav-links>li>button{
    color:var(--ink);
    font-family:var(--serif);font-size:26px;letter-spacing:0;text-transform:none;
    width:100%;justify-content:space-between;padding:20px 2px;
  }
  .nav-links>li>a::after{display:none}
  .caret{font-size:13px}
  /* dropdown becomes a plain indented block; the old floating-card rules
     (min-width, centring translate) were what pushed it off-screen */
  .dropdown{
    position:static;transform:none;
    width:100%;min-width:0;max-width:100%;
    margin:0 0 16px;padding:0 0 4px 14px;
    background:none;border:none;border-left:1px solid var(--line);border-radius:0;
    box-shadow:none;
    display:none;opacity:1;visibility:visible;transition:none;
  }
  .has-dropdown.open .dropdown{display:block}
  .dropdown a{font-size:19px;padding:11px 4px}
  .dropdown a small{font-size:9px}
  .dropdown .view-all{font-size:11px;padding:10px 4px}
  .dropdown .dd-group{padding:12px 4px 2px}
  .nav-toggle{
    display:inline-flex;z-index:210;background:none;
    border:1px solid var(--line-strong);border-radius:100px;
    padding:9px 16px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;
    color:inherit;cursor:pointer;font-family:var(--sans);
  }
}
/* Narrow phones: the brand plus aperture plus Menu button needs ~348px, which
   overflows a 320px screen. Drop the f-stop label (the animated blades and the
   aria-label still carry it) and tighten the mark. */
@media(max-width:480px){
  .aperture-stop{display:none}
  .aperture{padding:7px 10px}
  .brand-icon{width:36px;height:27px}
  .nav .mark{font-size:19px}
  .nav-brand{gap:10px}
}
@media(max-width:360px){
  .nav,.nav.scrolled{padding-left:16px;padding-right:16px}
  .nav .mark{display:none}
}

/* ---------- pinned hero ---------- */
.hero-pin{position:relative;height:230vh}
.hero-pin-inner{position:sticky;top:0;height:100vh;height:100svh;padding:var(--frame);display:flex}
.hero-frame{
  position:relative;flex:1;border-radius:22px;overflow:hidden;
  display:flex;flex-direction:column;justify-content:flex-end;
  border:1px solid var(--line);background:#0B0E0C;
}
.hero-layer{
  position:absolute;inset:0;opacity:0;transition:opacity 1.1s var(--ease);
  background-size:cover;background-position:center;
}
.hero-layer.is-active{opacity:1}

/* Two-part scrim. The v4 version faded to transparent at 45% height, which is
   exactly where the headline sits, so white type died on bright skies. */
.hero-frame::before{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    radial-gradient(120% 78% at 50% 68%, rgba(6,9,7,.72) 0%, rgba(6,9,7,.5) 42%, rgba(6,9,7,0) 78%),
    linear-gradient(180deg, rgba(6,9,7,.5) 0%, rgba(6,9,7,.12) 26%, rgba(6,9,7,0) 46%);
}
.hero-frame::after{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(0deg, rgba(6,9,7,.72) 0%, rgba(6,9,7,.34) 34%, rgba(6,9,7,0) 62%);
}
.hero-mid{position:relative;z-index:2;text-align:center;padding:0 30px clamp(80px,12vh,132px)}
.hero-mid .eyebrow{color:#E4EAE4;display:block;margin-bottom:20px;text-shadow:0 1px 12px rgba(0,0,0,.5)}
.hero-mid h1{color:#fff;font-weight:300;font-size:clamp(38px,7vw,94px);line-height:1.03;
  text-shadow:0 2px 30px rgba(0,0,0,.45)}
.hero-mid .hero-sub{margin:20px auto 0;color:rgba(243,240,230,.92);
  font-family:var(--serif);font-style:italic;font-weight:300;
  font-size:clamp(16px,2vw,20px);max-width:50ch;text-shadow:0 1px 18px rgba(0,0,0,.5)}
.hero-cue{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);z-index:3;
  font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:rgba(243,240,230,.75);
  display:flex;flex-direction:column;align-items:center;gap:9px}
.hero-cue::after{content:"";width:1px;height:28px;background:rgba(243,240,230,.6);animation:cue 2.2s ease-in-out infinite}
@keyframes cue{0%,100%{transform:scaleY(.4);opacity:.4}50%{transform:scaleY(1);opacity:1}}
@media(max-width:700px){.hero-pin{height:200vh}}

/* ---------- page hero (interior pages) ---------- */
.page-hero{padding:calc(var(--nav-h) + 76px) 0 66px;border-bottom:1px solid var(--line)}
.page-hero .eyebrow{margin-bottom:20px;display:block}
.page-hero h1{font-weight:300;font-size:clamp(42px,8.4vw,100px);line-height:1}
.page-hero .lead{margin-top:24px;max-width:56ch;font-size:clamp(17px,2vw,21px)}

/* ---------- intro statement ---------- */
.intro{padding:120px 0;border-bottom:1px solid var(--line)}
.intro .wrap{max-width:820px}
.intro .eyebrow{margin-bottom:20px;display:block}
.intro p{font-family:var(--serif);font-weight:300;font-size:clamp(23px,3.3vw,34px);line-height:1.42}
.intro p em{font-style:italic;color:var(--slate)}

/* ---------- section shared ---------- */
.section-head{margin-bottom:56px;display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap}
.section-head>div{max-width:640px}
.section-head .eyebrow{margin-bottom:14px;display:block}
.section-head h2{font-size:clamp(29px,4.3vw,46px);font-weight:300}
.section-head .btn{flex-shrink:0}

/* ---------- media ---------- */
.media{position:relative;overflow:hidden;border-radius:14px;background:var(--bg-card);border:1px solid var(--line)}
.media img,.media video{width:100%;height:100%;object-fit:cover;transition:transform 1.3s var(--ease)}
.media.hoverzoom:hover img{transform:scale(1.045)}
.veil{position:absolute;inset:0;background:var(--bg);transform-origin:left;z-index:3;transition:transform 1s var(--ease)}
.is-visible .veil{transform:scaleX(0)}
.caption{margin-top:10px;font-family:var(--serif);font-style:italic;font-size:14px;color:var(--ink-faint)}

/* ---------- category tiles ---------- */
.categories{padding:120px 0;border-bottom:1px solid var(--line);background:var(--bg-elevated)}
.cat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
@media(max-width:980px){.cat-grid{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.cat-grid{grid-template-columns:1fr;gap:14px}}
.cat-card{position:relative;aspect-ratio:3/4;overflow:hidden;border-radius:14px;border:1px solid var(--line);display:block}
.cat-card img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s var(--ease)}
.cat-card:hover img{transform:scale(1.06)}
.cat-card::after{content:"";position:absolute;inset:0;z-index:1;
  background:linear-gradient(0deg,rgba(8,11,8,.82) 0%,rgba(8,11,8,.28) 42%,rgba(8,11,8,0) 70%)}
.cat-label{position:absolute;left:20px;right:20px;bottom:18px;z-index:2}
.cat-label .eyebrow{color:#CBD8DE;margin-bottom:5px;display:block}
.cat-label h3{font-family:var(--serif);font-style:italic;font-weight:400;font-size:23px;color:#fff}
.cat-label .n{font-family:var(--sans);font-size:10px;letter-spacing:.16em;text-transform:uppercase;
  color:rgba(243,240,230,.62);margin-top:6px;display:block}

/* ---------- work grid (all case studies) ---------- */
.work{padding:120px 0;border-bottom:1px solid var(--line)}
.work-filters{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 40px}
.filter-btn{
  font-family:var(--sans);font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;
  padding:10px 19px;border-radius:100px;border:1px solid var(--line-strong);
  background:none;color:var(--ink-soft);cursor:pointer;
  transition:border-color .35s var(--ease),color .35s var(--ease),background .35s var(--ease);
}
.filter-btn:hover{color:var(--ink)}
.filter-btn.active{background:var(--moss-fill);border-color:var(--moss-fill);color:#F3F0E6}
.work-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px 22px}
@media(max-width:900px){.work-grid{grid-template-columns:1fr 1fr;gap:20px 16px}}
@media(max-width:560px){.work-grid{grid-template-columns:1fr}}
.work-card{display:block}
.work-card .media{aspect-ratio:4/5}
.work-card .meta{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-top:14px}
.work-card h3{font-size:22px;font-weight:400}
.work-card .cat{font-family:var(--sans);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--slate);flex-shrink:0}
.work-card .loc{font-size:12.5px;color:var(--ink-faint);margin-top:3px}
.work-card:hover h3{color:var(--slate)}
.work-empty{color:var(--ink-faint);font-family:var(--serif);font-style:italic;font-size:18px;padding:30px 0}

/* ---------- gallery (project pages) ---------- */
.gallery{padding:0 0 120px}
.gallery-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:18px}
.gallery-grid .g2{grid-column:span 2}
.gallery-grid .g3{grid-column:span 3}
.gallery-grid .g4{grid-column:span 4}
.gallery-grid .g6{grid-column:span 6}
.gallery-grid .media{aspect-ratio:4/5}
.gallery-grid .g6 .media,.gallery-grid .g4 .media{aspect-ratio:16/9}
@media(max-width:760px){
  .gallery-grid{grid-template-columns:1fr 1fr;gap:12px}
  .gallery-grid .g2,.gallery-grid .g3,.gallery-grid .g4,.gallery-grid .g6{grid-column:span 2}
  .gallery-grid .media{aspect-ratio:4/5}
  .gallery-grid .g6 .media,.gallery-grid .g4 .media{aspect-ratio:16/9}
}

/* ---------- video ---------- */
.video-block{position:relative;border-radius:16px;overflow:hidden;border:1px solid var(--line);background:#0B0E0C}
.video-block video{width:100%;height:auto;display:block}
.video-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
@media(max-width:760px){.video-grid{grid-template-columns:1fr;gap:14px}}

/* ---------- meta grid ---------- */
.meta-grid{padding:56px 0;border-bottom:1px solid var(--line)}
.meta-grid .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:30px}
@media(max-width:760px){.meta-grid .grid{grid-template-columns:1fr 1fr;gap:24px}}
.meta-grid .k{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:9px}
.meta-grid .v{font-family:var(--serif);font-size:20px}

/* ---------- logo marquee (masked PNGs, auto-themed) ---------- */
.marquee-wrap{padding:64px 0;border-bottom:1px solid var(--line);overflow:hidden}
.marquee-head{max-width:1220px;margin:0 auto 30px;padding:0 44px}
@media(max-width:700px){.marquee-head{padding:0 22px}}
.marquee-track{display:flex;gap:58px;width:max-content;align-items:center;animation:marquee 44s linear infinite}
.marquee-wrap:hover .marquee-track{animation-play-state:paused}
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
/* Plain <img> pair per logo (see brand-icon comment above for why, not
   mask-image). Exactly one of each pair is display:block at a time. */
.client-logo{flex-shrink:0;object-fit:contain;opacity:.85;transition:opacity .4s var(--ease)}
.marquee-wrap:hover .client-logo{opacity:.62}
.client-logo:hover{opacity:1}
.client-logo.variant-dark{display:none}
:root[data-theme="light"] .client-logo.variant-light{display:none}
:root[data-theme="light"] .client-logo.variant-dark{display:block}
/* optical sizing per mark: wide wordmarks read heavy at equal height */
.client-logo.xwide{height:22px;width:146px}
.client-logo.wide{height:28px;width:auto}
.client-logo.mid{height:34px;width:auto}
.client-logo.compact{height:42px;width:auto}
.client-logo.wide,.client-logo.mid,.client-logo.compact{aspect-ratio:var(--ar,2)}
@media(max-width:700px){
  .marquee-track{gap:40px}
  .client-logo.xwide{height:18px;width:120px}
  .client-logo.wide{height:23px}
  .client-logo.mid{height:28px}
  .client-logo.compact{height:34px}
}

/* ---------- featured in ---------- */
.featured-in{padding:70px 0;border-bottom:1px solid var(--line)}
.featured-in .eyebrow{display:block;margin-bottom:26px}
.fi-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:2px;background:var(--line);border:1px solid var(--line)}
@media(max-width:800px){.fi-grid{grid-template-columns:1fr}}
.fi-item{background:var(--bg);padding:30px 28px;display:flex;flex-direction:column;gap:10px;
  transition:background .4s var(--ease)}
.fi-item:hover{background:var(--bg-elevated)}
.fi-item .src{font-family:var(--sans);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--slate)}
.fi-item .t{font-family:var(--serif);font-size:19px;line-height:1.3}
.fi-item .go{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);margin-top:auto}
.fi-item:hover .go{color:var(--ink-soft)}
.pull-quote{margin:34px 0 0;font-family:var(--serif);font-style:italic;font-weight:300;
  font-size:clamp(20px,2.8vw,27px);line-height:1.4;color:var(--ink);max-width:44ch}
.pull-quote cite{display:block;margin-top:14px;font-style:normal;font-family:var(--sans);
  font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-faint)}

/* ---------- testimonials (real client quotes) ---------- */
.testimonials{padding:70px 0;border-bottom:1px solid var(--line)}
.testimonials .eyebrow{display:block;margin-bottom:26px}
.testi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;background:var(--line);border:1px solid var(--line)}
@media(max-width:800px){.testi-grid{grid-template-columns:1fr}}
.testi-card{background:var(--bg);margin:0;padding:32px 28px;display:flex;flex-direction:column;gap:18px;
  transition:background .4s var(--ease)}
.testi-card:hover{background:var(--bg-elevated)}
.testi-card p{font-family:var(--serif);font-style:italic;font-weight:300;
  font-size:18.5px;line-height:1.5;color:var(--ink)}
.testi-card cite{font-style:normal;font-family:var(--sans);font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-faint);margin-top:auto}
.testi-card cite b{display:block;font-weight:500;color:var(--ink-soft);font-size:12px;letter-spacing:.04em;margin-bottom:3px}
.testi-card .stars{color:var(--slate);font-size:13px;letter-spacing:3px}
.testi-card.long p{font-size:15px;line-height:1.6}

/* ---------- services + FAQ ---------- */
.experiences{padding:120px 0;border-bottom:1px solid var(--line)}
.exp-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:2px;background:var(--line);border:1px solid var(--line)}
@media(max-width:1000px){.exp-grid{grid-template-columns:1fr 1fr}}
@media(max-width:600px){.exp-grid{grid-template-columns:1fr}}
.exp-card{background:var(--bg);padding:44px 34px;min-height:262px;display:flex;flex-direction:column;
  justify-content:space-between;transition:background .5s var(--ease)}
.exp-card:hover{background:var(--bg-elevated)}
.exp-card .num{font-family:var(--serif);font-style:italic;color:var(--slate);font-size:15px;margin-bottom:18px}
.exp-card h3{font-size:23px;font-weight:400;margin-bottom:11px}
.exp-card p{font-size:14.5px;color:var(--ink-soft);max-width:32ch}

.faq-row{padding:26px 0;border-bottom:1px solid var(--line)}
.faq-row:first-of-type{border-top:1px solid var(--line)}
.faq-row h3{font-size:19px;font-weight:400;margin-bottom:7px}
.faq-row p{color:var(--ink-soft);font-size:14.5px;max-width:62ch}
.faq-row a{color:var(--slate);border-bottom:1px solid var(--line-strong)}

/* ---------- product shots / guide ---------- */
.product-shot{background:var(--plate);border-radius:18px;overflow:hidden;
  display:flex;align-items:center;justify-content:center;border:1px solid var(--line)}
.product-shot img{width:100%;height:auto}
/* Several of the guide mockups are shot on a plain white backdrop rather than
   the brand's blue/dark mockup background. Matching the plate to white (rather
   than the beige --plate) makes the mockup's own edge invisible instead of
   showing a mismatched border/letterbox strip around it. */
.product-shot.on-white{background:#FFFFFF;border-color:rgba(0,0,0,.08)}
.guide-hero{padding:calc(var(--nav-h) + 70px) 0 0}
.guide-hero .grid{display:grid;grid-template-columns:.9fr 1.1fr;gap:64px;align-items:center;
  padding-bottom:100px;border-bottom:1px solid var(--line)}
@media(max-width:900px){.guide-hero .grid{grid-template-columns:1fr;gap:34px}}
.guide-hero h1{font-weight:300;font-size:clamp(36px,6.2vw,66px);line-height:1.05;margin:16px 0 20px}
.guide-hero .price-row{display:flex;align-items:center;gap:18px;margin:26px 0;flex-wrap:wrap}
.guide-hero .price{font-family:var(--serif);font-size:22px;color:var(--ink-soft)}
.guide-hero .cta-row{display:flex;gap:14px;flex-wrap:wrap}
.secure-note{display:flex;align-items:center;gap:8px;margin-top:16px;font-size:13px;color:var(--ink-faint)}
.secure-note svg{flex-shrink:0;color:var(--slate)}
.guide-feature-list{margin:24px 0;display:flex;flex-direction:column;gap:11px}
.guide-feature-list li{display:flex;gap:12px;font-size:15px;color:var(--ink-soft)}
.guide-feature-list li::before{content:"";flex-shrink:0;width:6px;height:6px;border-radius:50%;
  border:1px solid var(--moss);margin-top:9px}
.inside-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
@media(max-width:900px){.inside-grid{grid-template-columns:1fr 1fr;gap:14px}}
@media(max-width:520px){.inside-grid{grid-template-columns:1fr}}
.inside-card .product-shot{aspect-ratio:3/4;padding:14px}
.inside-card .product-shot img{height:100%;object-fit:contain}
.inside-card h3{font-size:18px;font-weight:400;margin-top:14px}
.inside-card p{font-size:13.5px;color:var(--ink-faint);margin-top:4px}
.pair{display:grid;grid-template-columns:1fr 1fr;gap:22px}
@media(max-width:760px){.pair{grid-template-columns:1fr;gap:14px}}

/* homepage guide teaser */
.guide-teaser{padding:110px 0;border-bottom:1px solid var(--line)}
.guide-teaser .split{display:grid;grid-template-columns:.85fr 1.15fr;gap:60px;align-items:center}
@media(max-width:900px){.guide-teaser .split{grid-template-columns:1fr;gap:34px}}
.guide-teaser h2{font-size:clamp(28px,4vw,44px);font-weight:300;margin:16px 0 18px}
.guide-teaser p{color:var(--ink-soft);max-width:52ch;margin-bottom:26px;font-size:15.5px}

/* ---------- contact form ---------- */
.contact-section{padding:120px 0;border-bottom:1px solid var(--line)}
.contact-grid{display:grid;grid-template-columns:.85fr 1.15fr;gap:70px;align-items:start}
@media(max-width:900px){.contact-grid{grid-template-columns:1fr;gap:40px}}
.contact-aside h2{font-size:clamp(30px,4.6vw,50px);font-weight:300;line-height:1.08;margin-bottom:20px}
.contact-aside p{color:var(--ink-soft);font-size:15.5px;max-width:40ch;margin-bottom:22px}
.contact-aside .direct{font-size:13px;color:var(--ink-faint);line-height:2}
.contact-aside .direct a{color:var(--slate)}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.form-grid .full{grid-column:1/-1}
@media(max-width:620px){.form-grid{grid-template-columns:1fr}}
.field{display:flex;flex-direction:column;gap:7px}
.field label{font-family:var(--sans);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-faint)}
.field input,.field select,.field textarea{
  font-family:var(--sans);font-size:15px;color:var(--ink);
  background:var(--bg-elevated);border:1px solid var(--line);border-radius:9px;
  padding:13px 14px;width:100%;
  transition:border-color .3s var(--ease),background .3s var(--ease);
}
.field textarea{min-height:132px;resize:vertical;line-height:1.6}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--slate);background:var(--bg-card)}
.field input::placeholder,.field textarea::placeholder{color:var(--ink-faint)}
.field.invalid input,.field.invalid select,.field.invalid textarea{border-color:#C97B6A}
.field .err{font-size:11.5px;color:#C97B6A;min-height:1em}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.form-actions{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-top:22px}
.form-note{font-size:12px;color:var(--ink-faint)}
.form-status{margin-top:18px;font-size:14.5px;padding:14px 16px;border-radius:10px;display:none}
.form-status.show{display:block}
.form-status.ok{background:rgba(138,174,134,.14);border:1px solid var(--moss);color:var(--ink)}
.form-status.bad{background:rgba(201,123,106,.12);border:1px solid #C97B6A;color:var(--ink)}

/* ---------- about ---------- */
.about-hero{padding:calc(var(--nav-h) + 76px) 0 80px}
.about-grid-section{padding-bottom:120px;border-bottom:1px solid var(--line)}
.about-grid{display:grid;grid-template-columns:.8fr 1.2fr;gap:64px;align-items:start}
@media(max-width:900px){.about-grid{grid-template-columns:1fr;gap:34px}}
.about-portrait{aspect-ratio:4/5}
.about-copy p{color:var(--ink-soft);margin-bottom:19px;max-width:60ch;font-size:16px}
.about-copy p:first-child{font-family:var(--serif);font-style:italic;font-weight:300;font-size:22px;color:var(--ink)}
.about-copy strong{color:var(--ink);font-weight:500}
.timeline{padding:104px 0;border-bottom:1px solid var(--line)}
.tl-row{display:grid;grid-template-columns:130px 1fr;gap:28px;padding:24px 0;border-bottom:1px solid var(--line)}
.tl-row:first-of-type{border-top:1px solid var(--line)}
@media(max-width:620px){.tl-row{grid-template-columns:1fr;gap:6px}}
.tl-row .yr{font-family:var(--serif);font-style:italic;color:var(--slate);font-size:19px}
.tl-row p{color:var(--ink-soft);max-width:56ch}

/* ---------- next project ---------- */
.next-project{padding:96px 0 120px}
.next-project a{display:block;position:relative;border-radius:18px;overflow:hidden;aspect-ratio:21/9;border:1px solid var(--line)}
.next-project img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s var(--ease)}
.next-project a:hover img{transform:scale(1.04)}
.next-project a::after{content:"";position:absolute;inset:0;z-index:1;
  background:linear-gradient(0deg,rgba(8,11,8,.78),rgba(8,11,8,.3) 55%,rgba(8,11,8,.1))}
.np-inner{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;
  justify-content:center;align-items:center;text-align:center;padding:0 24px}
.np-inner .eyebrow{color:#CBD8DE;margin-bottom:12px}
.np-inner h2{color:#fff;font-weight:300;font-size:clamp(24px,3.6vw,42px)}
@media(max-width:700px){.next-project a{aspect-ratio:4/5}}

/* ---------- footer ---------- */
.site-footer{padding:76px 0 42px}
.footer-top{display:flex;justify-content:space-between;flex-wrap:wrap;gap:44px;
  padding-bottom:52px;border-bottom:1px solid var(--line)}
.footer-brand{display:flex;flex-direction:column;gap:22px;max-width:420px}
.footer-lockup{width:230px;height:180px;object-fit:contain;object-position:left center;opacity:.94}
.footer-lockup.variant-dark{display:none}
:root[data-theme="light"] .footer-lockup.variant-light{display:none}
:root[data-theme="light"] .footer-lockup.variant-dark{display:block}
.footer-top h2{font-size:clamp(26px,4vw,42px);font-weight:300;max-width:18ch}
.footer-links{display:flex;gap:56px;flex-wrap:wrap}
.footer-col .eyebrow{display:block;margin-bottom:14px}
.footer-col a,.footer-col span{display:block;font-size:14.5px;color:var(--ink-soft);margin-bottom:9px}
.footer-col a:hover{color:var(--ink)}
.footer-meta{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-top:36px;
  font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}
.social-row{display:flex;gap:14px;margin-top:4px}
.social-row a{display:inline-flex;align-items:center;justify-content:center;
  width:38px;height:38px;border:1px solid var(--line-strong);border-radius:50%;
  color:var(--ink-soft);transition:border-color .35s var(--ease),color .35s var(--ease)}
.social-row a:hover{border-color:var(--slate);color:var(--ink)}
.social-row svg{width:17px;height:17px;fill:currentColor}

/* ---------- 404 ---------- */
.nf{min-height:74vh;display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;padding:calc(var(--nav-h) + 60px) 22px 80px}
.nf h1{font-size:clamp(56px,14vw,150px);font-weight:300;line-height:1}
.nf p{color:var(--ink-soft);margin:18px 0 30px;max-width:44ch}
