/* =========================================================
   Workspace Matter — design tokens
   Mineral greys + emerald accent
   ========================================================= */
:root {
  --bg:        #E6E8E7;
  --bg-soft:   #EEF0EF;
  --surface:   #F6F7F6;
  --ink:       #111714;
  --ink-2:     #2A332F;
  --muted:     #5E6964;
  --line:      rgba(17, 23, 20, 0.12);

  --em-900:    #06291F;
  --em-800:    #0B3D2E;
  --em-700:    #0F5140;
  --em-600:    #1A6B53;
  --em-500:    #2E8A6B;
  --em-300:    #8EC3AE;
  --em-200:    #BFDDD0;
  --em-100:    #DDEDE6;

  --font:      "Geist", system-ui, sans-serif;
  --mono:      "Geist Mono", ui-monospace, monospace;

  --gutter:    clamp(16px, 3.4vw, 48px);
  --radius:    18px;
  --ease:      cubic-bezier(0.16, 1, 0.3, 1);
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
/* smooth scroll (Lenis): it drives the scroll itself, so native smooth behaviour is switched off */
html.lenis, html.lenis body { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-smooth [data-lenis-prevent] { overscroll-behavior: contain; }
.lenis.lenis-stopped { overflow: hidden; }

body {
  font-family: var(--font);
  font-size: 16px;
  line-height: 1.55;
  color: var(--ink);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  overflow-x: clip; /* not `hidden`: that would make body a scroll container and break position: sticky */
}

img { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; text-align: left; }

:focus-visible { outline: 2px solid var(--em-600); outline-offset: 3px; border-radius: 4px; }

.mono {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

/* =========================================================
   Buttons
   ========================================================= */
.btn {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  height: 48px;
  padding: 0 22px;
  border-radius: 999px;
  font-size: 14px;
  font-weight: 500;
  transition: background .35s var(--ease), color .35s var(--ease), border-color .35s var(--ease), transform .2s var(--ease);
}
.btn svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.5; transition: transform .35s var(--ease); }
.btn:hover svg { transform: translateX(3px); }
.btn:active { transform: scale(0.98); }

.btn--solid { background: var(--em-800); color: var(--surface); }
.btn--solid:hover { background: var(--em-700); }

.btn--ghost { border: 1px solid var(--line); }
.btn--ghost:hover { border-color: var(--em-700); color: var(--em-800); }

.btn--link {
  padding: 0 4px;
  height: auto;
  color: var(--ink-2);
  border-radius: 0;
  background: linear-gradient(currentColor, currentColor) 0 100% / 100% 1px no-repeat;
  padding-bottom: 3px;
}
.btn--link:hover { color: var(--em-700); }

/* =========================================================
   Scroll progress (top edge, above the nav)
   ========================================================= */
.scroll-progress {
  position: fixed;
  inset: 0 0 auto 0;
  z-index: 60;
  height: 2px;
  pointer-events: none;
}
.scroll-progress i {
  display: block;
  height: 100%;
  background: linear-gradient(90deg, var(--em-300), var(--em-700));
  box-shadow: 0 0 10px rgba(46, 138, 107, 0.45);
  transform: scaleX(0);
  transform-origin: 0 50%;
  will-change: transform;
}

/* =========================================================
   Nav — transparent over the hero, then a floating glass bar.
   Hides while scrolling down, returns on scroll up (nav.js).
   ========================================================= */
.nav {
  position: fixed;
  inset: 0 0 auto 0;
  z-index: 50;
  padding: 16px var(--gutter);
  pointer-events: none;           /* only the bar itself takes clicks */
  transition: padding .5s var(--ease);
}
.nav.is-scrolled { padding-top: 10px; }

.nav__bar {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  gap: 24px;
  height: 60px;
  max-width: 1600px;
  margin: 0 auto;
  padding: 0 8px 0 18px;
  border-radius: 999px;
  border: 1px solid transparent;
  pointer-events: auto;
  transition: background .5s var(--ease), border-color .5s var(--ease), box-shadow .5s var(--ease), transform .6s var(--ease);
}
.nav.is-scrolled .nav__bar,
.nav.is-open .nav__bar {
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.3) 0%, rgba(246, 247, 246, 0.12) 100%);
  border-color: rgba(255, 255, 255, 0.35);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0 18px 44px -26px rgba(17, 23, 20, 0.3);
  backdrop-filter: blur(18px) saturate(1.4);
  -webkit-backdrop-filter: blur(18px) saturate(1.4);
}
.nav.is-hidden .nav__bar { transform: translateY(calc(-100% - 28px)); }

/* logo: layered mark that turns a quarter on hover */
.nav__logo { justify-self: start; display: inline-flex; align-items: center; gap: 12px; font-size: 15px; letter-spacing: 0.02em; }
.nav__logo b { font-weight: 600; }
.nav__mark {
  position: relative;
  width: 22px; height: 22px; border-radius: 6px;
  background: linear-gradient(135deg, var(--em-200), var(--em-800));
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0 6px 14px -6px rgba(6, 41, 31, 0.6);
  transition: transform .8s var(--ease), border-radius .8s var(--ease);
}
.nav__mark i {
  position: absolute; inset: 6px;
  border-radius: 2px;
  background: rgba(246, 247, 246, 0.9);
  transition: transform .8s var(--ease);
}
.nav__logo:hover .nav__mark { transform: rotate(90deg); border-radius: 50%; }
.nav__logo:hover .nav__mark i { transform: rotate(-45deg) scale(.8); }

/* links: a glass rail with a highlight that glides to the hovered / current link */
.nav__links {
  position: relative;
  display: flex;
  gap: 2px;
  padding: 4px;
  border-radius: 999px;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.08) 100%);
  border: 1px solid rgba(255, 255, 255, 0.35);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3);
}
.nav__links a {
  position: relative;
  z-index: 1;
  padding: 9px 16px;
  border-radius: 999px;
  font-size: 14px;
  color: var(--ink-2);
  transition: color .3s var(--ease);
}
.nav__links a:hover, .nav__links a.is-current, .nav__links a[aria-current="page"] { color: var(--em-800); }
.nav__glide {
  position: absolute;
  top: 4px; bottom: 4px; left: 0;
  width: var(--w, 0px);
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.3);
  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.3) inset, 0 6px 16px -8px rgba(17, 23, 20, 0.25);
  transform: translateX(var(--x, 0px));
  opacity: 0;
  transition: transform .55s var(--ease), width .55s var(--ease), opacity .3s var(--ease);
}
.nav__glide.is-on { opacity: 1; }

.nav__end { justify-self: end; display: flex; align-items: center; gap: 16px; }
.nav__status { display: inline-flex; align-items: center; gap: 10px; font-size: 10px; letter-spacing: 0.16em; color: var(--ink-2); white-space: nowrap; }
.nav__status i { width: 7px; height: 7px; border-radius: 50%; background: var(--em-500); animation: ft-live 2.4s var(--ease) infinite; }

/* CTA: solid pill with an arrow chip that slides on hover */
.nav__cta {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  height: 46px;
  padding: 0 5px 0 20px;
  border-radius: 999px;
  font-size: 14px;
  font-weight: 500;
  white-space: nowrap;
  color: var(--surface);
  background: var(--em-800);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12), 0 10px 24px -14px rgba(6, 41, 31, 0.8);
  transition: background .4s var(--ease), transform .2s var(--ease);
}
.nav__cta:hover { background: var(--em-700); }
.nav__cta:active { transform: scale(0.98); }
.nav__cta i {
  display: grid; place-items: center;
  width: 36px; height: 36px; border-radius: 50%;
  background: rgba(246, 247, 246, 0.14);
  overflow: hidden;
}
.nav__cta svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.5; transition: transform .45s var(--ease); }
.nav__cta:hover svg { animation: nav-arrow .6s var(--ease); }
@keyframes nav-arrow { 45% { transform: translateX(140%); } 46% { transform: translateX(-140%); } 100% { transform: none; } }

/* menu button: two bars that fold into an X */
.nav__toggle {
  display: none;
  position: relative;
  width: 46px; height: 46px;
  border-radius: 50%;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.3) 0%, rgba(246, 247, 246, 0.12) 100%);
  border: 1px solid rgba(255, 255, 255, 0.35);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0 8px 20px -12px rgba(17, 23, 20, 0.25);
  backdrop-filter: blur(14px) saturate(1.2);
  -webkit-backdrop-filter: blur(14px) saturate(1.2);
  transition: background .4s var(--ease), transform .2s var(--ease);
}
.nav__toggle:active { transform: scale(0.95); }
.nav__toggle span {
  position: absolute; left: 14px; right: 14px; height: 1.5px; border-radius: 2px;
  background: var(--ink);
  transition: transform .55s var(--ease), background .4s var(--ease);
}
.nav__toggle span:first-child { top: 19px; }
.nav__toggle span:last-child { top: 25px; right: 18px; }
.nav.is-open .nav__toggle { background: var(--em-800); border-color: var(--em-800); }
.nav.is-open .nav__toggle span { background: var(--surface); right: 14px; }
.nav.is-open .nav__toggle span:first-child { transform: translateY(3px) rotate(45deg); }
.nav.is-open .nav__toggle span:last-child { transform: translateY(-3px) rotate(-45deg); }

/* =========================================================
   Mobile menu — a light glass sheet that opens as a circle
   from the menu button
   ========================================================= */
.mnav {
  --cx: calc(100% - 40px);
  --cy: 44px;
  position: fixed;
  inset: 0;
  z-index: 49;
  display: none;
  overflow: hidden;
  background: rgba(230, 232, 231, 0.94);
  backdrop-filter: blur(24px) saturate(1.3);
  -webkit-backdrop-filter: blur(24px) saturate(1.3);
  clip-path: circle(0px at var(--cx) var(--cy));
  visibility: hidden;
  transition: clip-path .7s var(--ease), visibility 0s linear .7s;
}
.mnav.is-open {
  clip-path: circle(150vmax at var(--cx) var(--cy));
  visibility: visible;
  transition: clip-path .9s var(--ease), visibility 0s;
}
.mnav__bg { position: absolute; inset: 0; pointer-events: none; }
.mnav__blob { position: absolute; border-radius: 50%; filter: blur(60px); }
.mnav__blob--a { width: 90vw; height: 90vw; right: -40vw; top: -30vw; background: radial-gradient(circle, rgba(142, 195, 174, 0.65), rgba(142, 195, 174, 0) 70%); animation: ft-float-b 26s ease-in-out infinite alternate; }
.mnav__blob--b { width: 80vw; height: 80vw; left: -40vw; bottom: -30vw; background: radial-gradient(circle, rgba(46, 138, 107, 0.28), rgba(46, 138, 107, 0) 70%); animation: ft-float-a 30s ease-in-out infinite alternate; }

.mnav__inner {
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 108px var(--gutter) max(24px, env(safe-area-inset-bottom));
}
.mnav__eyebrow { display: flex; align-items: center; gap: 12px; font-size: 10.5px; letter-spacing: 0.24em; color: var(--ink-2); }
.mnav__eyebrow .rule { width: 26px; height: 1px; background: currentColor; opacity: .55; }

.mnav__links { display: grid; margin-top: 18px; border-top: 1px solid var(--line); }
.mnav__links a {
  display: grid;
  grid-template-columns: 34px 1fr auto;
  align-items: center;
  gap: 8px;
  padding: 14px 0;
  border-bottom: 1px solid var(--line);
  opacity: 0;
  transform: translateY(28px);
  transition: opacity .3s var(--ease), transform .3s var(--ease), color .3s var(--ease);
}
.mnav__links .mono { font-size: 10px; color: var(--em-600); }
.mnav__links b { font-weight: 300; font-size: clamp(30px, 8.4vw, 52px); line-height: 1; letter-spacing: -0.045em; }
.mnav__links svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.3; opacity: .45; transition: transform .4s var(--ease), opacity .4s var(--ease); }
.mnav__links a:hover svg, .mnav__links a:focus-visible svg { transform: translate(3px, -3px); opacity: 1; }
.mnav__links a.is-current, .mnav__links a[aria-current="page"] { color: var(--em-700); }
.mnav__links a.is-current b, .mnav__links a[aria-current="page"] b { font-weight: 400; }
.mnav__links a.is-current svg, .mnav__links a[aria-current="page"] svg { opacity: 1; }

.mnav__foot {
  display: grid;
  gap: 18px;
  margin-top: auto;
  padding-top: 32px;
  opacity: 0;
  transform: translateY(20px);
  transition: opacity .3s var(--ease), transform .3s var(--ease);
}
.mnav__cta { justify-content: space-between; width: 100%; height: 54px; }
.mnav__contact { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 14px 16px; }
.mnav__contact a, .mnav__contact p { display: grid; gap: 4px; font-size: 14px; color: var(--ink); word-break: break-word; }
.mnav__contact a:first-child { grid-column: 1 / -1; font-size: 16px; }
.mnav__contact .mono { font-size: 9.5px; color: var(--muted); }
.mnav__contact time { font-variant-numeric: tabular-nums; }

/* staggered entrance once the sheet is open */
.mnav.is-open .mnav__links a { opacity: 1; transform: none; transition: opacity .8s var(--ease), transform .9s var(--ease), color .3s var(--ease); transition-delay: calc(var(--i) * 55ms + 160ms); }
.mnav.is-open .mnav__foot { opacity: 1; transform: none; transition: opacity .8s var(--ease) .55s, transform .9s var(--ease) .55s; }

html.menu-open, html.menu-open body { overflow: hidden; }

/* =========================================================
   01 Hero
   ========================================================= */
.hero {
  position: relative;
  min-height: 100dvh;
  display: grid;
  grid-template-rows: 1fr auto;
  overflow: hidden;
  isolation: isolate;
  background: var(--bg);
}

/* ---- slideshow ---- */
.hero__media { position: absolute; inset: 0; z-index: -1; }
.hero__slide {
  position: absolute; inset: 0;
  background: var(--img) center right / cover no-repeat;
  opacity: 0;
  transform: scale(1.06);
  transition: opacity 1.6s var(--ease), transform 9s linear;
  will-change: opacity, transform; /* own compositor layer: fades/zooms never repaint the page */
  backface-visibility: hidden;
}
.hero__slide.is-active { opacity: 1; transform: scale(1); }

/* light touch: keep the photo's depth, only lift contrast behind text */
.hero__wash {
  position: absolute; inset: 0;
  background:
    linear-gradient(90deg,
      rgba(230, 232, 231, 0.5) 0%,
      rgba(230, 232, 231, 0.28) 28%,
      rgba(230, 232, 231, 0) 48%),
    linear-gradient(180deg, rgba(230, 232, 231, 0.35) 0%, rgba(230, 232, 231, 0) 14%),
    linear-gradient(0deg, rgba(230, 232, 231, 0.4) 0%, rgba(230, 232, 231, 0) 16%);
}

/* ---- content ---- */
.hero__inner {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 48px;
  width: 100%;
  max-width: 1600px;
  margin: 0 auto;
  padding: 140px var(--gutter) 40px;
}

.hero__eyebrow {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  color: var(--ink-2);
  font-size: 10px;
  letter-spacing: 0.24em;
  margin-bottom: 32px;
}
.hero__eyebrow i { font-style: normal; opacity: .4; }
.hero__eyebrow .rule { width: 40px; height: 1px; background: var(--ink); opacity: .5; margin-right: 8px; }

.hero__title {
  font-weight: 400;
  font-size: clamp(38px, 4.8vw, 84px);
  line-height: 0.98;
  letter-spacing: -0.025em;
  text-transform: uppercase;
  color: var(--ink);
}
.hero__title .line { display: block; overflow: hidden; padding-bottom: 0.04em; }
.hero__title .line > span { display: inline-block; white-space: nowrap; }
.hero__title em { font-style: normal; font-weight: 400; color: var(--em-700); }

.hero__lead {
  max-width: 36ch;
  margin-top: 24px;
  font-size: clamp(15px, 1.05vw, 17px);
  line-height: 1.55;
  color: var(--ink-2);
}
.hero__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 14px 28px; margin-top: 36px; }
.hero__actions .btn { height: 44px; font-size: 13px; }

/* ---- side annotations ---- */
.hero__notes {
  align-self: stretch;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 20px 0 10px;
}
.note { position: relative; padding: 4px 0 4px 26px; width: 190px; }
.note__rule { position: absolute; left: 0; top: 0; bottom: 0; width: 1px; background: rgba(17, 23, 20, 0.35); }
.note__rule::before { content: ""; position: absolute; top: 12px; left: -34px; width: 34px; height: 1px; background: rgba(17, 23, 20, 0.35); }
.note__title {
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  line-height: 1.35;
  color: var(--ink);
}
.note__meta { margin-top: 14px; font-size: 10px; line-height: 1.7; letter-spacing: 0.16em; color: var(--ink-2); opacity: .8; }
.note--end .note__meta { margin-top: 0; }
.note__title, .note__meta { transition: opacity .5s var(--ease), transform .5s var(--ease); }
.note.is-swapping .note__title, .note.is-swapping .note__meta { opacity: 0; transform: translateY(6px); }

/* ---- foot ---- */
.hero__foot {
  display: flex;
  justify-content: center;
  align-items: end;
  gap: 24px;
  width: 100%;
  max-width: 1600px;
  margin: 0 auto;
  padding: 0 var(--gutter) 36px;
}
.scroll-cue { display: inline-flex; align-items: center; gap: 20px; color: var(--ink-2); }
.scroll-cue svg { width: 16px; height: 40px; fill: none; stroke: currentColor; stroke-width: 1; animation: nudge 2.4s var(--ease) infinite; }
.scroll-cue .mono { letter-spacing: 0.2em; font-size: 10.5px; }
@keyframes nudge { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(5px); } }

.pager { display: flex; gap: 8px; }
.pager__item {
  display: grid;
  gap: 12px;
  width: 64px;
  padding: 8px 0 0;
  font-family: var(--mono);
  font-size: 12px;
  color: var(--muted);
  text-align: center;
  transition: color .3s var(--ease);
}
.pager__item i { display: block; height: 2px; background: rgba(17, 23, 20, 0.14); overflow: hidden; position: relative; }
.pager__item i::after { content: ""; position: absolute; inset: 0; background: var(--em-700); transform: scaleX(0); transform-origin: 0 50%; }
.pager__item:hover, .pager__item.is-active { color: var(--ink); }
.pager__item.is-active span { font-size: 14px; }
.pager__item.is-running i::after { animation: progress var(--slide, 7000ms) linear forwards; }

.hero__mail { justify-self: end; color: var(--ink-2); letter-spacing: 0.14em; font-size: 10.5px; text-transform: none; }
.hero__mail:hover { color: var(--em-700); }

/* =========================================================
   Shared section eyebrow
   ========================================================= */
.eyebrow {
  display: flex;
  gap: 10px;
  align-items: baseline;
  font-size: 13px;
  color: var(--muted);
  margin-bottom: 20px;
}
.eyebrow .mono { color: var(--em-600); }


/* =========================================================
   02 Living pod (interactive 3D)
   ========================================================= */
.pod { padding: clamp(40px, 4vh, 120px) var(--gutter) 0; }
.pod__head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(260px, 380px);
  gap: 24px 64px;
  align-items: end;
  margin-bottom: 40px;
}
.pod__head .eyebrow { grid-column: 1 / -1; margin-bottom: 0; }
.pod__title {
  font-weight: 300;
  font-size: clamp(36px, 4.4vw, 76px);
  line-height: 1;
  letter-spacing: -0.045em;
}
.pod__title em { font-style: normal; font-weight: 400; color: var(--em-700); }
.pod__lead { color: var(--muted); max-width: 40ch; }

.pod__stage {
  position: relative;
  height: clamp(520px, 82vh, 860px);
  border-radius: var(--radius);
  overflow: hidden;
  background: #ECEEED; /* matches the WebGL scene background */
  isolation: isolate;
}
/* soft studio vignette over the canvas, under the UI */
.pod__stage::before {
  content: "";
  position: absolute; inset: 0;
  pointer-events: none;
  background: radial-gradient(120% 95% at 50% 42%, transparent 55%, rgba(17, 23, 20, 0.08) 100%);
}
.pod__canvas { display: block; width: 100%; height: 100%; cursor: grab; touch-action: pan-y; }
.pod__canvas:active { cursor: grabbing; }

/* loading + fallback */
.pod__loading {
  position: absolute; inset: 0;
  display: grid; place-content: center; justify-items: center; gap: 14px;
  color: var(--muted);
  transition: opacity .6s var(--ease);
}
.pod__loading-bar { position: relative; width: 160px; height: 1px; background: var(--line); overflow: hidden; }
.pod__loading-bar::after {
  content: ""; position: absolute; inset: 0; width: 40%;
  background: var(--em-700);
  animation: loadbar 1.4s var(--ease) infinite;
}
@keyframes loadbar { from { transform: translateX(-100%); } to { transform: translateX(260%); } }
.pod__stage.is-ready .pod__loading { opacity: 0; pointer-events: none; }

.pod__fallback { display: none; position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; background: #0f1411; }
.pod__stage.is-fallback .pod__fallback { display: block; }
.pod__stage.is-fallback :is(.pod__loading, .pod__hotspots, .pod__views, .pod__toggles, .pod__hint, .pod__info) { display: none; }

/* overlay UI shares one quiet glass surface */
.pod__views, .pod__toggles, .pod__info, .hotspot {
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.3) 0%, rgba(246, 247, 246, 0.12) 100%);
  border: 1px solid rgba(255, 255, 255, 0.35);
  box-shadow: 0 10px 30px -18px rgba(17, 23, 20, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.3);
  backdrop-filter: blur(16px) saturate(1.3);
  -webkit-backdrop-filter: blur(16px) saturate(1.3);
}

.pod__views {
  position: absolute; top: 20px; left: 20px;
  display: flex; gap: 2px; padding: 4px;
  border-radius: 999px;
}
.pod__views button {
  padding: 8px 16px;
  border-radius: 999px;
  font-size: 13px;
  color: var(--ink-2);
  transition: background .3s var(--ease), color .3s var(--ease);
}
.pod__views button:hover { color: var(--em-800); }
.pod__views button.is-active { background: var(--em-800); color: var(--surface); }

.pod__info {
  position: absolute; top: 20px; right: 20px;
  width: min(300px, calc(100% - 40px));
  padding: 18px 20px 20px;
  border-radius: 14px;
}
.pod__info-index { color: var(--em-600); }
.pod__info-title { margin-top: 10px; font-size: 18px; letter-spacing: -0.02em; line-height: 1.2; }
.pod__info-text { margin-top: 8px; font-size: 13.5px; line-height: 1.5; color: var(--muted); }
.pod__info > * { transition: opacity .35s var(--ease), transform .35s var(--ease); }
.pod__info.is-swapping > * { opacity: 0; transform: translateY(4px); }

.pod__toggles {
  position: absolute; left: 20px; bottom: 20px;
  display: flex; gap: 2px; padding: 4px;
  border-radius: 999px;
}
.toggle {
  display: inline-flex; align-items: center; gap: 8px;
  height: 40px; padding: 0 16px 0 12px;
  border-radius: 999px;
  font-size: 13px;
  color: var(--ink-2);
  transition: background .3s var(--ease), color .3s var(--ease);
}
.toggle svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.3; stroke-linecap: round; stroke-linejoin: round; }
.toggle:hover { color: var(--em-800); }
.toggle[aria-pressed="true"] { background: var(--em-100); color: var(--em-800); }
.toggle:active { transform: scale(0.97); }

.pod__hint {
  position: absolute; right: 22px; bottom: 30px;
  display: inline-flex; align-items: center; gap: 10px;
  color: var(--muted);
  pointer-events: none;
}
.pod__hint svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.2; }

/* hotspots are positioned from 3D space each frame */
.pod__hotspots { position: absolute; inset: 0; pointer-events: none; }
.hotspot {
  position: absolute; left: 0; top: 0;
  width: 34px; height: 34px;
  margin: -17px 0 0 -17px;
  border-radius: 50%;
  display: grid; place-items: center;
  font-family: var(--mono); font-size: 10px;
  color: var(--em-800);
  pointer-events: auto;
  transition: opacity .3s var(--ease), background .3s var(--ease), color .3s var(--ease);
  will-change: transform;
}
.hotspot::before {
  content: ""; position: absolute; inset: -5px; border-radius: 50%;
  border: 1px solid rgba(246, 247, 246, 0.8);
  animation: pulse 2.6s var(--ease) infinite;
}
.hotspot:hover, .hotspot.is-active { background: var(--em-800); color: var(--surface); }
.hotspot.is-hidden { opacity: 0; pointer-events: none; }
@keyframes pulse { from { transform: scale(.8); opacity: 1; } to { transform: scale(1.6); opacity: 0; } }

/* =========================================================
   03 The idea — sticky split screen, advanced by scroll
   ========================================================= */
.idea {
  --stages: 5;
  position: relative;
  height: 380vh; /* scroll track: the sticky frame stays pinned while the five stages play */
  margin-top: clamp(40px, 4vh, 120px);
}
.idea__sticky {
  position: sticky;
  top: 0;
  height: 100vh;
  height: 100dvh;
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  gap: clamp(32px, 5vw, 88px);
  padding: 92px var(--gutter) var(--gutter);
  overflow: hidden;
  isolation: isolate;
}

.idea__copy {
  position: relative;
  z-index: 1;
  min-width: 0;
  max-width: 620px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 40px;
  padding: 20px 0 8px;
}
.idea__title {
  font-weight: 300;
  font-size: clamp(40px, 4.6vw, 82px);
  line-height: 0.98;
  letter-spacing: -0.045em;
  max-width: 11ch;
}
.idea__title em { font-style: normal; font-weight: 400; color: var(--em-700); }
.idea__body {
  margin-top: 28px;
  max-width: 40ch;
  font-size: clamp(16px, 1.15vw, 18px);
  line-height: 1.55;
  color: var(--ink-2);
}
.idea__quote {
  position: relative;
  margin-top: 28px;
  padding: 16px 20px;
  max-width: 38ch;
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--ink-2);
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.28) 0%, rgba(246, 247, 246, 0.1) 100%);
  border: 1px solid rgba(255, 255, 255, 0.35);
  border-left: 3px solid var(--em-600);
  border-radius: 14px;
  box-shadow: 0 10px 24px -14px rgba(17, 23, 20, 0.12), inset 0 1px 0 rgba(255, 255, 255, 0.3);
  backdrop-filter: blur(14px) saturate(1.2);
  -webkit-backdrop-filter: blur(14px) saturate(1.2);
}
.idea__quote::before { display: none; }

/* keyword chain: SPACE → PEOPLE → WORKFLOW → TECHNOLOGY → PERFORMANCE */
.chain {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px 0;
}
.chain li { display: flex; align-items: center; }
.chain li:not(:last-child)::after {
  content: "";
  width: 18px; height: 1px;
  margin: 0 10px;
  background: currentColor;
  color: var(--line);
  transition: color .5s var(--ease);
}
.chain li.is-done::after { color: var(--em-600); }
.chain button {
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
  padding: 6px 0;
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--muted);
  opacity: 0.55;
  transition: color .5s var(--ease), opacity .5s var(--ease);
}
.chain button .mono { font-size: 9.5px; letter-spacing: 0.06em; }
.chain button:hover { opacity: 1; }
.chain li.is-done button { color: var(--ink-2); opacity: 1; }
/* active word: colour sweeps through the text. Desktop drives --fill (0..1) from scroll;
   mobile runs a timed animation matching the auto-advance */
.chain li.is-active button {
  opacity: 1;
  color: transparent;
  background: linear-gradient(90deg, var(--em-700) 0 47%, rgba(94, 105, 100, 0.55) 53% 100%);
  background-size: 220% 100%;
  background-position: calc((1 - var(--fill, 0)) * 100%) 0;
  -webkit-background-clip: text;
          background-clip: text;
}

.chain__track {
  position: relative;
  height: 2px;
  margin-top: 16px;
  background: var(--line);
  border-radius: 2px;
  overflow: hidden;
}
.chain__track i {
  position: absolute; inset: 0;
  background: linear-gradient(90deg, var(--em-300), var(--em-700));
  transform: scaleX(0);
  transform-origin: 0 50%;
  will-change: transform;
}

/* visual: full-bleed background of the pinned frame */
.idea__visual {
  position: absolute;
  inset: 0;
  z-index: 0;
  margin: 0;
  background: var(--bg);
  overflow: hidden; /* the zooming image must never spill past the gradient */
  isolation: isolate;
}
.idea__visual img {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: 70% center; /* keep the subject in the open right-hand side */
  /* outgoing image stays fully opaque underneath until the incoming one has covered it,
     so the background never shows through and the gradient edge never flickers */
  opacity: 0;
  z-index: -3;
  transition: opacity 0s linear 1.2s;
}
.idea__visual img.is-active {
  opacity: 1;
  z-index: -2;
  transition: opacity 1.2s var(--ease);
  animation: idea-zoom 2.4s var(--ease) both; /* only the incoming image moves */
}
@keyframes idea-zoom { from { transform: scale(1.05); } to { transform: scale(1); } }

/* the split: an eased wash of the page colour (many stops = no visible banding or seam),
   soft fades top/bottom so the frame melts into the neighbouring sections,
   and a deep emerald pool bottom-right that carries the white caption */
.idea__visual::after {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  background:
    linear-gradient(90deg,
      rgba(230, 232, 231, 1)    0%,
      rgba(230, 232, 231, 0.99) 22%,
      rgba(230, 232, 231, 0.96) 30%,
      rgba(230, 232, 231, 0.9)  35%,
      rgba(230, 232, 231, 0.8)  39%,
      rgba(230, 232, 231, 0.66) 43%,
      rgba(230, 232, 231, 0.5)  47%,
      rgba(230, 232, 231, 0.34) 51%,
      rgba(230, 232, 231, 0.2)  55%,
      rgba(230, 232, 231, 0.09) 59%,
      rgba(230, 232, 231, 0.02) 63%,
      rgba(230, 232, 231, 0)    66%),
    linear-gradient(180deg,
      rgba(230, 232, 231, 0.9)  0%,
      rgba(230, 232, 231, 0.45) 6%,
      rgba(230, 232, 231, 0.12) 12%,
      rgba(230, 232, 231, 0)    18%),
    radial-gradient(70% 65% at 88% 100%,
      rgba(6, 41, 31, 0.78) 0%,
      rgba(6, 41, 31, 0.52) 30%,
      rgba(6, 41, 31, 0.2)  58%,
      rgba(6, 41, 31, 0)    80%);
}

.idea__caption {
  position: absolute;
  right: var(--gutter);
  bottom: var(--gutter);
  color: var(--surface);
}
.idea__meta {
  display: flex;
  align-items: baseline;
  gap: 18px;
  margin-bottom: 14px;
}
.idea__meta .mono { color: var(--em-200); flex: none; }
.idea__meta b { font-weight: 500; color: var(--surface); }
.idea__desc {
  font-size: 15px;
  line-height: 1.45;
  color: rgba(246, 247, 246, 0.85);
  max-width: 44ch;
  transition: opacity .35s var(--ease), transform .35s var(--ease);
}
.idea__desc.is-out { opacity: 0; transform: translateY(6px); }

/* odometer-style word roll */
.kinetic {
  height: 1em;
  overflow: hidden;
  font-size: clamp(44px, 5vw, 96px); /* "PERFORMANCE" must fit the right half */
  line-height: 1;
  font-weight: 300;
  letter-spacing: -0.04em;
  text-transform: uppercase;
}
.kinetic__track {
  transition: transform .9s var(--ease);
  will-change: transform;
}
.kinetic__track span { display: block; height: 1em; line-height: 1; white-space: nowrap; }

/* =========================================================
   04 What is WorkspaceMatter — annotated architectural plate
   ========================================================= */
.about {
  --values-h: clamp(150px, 20vh, 196px);
  position: relative;
  display: grid;
  grid-template-rows: 1fr var(--values-h);
  min-height: max(760px, 100vh);
  min-height: max(760px, 100dvh);
  overflow: hidden;
  isolation: isolate;
}

/* construction lines */
.about__guides { position: absolute; inset: 0; z-index: 1; pointer-events: none; }
.about__guides i {
  position: absolute; top: 0; bottom: 0; left: var(--x);
  width: 0;
  border-left: 1px dashed rgba(17, 23, 20, 0.1);
  transform: scaleY(0);
  transform-origin: 50% 0;
  transition: transform 1.8s var(--ease);
}
.about.is-in .about__guides i { transform: none; }
.about.is-in .about__guides i:nth-child(2) { transition-delay: .15s; }
.about.is-in .about__guides i:nth-child(3) { transition-delay: .3s; }

/* the plate: image fades into the page on every open edge (mask = colour-independent blend) */
.about__visual {
  position: absolute;
  top: 0; right: 0;
  bottom: calc(var(--values-h) - 40px);
  width: 66%;
  margin: 0;
  z-index: 0;
}
.about__media {
  position: absolute; inset: -30px 0;
  will-change: transform;
  -webkit-mask-image:
    linear-gradient(90deg, transparent 0%, rgba(0,0,0,.35) 10%, rgba(0,0,0,.8) 20%, #000 30%),
    linear-gradient(180deg, transparent 0%, #000 14%, #000 80%, transparent 100%);
  -webkit-mask-composite: source-in;
          mask-image:
    linear-gradient(90deg, transparent 0%, rgba(0,0,0,.35) 10%, rgba(0,0,0,.8) 20%, #000 30%),
    linear-gradient(180deg, transparent 0%, #000 14%, #000 80%, transparent 100%);
          mask-composite: intersect;
}
.about__media img {
  width: 100%; height: 100%;
  object-fit: cover;
  object-position: 58% 55%;
  opacity: 0;
  transform: scale(1.06);
  transition: opacity 1.4s var(--ease), transform 2.4s var(--ease);
}
.about__visual.is-in .about__media img { opacity: 1; transform: none; }
/* the plate uses its own entrance, so ignore the generic reveal offset */
.about__visual[data-reveal] { opacity: 1; transform: none; }

/* callouts: square marker + drawn leader line + label */
.about__callouts { list-style: none; position: absolute; inset: 0; z-index: 2; }
.callout {
  position: absolute;
  left: var(--x); top: var(--y);
  padding: 0 0 18px 16px;
  max-width: 172px;
}
.callout::before {
  content: "";
  position: absolute; left: 0; top: 4px; bottom: 0;
  width: 1px;
  background: rgba(17, 23, 20, 0.45);
  transform: scaleY(0);
  transform-origin: 50% 0;
  transition: transform 1s var(--ease), background .3s var(--ease);
  transition-delay: calc(var(--i) * 160ms + 600ms);
}
.callout__mark {
  position: absolute; left: -4px; top: 0;
  width: 9px; height: 9px;
  border: 1.5px solid var(--ink);
  background: var(--bg);
  transform: scale(0);
  transition: transform .5s var(--ease), background .3s var(--ease), border-color .3s var(--ease);
  transition-delay: calc(var(--i) * 160ms + 500ms);
}
.callout > .mono,
.callout h3,
.callout p {
  opacity: 0;
  transform: translateY(8px);
  transition: opacity .8s var(--ease), transform .8s var(--ease), color .3s var(--ease);
  transition-delay: calc(var(--i) * 160ms + 800ms);
}
.callout > .mono { display: block; font-size: 12px; letter-spacing: 0.1em; color: var(--ink); margin-top: -3px; }
.callout h3 {
  margin-top: 12px;
  font-size: 10.5px;
  font-weight: 600;
  line-height: 1.35;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--ink);
}
.callout p { margin-top: 10px; font-size: 11.5px; line-height: 1.45; color: var(--muted); max-width: 20ch; }

.about__visual.is-in .callout::before,
.about__visual.is-in .callout__mark,
.about__visual.is-in .callout > .mono,
.about__visual.is-in .callout h3,
.about__visual.is-in .callout p { transform: none; opacity: 1; }

.callout:hover::before { background: var(--em-600); }
.callout:hover .callout__mark { background: var(--em-700); border-color: var(--em-700); }
.callout:hover h3, .callout:hover > .mono { color: var(--em-700); }

/* copy column */
.about__copy {
  position: relative;
  z-index: 2;
  align-self: center;
  width: min(560px, 40%);
  margin-left: clamp(24px, 5.5vw, 96px);
  padding: 72px 0 40px;
}
.about__eyebrow {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 10.5px;
  letter-spacing: 0.24em;
  color: var(--ink-2);
}
.about__eyebrow .rule { width: 26px; height: 1px; background: currentColor; opacity: .55; }
.about__eyebrow .rule--long { width: 64px; }
.about__title {
  margin-top: clamp(36px, 6vh, 64px);
  font-weight: 300;
  font-size: clamp(44px, 5vw, 92px);
  line-height: 1.02;
  letter-spacing: -0.045em;
  color: var(--ink);
}
.about__title em { font-style: normal; font-weight: 400; color: var(--em-700); }
.about__divider {
  display: block;
  width: 42%;
  height: 1px;
  margin: 26px 0 0 auto;
  background: linear-gradient(90deg, rgba(17, 23, 20, 0), rgba(17, 23, 20, 0.35));
}
.about__lead {
  margin-top: 26px;
  max-width: 40ch;
  font-size: clamp(16px, 1.2vw, 19px);
  line-height: 1.6;
  color: var(--ink-2);
}
.about__cta {
  display: inline-flex;
  align-items: center;
  gap: 16px;
  margin-top: 40px;
  color: var(--ink);
}
.about__cta .mono { font-size: 11px; letter-spacing: 0.24em; }
.about__cta-icon {
  position: relative;
  display: grid; place-items: center;
  width: 44px; height: 44px;
  border-radius: 50%;
  border: 1px solid rgba(17, 23, 20, 0.5);
  overflow: hidden;
  transition: border-color .4s var(--ease), color .4s var(--ease);
}
.about__cta-icon::before {
  content: "";
  position: absolute; inset: 0;
  border-radius: 50%;
  background: var(--em-800);
  transform: scale(0);
  transition: transform .5s var(--ease);
}
.about__cta-icon svg { position: relative; width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.4; }
.about__cta:hover .about__cta-icon { color: var(--surface); border-color: var(--em-800); }
.about__cta:hover .about__cta-icon::before { transform: scale(1); }
.about__cta:hover .mono { color: var(--em-700); }

/* values strip */
.about__values {
  position: relative;
  z-index: 2;
  list-style: none;
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr)) minmax(0, 1.3fr);
  border-top: 1px solid rgba(17, 23, 20, 0.14);
  padding: 0 clamp(24px, 5.5vw, 96px);
  background: linear-gradient(180deg, rgba(230, 232, 231, 0.4), var(--bg) 60%);
}
.about__values[data-reveal] { opacity: 1; transform: none; }
.about__values > li:not(.about__next) {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 10px;
  padding: 24px clamp(16px, 2.4vw, 40px);
  border-left: 1px solid rgba(17, 23, 20, 0.12);
  opacity: 0;
  transform: translateY(12px);
  transition: opacity .8s var(--ease), transform .8s var(--ease), background .4s var(--ease);
}
.about__values > li:nth-child(1) { transition-delay: .1s; }
.about__values > li:nth-child(2) { transition-delay: .2s; }
.about__values > li:nth-child(3) { transition-delay: .3s; }
.about__values > li:nth-child(4) { transition-delay: .4s; }
.about__values.is-in > li { opacity: 1; transform: none; }
.about__values > li:not(.about__next):hover { background: linear-gradient(135deg, rgba(255, 255, 255, 0.25) 0%, rgba(246, 247, 246, 0.08) 100%); }

.about__values svg {
  width: 34px; height: 34px;
  fill: none; stroke: var(--ink); stroke-width: 1.2; stroke-linecap: round; stroke-linejoin: round;
  transition: stroke .4s var(--ease);
}
.about__values svg :is(path, circle) {
  stroke-dasharray: 1;
  stroke-dashoffset: 1;
  transition: stroke-dashoffset 1.6s var(--ease);
}
.about__values.is-in svg :is(path, circle) { stroke-dashoffset: 0; transition-delay: .5s; }
.about__values > li:hover svg { stroke: var(--em-700); }
.about__values h3 {
  margin-top: 4px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
}
.about__values p { font-size: 13px; line-height: 1.45; color: var(--muted); max-width: 20ch; }

.about__next {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  opacity: 0;
  transition: opacity .8s var(--ease) .55s;
}
.about__values.is-in .about__next { opacity: 1; transform: none; }
.about__next a {
  display: inline-flex;
  align-items: center;
  gap: 20px;
  font-size: 13px;
  font-weight: 500;
  line-height: 1.5;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink);
}
.about__next .rule { width: clamp(40px, 7vw, 140px); height: 1px; background: rgba(17, 23, 20, 0.4); transition: width .5s var(--ease), background .4s var(--ease); }
.about__next svg { width: 26px; height: 26px; fill: none; stroke: currentColor; stroke-width: 1.2; transition: transform .4s var(--ease); }
.about__next a:hover { color: var(--em-700); }
.about__next a:hover .rule { background: var(--em-600); width: clamp(56px, 9vw, 170px); }
.about__next a:hover svg { transform: translateX(4px); }

/* =========================================================
   05 Our approach — editorial band + four image cards
   ========================================================= */
.method { margin-top: clamp(40px, 4vh, 120px); }

.method__top {
  --top-pad: clamp(29px, 2vh, 60px);
  display: grid;
  grid-template-columns: minmax(0, 52fr) minmax(0, 48fr);
  min-height: clamp(380px, 44vh, 540px);
}
.method__intro {
  display: flex;
  flex-direction: column;
  padding: var(--top-pad) clamp(24px, 4vw, 64px) clamp(36px, 5vh, 56px) clamp(24px, 5.5vw, 96px);
}
.method__eyebrow {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 10.5px;
  letter-spacing: 0.24em;
  color: var(--ink-2);
}
.method__eyebrow .rule { width: 26px; height: 1px; background: currentColor; opacity: .55; }
.method__eyebrow .rule--long { width: 64px; }

.method__split {
  flex: 1;
  display: grid;
  grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr);
  gap: clamp(28px, 3.5vw, 56px);
  align-items: center;
  margin-top: clamp(24px, 4vh, 44px);
}
.method__title {
  font-weight: 300;
  font-size: clamp(38px, 3.8vw, 70px);
  line-height: 1.02;
  letter-spacing: -0.045em;
  color: var(--ink);
}
.method__title em { font-style: normal; font-weight: 400; color: var(--em-700); }
.method__aside {
  align-self: stretch;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 32px;
  padding: 8px 0 8px clamp(22px, 2.6vw, 40px);
  border-left: 1px solid rgba(17, 23, 20, 0.16);
}
.method__aside p { font-size: 15px; line-height: 1.6; color: var(--muted); max-width: 32ch; }

.method__cta { display: inline-flex; align-items: center; gap: 14px; color: var(--ink); }
.method__cta .mono { font-size: 10.5px; letter-spacing: 0.22em; }
.method__cta-icon {
  position: relative;
  display: grid; place-items: center;
  width: 38px; height: 38px;
  border-radius: 50%;
  border: 1px solid rgba(17, 23, 20, 0.5);
  overflow: hidden;
  transition: border-color .4s var(--ease), color .4s var(--ease);
}
.method__cta-icon::before {
  content: ""; position: absolute; inset: 0; border-radius: 50%;
  background: var(--em-800); transform: scale(0); transition: transform .5s var(--ease);
}
.method__cta-icon svg { position: relative; width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.4; }
.method__cta:hover .method__cta-icon { color: var(--surface); border-color: var(--em-800); }
.method__cta:hover .method__cta-icon::before { transform: scale(1); }
.method__cta:hover .mono { color: var(--em-700); }

/* architectural view (top right) */
.method__view {
  position: relative;
  /* top edge lines up with the "05 — Our approach" rule (padding + half the eyebrow line) */
  margin: calc(var(--top-pad) + 8px) 0 0;
  min-height: 320px;
  overflow: hidden;
  background: radial-gradient(circle at 50% 50%, rgba(26, 107, 83, 0.25) 0%, rgba(6, 41, 31, 0.95) 100%), #06291F;
  border-radius: var(--radius);
  isolation: isolate;
}
.method__view > img {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  filter: saturate(0.85);
  opacity: 0;
  z-index: 0;
  transition: opacity 0s linear .9s; /* outgoing image stays until covered */
}
.method__view > img.is-active {
  opacity: 1;
  z-index: 1;
  transition: opacity .9s var(--ease);
  animation: method-zoom 5s var(--ease) both;
}
@keyframes method-zoom { from { transform: scale(1.05); } to { transform: scale(1); } }
.method__chip {
  position: absolute; z-index: 2;
  left: 24px; bottom: 24px;
  display: inline-flex;
  align-items: baseline;
  gap: 12px;
  padding: 10px 16px;
  border-radius: 999px;
  color: var(--surface);
  font-size: 13px;
  background: linear-gradient(135deg, rgba(6, 41, 31, 0.65) 0%, rgba(15, 81, 64, 0.4) 100%);
  border: 1px solid rgba(255, 255, 255, 0.22);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 8px 24px -10px rgba(0, 0, 0, 0.35);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}
.method__chip .mono { color: var(--em-200); }
.method__chip b { font-weight: 500; color: var(--surface); }
#methodSheet { transition: opacity .3s var(--ease), transform .3s var(--ease); }
#methodSheet.is-out { opacity: 0; transform: translateY(4px); }

/* ---- four image cards ---- */
.method__cards {
  display: flex;
  height: clamp(400px, 60vh, 460px);
  background: var(--em-900);
}
.mcard {
  --pad: clamp(24px, 2.8vw, 46px);
  position: relative;
  flex: 1 1 0;
  min-width: 0;
  padding: var(--pad);
  overflow: hidden;
  color: var(--surface);
  isolation: isolate;
  transition: flex-grow .8s var(--ease);
}
.mcard + .mcard { border-left: 1px solid rgba(255, 255, 255, 0.14); }
.mcard__img {
  position: absolute; inset: 0; z-index: -3;
  width: 100%; height: 100%;
  object-fit: cover;
  transform: scale(1.02);
  transition: transform 1.6s var(--ease), filter .8s var(--ease);
}
/* warm legibility shade (top for the copy, bottom for depth) */
.mcard::before {
  content: ""; position: absolute; inset: 0; z-index: -2;
  background: linear-gradient(180deg, rgba(26, 22, 18, 0.66) 0%, rgba(26, 22, 18, 0.34) 40%, rgba(26, 22, 18, 0.12) 68%, rgba(26, 22, 18, 0.38) 100%);
}
/* emerald drafting tint that takes over when the card is active */
.mcard::after {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background:
    linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px) 0 0 / 36px 36px,
    linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px) 0 0 / 36px 36px,
    linear-gradient(180deg, rgba(6, 41, 31, 0.82) 0%, rgba(6, 41, 31, 0.6) 55%, rgba(6, 41, 31, 0.85) 100%);
  opacity: 0;
  transition: opacity .7s var(--ease);
}

.mcard__h { font: inherit; }
.mcard__head { display: block; width: 100%; color: inherit; }
.mcard__num { display: flex; align-items: center; gap: 10px; font-size: 10.5px; opacity: .85; }
.mcard__num i { width: 22px; height: 1px; background: currentColor; opacity: .7; transition: width .6s var(--ease); }
.mcard__title {
  display: block;
  margin-top: clamp(22px, 3vh, 34px);
  font-weight: 400;
  font-size: clamp(16px, 1.35vw, 22px);
  line-height: 1.25;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.mcard__short {
  margin-top: 16px;
  max-width: 30ch;
  font-size: 13.5px;
  line-height: 1.6;
  color: rgba(246, 247, 246, 0.82);
}

/* supporting detail expands on activation */
.mcard__more { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .6s var(--ease); }
.mcard__inner { overflow: hidden; min-height: 0; }
.mcard__tags {
  list-style: none;
  display: flex; flex-wrap: wrap; gap: 8px;
  padding-top: 18px;
  opacity: 0; transform: translateY(8px);
  transition: opacity .4s var(--ease), transform .5s var(--ease);
}
.mcard__tags li {
  padding: 6px 12px;
  border-radius: 999px;
  font-size: 11.5px;
  color: var(--surface);
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.06) 100%);
  border: 1px solid rgba(255, 255, 255, 0.25);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}
.mcard__arrow {
  display: block;
  width: 22px; height: 22px;
  margin-top: 22px;
  fill: none; stroke: currentColor; stroke-width: 1.3; stroke-linecap: round; stroke-linejoin: round;
  transition: transform .5s var(--ease);
}

/* blueprint draws across the lower part of the active card */
.mcard .bp {
  position: absolute;
  left: 0; right: 0; bottom: 0; top: auto;
  width: 100%; height: 60%;
  z-index: 0;
}

/* active: hover (desktop), focus or tap */
.mcard.is-active { flex-grow: 1.5; }
.mcard.is-active::after { opacity: 1; }
.mcard.is-active .mcard__img { transform: scale(1.08); filter: saturate(0.7); }
.mcard.is-active .mcard__num i { width: 34px; }
.mcard.is-active .mcard__more { grid-template-rows: 1fr; }
.mcard.is-active .mcard__tags { opacity: 1; transform: none; transition-delay: .25s; }
.mcard.is-active .mcard__arrow { transform: translate(4px, -4px); }
.mcard__head:focus-visible { outline-offset: 6px; }

/* ---- blueprint linework (shared) ---- */
.bp { opacity: 0; transition: opacity .35s var(--ease); pointer-events: none; }
.mcard.is-active .bp { opacity: 1; }
.bp :is(path, rect, circle, polyline) {
  fill: none;
  stroke: rgba(236, 246, 241, 0.85);
  stroke-width: 1.3;
  stroke-linecap: round;
  stroke-linejoin: round;
  vector-effect: non-scaling-stroke;
  stroke-dasharray: 1;
  stroke-dashoffset: 1;
}
.mcard.is-active .bp :is(path, rect, circle, polyline) {
  stroke-dashoffset: 0;
  transition: stroke-dashoffset 1.5s var(--ease);
  transition-delay: calc(var(--d, 0) * 110ms + 250ms);
}
.bp .bp__dim { stroke: rgba(191, 221, 208, 0.7); stroke-width: 1; }
.bp .bp__grid { stroke: rgba(236, 246, 241, 0.2); stroke-width: 1; }
.bp .bp__zone { stroke: rgba(191, 221, 208, 0.85); fill: rgba(191, 221, 208, 0.06); }
.bp .bp__flow { stroke: var(--em-200); stroke-width: 1.6; }
.bp .bp__trend { stroke: var(--em-200); stroke-width: 2; }
.bp .bp__dot { fill: var(--em-200); stroke: none; }
.bp .bp__thin { stroke: rgba(236, 246, 241, 0.6); stroke-width: 0.9; }
/* layers that fade in rather than draw: wall hatching, heat zones, dots, structural grid */
.bp :is(.bp__fill, .bp__heat) { fill: var(--fill); stroke: none; stroke-dasharray: none; opacity: 0; transition: opacity 1s var(--ease); }
.bp .bp__dot { stroke-dasharray: none; opacity: 0; transition: opacity .6s var(--ease); }
.bp .bp__axis {
  stroke: rgba(191, 221, 208, 0.35);
  stroke-width: 0.8;
  stroke-dasharray: 6 4 1 4;   /* centre-line style, faded in */
  stroke-dashoffset: 0;
  opacity: 0;
  transition: opacity 1s var(--ease);
}
.mcard.is-active .bp .bp__axis { opacity: 1; transition-delay: .15s; }
.mcard.is-active .bp .bp__fill { opacity: .9; transition-delay: .7s; }
.mcard.is-active .bp .bp__heat { opacity: 1; transition-delay: .9s; }
.mcard.is-active .bp .bp__dot { opacity: 1; transition-delay: 1.1s; }
.bp text {
  font-family: var(--mono);
  font-size: 8.5px;
  letter-spacing: 0.12em;
  fill: rgba(236, 246, 241, 0.88);
  opacity: 0;
}
.mcard.is-active .bp text { opacity: 1; transition: opacity .8s var(--ease); transition-delay: calc(var(--d, 0) * 110ms + 450ms); }
.method__dots { display: none; }
/* copy always sits above the drawing */
.mcard > :is(.mcard__h, .mcard__short, .mcard__more, .mcard__arrow) { position: relative; z-index: 1; }

/* =========================================================
   06 Strategic services — image strip (from components/approach-strip.html)
   ========================================================= */
.services {
  max-width: 1600px;
  margin: 0 auto;
  padding: clamp(60px, 4vh, 125px) var(--gutter) var(--gutter);
}
.services__head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(260px, 400px);
  gap: 28px 64px;
  align-items: end;
  margin-bottom: clamp(36px, 5vh, 56px);
}
.services__eyebrow {
  grid-column: 1 / -1;
  display: flex; align-items: center; gap: 12px;
  font-size: 10.5px; letter-spacing: 0.24em; color: var(--ink-2);
}
.services__eyebrow .rule { width: 26px; height: 1px; background: currentColor; opacity: .55; }
.services__eyebrow .rule--long { width: 64px; }
.services__title { font-weight: 300; font-size: clamp(36px, 4.4vw, 76px); line-height: 1; letter-spacing: -0.045em; }
.services__title em { font-style: normal; font-weight: 400; color: var(--em-700); }
.services__lead { color: var(--muted); max-width: 40ch; font-size: 15px; line-height: 1.6; }

.strip { display: flex; gap: 10px; height: clamp(480px, 74vh, 760px); }
.panel {
  --dur: 6000ms;
  position: relative;
  flex: 1 1 0;
  min-width: 0;
  overflow: hidden;
  border-radius: var(--radius);
  background: var(--em-800);
  color: var(--surface);
  transition: flex-grow .9s var(--ease);
  isolation: isolate;
}
.panel.is-active { flex-grow: 4.6; }
.panel img {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  z-index: -2;
  filter: grayscale(1) contrast(1.05);
  transform: scale(1.08);
  transition: filter .9s var(--ease), transform 1.6s var(--ease);
}
.panel.is-active img { filter: grayscale(0.15) saturate(0.85); transform: scale(1); }
/* emerald duotone on resting panels, soft shade on the active one */
.panel::before {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background: var(--em-800); mix-blend-mode: multiply; opacity: .78;
  transition: opacity .9s var(--ease);
}
.panel::after {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(180deg, rgba(6, 41, 31, 0) 40%, rgba(6, 41, 31, 0.78) 100%);
}
.panel.is-active::before { opacity: 0; }
.panel:not(.is-active):hover::before { opacity: .6; }
.panel__index { position: absolute; top: 20px; left: 22px; opacity: .8; }
/* resting panels: title reads vertically, bottom to top */
.panel__label {
  position: absolute; left: 20px; bottom: 26px;
  writing-mode: vertical-rl;
  transform: rotate(180deg);
  font-size: 19px; letter-spacing: -0.01em; white-space: nowrap;
  transition: opacity .5s var(--ease) .3s;
}
.panel.is-active .panel__label { opacity: 0; transition: opacity .2s var(--ease); }
.panel__body {
  position: absolute; left: 32px; right: 32px; bottom: 32px;
  display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);
  gap: 16px 48px; align-items: end;
  opacity: 0; transform: translateY(12px);
  transition: opacity .5s var(--ease), transform .7s var(--ease);
  pointer-events: none;
}
.panel.is-active .panel__body { opacity: 1; transform: none; transition-delay: .35s; }
.panel__title { font-size: clamp(26px, 2.4vw, 42px); line-height: 1.05; letter-spacing: -0.035em; font-weight: 300; }
.panel__copy { display: grid; gap: 16px; }
.panel__text { font-size: 14.5px; line-height: 1.55; color: rgba(246, 247, 246, 0.82); max-width: 40ch; }
.panel__tags { display: flex; flex-wrap: wrap; gap: 8px; }
.panel__tags span {
  padding: 5px 11px;
  border-radius: 999px;
  font-size: 11.5px;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.05) 100%);
  border: 1px solid rgba(255, 255, 255, 0.25);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}
.panel__progress {
  position: absolute; left: 22px; right: 22px; top: 46px;
  height: 1px; background: rgba(246, 247, 246, 0.2);
  opacity: 0; transition: opacity .4s var(--ease);
}
.panel__progress i { display: block; height: 100%; background: var(--em-200); transform: scaleX(0); transform-origin: 0 50%; }
.panel.is-active .panel__progress { opacity: 1; }
.panel.is-running .panel__progress i { animation: progress var(--dur) linear forwards; }
.strip.is-paused .panel__progress i { animation-play-state: paused; }

/* =========================================================
   07 Workspace ecosystem — pinned scroll around the model
   ========================================================= */
.ecosys {
  position: relative;
  height: 520vh;                      /* scroll track: 6 stages (5 layers + the full ecosystem) */
  margin-top: clamp(40px, 4vh, 120px);
}
.ecosys__sticky {
  position: sticky;
  top: 0;
  height: 100vh;
  height: 100dvh;
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto;
  padding-top: 78px;                  /* clears the fixed nav */
  overflow: hidden;
}

.ecosys__top {
  display: grid;
  grid-template-columns: minmax(300px, 30%) minmax(0, 1fr);
  gap: clamp(16px, 2vw, 32px);
  min-height: 0;
  padding: clamp(12px, 2.5vh, 28px) var(--gutter) 0 clamp(24px, 5.5vw, 96px);
}
.ecosys__intro { align-self: center; min-width: 0; }
.ecosys__eyebrow {
  display: flex; align-items: center; gap: 12px;
  font-size: 10.5px; letter-spacing: 0.24em; color: var(--ink-2);
}
.ecosys__eyebrow .rule { width: 26px; height: 1px; background: currentColor; opacity: .55; }
.ecosys__eyebrow .rule--long { width: 64px; }
.ecosys__kicker { margin-top: clamp(20px, 4vh, 40px); font-size: 10.5px; letter-spacing: 0.22em; color: var(--muted); }
.ecosys__title {
  margin-top: 14px;
  font-weight: 300;
  font-size: clamp(38px, 4.2vw, 76px);
  line-height: 1.02;
  letter-spacing: -0.045em;
}
.ecosys__title em { font-style: normal; font-weight: 400; color: var(--em-700); }
.ecosys__lead { margin-top: clamp(16px, 2.5vh, 26px); max-width: 38ch; font-size: clamp(14.5px, 1.05vw, 16.5px); line-height: 1.6; color: var(--ink-2); }
.ecosys__cta { display: inline-flex; align-items: center; gap: 14px; margin-top: clamp(20px, 3.5vh, 36px); color: var(--ink); }
.ecosys__cta .mono { font-size: 10.5px; letter-spacing: 0.22em; }
.ecosys__cta-icon {
  position: relative;
  display: grid; place-items: center;
  width: 42px; height: 42px;
  border-radius: 50%;
  border: 1px solid rgba(17, 23, 20, 0.5);
  overflow: hidden;
  transition: border-color .4s var(--ease), color .4s var(--ease);
}
.ecosys__cta-icon::before { content: ""; position: absolute; inset: 0; border-radius: 50%; background: var(--em-800); transform: scale(0); transition: transform .5s var(--ease); }
.ecosys__cta-icon svg { position: relative; width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.4; }
.ecosys__cta:hover .ecosys__cta-icon { color: var(--surface); border-color: var(--em-800); }
.ecosys__cta:hover .ecosys__cta-icon::before { transform: scale(1); }

/* the plate keeps the image's exact 2:1 ratio inside whatever space is left (container units) */
.ecosys__stage {
  position: relative;
  min-height: 0;
  container-type: size;
  display: grid;
  place-items: center;
}
.ecosys__plate {
  position: relative;
  width: min(100cqw, calc(100cqh * 2));
  aspect-ratio: 1774 / 887;
  overflow: hidden;   /* the camera zoom stays inside the plate */
}
/* soft edges so the model sits in the page: a mask on the photo only,
   so the callouts (which live above it) are never faded */
.ecosys__plate::before { content: none; }
.ecosys__camera {
  position: absolute; inset: 0;
  transform-origin: 50% 50%;
  transition: transform 1.3s var(--ease);
  will-change: transform;
}
.ecosys__camera img {
  width: 100%; height: 100%; display: block;
  -webkit-mask-image:
    linear-gradient(90deg, transparent 0%, #000 12%, #000 90%, transparent 100%),
    linear-gradient(180deg, transparent 0%, #000 14%, #000 84%, transparent 100%);
  -webkit-mask-composite: source-in;
          mask-image:
    linear-gradient(90deg, transparent 0%, #000 12%, #000 90%, transparent 100%),
    linear-gradient(180deg, transparent 0%, #000 14%, #000 84%, transparent 100%);
          mask-composite: intersect;
}

/* callouts: dot on the model, vertical leader, label */
.hs {
  position: absolute;
  left: var(--x); top: var(--y);
  z-index: 2;
  width: 0; height: 0;
  opacity: .38;
  transition: opacity .6s var(--ease);
}
.hs__dot {
  position: absolute; left: -5px; top: -5px;
  width: 10px; height: 10px;
  border-radius: 50%;
  background: var(--ink);
  box-shadow: 0 0 0 3px rgba(246, 247, 246, 0.8);
  transition: background .4s var(--ease), transform .4s var(--ease);
}
.hs__dot::after {
  content: "";
  position: absolute; inset: -9px;
  border-radius: 50%;
  border: 1px solid var(--em-500);
  opacity: 0;
}
.hs__line {
  position: absolute; left: -0.5px; bottom: 0;
  width: 1px; height: var(--lh);
  background: rgba(17, 23, 20, 0.55);
  transform-origin: 50% 100%;
  transform: scaleY(.35);
  transition: transform .8s var(--ease), background .4s var(--ease);
}
.hs__label {
  position: absolute;
  left: 12px; bottom: calc(var(--lh) - 12px);
  width: max-content;
  max-width: 190px;
  padding: 9px 12px 10px;
  border-radius: 12px;
  font-size: 12px;
  line-height: 1.45;
  color: var(--ink-2);
  /* frosted plate keeps the label legible over bright parts of the model */
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.3) 0%, rgba(246, 247, 246, 0.12) 100%);
  border: 1px solid rgba(255, 255, 255, 0.35);
  box-shadow: 0 12px 28px -16px rgba(17, 23, 20, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.3);
  backdrop-filter: blur(14px) saturate(1.2);
  -webkit-backdrop-filter: blur(14px) saturate(1.2);
  opacity: 0;
  transform: translateY(6px);
  transition: opacity .5s var(--ease), transform .6s var(--ease);
}
.hs__label b {
  display: block;
  margin-bottom: 4px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--ink);
}
/* callouts that hang below their dot */
.hs[data-dir="down"] .hs__line { bottom: auto; top: 0; transform-origin: 50% 0; }
.hs[data-dir="down"] .hs__label { bottom: auto; top: calc(var(--lh) - 14px); }
/* callouts near the right edge put their label on the left of the leader */
.hs[data-side="left"] .hs__label { left: auto; right: 12px; text-align: right; }

.hs.is-on { opacity: 1; }
.hs.is-on .hs__line { transform: none; background: var(--em-700); }
.hs.is-on .hs__label { opacity: 1; transform: none; transition-delay: .25s; }
.hs.is-on .hs__dot { background: var(--em-700); transform: scale(1.15); }
.hs.is-on .hs__dot::after { animation: pulse 2.2s var(--ease) infinite; }
/* on the final stage every callout shows, calmly */
.ecosys.is-complete .hs { opacity: 1; }
.ecosys.is-complete .hs .hs__line { transform: none; }
.ecosys.is-complete .hs .hs__label { opacity: 1; transform: none; }

.ecosys__badge {
  position: absolute;
  left: 50%; bottom: 6%;
  z-index: 3;
  display: inline-flex;
  align-items: center;
  gap: 14px;
  padding: 12px 22px 12px 14px;
  border-radius: 999px;
  color: var(--surface);
  background: linear-gradient(135deg, rgba(11, 61, 46, 0.5) 0%, rgba(6, 41, 31, 0.3) 100%);
  border: 1px solid rgba(255, 255, 255, 0.22);
  box-shadow: 0 24px 50px -24px rgba(6, 41, 31, 0.7), inset 0 1px 0 rgba(255, 255, 255, 0.15);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(10px);
  opacity: 0;
  transform: translate(-50%, 12px);
  transition: opacity .7s var(--ease), transform .7s var(--ease);
}
.ecosys__badge-mark {
  width: 30px; height: 30px;
  border-radius: 50%;
  background: radial-gradient(circle at 35% 30%, var(--em-200), var(--em-600) 60%, var(--em-800));
  box-shadow: 0 0 0 4px rgba(191, 221, 208, 0.18);
}
.ecosys__badge .mono { display: block; font-size: 9px; color: var(--em-200); }
.ecosys__badge b { display: block; font-weight: 400; font-size: 16px; letter-spacing: -0.01em; }
.ecosys.is-complete .ecosys__badge { opacity: 1; transform: translate(-50%, 0); }

/* ---- bottom strip ---- */
.ecosys__strip {
  list-style: none;
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  border-top: 1px solid rgba(17, 23, 20, 0.14);
  padding: 0 var(--gutter) clamp(14px, 2.4vh, 26px) clamp(24px, 5.5vw, 96px);
}
/* section progress: fills along the strip's top rule as the pinned scroll plays */
.ecosys__strip { position: relative; }
.ecosys__strip::before,
.ecosys__strip::after {
  content: "";
  position: absolute;
  top: -1.5px;
  height: 2px;
  pointer-events: none;
}
.ecosys__strip::before {
  left: 0; right: 0;
  background: linear-gradient(90deg, var(--em-300), var(--em-700));
  transform: scaleX(var(--p, 0));
  transform-origin: 0 50%;
  transition: transform .15s linear;
}
/* glowing tip riding the end of the fill */
.ecosys__strip::after {
  left: calc(var(--p, 0) * 100% - 4px);
  top: -4.5px;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--em-700);
  box-shadow: 0 0 0 4px rgba(46, 138, 107, 0.18), 0 0 12px rgba(46, 138, 107, 0.6);
  opacity: var(--p-on, 0);
  transition: left .15s linear, opacity .3s var(--ease);
}
.ecosys__strip li + li { border-left: 1px solid rgba(17, 23, 20, 0.12); }
.ecosys__strip button {
  display: grid;
  gap: 6px;
  width: 100%;
  height: 100%;
  padding: clamp(12px, 2vh, 20px) clamp(10px, 1.4vw, 22px) 0;
  text-align: left;
  opacity: .5;
  transition: opacity .5s var(--ease);
}
.ecosys__strip button:hover { opacity: .8; }
.ecosys__num { display: flex; align-items: center; gap: 12px; font-size: 10px; color: var(--muted); }
.ecosys__num i { position: relative; width: 34px; height: 1px; background: rgba(17, 23, 20, 0.2); overflow: hidden; }
.ecosys__num i b { position: absolute; inset: 0; background: var(--em-700); transform: scaleX(0); transform-origin: 0 50%; }
.ecosys__name { margin-top: 4px; font-size: 11.5px; font-weight: 600; letter-spacing: 0.2em; text-transform: uppercase; color: var(--ink); }
.ecosys__desc { font-size: 12.5px; line-height: 1.45; color: var(--muted); max-width: 26ch; }
/* thumbnails are crops of the same model image, so the strip reads as one set */
.ecosys__thumb {
  display: block;
  margin-top: 8px;
  height: clamp(64px, 14vh, 150px);
  border-radius: 6px;
  background: url("../img/eco.webp") no-repeat;
  background-size: 360% auto;
  background-position: var(--bx) var(--by);
  filter: saturate(0.6);
  transition: filter .6s var(--ease), box-shadow .6s var(--ease);
}
.ecosys__strip li.is-on button,
.ecosys__strip li.is-done button { opacity: 1; }
.ecosys__strip li.is-on .ecosys__num { color: var(--em-600); }
.ecosys__strip li.is-on .ecosys__thumb { filter: none; box-shadow: 0 16px 30px -18px rgba(17, 23, 20, 0.5); }
.ecosys__strip li.is-done .ecosys__num i b { transform: scaleX(1); }
.ecosys__strip li.is-on .ecosys__num i b { transform: scaleX(var(--fill, 0)); }
.ecosys.is-complete .ecosys__strip button { opacity: 1; }
.ecosys.is-complete .ecosys__thumb { filter: none; }

/* =========================================================
   08 Innovation initiatives — sticky stacking cards
   ========================================================= */
.inno {
  position: relative;
  max-width: 1600px;
  margin: 0 auto;
  padding: clamp(60px, 4vh, 120px) var(--gutter) clamp(32px, 4vh, 100px);
  isolation: isolate;
}
/* soft emerald / mint blooms behind the stack give the frosted glass something to blur */
.inno::before {
  content: "";
  position: absolute; inset: 18% 0 0; z-index: -1;
  pointer-events: none;
  background:
    radial-gradient(30% 22% at 18% 20%, rgba(46, 138, 107, 0.32), transparent 70%),
    radial-gradient(28% 20% at 82% 42%, rgba(142, 195, 174, 0.45), transparent 70%),
    radial-gradient(32% 22% at 30% 70%, rgba(191, 221, 208, 0.55), transparent 70%),
    radial-gradient(26% 18% at 78% 88%, rgba(46, 138, 107, 0.25), transparent 70%);
  filter: blur(20px);
}
.inno__head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(260px, 400px);
  gap: 28px 64px;
  align-items: end;
  margin-bottom: clamp(36px, 6vh, 64px);
}
.inno__eyebrow {
  grid-column: 1 / -1;
  display: flex; align-items: center; gap: 12px;
  font-size: 10.5px; letter-spacing: 0.24em; color: var(--ink-2);
}
.inno__eyebrow .rule { width: 26px; height: 1px; background: currentColor; opacity: .55; }
.inno__eyebrow .rule--long { width: 64px; }
.inno__title { font-weight: 300; font-size: clamp(38px, 4.6vw, 80px); line-height: 1; letter-spacing: -0.045em; }
.inno__title em { font-style: normal; font-weight: 400; color: var(--em-700); }
.inno__lead { color: var(--muted); max-width: 40ch; font-size: 15px; line-height: 1.6; }

/* each card pins a little lower than the one before, so the stack shows its edges */
.inno__stack { display: grid; gap: clamp(28px, 6vh, 64px); }
.inno__card {
  --top: calc(96px + var(--i) * 22px);
  position: sticky;
  top: var(--top);
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  min-height: min(calc(100vh - var(--top) - 32px), 640px);
  border-radius: 28px;
  overflow: hidden;
  /* glassmorphism: translucent frosted gradient (max 0.3 white) */
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.3) 0%, rgba(246, 247, 246, 0.12) 100%);
  border: 1px solid rgba(255, 255, 255, 0.35);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.3),
    inset 0 0 0 1px rgba(255, 255, 255, 0.15),
    0 -20px 50px -30px rgba(17, 23, 20, 0.18),
    0 30px 60px -40px rgba(17, 23, 20, 0.25);
  backdrop-filter: blur(22px) saturate(1.35);
  -webkit-backdrop-filter: blur(22px) saturate(1.35);
  transform-origin: 50% 0;
  /* --cover (0..1) is set by index.js as the next card slides over this one */
  transform: scale(calc(1 - var(--cover, 0) * 0.06));
  will-change: transform;
}
/* dims as it is covered (an overlay is far cheaper to animate than a filter) */
.inno__card::after {
  content: "";
  position: absolute; inset: 0; z-index: 3;
  border-radius: inherit;
  background: #111714;
  opacity: calc(var(--cover, 0) * 0.14);
  pointer-events: none;
}

.inno__copy {
  display: flex;
  flex-direction: column;
  gap: 18px;
  padding: clamp(28px, 3.4vw, 56px);
}
.inno__meta { display: flex; align-items: center; justify-content: space-between; }
.inno__meta .mono { color: var(--em-600); }
.inno__pill {
  padding: 5px 12px;
  border-radius: 999px;
  font-size: 11px;
  letter-spacing: 0.06em;
  color: var(--em-800);
  background: var(--em-100);
  border: 1px solid rgba(15, 81, 64, 0.18);
}
.inno__card h3 {
  margin-top: clamp(8px, 3vh, 28px);
  font-weight: 300;
  font-size: clamp(28px, 2.6vw, 46px);
  line-height: 1.04;
  letter-spacing: -0.04em;
  color: var(--ink);
}
.inno__desc { font-size: 15px; line-height: 1.6; color: var(--muted); max-width: 44ch; }
.inno__features { list-style: none; display: grid; gap: 0; margin-top: 6px; border-top: 1px solid var(--line); }
.inno__features li {
  display: flex; align-items: center; gap: 14px;
  padding: 12px 0;
  border-bottom: 1px solid var(--line);
  font-size: 14px;
  color: var(--ink-2);
}
.inno__features svg {
  flex: none;
  width: 34px; height: 34px;
  padding: 8px;
  border-radius: 10px;
  background: var(--em-100);
  fill: none; stroke: var(--em-700); stroke-width: 1.4; stroke-linecap: round; stroke-linejoin: round;
}
.inno__for { margin-top: auto; padding-top: 10px; font-size: 14px; color: var(--ink); }
.inno__for .mono { display: block; margin-bottom: 4px; font-size: 10px; color: var(--muted); }

.inno__visual { position: relative; margin: 10px; border-radius: 20px; overflow: hidden; background: var(--em-100); }
.inno__visual--dark { background: #0f1411; }
.inno__visual img {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  transform: scale(1.06);
  transition: transform 1.6s var(--ease);
}
.inno__visual--dark img { object-fit: contain; padding: 6%; }
.inno__card.is-in .inno__visual img { transform: scale(1); }

/* drawing-sheet crop marks that draw in */
.inno__crop i {
  position: absolute;
  width: 22px; height: 22px;
  border: 0 solid rgba(246, 247, 246, 0.85);
  opacity: 0;
  transform: scale(.6);
  transition: opacity .6s var(--ease), transform .8s var(--ease);
}
.inno__crop i:nth-child(1) { top: 18px; left: 18px; border-top-width: 1px; border-left-width: 1px; transform-origin: 0 0; }
.inno__crop i:nth-child(2) { top: 18px; right: 18px; border-top-width: 1px; border-right-width: 1px; transform-origin: 100% 0; }
.inno__crop i:nth-child(3) { bottom: 18px; left: 18px; border-bottom-width: 1px; border-left-width: 1px; transform-origin: 0 100%; }
.inno__crop i:nth-child(4) { bottom: 18px; right: 18px; border-bottom-width: 1px; border-right-width: 1px; transform-origin: 100% 100%; }
.inno__card.is-in .inno__crop i { opacity: 1; transform: none; transition-delay: .3s; }

.inno__tag {
  position: absolute; left: 22px; bottom: 22px;
  display: inline-flex; align-items: baseline; gap: 10px;
  padding: 9px 15px;
  border-radius: 999px;
  font-size: 13px;
  color: var(--surface);
  background: rgba(6, 41, 31, 0.5);
  border: 1px solid rgba(255, 255, 255, 0.16);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}
.inno__tag .mono { color: var(--em-200); }

/* =========================================================
   09 Intelligent systems — living dashboard band
   ========================================================= */
.intel {
  position: relative;
  margin-top: clamp(30px, 4vh, 90px);
  color: var(--ink);
  background:
    radial-gradient(45% 40% at 85% 8%, rgba(142, 195, 174, 0.28), rgba(142, 195, 174, 0) 70%),
    radial-gradient(40% 45% at 5% 95%, rgba(191, 221, 208, 0.35), rgba(191, 221, 208, 0) 70%),
    var(--bg);
  overflow: hidden;
  isolation: isolate;
}
/* drafting grid, fading toward the edges */
.intel::before {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  background-image:
    linear-gradient(rgba(17, 23, 20, 0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(17, 23, 20, 0.05) 1px, transparent 1px);
  background-size: 44px 44px;
  -webkit-mask-image: radial-gradient(80% 70% at 50% 40%, #000 30%, transparent 100%);
          mask-image: radial-gradient(80% 70% at 50% 40%, #000 30%, transparent 100%);
}
.intel__inner {
  max-width: 1600px;
  margin: 0 auto;
  padding: clamp(60px, 4vh, 130px) var(--gutter) clamp(40px, 4vh, 120px);
}
.intel__head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(260px, 420px);
  gap: 28px 64px;
  align-items: end;
  margin-bottom: clamp(36px, 6vh, 64px);
}
.intel__eyebrow {
  grid-column: 1 / -1;
  display: flex; align-items: center; gap: 12px;
  font-size: 10.5px; letter-spacing: 0.24em; color: var(--ink-2);
}
.intel__eyebrow .rule { width: 26px; height: 1px; background: currentColor; opacity: .55; }
.intel__eyebrow .rule--long { width: 64px; }
.intel__title { font-weight: 300; font-size: clamp(38px, 4.6vw, 80px); line-height: 1; letter-spacing: -0.045em; }
.intel__title em { font-style: normal; font-weight: 400; color: var(--em-700); }
.intel__lead { color: var(--muted); max-width: 42ch; font-size: 15px; line-height: 1.6; }

/* bento: the network tile spans two rows on the left */
.intel__grid {
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  grid-template-areas: "net prod" "net energy";
  gap: clamp(12px, 1.4vw, 20px);
}
.itile--network { grid-area: net; }
.intel__grid > .itile:nth-child(2) { grid-area: prod; }
.intel__grid > .itile:nth-child(3) { grid-area: energy; }

.itile {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 18px;
  min-height: 380px;
  padding: clamp(22px, 2.4vw, 34px);
  border-radius: 24px;
  overflow: hidden;
  isolation: isolate;
  color: var(--surface);
  background: #0B3A2C;
  border: 1px solid rgba(17, 23, 20, 0.08);
  box-shadow: 0 30px 60px -36px rgba(17, 23, 20, 0.45);
  transition: border-color .5s var(--ease), transform .6s var(--ease);
}
.itile:hover { border-color: rgba(15, 81, 64, 0.35); transform: translateY(-3px); box-shadow: 0 40px 70px -36px rgba(17, 23, 20, 0.5); }
/* full-bleed photograph behind every tile */
.itile__bg {
  position: absolute; inset: 0; z-index: -2;
  width: 100%; height: 100%;
  object-fit: cover;
  filter: saturate(0.8) contrast(1.05);
  transform: scale(1.04);
  transition: transform 1.8s var(--ease);
}
.itile:hover .itile__bg { transform: scale(1.1); }
/* emerald shade: dense at the top for the copy and at the bottom for the panel, lighter in between */
.itile::after {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  background:
    linear-gradient(180deg, rgba(4, 26, 18, 0.86) 0%, rgba(4, 26, 18, 0.5) 32%, rgba(4, 26, 18, 0.2) 55%, rgba(4, 26, 18, 0.78) 100%),
    linear-gradient(0deg, rgba(11, 61, 46, 0.25), rgba(11, 61, 46, 0.25));
}
.itile--network::after {
  background:
    radial-gradient(60% 55% at 50% 58%, rgba(4, 26, 18, 0.25), rgba(4, 26, 18, 0.7) 100%),
    linear-gradient(180deg, rgba(4, 26, 18, 0.88) 0%, rgba(4, 26, 18, 0.35) 30%, rgba(4, 26, 18, 0.4) 70%, rgba(4, 26, 18, 0.9) 100%);
}
/* frosted smart-building panel floating over the photo */
.itile__hud {
  margin-top: auto;
  padding: 16px 18px;
  border-radius: 18px;
  background: linear-gradient(135deg, rgba(6, 36, 26, 0.65) 0%, rgba(15, 81, 64, 0.35) 100%);
  border: 1px solid rgba(255, 255, 255, 0.2);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 10px 24px -10px rgba(0, 0, 0, 0.4);
  backdrop-filter: blur(14px) saturate(1.2);
  -webkit-backdrop-filter: blur(14px) saturate(1.2);
}
.itile__head .mono { color: var(--em-200); font-size: 10px; }
.itile__head h3 { margin-top: 10px; font-weight: 300; font-size: clamp(22px, 1.9vw, 32px); line-height: 1.1; letter-spacing: -0.03em; }
.itile__head p { margin-top: 8px; max-width: 46ch; font-size: 14px; line-height: 1.55; color: rgba(246, 247, 246, 0.65); }
.itile__tags { list-style: none; display: flex; flex-wrap: wrap; gap: 8px; margin-top: auto; }
.itile__tags li {
  padding: 6px 12px;
  border-radius: 999px;
  font-size: 12px;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.14) 0%, rgba(255, 255, 255, 0.04) 100%);
  border: 1px solid rgba(255, 255, 255, 0.2);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}

/* ---- network map ---- */
.net { width: 100%; height: auto; flex: 1; min-height: 260px; overflow: visible; }
.net__peer { fill: none; stroke: rgba(191, 221, 208, 0.28); stroke-width: 1; stroke-dasharray: 2 6; }
.net__lanes path { fill: none; stroke: rgba(191, 221, 208, 0.55); stroke-width: 1.3; }
.net__lanes { filter: drop-shadow(0 0 4px rgba(191, 221, 208, 0.35)); }
.net__packets circle { fill: var(--em-200); filter: drop-shadow(0 0 6px rgba(191, 221, 208, 0.95)); }
.net__dot { fill: rgba(6, 36, 26, 0.78); stroke: var(--em-200); stroke-width: 1.4; }
.net__ping { fill: none; stroke: var(--em-200); stroke-width: 1; transform-box: fill-box; transform-origin: center; opacity: 0; }
.intel.is-live .net__ping { animation: net-ping 3s var(--ease) infinite; animation-delay: calc(var(--n) * -0.5s); }
@keyframes net-ping { 0% { transform: scale(1); opacity: .8; } 100% { transform: scale(2.1); opacity: 0; } }
.net__node path { fill: none; stroke: var(--em-200); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.net__pill { fill: rgba(6, 36, 26, 0.62); stroke: rgba(255, 255, 255, 0.18); stroke-width: 1; }
.net__node text, .net__hub text {
  font-family: var(--mono);
  font-size: 9.5px;
  letter-spacing: 0.14em;
  fill: rgba(246, 247, 246, 0.92);
}
.net__ticks { fill: none; stroke: rgba(191, 221, 208, 0.35); stroke-width: 3; stroke-dasharray: 1 7; }
.net__orbit { fill: none; stroke: rgba(191, 221, 208, 0.45); stroke-dasharray: 10 6; transform-box: fill-box; transform-origin: center; animation: eco-rot 16s linear infinite; }
.net__hub-ring { fill: none; stroke: rgba(191, 221, 208, 0.35); transform-box: fill-box; transform-origin: center; animation: pulse 3s var(--ease) infinite; }
.net__hub-core { fill: #1F7A5C; stroke: rgba(191, 221, 208, 0.5); filter: drop-shadow(0 0 20px rgba(46, 138, 107, 0.9)); }
.net__hub text { fill: var(--surface); font-size: 10.5px; }
.net__hub .net__hub-sub { fill: var(--em-200); font-size: 8px; }
@keyframes eco-rot { to { transform: rotate(360deg); } }

/* ---- productivity ---- */
.prod { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 16px; align-items: end; }
.prod__chart { width: 100%; height: 130px; overflow: visible; }
.prod__grid { fill: none; stroke: rgba(255, 255, 255, 0.08); stroke-width: 1; vector-effect: non-scaling-stroke; }
.prod__area { fill: url(#prodFill); opacity: 0; transition: opacity 1.2s var(--ease) .6s; }
.prod__line {
  fill: none; stroke: var(--em-200); stroke-width: 2; vector-effect: non-scaling-stroke;
  stroke-dasharray: 1; stroke-dashoffset: 1;
  transition: stroke-dashoffset 1.8s var(--ease);
}
.prod__dot { fill: var(--em-200); opacity: 0; transition: opacity .5s var(--ease) 1.6s; filter: drop-shadow(0 0 6px rgba(191, 221, 208, 0.9)); }
.intel.is-live .prod__area { opacity: 1; }
.intel.is-live .prod__line { stroke-dashoffset: 0; }
.intel.is-live .prod__dot { opacity: 1; }

.prod__heat { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.prod__heat i {
  aspect-ratio: 1;
  border-radius: 3px;
  background: var(--em-200);
  opacity: .1;
}
.intel.is-live .prod__heat i { animation: heat var(--hd, 3s) ease-in-out var(--hdl, 0s) infinite alternate; }
@keyframes heat { from { opacity: var(--h0, .12); } to { opacity: var(--h1, .6); } }
.prod__legend { grid-column: 1 / -1; display: flex; gap: 16px; font-size: 9.5px; color: rgba(246, 247, 246, 0.6); }
.prod__legend i { display: inline-block; width: 8px; height: 8px; margin-right: 6px; border-radius: 2px; background: var(--em-200); }
.prod__legend span:nth-child(2) i { opacity: .55; }
.prod__legend span:nth-child(3) i { opacity: .2; }

/* ---- energy ---- */
.energy { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 10px 18px; align-items: center; }
.energy__gauge { display: grid; justify-items: center; gap: 6px; }
.energy__gauge .mono { font-size: 9px; color: var(--em-200); }
.energy__ring { width: 96px; height: 96px; transform: rotate(-90deg); }
.energy__ticks { fill: none; stroke: rgba(191, 221, 208, 0.3); stroke-width: 4; stroke-dasharray: 1 5.3; }
.energy__track { fill: none; stroke: rgba(255, 255, 255, 0.1); stroke-width: 6; }
.energy__arc {
  fill: none; stroke: var(--em-200); stroke-width: 6; stroke-linecap: round;
  stroke-dasharray: 1; stroke-dashoffset: 1;
  filter: drop-shadow(0 0 6px rgba(191, 221, 208, 0.6));
  transition: stroke-dashoffset 2s var(--ease) .3s;
}
.intel.is-live .energy__arc { stroke-dashoffset: 0.26; }
.energy__leaf { fill: none; stroke: var(--em-200); stroke-width: 1.6; stroke-linecap: round; transform: rotate(90deg); transform-origin: 60px 60px; }

.energy__chart { width: 100%; height: auto; overflow: visible; }
.en__sun { fill: url(#enSunFill); opacity: 0; transition: opacity 1.2s var(--ease) .2s; }
.en__sunline {
  fill: none; stroke: rgba(236, 200, 140, 0.75); stroke-width: 1.2; stroke-dasharray: 1; stroke-dashoffset: 1;
  transition: stroke-dashoffset 1.6s var(--ease) .2s;
}
.en__grid { fill: none; stroke: rgba(255, 255, 255, 0.07); stroke-width: 1; }
.en__axis { fill: none; stroke: rgba(255, 255, 255, 0.25); stroke-width: 1; }
.en__saved { fill: url(#enSave); opacity: 0; transition: opacity 1s var(--ease) 1.4s; }
.en__area { fill: url(#enOptFill); opacity: 0; transition: opacity 1.2s var(--ease) 1s; }
.en__base { fill: none; stroke: rgba(246, 247, 246, 0.45); stroke-width: 1.2; stroke-dasharray: 4 4; opacity: 0; transition: opacity .8s var(--ease) .5s; }
.en__opt {
  fill: none; stroke: var(--em-200); stroke-width: 2.2; stroke-linecap: round;
  stroke-dasharray: 1; stroke-dashoffset: 1;
  filter: drop-shadow(0 0 5px rgba(191, 221, 208, 0.7));
  transition: stroke-dashoffset 1.8s var(--ease) .6s;
}
.en__now { fill: var(--surface); stroke: var(--em-200); stroke-width: 2; opacity: 0; transition: opacity .5s var(--ease) 2.2s; filter: drop-shadow(0 0 6px rgba(191, 221, 208, 0.95)); }
.energy__chart text { font-family: var(--mono); font-size: 8px; letter-spacing: 0.08em; fill: rgba(246, 247, 246, 0.5); }
.intel.is-live :is(.en__sun, .en__base, .en__saved, .en__area, .en__now) { opacity: 1; }
.intel.is-live :is(.en__sunline, .en__opt) { stroke-dashoffset: 0; }

.energy__legend { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 9px; color: rgba(246, 247, 246, 0.6); }
.energy__legend i { display: inline-block; width: 12px; height: 8px; margin-right: 6px; border-radius: 2px; vertical-align: 0; }
.energy__legend .l-opt { background: var(--em-200); }
.energy__legend .l-base { height: 0; border-top: 1.5px dashed rgba(246, 247, 246, 0.55); border-radius: 0; vertical-align: 3px; }
.energy__legend .l-save { background: repeating-linear-gradient(45deg, rgba(191, 221, 208, 0.6) 0 1.5px, transparent 1.5px 4px); }
.energy__legend .l-sun { background: rgba(236, 200, 140, 0.6); }

/* ---- desktop: the whole band fits one screen ---- */
@media (min-width: 1101px) and (min-height: 680px) {
  .intel__inner {
    height: 100vh;
    height: 100dvh;
    display: flex;
    flex-direction: column;
    padding-top: 96px;
    padding-bottom: 28px;
  }
  .intel__head { margin-bottom: clamp(16px, 2.6vh, 28px); gap: 14px 64px; }
  .intel__title { font-size: clamp(34px, 3.3vw, 60px); }
  .intel__lead { font-size: 14px; }
  .intel__grid { flex: 1; min-height: 0; grid-template-rows: minmax(0, 1fr) minmax(0, 1fr); }
  .itile { min-height: 0; gap: 10px; padding: clamp(16px, 2.2vh, 26px) clamp(18px, 1.8vw, 28px); }
  .itile__head h3 { margin-top: 6px; font-size: clamp(19px, 1.55vw, 27px); }
  .itile__head p {
    margin-top: 4px; font-size: 13px;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  }
  .itile__hud { padding: clamp(10px, 1.4vh, 16px) 16px; }
  .net { flex: 1 1 0; min-height: 0; }
  .itile__tags { margin-top: 0; }
  .prod__chart { height: clamp(44px, 9vh, 110px); }
  .prod__heat { height: clamp(44px, 9vh, 110px); grid-template-rows: repeat(5, 1fr); gap: 3px; }
  .prod__heat i { aspect-ratio: auto; }
  .energy { gap: 8px 16px; }
  .energy__ring { width: clamp(56px, 8.5vh, 92px); height: clamp(56px, 8.5vh, 92px); }
  .energy__chart { max-height: clamp(54px, 10vh, 120px); }
}
/* shorter laptop screens: the small tiles drop their description to keep the panel whole */
@media (min-width: 1101px) and (max-height: 860px) {
  .intel__grid > .itile:not(.itile--network) .itile__head p { display: none; }
  .itile--network .itile__head p { -webkit-line-clamp: 1; }
}

/* =========================================================
   10 Portfolio — editorial index + cursor-following preview
   ========================================================= */
.pf {
  --cols: 56px minmax(0, 2.6fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.3fr) 64px 40px;
  max-width: 1600px;
  margin: 0 auto;
  padding: clamp(60px, 4vh, 130px) var(--gutter) clamp(40px, 4vh, 120px);
}
.pf__head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(260px, 400px);
  gap: 28px 64px;
  align-items: end;
}
.pf__eyebrow {
  grid-column: 1 / -1;
  display: flex; align-items: center; gap: 12px;
  font-size: 10.5px; letter-spacing: 0.24em; color: var(--ink-2);
}
.pf__eyebrow .rule { width: 26px; height: 1px; background: currentColor; opacity: .55; }
.pf__eyebrow .rule--long { width: 64px; }
.pf__title { font-weight: 300; font-size: clamp(42px, 6vw, 110px); line-height: .95; letter-spacing: -0.05em; }
.pf__title em { font-style: normal; font-weight: 400; color: var(--em-700); }
.pf__aside p { color: var(--muted); max-width: 38ch; font-size: 15px; line-height: 1.6; }
.pf__count { margin-top: 18px; color: var(--ink-2); }
.pf__count b { font-weight: 500; font-size: 14px; color: var(--em-700); }

/* filter chips */
.pf__filters {
  display: flex; flex-wrap: wrap; gap: 8px;
  margin-top: clamp(36px, 6vh, 56px);
}
.pf__filters button {
  display: inline-flex; align-items: flex-start; gap: 4px;
  padding: 9px 16px;
  border-radius: 999px;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.25) 0%, rgba(246, 247, 246, 0.1) 100%);
  border: 1px solid rgba(255, 255, 255, 0.35);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  font-size: 13.5px;
  color: var(--ink-2);
  transition: background .35s var(--ease), color .35s var(--ease), border-color .35s var(--ease), transform .2s var(--ease);
}
.pf__filters sup { font-family: var(--mono); font-size: 9px; color: var(--muted); transition: color .35s var(--ease); }
.pf__filters button:hover {
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.3) 0%, rgba(246, 247, 246, 0.18) 100%);
  border-color: rgba(15, 81, 64, 0.35);
  color: var(--em-800);
}
.pf__filters button.is-on {
  background: var(--em-800);
  border-color: var(--em-800);
  color: var(--surface);
  box-shadow: 0 4px 14px -4px rgba(6, 41, 31, 0.6);
}
.pf__filters button.is-on sup { color: var(--em-200); }

/* column labels + rows share one grid template */
.pf__labels, .pf__row { display: grid; grid-template-columns: var(--cols); gap: 20px; align-items: center; }
.pf__labels { margin-top: 36px; padding: 0 12px 12px; font-size: 9.5px; color: var(--muted); }

.pf__list { list-style: none; border-top: 1px solid rgba(17, 23, 20, 0.16); }
/* filtering collapses rows smoothly */
.pf__item {
  display: grid;
  grid-template-rows: 1fr;
  border-bottom: 1px solid rgba(17, 23, 20, 0.12);
  transition: grid-template-rows .6s var(--ease), opacity .45s var(--ease), border-color .45s var(--ease);
}
.pf__item > .pf__row { min-height: 0; overflow: hidden; }
.pf__item.is-hidden { grid-template-rows: 0fr; opacity: 0; border-bottom-color: transparent; }

.pf__row {
  position: relative;
  padding: clamp(18px, 2.6vh, 28px) 12px;
  cursor: pointer;
  isolation: isolate;
  transition: opacity .4s var(--ease);
}
/* emerald wash sweeping in from the left */
.pf__row::before {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(90deg, var(--em-100), rgba(221, 237, 230, 0.2));
  transform: scaleX(0);
  transform-origin: 0 50%;
  transition: transform .6s var(--ease);
}
.pf__num { color: var(--muted); }
.pf__thumb { display: none; }
.pf__name {
  font-weight: 300;
  font-size: clamp(24px, 2.7vw, 46px);
  line-height: 1.05;
  letter-spacing: -0.035em;
  color: var(--ink);
  transition: transform .6s var(--ease), color .4s var(--ease);
}
.pf__sector, .pf__city, .pf__scope { font-size: 14px; color: var(--ink-2); }
.pf__sector { display: inline-flex; align-items: center; gap: 8px; }
.pf__sector::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--em-500); }
.pf__scope { color: var(--muted); }
.pf__year { color: var(--muted); }
.pf__arrow {
  justify-self: end;
  width: 22px; height: 22px;
  fill: none; stroke: var(--ink-2); stroke-width: 1.3; stroke-linecap: round; stroke-linejoin: round;
  transition: transform .5s var(--ease), stroke .4s var(--ease);
}

/* hover / focus: the row opens up, the others step back */
.pf__row:is(:hover, :focus-visible)::before { transform: scaleX(1); }
.pf__row:is(:hover, :focus-visible) .pf__name { transform: translateX(12px); color: var(--em-800); }
.pf__row:is(:hover, :focus-visible) .pf__num { color: var(--em-600); }
.pf__row:is(:hover, :focus-visible) .pf__arrow { transform: rotate(45deg); stroke: var(--em-700); }
.pf__list:hover .pf__row:not(:hover) { opacity: .38; }
.pf__row:focus-visible { outline-offset: -2px; }

/* floating preview (desktop with a precise pointer) */
.pf__preview {
  position: fixed;
  left: 0; top: 0;
  z-index: 40;
  width: clamp(260px, 22vw, 380px);
  aspect-ratio: 4 / 3;
  pointer-events: none;
  opacity: 0;
  transform: translate3d(var(--px, 0px), var(--py, 0px), 0) scale(.85) rotate(var(--tilt, 0deg));
  transition: opacity .35s var(--ease);
  will-change: transform;
}
.pf__preview.is-on { opacity: 1; transform: translate3d(var(--px, 0px), var(--py, 0px), 0) scale(1) rotate(var(--tilt, 0deg)); }
.pf__frame {
  position: absolute; inset: 0;
  border-radius: 16px;
  overflow: hidden;
  background: var(--em-900);
  box-shadow: 0 40px 70px -30px rgba(17, 23, 20, 0.55);
  clip-path: inset(12% 12% 12% 12% round 16px);
  transition: clip-path .6s var(--ease);
}
.pf__preview.is-on .pf__frame { clip-path: inset(0 0 0 0 round 16px); }
.pf__frame img {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  opacity: 0;
  transform: scale(1.12);
  transition: opacity .5s var(--ease), transform 1s var(--ease);
}
.pf__frame img[data-i="5"] { object-fit: contain; padding: 8%; }
.pf__frame img.is-active { opacity: 1; transform: scale(1); }
.pf__chip {
  position: absolute; left: 14px; bottom: 14px;
  padding: 6px 11px;
  border-radius: 999px;
  font-size: 9.5px;
  color: var(--surface);
  background: linear-gradient(135deg, rgba(6, 41, 31, 0.65) 0%, rgba(15, 81, 64, 0.4) 100%);
  border: 1px solid rgba(255, 255, 255, 0.22);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}

/* touch screens and narrow widths: no cursor to follow, so each project becomes a card with its image */
@media (hover: none), (max-width: 900px) {
  .pf__head { grid-template-columns: minmax(0, 1fr); }
  .pf__labels, .pf__preview { display: none; }
  .pf__list {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 28px 16px;
    margin-top: 28px;
    border-top: 0;
  }
  .pf__item { border-bottom: 0; }
  .pf__row {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 6px 14px;
    padding: 16px;
    background: linear-gradient(135deg, rgba(255, 255, 255, 0.28) 0%, rgba(246, 247, 246, 0.1) 100%);
    border: 1px solid rgba(255, 255, 255, 0.35);
    border-radius: 20px;
    box-shadow: 0 10px 28px -14px rgba(17, 23, 20, 0.12), inset 0 1px 0 rgba(255, 255, 255, 0.3);
    backdrop-filter: blur(14px) saturate(1.2);
    -webkit-backdrop-filter: blur(14px) saturate(1.2);
  }
  .pf__row::before { display: none; }
  .pf__list:hover .pf__row:not(:hover) { opacity: 1; }
  .pf__row:is(:hover, :focus-visible) .pf__name { transform: none; }
  .pf__thumb {
    display: block;
    order: -2;
    width: 100%;
    aspect-ratio: 4 / 3;
    margin-bottom: 10px;
    border-radius: 16px;
    object-fit: cover;
    background: var(--em-900);
  }
  .pf__item:last-child .pf__thumb { object-fit: contain; padding: 6%; }
  .pf__num { order: -1; }
  .pf__year { order: -1; margin-left: auto; }
  .pf__name { order: 0; width: 100%; font-size: clamp(22px, 5.5vw, 30px); }
  .pf__sector { order: 1; font-size: 13px; }
  .pf__city { order: 2; font-size: 13px; }
  .pf__scope { order: 3; width: 100%; font-size: 13px; }
  .pf__arrow { display: none; }
}
@media (max-width: 640px) {
  .pf__list { grid-template-columns: minmax(0, 1fr); }
  .pf__filters { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin-right: calc(-1 * var(--gutter)); padding-right: var(--gutter); }
  .pf__filters::-webkit-scrollbar { display: none; }
  .pf__filters button { flex: none; }
}

/* =========================================================
   Footer — curtain reveal + image-filled wordmark
   ========================================================= */
/* the page is a sheet that lifts off the footer:
   .has-curtain      footer pinned under the page (desktop, footer fits the screen)
   .has-curtain-lift footer slides out from under the page as it scrolls away (phones, tablets, tall footers) */
.has-curtain main,
.has-curtain-lift main {
  position: relative;
  z-index: 1;
  background: var(--bg);
  border-radius: 0 0 36px 36px;
  box-shadow: 0 40px 80px -40px rgba(17, 23, 20, 0.35);
}
.has-curtain .site-footer { position: sticky; bottom: 0; z-index: 0; }
.has-curtain-lift .site-footer { z-index: 0; will-change: transform; }
@media (max-width: 760px) {
  .has-curtain-lift main { border-radius: 0 0 26px 26px; box-shadow: 0 30px 60px -30px rgba(17, 23, 20, 0.35); }
}

.site-footer {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  background:
    radial-gradient(45% 55% at 90% 10%, rgba(142, 195, 174, 0.35), rgba(142, 195, 174, 0) 70%),
    radial-gradient(40% 50% at 0% 100%, rgba(191, 221, 208, 0.45), rgba(191, 221, 208, 0) 70%),
    linear-gradient(180deg, #DCE1DE 0%, #E9ECEA 100%);
}
.site-footer::before {
  content: "";
  position: absolute; inset: 0; z-index: -1;
  background-image:
    linear-gradient(rgba(17, 23, 20, 0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(17, 23, 20, 0.05) 1px, transparent 1px);
  background-size: 44px 44px;
  -webkit-mask-image: linear-gradient(180deg, #000 0%, transparent 85%);
          mask-image: linear-gradient(180deg, #000 0%, transparent 85%);
}
/* ---- animated background: aurora mesh + drifting light shafts (sun through tall windows) ---- */
.ft__bg { position: absolute; inset: 0; z-index: -1; overflow: hidden; pointer-events: none; }
.ft__blob {
  position: absolute;
  border-radius: 50%;
  filter: blur(70px);
  will-change: transform;
}
.ft__blob--a { width: 52vw; height: 52vw; left: -14vw; top: -22vw; background: radial-gradient(circle, rgba(142, 195, 174, 0.8), rgba(142, 195, 174, 0) 70%); animation: ft-float-a 26s ease-in-out infinite alternate; }
.ft__blob--b { width: 42vw; height: 42vw; right: -12vw; top: 4%; background: radial-gradient(circle, rgba(46, 138, 107, 0.42), rgba(46, 138, 107, 0) 70%); animation: ft-float-b 32s ease-in-out infinite alternate; }
.ft__blob--c { width: 38vw; height: 38vw; left: 28%; bottom: -18vw; background: radial-gradient(circle, rgba(191, 221, 208, 0.95), rgba(191, 221, 208, 0) 70%); animation: ft-float-c 28s ease-in-out infinite alternate; }
/* a warm sand glow echoes the site's architectural photography */
.ft__blob--d { width: 30vw; height: 30vw; left: 52%; top: -10vw; background: radial-gradient(circle, rgba(236, 214, 178, 0.55), rgba(236, 214, 178, 0) 70%); animation: ft-float-d 36s ease-in-out infinite alternate; }
@keyframes ft-float-a { to { transform: translate(18vw, 10vw) scale(1.15); } }
@keyframes ft-float-b { to { transform: translate(-16vw, 12vw) scale(.9); } }
@keyframes ft-float-c { to { transform: translate(14vw, -8vw) scale(1.2); } }
@keyframes ft-float-d { to { transform: translate(-20vw, 14vw) scale(1.25); } }

/* soft diagonal beams of light that drift across and breathe */
.ft__shaft {
  position: absolute;
  top: -30%;
  height: 160%;
  background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.3) 50%, rgba(255, 255, 255, 0) 100%);
  filter: blur(18px);
  transform: rotate(24deg) translateX(0);
  transform-origin: 50% 0;
  mix-blend-mode: soft-light;
  opacity: 0;
  will-change: transform, opacity;
}
.ft__shaft--1 { left: 8%;  width: 9vw;  animation: ft-shaft 18s ease-in-out infinite; }
.ft__shaft--2 { left: 38%; width: 5vw;  animation: ft-shaft 22s ease-in-out -7s infinite; }
.ft__shaft--3 { left: 64%; width: 12vw; animation: ft-shaft 26s ease-in-out -14s infinite; }
@keyframes ft-shaft {
  0%   { transform: rotate(24deg) translateX(-6vw); opacity: 0; }
  30%  { opacity: .9; }
  70%  { opacity: .7; }
  100% { transform: rotate(24deg) translateX(10vw); opacity: 0; }
}
.site-footer::before { content: none; }
/* the background only animates while the footer is uncovered */
.site-footer:not(.is-live) :is(.ft__blob, .ft__shaft, .ft__live),
.site-footer:not(.is-live) .ft__word { animation-play-state: paused; }

.ft__inner {
  position: relative;
  max-width: 1600px;
  margin: 0 auto;
  padding: clamp(60px, 9vh, 120px) var(--gutter) 20px;
}

/* call to action */
.ft__top {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 40px 64px;
  padding-bottom: clamp(28px, 5vh, 64px);
  border-bottom: 1px solid rgba(17, 23, 20, 0.14);
}
.ft__cta { flex: 0 1 auto; min-width: 0; }
.ft__contact { flex: none; }
.ft__eyebrow { display: flex; align-items: center; gap: 12px; height: 14px; font-size: 10.5px; letter-spacing: 0.24em; color: var(--ink-2); }
.ft__eyebrow .rule { width: 40px; height: 1px; background: currentColor; opacity: .55; }
.ft__title {
  margin-top: 18px;
  font-weight: 300;
  font-size: clamp(38px, min(4.8vw, 9vh), 88px);
  line-height: .98;
  letter-spacing: -0.05em;
  max-width: 14ch;
}
.ft__title em { font-style: normal; font-weight: 400; color: var(--em-700); }

.ft__contact { display: grid; gap: 22px; justify-items: start; }
.ft__mail, .ft__phone { display: grid; gap: 8px; color: var(--ink); }
/* small labels share the eyebrow's height, so EMAIL sits level with START A PROJECT */
.ft__mail .mono, .ft__phone .mono { display: flex; align-items: center; height: 14px; font-size: 10px; letter-spacing: 0.2em; color: var(--muted); }
.ft__mail-line { display: inline-flex; align-items: center; gap: 12px; }
.ft__mail-text {
  font-size: clamp(20px, 1.9vw, 30px);
  letter-spacing: -0.02em;
  background: linear-gradient(currentColor, currentColor) 0 100% / 0 1px no-repeat;
  transition: background-size .6s var(--ease), color .3s var(--ease);
}
.ft__mail svg { flex: none; width: 24px; height: 24px; fill: none; stroke: currentColor; stroke-width: 1.3; transition: transform .5s var(--ease); }
.ft__mail:hover { color: var(--em-700); }
.ft__mail:hover .ft__mail-text { background-size: 100% 1px; }
.ft__mail:hover svg { transform: translate(3px, -3px) rotate(45deg); }
.ft__phone span:last-child { font-size: 17px; }
.ft__phone:hover { color: var(--em-700); }
.ft__btn {
  display: inline-flex; align-items: center; gap: 12px;
  margin-top: 8px;
  height: 50px; padding: 0 24px;
  border-radius: 999px;
  font-size: 14px; font-weight: 500;
  color: var(--surface);
  background: var(--em-800);
  box-shadow: 0 16px 30px -16px rgba(11, 61, 46, 0.6);
  transition: background .35s var(--ease), transform .2s var(--ease);
}
.ft__btn svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.5; transition: transform .35s var(--ease); }
.ft__btn:hover { background: var(--em-700); }
.ft__btn:hover svg { transform: translateX(3px); }
.ft__btn:active { transform: scale(0.98); }

/* link columns */
.ft__cols {
  display: grid;
  grid-template-columns: repeat(4, auto);
  justify-content: space-between;
  gap: 32px;
  padding: clamp(24px, 4.5vh, 52px) 0;
}
.ft__cols .mono { font-size: 10px; color: var(--em-600); margin-bottom: 16px; }
.ft__cols ul { list-style: none; display: grid; gap: clamp(6px, 1.1vh, 10px); }
.ft__cols a, .ft__time { font-size: 14.5px; color: var(--ink-2); }
.ft__cols a {
  background: linear-gradient(currentColor, currentColor) 0 100% / 0 1px no-repeat;
  padding-bottom: 2px;
  transition: color .3s var(--ease), background-size .45s var(--ease);
}
.ft__cols a:hover { color: var(--em-700); background-size: 100% 1px; }
.ft__time { display: inline-flex; align-items: center; gap: 8px; color: var(--muted); }
.ft__time time { font-variant-numeric: tabular-nums; color: var(--ink-2); }
.ft__live { width: 7px; height: 7px; border-radius: 50%; background: var(--em-500); box-shadow: 0 0 0 0 rgba(46, 138, 107, 0.5); animation: ft-live 2.4s ease-out infinite; }
@keyframes ft-live { 0% { box-shadow: 0 0 0 0 rgba(46, 138, 107, 0.5); } 70%, 100% { box-shadow: 0 0 0 8px rgba(46, 138, 107, 0); } }

/* giant wordmark filled with the architectural model, drifting slowly */
.ft__word {
  display: flex;
  justify-content: center;
  white-space: nowrap;
  font-size: 10.3vw;
  line-height: .82;
  letter-spacing: -0.055em;
  margin: 0 calc(-1 * var(--gutter)) 0;
  padding: 0 0 .06em;
  user-select: none;
  background:
    linear-gradient(180deg, rgba(15, 81, 64, 0.2) 0%, rgba(11, 61, 46, 0.78) 100%),
    url("../img/eco.webp");
  background-size: 100% 100%, 120% auto;
  background-position: 0 0, 30% 55%;
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  clip-path: inset(100% 0 0 0);
  transform: translateY(30px);
  transition: clip-path 1.4s var(--ease), transform 1.4s var(--ease);
  animation: ft-drift 22s ease-in-out infinite alternate;
}
.ft__word span { font-weight: 300; }
.ft__word b { font-weight: 600; }
.site-footer.is-in .ft__word { clip-path: inset(0 0 0 0); transform: none; }
@keyframes ft-drift { from { background-position: 0 0, 20% 50%; } to { background-position: 0 0, 80% 60%; } }

.ft__bottom {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px 24px;
  padding-top: 18px;
  border-top: 1px solid rgba(17, 23, 20, 0.12);
  font-size: 13px;
  color: var(--muted);
}
.ft__bottom .mono { font-size: 10px; }
/* keep clear of the floating back-to-top button */
.ft__bottom { padding-right: 88px; }
.ft__site { color: var(--ink-2); }
.ft__site:hover { color: var(--em-700); }

/* =========================================================
   Back-to-top button (ring = scroll progress)
   ========================================================= */
.to-top {
  position: fixed;
  right: clamp(16px, 2.4vw, 32px);
  bottom: clamp(16px, 2.4vw, 32px);
  z-index: 45;
  width: 54px; height: 54px;
  border-radius: 50%;
  color: var(--em-800);
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.3) 0%, rgba(246, 247, 246, 0.12) 100%);
  border: 1px solid rgba(255, 255, 255, 0.35);
  box-shadow: 0 16px 36px -16px rgba(17, 23, 20, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.3);
  backdrop-filter: blur(16px) saturate(1.3);
  -webkit-backdrop-filter: blur(16px) saturate(1.3);
  opacity: 0;
  visibility: hidden;
  transform: translateY(14px) scale(.9);
  transition: opacity .4s var(--ease), transform .5s var(--ease), visibility 0s linear .5s, background .3s var(--ease), color .3s var(--ease);
}
.to-top.is-shown { opacity: 1; visibility: visible; transform: none; transition-delay: 0s; }
.to-top svg { width: 100%; height: 100%; transform: rotate(-90deg); }
.to-top__track { fill: none; stroke: rgba(17, 23, 20, 0.1); stroke-width: 2; }
.to-top__ring {
  fill: none; stroke: var(--em-600); stroke-width: 2; stroke-linecap: round;
  stroke-dasharray: 1; stroke-dashoffset: calc(1 - var(--scroll, 0));
}
.to-top__arrow { fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; transform: rotate(90deg); transform-origin: 24px 24px; transition: transform .4s var(--ease); }
.to-top:hover { background: var(--em-800); color: var(--surface); }
.to-top:hover .to-top__arrow { transform: rotate(90deg) translateX(-3px); }
.to-top:hover .to-top__track { stroke: rgba(255, 255, 255, 0.2); }
.to-top:hover .to-top__ring { stroke: var(--em-200); }

@media (max-width: 1100px) {
  .ft__top { flex-direction: column; }
  .ft__cols { grid-template-columns: repeat(2, minmax(0, 1fr)); justify-content: normal; }
}
@media (max-width: 760px) {
  .ft__mail-text { font-size: 18px; word-break: break-all; }
  .ft__cols { gap: 28px 16px; }
  .ft__cols a, .ft__time { font-size: 13.5px; }
  .ft__word { font-size: 10.6vw; letter-spacing: -0.045em; }
  .ft__bottom { flex-direction: column; align-items: flex-start; padding-right: 64px; }
  .to-top { width: 46px; height: 46px; }
}

/* hero pager progress */
@keyframes progress { to { transform: scaleX(1); } }

/* =========================================================
   Entrance motion
   ========================================================= */
.reveal { opacity: 0; transform: translateY(16px); transition: opacity 1s var(--ease), transform 1s var(--ease); transition-delay: calc(var(--d) * 90ms + 120ms); }
.reveal-up { transform: translateY(105%); transition: transform 1.2s var(--ease); transition-delay: calc(var(--d) * 90ms + 120ms); }
.is-loaded .reveal { opacity: 1; transform: none; }
.is-loaded .reveal-up { transform: none; }

[data-reveal] { opacity: 0; transform: translateY(24px); transition: opacity 1s var(--ease), transform 1s var(--ease); }
[data-reveal].is-in { opacity: 1; transform: none; }

/* =========================================================
   Responsive
   ========================================================= */
@media (max-width: 1280px) {
  .nav__status { display: none; }
}
/* short phones / landscape: tighter menu so it all fits */
@media (max-width: 1100px) and (max-height: 700px) {
  .mnav__links a { padding: 10px 0; }
  .mnav__links b { font-size: clamp(26px, 6vh, 36px); }
  .mnav__foot { padding-top: 22px; }
}

@media (max-width: 1100px) {
  .nav__links, .nav__status { display: none; }
  .nav__bar { grid-template-columns: minmax(0, 1fr) auto; }
  .nav__toggle, .mnav { display: block; }
  .pod__head, .services__head, .inno__head, .intel__head { grid-template-columns: 1fr; }
  .intel__grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); grid-template-areas: "net net" "prod energy"; }
  /* innovation: image on top, copy below, still stacking */
  .inno__card { grid-template-columns: minmax(0, 1fr); min-height: 0; }
  .inno__visual { order: -1; aspect-ratio: 16 / 10; margin: 8px 8px 0; }
  /* ecosystem: no pinning — stacked, auto-advancing */
  .ecosys { height: auto; }
  .ecosys__sticky { position: static; height: auto; display: block; padding-top: 0; overflow: visible; }
  .ecosys__top { grid-template-columns: minmax(0, 1fr); gap: 28px; padding: 0 var(--gutter); }
  .ecosys__stage { container-type: normal; }
  .ecosys__plate { width: 100%; }
  .ecosys__strip {
    display: flex;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scrollbar-width: none;
    margin-top: 12px;
    padding: 0 var(--gutter) 8px;
  }
  .ecosys__strip::-webkit-scrollbar { display: none; }
  .ecosys__strip li { flex: 0 0 min(300px, 62%); scroll-snap-align: start; }
  .ecosys__thumb { height: 140px; }
  .panel__body { grid-template-columns: 1fr; }
  /* approach: band stacks, cards become a 2 x 2 grid */
  .method__top { grid-template-columns: minmax(0, 1fr); }
  .method__view { aspect-ratio: 16 / 9; min-height: 0; margin-top: 0; }
  .method__cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); height: auto; }
  .mcard { min-height: 440px; }
  .mcard + .mcard { border-left: 0; }
  .mcard:nth-child(even) { border-left: 1px solid rgba(255, 255, 255, 0.14); }
  .mcard:nth-child(n + 3) { border-top: 1px solid rgba(255, 255, 255, 0.14); }

  /* about: stacked — copy, plate, callouts as a 2-col legend, then values */
  /* heading first, then the plate + callout legend, then the values */
  .about { display: flex; flex-direction: column; min-height: 0; }
  .about__guides { display: none; }
  .about__copy { order: 1; width: auto; margin: 0; padding: 0 var(--gutter); }
  .about__visual { order: 2; }
  .about__values { order: 3; }
  .about__visual { position: relative; top: auto; right: auto; bottom: auto; width: 100%; margin-top: 24px; }
  .about__media {
    position: relative; inset: auto;
    aspect-ratio: 16 / 11;
    -webkit-mask-image: linear-gradient(180deg, transparent 0%, #000 16%, #000 84%, transparent 100%);
    -webkit-mask-composite: source-over;
            mask-image: linear-gradient(180deg, transparent 0%, #000 16%, #000 84%, transparent 100%);
            mask-composite: add;
  }
  .about__callouts {
    position: static;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 28px 20px;
    padding: 8px var(--gutter) 0;
  }
  .callout { position: relative; left: auto; top: auto; max-width: none; }
  .callout p { max-width: none; }
  .about__values {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: 40px;
    padding: 0 var(--gutter);
  }
  .about__values > li:not(.about__next) { border-left: 0; border-bottom: 1px solid rgba(17, 23, 20, 0.12); padding: 22px 12px 22px 0; }
  .about__values > li:nth-child(even):not(.about__next) { padding-left: 16px; border-left: 1px solid rgba(17, 23, 20, 0.12); }
  .about__next { grid-column: 1 / -1; justify-content: flex-start; padding: 26px 0 8px; }

  /* the idea: no pinning on tablets/phones — a stacked section that auto-advances instead */
  .idea { height: auto; padding: 0 var(--gutter); }
  /* minmax(0, 1fr) + min-width: 0 let the column shrink to the screen;
     plain 1fr would grow to fit the non-wrapping chain and push the copy off-screen */
  .idea__sticky { position: static; height: auto; grid-template-columns: minmax(0, 1fr); padding: 0; gap: 32px; overflow: visible; }
  .idea__copy, .idea__statement, .idea__chain-wrap { min-width: 0; }
  .idea__copy { padding: 0; gap: 32px; }
  .idea__title { max-width: 14ch; }
  .chain li.is-active button {
    background-position: 100% 0;
    animation: text-fill var(--idea-step, 3200ms) linear forwards;
  }
  /* stacked: the image runs edge to edge under the copy and the wash turns vertical */
  .idea__copy { max-width: none; }
  .idea__visual {
    position: relative;
    inset: auto;
    /* explicit width: aspect-ratio items don't stretch in grid, so negative margins alone left a gap */
    justify-self: start;
    width: calc(100% + 2 * var(--gutter));
    margin: -48px 0 0 calc(-1 * var(--gutter));
    aspect-ratio: 4 / 5;
    max-height: 86vh;
  }
  .idea__visual::after {
    background:
      linear-gradient(180deg,
        rgba(230, 232, 231, 1)    0%,
        rgba(230, 232, 231, 0.82) 8%,
        rgba(230, 232, 231, 0.5)  16%,
        rgba(230, 232, 231, 0.2)  24%,
        rgba(230, 232, 231, 0)    32%),
      linear-gradient(0deg,
        rgba(6, 41, 31, 0.8)  0%,
        rgba(6, 41, 31, 0.45) 22%,
        rgba(6, 41, 31, 0)    48%);
  }
  .idea__caption { left: var(--gutter); }
  .hero__notes { display: none; }
  .hero__inner { grid-template-columns: 1fr; }
}

@media (max-width: 760px) {
  .nav { padding: 10px 12px; }
  .nav__bar { height: 58px; padding: 0 5px 0 16px; }
  .nav__logo { font-size: 14px; gap: 10px; }
  .nav__cta { display: none; }
  .mnav__inner { padding-top: 96px; }

  .hero__inner { padding-top: 120px; align-items: start; }
  .hero__slide { background-position: 70% center; }
  .hero__wash {
    background:
      linear-gradient(180deg,
        rgba(230, 232, 231, 0.78) 0%,
        rgba(230, 232, 231, 0.6) 50%,
        rgba(230, 232, 231, 0) 78%,
        rgba(230, 232, 231, 0.5) 100%);
  }
  .hero__eyebrow { letter-spacing: 0.14em; margin-bottom: 24px; }
  .hero__eyebrow .rule { display: none; }
  .hero__actions {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    align-items: center;
    gap: clamp(10px, 2.5vw, 16px);
    margin-top: clamp(24px, 5vw, 32px);
    width: 100%;
  }
  .hero__actions .btn {
    height: 44px;
    font-size: clamp(12px, 3.2vw, 13px);
    white-space: nowrap;
  }
  .hero__actions .btn--solid {
    flex: 0 0 auto;
    padding: 0 clamp(14px, 3.5vw, 20px);
    gap: 8px;
    justify-content: center;
  }
  .hero__actions .btn--solid svg {
    width: 14px;
    height: 14px;
    flex-shrink: 0;
  }
  .hero__actions .btn--link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 44px;
    padding: 0 6px;
    flex-shrink: 0;
    text-decoration: underline;
    text-underline-offset: 4px;
    text-decoration-thickness: 1px;
    background: none;
  }
  .hero__foot { grid-template-columns: 1fr auto; }
  .hero__mail { display: none; }
  .pager__item { width: 40px; }
  .scroll-cue .mono { display: none; }

  .pod__stage { height: 520px; }
  .pod__views { left: 10px; right: 10px; top: 12px; justify-content: space-between; gap: 2px; }
  .pod__views button { padding: 8px clamp(6px, 2vw, 10px); font-size: clamp(11px, 3.2vw, 12.5px); }
  /* card only appears once a point is chosen, so the model gets the whole stage by default */
  .pod__info { top: auto; bottom: 68px; left: 10px; right: 10px; width: auto; padding: 12px 14px 14px; }
  .pod__info:not(.has-spot) { display: none; }
  .pod__info-title { margin-top: 6px; font-size: 16px; }
  .pod__info-text { margin-top: 4px; font-size: 12.5px; line-height: 1.45; }
  .pod__toggles { left: 10px; right: 10px; bottom: 12px; justify-content: space-between; gap: 4px; }
  .toggle { flex: 1; justify-content: center; padding: 0 8px; font-size: 12px; height: 38px; }
  .pod__hint { display: none; }

  /* chain becomes a one-line slider; the active word fills with colour over the auto-advance time */
  .chain {
    flex-wrap: nowrap;
    overflow-x: auto;
    scrollbar-width: none;
    -webkit-mask-image: linear-gradient(90deg, #000 82%, transparent);
            mask-image: linear-gradient(90deg, #000 82%, transparent);
  }
  .chain::-webkit-scrollbar { display: none; }
  .chain li { flex: none; }
  .chain li:last-child { padding-right: 48px; }
  .chain li:not(:last-child)::after { width: 12px; margin: 0 8px; }
  .chain button { font-size: 11.5px; letter-spacing: 0.1em; opacity: 1; color: rgba(94, 105, 100, 0.6); }
  .chain button .mono { display: none; }
  .idea__desc { font-size: 13.5px; }
  .idea__meta { flex-direction: column; gap: 6px; }
  .kinetic { font-size: clamp(32px, 10.5vw, 56px); }

  /* ================= 04 WHAT IS WORKSPACEMATTER (Mobile Optimization) ================= */
  .about {
    display: flex;
    flex-direction: column;
    min-height: 0;
    padding-top: 56px;
  }
  .about__copy {
    order: 1;
    width: 100%;
    margin: 0;
    padding: 0 var(--gutter);
  }
  .about__eyebrow {
    font-size: 10px;
    letter-spacing: 0.2em;
    margin-bottom: 12px;
  }
  .about__title {
    margin-top: 14px;
    font-size: clamp(30px, 8.2vw, 42px);
    line-height: 1.08;
    letter-spacing: -0.035em;
  }
  .about__divider {
    width: 44px;
    height: 1.5px;
    margin: 18px 0;
    background: var(--em-600);
    opacity: 0.85;
    border-radius: 1px;
  }
  .about__lead {
    margin-top: 0;
    font-size: 14.5px;
    line-height: 1.6;
    color: var(--ink-2);
    max-width: none;
  }
  .about__cta {
    margin-top: 22px;
    gap: 14px;
    min-height: 44px;
  }
  .about__cta .mono {
    font-size: 10.5px;
    letter-spacing: 0.18em;
  }

  .about__visual {
    order: 2;
    position: relative;
    width: 100%;
    margin-top: 28px;
  }
  .about__media {
    position: relative;
    inset: auto;
    aspect-ratio: 16 / 10;
    width: calc(100% - 2 * var(--gutter));
    margin: 0 auto;
    border-radius: 16px;
    overflow: hidden;
    background: rgba(230, 232, 231, 0.5);
    box-shadow: 0 10px 30px -12px rgba(17, 23, 20, 0.1);
    -webkit-mask-image: none;
            mask-image: none;
  }
  .about__media img {
    object-fit: cover;
    object-position: center 52%;
    border-radius: 16px;
  }

  .about__callouts {
    position: static;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
    padding: 16px var(--gutter) 0;
  }
  .callout {
    position: relative;
    left: auto;
    top: auto;
    max-width: none;
    padding: 14px 12px;
    border-radius: 12px;
    background: linear-gradient(135deg, rgba(255, 255, 255, 0.3) 0%, rgba(246, 247, 246, 0.1) 100%);
    border: 1px solid rgba(255, 255, 255, 0.35);
    box-shadow: 0 8px 20px -10px rgba(17, 23, 20, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.3);
    backdrop-filter: blur(14px) saturate(1.2);
    -webkit-backdrop-filter: blur(14px) saturate(1.2);
    display: flex;
    flex-direction: column;
  }
  .callout::before,
  .callout__mark {
    display: none;
  }
  .callout > .mono {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 10.5px;
    font-weight: 500;
    color: var(--em-700);
    letter-spacing: 0.1em;
    margin-top: 0;
    margin-bottom: 6px;
  }
  .callout > .mono::after {
    content: "";
    display: inline-block;
    width: 12px;
    height: 1px;
    background: var(--em-500);
    opacity: 0.45;
  }
  .callout h3 {
    margin-top: 0;
    font-size: 10.5px;
    font-weight: 600;
    line-height: 1.35;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--ink);
  }
  .callout p {
    margin-top: 6px;
    font-size: 11.5px;
    line-height: 1.42;
    color: var(--muted);
    max-width: none;
  }
  .callout > .mono,
  .callout h3,
  .callout p {
    transition-delay: calc(var(--i) * 50ms + 60ms);
  }

  .about__values {
    order: 3;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: 32px;
    padding: 0 var(--gutter) 48px;
    background: rgba(230, 232, 231, 0.45);
    border-top: 1px solid rgba(17, 23, 20, 0.12);
    display: none;
  }
  .about__values > li:not(.about__next) {
    border-left: 0;
    border-bottom: 1px solid rgba(17, 23, 20, 0.12);
    padding: 18px 8px 18px 0;
    gap: 8px;
  }
  .about__values > li:nth-child(even):not(.about__next) {
    padding-left: 14px;
    border-left: 1px solid rgba(17, 23, 20, 0.12);
  }
  .about__values svg {
    width: 26px;
    height: 26px;
  }
  .about__values h3 {
    font-size: 10.5px;
    letter-spacing: 0.18em;
  }
  .about__values p {
    font-size: 12px;
    line-height: 1.4;
    max-width: none;
  }
  .about__next {
    grid-column: 1 / -1;
    justify-content: flex-start;
    padding: 22px 0 8px;
  }
  .about__next a {
    display: flex;
    align-items: center;
    gap: 14px;
    font-size: 13.5px;
    font-weight: 500;
  }

  .method__split { grid-template-columns: minmax(0, 1fr); }
  .method__aside { padding: 4px 0 4px 20px; }
  /* cards become a swipeable row */
  .method__cards {
    display: flex;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scrollbar-width: none;
  }
  .method__cards::-webkit-scrollbar { display: none; }
  .mcard { flex: 0 0 84%; min-height: 480px; scroll-snap-align: start; border-top: 0 !important; }
  .mcard + .mcard { border-left: 1px solid rgba(255, 255, 255, 0.14); }
  .mcard.is-active { flex-grow: 0; }
  /* keep the blueprint below the (expanded) copy on narrow cards */
  /* blueprint sits in its own box with the drawing's exact ratio, so it is never cropped */
  .mcard { min-height: 460px; --pad: 22px; }
  .mcard__title { margin-top: 18px; }
  .mcard__short { margin-top: 12px; }
  .mcard__tags { padding-top: 14px; }
  .mcard .bp {
    top: auto; left: 50%; right: auto; bottom: 14px;
    width: 56%; height: auto;
    aspect-ratio: 420 / 340;
    transform: translateX(-50%);
  }
  .mcard.is-active .mcard__arrow { opacity: 0; }
  .mcard__tags li { padding: 5px 10px; font-size: 11px; }
  .method__view { aspect-ratio: 16 / 10; border-radius: 16px; }
  .method__chip { left: 14px; bottom: 14px; padding: 8px 13px; font-size: 12px; }
  /* pagination dots under the swipe row */
  .method__dots { display: flex; justify-content: center; gap: 8px; padding: 18px 0 4px; }
  .method__dots button { width: 8px; height: 8px; border-radius: 999px; background: rgba(17, 23, 20, 0.2); transition: width .4s var(--ease), background .4s var(--ease); }
  .method__dots button.is-on { width: 26px; background: var(--em-700); }
  .mcard::before { background: linear-gradient(180deg, rgba(26, 22, 18, 0.72) 0%, rgba(26, 22, 18, 0.45) 45%, rgba(26, 22, 18, 0.2) 70%, rgba(26, 22, 18, 0.45) 100%); }
  /* phone: the model sits in a 4:3 window at 1.8x and pans to each stage (see index.js) */
  .ecosys__stage {
    display: block;
    aspect-ratio: 4 / 3;
    overflow: hidden;
    border-radius: 18px;
    background: #efece8;
    box-shadow: inset 0 0 0 1px rgba(17, 23, 20, 0.06);
  }
  .ecosys__plate {
    position: absolute;
    left: 0; top: 0;
    width: 180%;
    overflow: visible;
    transform-origin: 0 0;
    transition: transform 1.2s var(--ease);
    will-change: transform;
  }
  .ecosys__plate::before { display: none; }
  .ecosys__camera { transform: none !important; }
  /* dots + short leaders only; the strip card carries the words */
  .hs__label { display: none; }
  .hs__line { height: calc(var(--lh) * 0.35); }
  .hs__dot { width: 12px; height: 12px; left: -6px; top: -6px; }
  .ecosys__badge { bottom: 12px; gap: 8px; padding: 7px 14px 7px 7px; }
  .ecosys__badge .mono { display: none; }
  .ecosys__badge b { font-size: 13px; }
  .ecosys__badge-mark { width: 18px; height: 18px; box-shadow: 0 0 0 3px rgba(191, 221, 208, 0.18); }
  /* strip: swipe cards with a clear peek of the next one */
  .ecosys__strip { margin-top: 18px; border-top: 0; }
  .ecosys__strip li { flex: 0 0 80%; }
  .ecosys__strip li + li { border-left: 1px solid rgba(17, 23, 20, 0.1); }
  .ecosys__strip button { padding: 16px 14px 0; opacity: .45; }
  .ecosys__thumb { height: 128px; }
  .inno__card { --top: calc(76px + var(--i) * 12px); border-radius: 22px; }
  .inno__copy { gap: 14px; padding: 20px 20px 22px; }
  .inno__card h3 { margin-top: 2px; font-size: 26px; }
  .inno__desc { font-size: 14px; }
  .inno__features { border-top: 0; gap: 8px; margin-top: 10px; }
  .inno__features li {
    padding: 8px 12px;
    font-size: 13px;
    border-bottom: 0;
    background: linear-gradient(135deg, rgba(255, 255, 255, 0.22) 0%, rgba(246, 247, 246, 0.08) 100%);
    border: 1px solid rgba(255, 255, 255, 0.25);
    border-radius: 12px;
  }
  .inno__features svg { width: 30px; height: 30px; padding: 7px; border-radius: 8px; }
  .inno__tag { left: 14px; bottom: 14px; padding: 7px 12px; font-size: 12px; }
  .inno__crop i { width: 16px; height: 16px; }
  .intel__grid { grid-template-columns: minmax(0, 1fr); grid-template-areas: "net" "prod" "energy"; }
  .itile { min-height: 440px; }
  .itile { border-radius: 20px; }
  .net { min-height: 0; }
  .net__node text, .net__hub text { font-size: 12px; paint-order: stroke; stroke: rgba(4, 26, 18, 0.8); stroke-width: 3px; }
  .net__pill { display: none; }
  .prod { grid-template-columns: minmax(0, 1fr); }
  .prod__heat { grid-template-columns: repeat(10, 1fr); }
  .energy__ring { width: 92px; height: 92px; }
  /* services strip becomes a vertical accordion */
  .strip { flex-direction: column; height: auto; gap: 8px; }
  .panel { flex: none; height: 64px; transition: height .8s var(--ease); }
  .panel.is-active { height: 400px; }
  .panel__index { top: 23px; }
  .panel__label { writing-mode: horizontal-tb; transform: none; left: 56px; bottom: auto; top: 18px; font-size: 17px; }
  .panel__progress { top: auto; bottom: 0; left: 0; right: 0; }
  .panel__body { left: 20px; right: 20px; bottom: 22px; }
}

@keyframes text-fill { to { background-position: 0 0; } }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition-duration: .01ms !important; transition-delay: 0s !important; }
  .chain li.is-active button { background-position: 0 0; } /* show the active word fully coloured */
}
