/* ============================================================================
   TECTONIC — shared design system  ·  Direction O (light)
   ----------------------------------------------------------------------------
   Single source of truth for every page EXCEPT the homepage's bespoke
   choreography (warp field, blue takeover, situations backdrop, sticky-press
   end-panel, cap-visual line graphics) which stays inline in index.html.

   Link from every page's <head>:
       <link rel="stylesheet" href="tectonic.css">
   and pair with tectonic.js before </body>.
   ========================================================================== */

:root{
  --paper:#E5E7EB;
  --paper-2:#D5D7DB;
  --paper-3:#BABDC2;
  --paper-soft:rgba(229,231,235,0.65);
  --paper-faint:rgba(229,231,235,0.45);
  --paper-line:rgba(229,231,235,0.18);
  --white:#FFFFFF;

  --ink:#1A1820;
  --ink-foot:#242424;
  --ink-2:#5A5560;
  --ink-3:#6A656D;
  --rule:rgba(26,24,32,0.10);

  /* Brand blues — the two canonical values, matched to the logo SVGs.
     --blue      : full logo + primary accent (the bright royal blue)
     --blue-dark : collapsed/small mark + dark contexts (reads better small) */
  --blue:#1834e6;
  --blue-dark:#021495;
  /* Warp/hero motion ramp (a single gradient effect, not brand accents).
     Left as-is so the hero is visually unchanged; can be re-anchored to the
     two brand blues above on request. */
  --blue-bright:#2F44E5;
  --blue-deep:#131F7A;
  --blue-deepest:#0E1450;

  --on-blue:#F4F2EE;
  --on-blue-2:rgba(244,242,238,0.78);
  --on-blue-3:rgba(244,242,238,0.50);

  --sans:'Hanken Grotesk',-apple-system,BlinkMacSystemFont,'Helvetica Neue',sans-serif;
  --mono:'Geist Mono','SF Mono',ui-monospace,monospace;
  --maxw:1440px;
  --pad:clamp(1.2rem,4vw,3rem);

  /* ── diagram tokens — shared calibration for all line-art figures ── */
  --dgm-hair:rgba(26,24,32,0.52);        /* connectors between forms        */
  --dgm-hair-soft:rgba(26,24,32,0.42);   /* spokes / secondary structure    */
  --dgm-blue:#1F33DD;                    /* the single active accent        */
  --dgm-pulse:#5468FF;                   /* moving tracers — lifted above structural blue */
  --dgm-node-stroke:#1F33DD;             /* outline for open nodes/forms    */
  --dgm-ctitle:#1A1820;                  /* figure titles — ink             */
  --dgm-num:#1F33DD;                     /* numerals / mono accents — blue  */
  --dgm-dash:2 5;                        /* one dash rhythm everywhere      */
  --dgm-w:1;                             /* base stroke weight              */
}

/* ──── reset / base ──── */
*{ box-sizing:border-box; margin:0; padding:0; }
html{ scroll-behavior:smooth; -webkit-text-size-adjust:100%; background:var(--paper); }
body{
  background:var(--paper); color:var(--ink);
  font-family:var(--sans); font-weight:400; font-size:16px; line-height:1.55;
  letter-spacing:-.005em; -webkit-font-smoothing:antialiased;
}
/* Balanced ragged lines site-wide (short blocks balance; long body falls back automatically) */
h1, h2, h3, h4, h5, h6,
p, li, dd, dt, blockquote, figcaption, .eyebrow{ text-wrap:balance; }
a{ color:inherit; text-decoration:none; }
img,svg,video{ display:block; max-width:100%; }
.wrap{ max-width:var(--maxw); margin:0 auto; padding-left:var(--pad); padding-right:var(--pad); }

/* ──── header / nav ──── */
header{
  position:sticky; top:0; z-index:100;
  background:rgba(229,231,235,0.78);
  backdrop-filter:blur(20px) saturate(140%);
  -webkit-backdrop-filter:blur(20px) saturate(140%);
  border-bottom:1px solid var(--rule);
}
.nav{
  display:flex; justify-content:space-between; align-items:center;
  height:68px; gap:2rem;
}
.wordmark{ display:flex; align-items:center; }
.wordmark svg{ height:18px; width:auto; }
.nav-right{ display:flex; align-items:center; gap:2.2rem; }
.nav-links{ display:flex; gap:1.6rem; align-items:center; }
.nav-links a{
  font-family:var(--sans); font-size:.92rem; font-weight:400;
  color:var(--ink-2); position:relative; padding:.4rem 0;
  transition:color .25s ease; white-space:nowrap;
}
.nav-links a:hover{ color:var(--ink); }
.nav-links a:hover::after{
  content:""; position:absolute; left:0; right:0; bottom:0;
  height:1px; background:var(--blue);
}
/* current-page marker (carried over from the source pages) */
.nav-links a[aria-current="page"]{ color:var(--ink); }
.nav-links a[aria-current="page"]::after{
  content:""; position:absolute; left:0; right:0; bottom:0;
  height:1px; background:var(--blue);
}

.cta-pill{
  font-family:var(--sans); font-size:.86rem; font-weight:500;
  color:var(--ink);
  border:1px solid var(--ink); border-radius:999px;
  padding:.55rem 1.1rem .55rem 1.2rem;
  display:inline-flex; gap:.6rem; align-items:center;
  transition:all .25s ease;
  white-space:nowrap;
}
.cta-pill .arr{ display:inline-block; transition:transform .3s ease; }
.cta-pill:hover{ background:var(--ink); color:var(--paper); gap:.85rem; }
.cta-pill:hover .arr{ transform:translate(2px,-2px); }

/* hamburger toggle — hidden on desktop, shown ≤960 */
.nav-toggle{
  display:none;
  flex-direction:column; justify-content:center; gap:5px;
  width:44px; height:44px; padding:11px; margin-right:-11px;
  background:none; border:0; cursor:pointer;
}
.nav-toggle span{
  display:block; height:2px; width:100%; background:var(--ink);
  border-radius:2px;
  transition:transform .3s ease, opacity .2s ease;
}
.nav-toggle[aria-expanded="true"] span:nth-child(1){ transform:translateY(7px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] span:nth-child(2){ opacity:0; }
.nav-toggle[aria-expanded="true"] span:nth-child(3){ transform:translateY(-7px) rotate(-45deg); }

/* ──── brand logos in the nav (shared) ──── */
.wordmark.brand-lockup{ flex-direction:row; align-items:center; gap:0; }
.brand-logo{ display:none; }
.brand-logo svg{ display:block; width:auto; height:auto; }
.brand-logo--mark{ display:block; }
.brand-lockup .brand-logo--mark svg{ height:32px; }
/* homepage only: header expands to the full Langrand lockup, then collapses */
.site-header.is-home .nav{
  height:auto; min-height:68px; padding-top:0; padding-bottom:0;
  transition:padding-top .45s cubic-bezier(.25,.1,.25,1),
             padding-bottom .45s cubic-bezier(.25,.1,.25,1);
}
@media (min-width:721px){
  .site-header.is-home:not(.is-collapsed) .nav{ padding-top:1.4rem; padding-bottom:1.4rem; }
  .site-header.is-home:not(.is-collapsed) .brand-logo--mark{ display:none; }
  .site-header.is-home:not(.is-collapsed) .brand-logo--full{ display:block; }
  .site-header.is-home:not(.is-collapsed) .brand-lockup .brand-logo--full svg{ width:236px; height:auto; }
}


.mobile-menu{
  display:none;
  position:fixed; top:68px; left:0; right:0; z-index:99;
  flex-direction:column;
  background:var(--paper);
  border-bottom:1px solid var(--rule);
  box-shadow:0 22px 36px -22px rgba(26,24,32,0.40);
  padding:.6rem var(--pad) 2.2rem;
}
.mobile-menu.is-open{ display:flex; animation:menuIn .28s ease; }
@keyframes menuIn{ from{ opacity:0; transform:translateY(-10px); } to{ opacity:1; transform:none; } }
.mobile-menu a{
  font-family:var(--sans); font-size:1.18rem; font-weight:400;
  color:var(--ink); padding:1rem 0;
  border-bottom:1px solid var(--rule);
}
.mobile-menu a:last-child{ border-bottom:0; }

/* ──── gradient text wash (section heads etc.) ────
   Default 95deg sweep; tectonic.js drives background-position on scroll.
   Reduced-motion falls back to flat ink (see bottom of file). */
.wash{
  background-image:linear-gradient(95deg,
    var(--blue) 0%, var(--blue) 34%,
    var(--blue-bright) 39%, var(--blue-deep) 44%,
    var(--blue-deepest) 48%, var(--ink) 52%,
    var(--ink) 100%);
  background-size:220% 220%;
  background-position:100% 100%;
  background-clip:text;
  -webkit-background-clip:text;
  color:transparent;
  -webkit-text-fill-color:transparent;
  transition:background-position .12s linear;
  will-change:background-position;
  padding-bottom:.05em;
}

/* ──── section scaffolding ──── */
section{ padding:clamp(4rem,8vw,7rem) 0; position:relative; z-index:3; background:var(--paper); }

.section-head{
  margin-bottom:clamp(3rem,5vw,4rem);
  padding-bottom:clamp(1.2rem,2.4vw,1.8rem);
  border-bottom:1px solid var(--rule);
}
.section-head h2{
  font-family:var(--sans); font-weight:300;
  font-size:clamp(1.6rem,2.8vw,2.4rem);
  line-height:1.1; letter-spacing:-.018em;
  color:var(--ink); max-width:32ch;
}

.arrow-link{
  margin-top:2.4rem;
  font-family:var(--sans); font-size:.9rem; font-weight:500;
  color:var(--ink); display:inline-flex; gap:.7rem;
  padding-bottom:.4rem; border-bottom:1px solid var(--ink);
  transition:gap .3s ease, color .3s ease, border-color .3s ease;
}
.arrow-link .arr{ display:inline-block; transition:transform .3s ease; }

/* ── headline rows: section link flush right, baseline with last headline line ── */
.head-row{ display:flex; justify-content:space-between;
  align-items:flex-end; align-items:last baseline;
  gap:2rem; flex-wrap:wrap; }
.head-row .arrow-link{ margin-top:0; white-space:nowrap; }

.arrow-link:hover{ gap:1rem; color:var(--blue); border-bottom-color:var(--blue); }
.arrow-link:hover .arr{ transform:translate(3px,-3px); }

/* small mono eyebrow label + hairline section divider */
.eyebrow{
  font-family:var(--mono); font-size:.72rem; font-weight:500;
  letter-spacing:.14em; text-transform:uppercase; color:var(--ink-3);
}
.divide{ border-top:1px solid var(--rule); }

/* link arrow — render identically everywhere (sans), regardless of parent font */
.arr{ font-family:var(--sans); font-style:normal; }

/* ──── prose — body copy for content / article / bio pages ────
   Baseline built from the system tokens; refine per archetype as needed. */
.prose{ max-width:68ch; }
.prose p,
.prose ul,
.prose ol{
  font-size:1.08rem; color:var(--ink-2); line-height:1.7;
  margin-bottom:1.2rem;
}
.prose ul, .prose ol{ padding-left:1.3rem; }
.prose li{ margin-bottom:.5rem; }
.prose h2{
  font-family:var(--sans); font-weight:300;
  font-size:clamp(1.5rem,2.6vw,2.1rem);
  line-height:1.15; letter-spacing:-.018em; color:var(--ink);
  margin-top:2.8rem; margin-bottom:1rem; text-wrap:balance;
}
.prose h3{
  font-family:var(--sans); font-weight:500; font-size:1.2rem;
  letter-spacing:-.012em; color:var(--ink);
  margin-top:2rem; margin-bottom:.7rem;
}
.prose strong{ color:var(--ink); font-weight:500; }
.prose a{
  color:var(--blue);
  border-bottom:1px solid rgba(31,51,221,0.28);
  transition:border-color .25s ease;
}
.prose a:hover{ border-bottom-color:var(--blue); }
.prose blockquote{
  border-left:2px solid var(--blue);
  padding-left:1.3rem; margin:2rem 0;
  font-weight:300; font-size:1.25rem; line-height:1.45; color:var(--ink);
  max-width:46ch;
}
.prose > :first-child{ margin-top:0; }

/* ──── forms ──── */
.form-col{ max-width:34rem; }
.form-intro{
  font-size:1.05rem; line-height:1.65; color:var(--ink-2);
  margin:0 0 2.4rem; max-width:38rem;
}
.field{ margin-bottom:2rem; }
.field label{
  display:block; font-family:var(--mono);
  font-size:.72rem; font-weight:500; letter-spacing:.12em;
  text-transform:uppercase; color:var(--ink-3); margin-bottom:.7rem;
}
.field input,
.field textarea{
  width:100%; background:transparent; color:var(--ink);
  font-family:var(--sans); font-size:1.05rem; line-height:1.55;
  border:none; border-bottom:1px solid var(--rule);
  padding:.7rem 0; transition:border-color .25s ease;
}
.field textarea{ min-height:150px; resize:vertical; }
.field input:hover,
.field textarea:hover{ border-bottom-color:var(--ink-3); }
.field input:focus,
.field textarea:focus{ outline:none; border-bottom-color:var(--blue); }
.field input::placeholder,
.field textarea::placeholder{ color:var(--ink-3); }
.form-submit{ margin-top:3rem; }

/* solid blue pill — primary action / form submit */
.btn-solid{
  font-family:var(--sans); font-size:.9rem; font-weight:500;
  background:var(--blue); color:var(--on-blue);
  border:1px solid var(--blue); border-radius:999px;
  padding:.85rem 1.6rem; cursor:pointer;
  display:inline-flex; gap:.6rem; align-items:center;
  transition:all .25s ease; white-space:nowrap;
}
.btn-solid:hover{ background:var(--blue-deep); border-color:var(--blue-deep); gap:.85rem; }

/* honeypot — hidden anti-spam field; reject server-side if non-empty */
.hp{ position:absolute; left:-10000px; top:auto; width:1px; height:1px; overflow:hidden; }

/* in-place form confirmation */
.form-sent{ max-width:38ch; opacity:0; transform:translateY(12px); }
.form-sent.show{ animation:formRise .7s cubic-bezier(.2,.7,.2,1) forwards; }
.sent-mark{ width:46px; height:46px; display:block; margin-bottom:1.6rem; }
.sent-mark .chk{ stroke-dasharray:1; stroke-dashoffset:1; }
.form-sent.show .sent-mark .chk{ animation:chkDraw 1s cubic-bezier(.3,.6,.2,1) .2s forwards; }
.form-sent h2{
  font-family:var(--sans); font-weight:300;
  font-size:clamp(1.6rem,2.6vw,2.1rem); line-height:1.15;
  letter-spacing:-.018em; color:var(--ink); margin-bottom:.9rem;
}
.form-sent p{ color:var(--ink-2); font-size:1.05rem; }
.form-sent:focus{ outline:none; }
@keyframes formRise{ to{ opacity:1; transform:translateY(0); } }
@keyframes chkDraw{ to{ stroke-dashoffset:0; } }

/* ──── selected-work / case cards (work + signals listings) ──── */
.work-grid{
  display:grid; grid-template-columns:repeat(3,1fr);
  gap:clamp(1.6rem,3vw,2.4rem);
}
.case{ display:flex; flex-direction:column; transition:transform .35s ease; }
.case:hover{ transform:translateY(-4px); }
.case-visual{
  aspect-ratio:4/3; overflow:hidden; border-radius:0;
  background:var(--paper-2);
  margin-bottom:1.4rem; position:relative;
}
.case-visual img, .case-visual video{
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; transition:transform .8s cubic-bezier(.25,.1,.25,1);
}
.case:hover .case-visual img,
.case:hover .case-visual video{ transform:scale(1.04); }
.case-visual::after{
  content:"↗"; position:absolute; top:1rem; right:1rem;
  width:36px; height:36px; border-radius:50%;
  background:var(--paper); color:var(--ink);
  display:flex; align-items:center; justify-content:center;
  font-size:1rem; font-weight:500;
  opacity:0; transform:translate(-6px,6px);
  transition:opacity .3s ease, transform .3s ease, background .3s ease, color .3s ease;
  z-index:2;
}
.case:hover .case-visual::after{
  opacity:1; transform:translate(0,0);
  background:var(--blue); color:var(--white);
}
.case-tag{
  font-family:var(--mono); font-size:.72rem; font-weight:500;
  letter-spacing:.14em; text-transform:uppercase; color:var(--blue);
  margin-bottom:.7rem;
}
.case h3{
  font-family:var(--sans); font-weight:300;
  font-size:clamp(1.2rem,1.7vw,1.4rem);
  line-height:1.18; letter-spacing:-.015em; color:var(--ink);
  margin-bottom:.7rem; max-width:28ch;
}
.case:hover h3{ color:var(--blue); }
.case p{
  font-size:.95rem; color:var(--ink-2); line-height:1.55;
  max-width:90%;
}

/* ──── horizontal card slider (press / signals / related) ──── */
.fn-wrap{ position:relative; }
.fn-track{
  display:grid; grid-auto-flow:column;
  grid-auto-columns:calc((100% - 2 * clamp(1.4rem,2.5vw,2rem)) / 3);
  gap:clamp(1.4rem,2.5vw,2rem);
  overflow-x:auto;
  scroll-snap-type:x proximity;  /* mandatory captures diagonal trackpad gestures and traps vertical scroll */
  scroll-behavior:smooth;
  scrollbar-width:none;
  /* vertical clearance >= the 16px pre-reveal translateY of .reveal cards —
     otherwise un-revealed cards overflow the track, the track becomes a
     vertical scroll container, and it traps trackpad scrolling (negative
     margin keeps net layout identical) */
  padding:1.6rem .15rem;
  margin:-1.6rem -.15rem;
}
.fn-track::-webkit-scrollbar{ display:none; }
.fn-card{
  scroll-snap-align:start;
  display:flex; flex-direction:column;
  border-radius:0; overflow:hidden;
  background:var(--white);
  transition:transform .35s ease, box-shadow .35s ease;
}
.fn-card:hover{
  transform:translateY(-4px);
  box-shadow:0 14px 32px -18px rgba(26,24,32,.20);
}
.fn-img{
  aspect-ratio:5/3; overflow:hidden; position:relative;
  background:linear-gradient(135deg, var(--paper-2) 0%, var(--paper-3) 100%);
}
.fn-img-placeholder{
  position:absolute; inset:0;
  display:flex; flex-direction:column;
  align-items:center; justify-content:center;
  gap:.4rem;
  font-family:var(--mono);
  font-size:.72rem;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:var(--ink-3);
  z-index:0;
}
.fn-img-placeholder span:first-child{ color:var(--ink-2); font-weight:500; }
.fn-video{
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover;
  z-index:1;
}
.fn-img::after{ display:none; }   /* removed hover circle arrow; cards use a persistent "View" link */
.fn-card-body{ padding:1.4rem; display:flex; flex-direction:column; flex:1 1 auto; }
.fn-outlet{
  font-family:var(--mono); font-size:.72rem; font-weight:500;
  letter-spacing:.14em; text-transform:uppercase; color:var(--blue);
  margin-bottom:.6rem;
}
/* press / signals card tag row — mirrors the bio-page "Selected thinking" tags
   (.think-pill + .think-source). Shared so signals + index stay identical. */
.fn-meta{ display:flex; align-items:center; justify-content:space-between; gap:.6rem; flex-wrap:wrap; margin-bottom:.7rem; }
.fn-meta .fn-outlet{ margin-bottom:0; }
.fn-pill{
  font-family:var(--sans); font-size:.7rem; font-weight:500; color:var(--ink-2);
  background:var(--paper-2); border-radius:999px; padding:.24rem .65rem;
  line-height:1.2; white-space:nowrap;
}
.fn-card h3{
  font-family:var(--sans); font-weight:400;
  font-size:1.15rem; line-height:1.35; letter-spacing:-.012em;
  color:var(--ink);
  margin-bottom:clamp(1.1rem,2vw,1.6rem);
}
/* persistent "View" affordance under each card headline (replaces the hover arrow) */
.fn-go{
  display:inline-flex; align-items:center; gap:.32rem;
  margin-top:auto;
  font-family:var(--sans); font-size:.9rem; font-weight:500; color:var(--ink-2);
  transition:color .25s ease, gap .25s ease;
}
.fn-go .arr{ display:inline-block; transition:transform .3s ease; }
.fn-card:hover .fn-go{ color:var(--blue); gap:.5rem; }
.fn-card:hover .fn-go .arr{ transform:translate(2px,-2px); }
.fn-card:hover h3{ color:var(--blue); }
.fn-controls{
  display:flex; justify-content:space-between; align-items:center;
  margin-top:2rem;
}
.fn-hint{
  font-family:var(--mono); font-size:.74rem; font-weight:500;
  letter-spacing:.04em; text-transform:uppercase; color:var(--ink-3);
  font-variant-numeric:tabular-nums;
}
.fn-nav{ display:flex; gap:.6rem; }
.fn-btn{
  width:42px; height:42px; border-radius:50%;
  border:1px solid var(--rule); background:transparent;
  color:var(--ink); font-size:1.05rem; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  transition:all .25s ease;
}
.fn-btn:hover:not(:disabled){ border-color:var(--ink); background:var(--ink); color:var(--paper); }
.fn-btn:disabled{ opacity:.3; cursor:not-allowed; }

/* ── carousel overlay arrows — appear over cards on hover; replace fn-controls ── */
.fn-ovl{ position:absolute; top:30%; transform:translateY(-50%); z-index:4;
  width:44px; height:44px; border-radius:50%;
  border:1px solid var(--rule); background:var(--paper); color:var(--ink);
  font-size:1.05rem; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  box-shadow:0 2px 12px rgba(0,0,0,.10);
  transition:opacity .25s ease, background .25s ease, color .25s ease, border-color .25s ease; }
.fn-ovl--prev{ left:-.4rem; }
.fn-ovl--next{ right:-.4rem; }
.fn-ovl:hover:not(:disabled){ background:var(--ink); color:var(--paper); border-color:var(--ink); }
.fn-ovl:disabled{ opacity:0 !important; pointer-events:none; }
@media (hover:hover){
  .fn-ovl{ opacity:0; }
  .fn-wrap:hover .fn-ovl:not(:disabled), .fn-ovl:focus-visible{ opacity:1; }
}


/* ──── closing CTA band (blue) ──── */
.closing{
  background:var(--blue); color:var(--on-blue-2);
  padding:clamp(5rem,11vw,9rem) 0; position:relative; overflow:hidden;
}
.closing::before{
  content:""; position:absolute; inset:0;
  background:
    radial-gradient(ellipse at 85% 20%, rgba(255,255,255,0.10) 0%, transparent 50%),
    radial-gradient(ellipse at 15% 85%, rgba(255,255,255,0.06) 0%, transparent 45%);
  pointer-events:none;
}
.closing .wrap{ position:relative; }
/* ──── closing-grid — 2-col band ────
   REQUIRED MARKUP PATTERN (matches homepage):
     <div class="closing-grid">
       <div>                              ← col 1: headline + supporting copy
         <h2>...</h2>
         <p class="closing-tag">...</p>
       </div>
       <a class="closing-cta">...</a>     ← col 2: CTA standing alone
     </div>
   Do NOT place h2 directly in col 1 with tag+CTA bundled together in col 2.
   That orphans the headline on the left and stacks the copy with the button
   on the right. The headline belongs WITH its supporting copy in the inner
   div; the CTA sits alone in its own column. */
.closing-grid{
  display:grid;
  grid-template-columns:1.4fr 1fr;
  gap:clamp(2rem,5vw,4rem);
  align-items:end;
}
.closing h2{
  font-family:var(--sans); font-weight:200;
  font-size:clamp(1.8rem,3.4vw,2.8rem);
  line-height:1.08;
  letter-spacing:-.022em; color:var(--on-blue);
  max-width:30rem;
  margin-bottom:1.6rem;
}
.closing h2 em{
  font-family:var(--sans); font-style:normal; font-weight:200;
  color:var(--on-blue);
}
.closing-tag{
  font-family:var(--sans);
  font-weight:400;
  font-size:clamp(1.3rem,1.7vw,1.55rem);
  line-height:1.35;
  color:var(--on-blue);
  max-width:30rem; text-wrap:balance;
}
.closing-cta{
  background:var(--on-blue); color:var(--blue);
  font-family:var(--sans); font-size:.94rem; font-weight:500;
  padding:.85rem 1.5rem; border-radius:999px;
  display:inline-flex; gap:.7rem; align-items:center;
  transition:all .25s ease;
  justify-self:start;
  align-self:end;
  white-space:nowrap;
}
.closing-cta .arr{ display:inline-block; transition:transform .3s ease; }
.closing-cta:hover{ background:#fff; gap:1rem; }
.closing-cta:hover .arr{ transform:translate(2px,-2px); }

/* ──── footer — dark #242424 ──── */
footer{
  background:var(--ink-foot);
  color:var(--paper-soft);
  padding:clamp(4rem,8vw,6rem) 0 2rem;
  position:relative; z-index:10;
}
.foot-lockup{ display:block; width:fit-content; margin-bottom:clamp(4rem,8vw,6rem); }
.foot-grid{
  display:grid;
  grid-template-columns:5fr 2fr 2fr;
  column-gap:clamp(2rem,5vw,4rem);
  row-gap:2rem;
  margin-bottom:3rem;
  align-items:start;
}
.foot-col a, .foot-col .item{
  display:block; font-size:.94rem; color:var(--paper-soft);
  margin-bottom:.7rem; transition:color .25s ease;
  line-height:1.4;
}
.foot-col a:hover{ color:var(--paper); }
.foot-lockup svg{ width:clamp(160px,17vw,275px); height:auto; }
.foot-langrand{
  font-size:.96rem; color:var(--paper-soft); line-height:1.65; max-width:54ch;
  margin-bottom:1.6rem;
}
.foot-langrand strong{ color:var(--paper); font-weight:500; }
.foot-col a.foot-visit{
  font-family:var(--sans); font-size:.9rem; font-weight:500;
  color:var(--paper);
  display:inline-flex;
  width:auto;
  gap:.55rem;
  align-items:center;
  padding-bottom:.3rem;
  border-bottom:1px solid var(--paper);
  transition:gap .3s ease, border-color .3s ease;
  margin-bottom:0;
}
.foot-col a.foot-visit .arr{ display:inline-block; transition:transform .3s ease; }
.foot-col a.foot-visit:hover{ gap:.85rem; border-bottom-color:var(--paper); }
.foot-col a.foot-visit:hover .arr{ transform:translate(2px,-2px); }
.foot-address{
  font-style:normal;
  font-size:.94rem; color:var(--paper-soft); line-height:1.55;
  margin-bottom:.6rem; max-width:24ch;
  display:block;
  transition:color .25s ease;
}
.foot-address:hover{ color:var(--paper); }
.foot-col a.foot-directions{
  font-family:var(--sans);
  font-size:.84rem; font-weight:500;
  color:var(--paper);
  display:inline-flex;
  width:auto;
  gap:.5rem; align-items:center;
  padding-bottom:.25rem;
  border-bottom:1px solid var(--paper);
  margin-bottom:1.3rem;
  transition:gap .3s ease, border-color .3s ease;
}
.foot-col a.foot-directions .arr{ display:inline-block; transition:transform .3s ease; }
.foot-col a.foot-directions:hover{ gap:.75rem; border-bottom-color:var(--paper); }
.foot-col a.foot-directions:hover .arr{ transform:translate(2px,-2px); }
.foot-bottom{
  display:flex; justify-content:space-between; flex-wrap:wrap; gap:1rem;
  padding-top:1.6rem; border-top:1px solid var(--paper-line);
  font-family:var(--mono); font-size:.72rem; color:var(--paper-faint);
  letter-spacing:.02em;
}

/* ──── scroll-reveal utility (driven by tectonic.js) ──── */
.reveal{
  transition:opacity .7s cubic-bezier(.25,.1,.25,1), transform .7s cubic-bezier(.25,.1,.25,1);
}
/* hidden only when JS is running (html.js); without JS, content stays visible */
.js .reveal{ opacity:0; transform:translateY(16px); }
.js .reveal.in{ opacity:1; transform:none; }

/* ──── balanced wrapping on multi-line headings ──── */
.section-head h2,
.case h3,
.case p,
.closing h2,
.fn-card h3,
.prose h2{
  text-wrap:balance;
}

/* ──── responsive ──── */
@media (max-width:960px){
  .nav-right{ display:none; }
  .nav-toggle{ display:flex; }
  .nav{ gap:1rem; }
  .work-grid{ grid-template-columns:1fr; }
  .closing-grid{ grid-template-columns:1fr; align-items:start; }
  .foot-grid{ grid-template-columns:1fr; row-gap:2.2rem; column-gap:0; }
  .foot-lockup{ margin-bottom:2.5rem; }
  .fn-track{ grid-auto-columns:80%; }
}

/* ──── reduced motion ──── */
@media (prefers-reduced-motion:reduce){
  *, *::before, *::after{ animation-duration:.01ms !important; transition-duration:.01ms !important; }
  .wash{ background:none; color:var(--ink); -webkit-text-fill-color:var(--ink); }
  .reveal{ opacity:1; transform:none; }
  .form-sent{ opacity:1; transform:none; }
  .form-sent.show{ animation:none; }
  .form-sent.show .sent-mark .chk{ animation:none; stroke-dashoffset:0; }
}


/* =================================================================
   Case-study / content template — promoted from the work pages so the
   whole site shares one definition (token-driven, namespaced cs-*).
   ================================================================= */
.back-row{ background:var(--paper); border-bottom:1px solid var(--rule); position:relative; z-index:5; }
.back-row a{
    display:inline-flex; align-items:center; gap:.55rem; padding:.95rem 0;
    font-family:var(--mono); font-size:.72rem; font-weight:500; letter-spacing:.14em;
    text-transform:uppercase; color:var(--ink-2); transition:color .2s ease;
  }
.back-row a:hover{ color:var(--ink); }
/* breadcrumb back-arrow: the link arrow (↗), mirrored to point up-left */
.bc-arr{ display:inline-block; transform:scaleX(-1); transition:transform .2s ease; }
.crumb:hover .bc-arr,
.back-row a:hover .bc-arr,
.back-link:hover .bc-arr{ transform:scaleX(-1) translateX(3px); }
.hero{
    position:relative; overflow:hidden;
    padding-top:clamp(3rem,7vh,5rem); padding-bottom:clamp(5rem,11vh,8rem);
    background:
      radial-gradient(circle at 16% 18%,
        rgba(31,51,221,0.12) 0%, rgba(31,51,221,0.05) 24%, transparent 56%),
      linear-gradient(135deg, var(--paper) 0%, var(--paper) 58%, #DCDEEC 100%);
  }
.hero .wrap{ position:relative; z-index:1; }
.hero-eyebrow{ position:relative; margin-bottom:1.8rem; color:var(--blue);
    opacity:0; animation:csRise .45s ease .025s forwards; }
.case-title{
    position:relative; font-family:var(--sans); font-weight:300;
    font-size:clamp(1.9rem,3.6vw,3rem); line-height:1.12; letter-spacing:-.02em;
    max-width:24ch; text-wrap:balance;
    opacity:0; animation:csRise .45s cubic-bezier(.2,.7,.2,1) .11s forwards;
  }
.hero-rule{ width:72px; height:1px; margin:2.3rem 0 1.7rem;
    background:linear-gradient(90deg, var(--blue), rgba(31,51,221,0.12));
    opacity:0; animation:csRise .45s ease .28s forwards; }
.hero-sub{ max-width:48ch; font-size:clamp(1.05rem,1.3vw,1.2rem);
    color:var(--ink-2); line-height:1.6; font-weight:400;
    opacity:0; animation:csRise .45s ease .34s forwards; }
.hero-figure{
    margin-top:clamp(3rem,6vw,4.5rem);
    opacity:0; transform:translateY(20px);
    animation:csRise .5s cubic-bezier(.2,.7,.2,1) .41s forwards;
  }
.hero-figure img{ display:block; width:100%; height:auto; }
@keyframes csRise{ to{ opacity:1; transform:translateY(0); } }
.cs-head{ margin-bottom:1.8rem; }
.cs-head .eyebrow{ display:block; margin-bottom:1.4rem; color:var(--blue); }
.cs-head h2{
    font-family:var(--sans); font-weight:300;
    font-size:clamp(1.55rem,2.7vw,2.15rem); line-height:1.18;
    letter-spacing:-.018em; max-width:22ch; text-wrap:balance;
  }
.cap-lead .cs-head{ margin-bottom:1.4rem; }
.body-prose p{ font-size:1.05rem; line-height:1.66; color:var(--ink-2);
    max-width:58ch; margin-bottom:1.1rem; }
.body-prose p:last-child{ margin-bottom:0; }
.big-statement{
    font-family:var(--sans); font-weight:300; color:var(--ink);
    font-size:clamp(1.4rem,2.4vw,1.95rem); line-height:1.32;
    letter-spacing:-.012em; max-width:42ch; text-wrap:balance;
  }
.big-statement .quiet{ color:var(--ink-2); }
.big-statement--blue{ color:var(--blue); }
.big-statement--smaller{ font-size:clamp(1.05rem,1.8vw,1.45rem); }
.cs-bold-spacer{ min-height:55vh; height:55vh; background:var(--paper); padding:0; z-index:1; }
.cs-takeover{
    position:fixed; inset:0; pointer-events:none; z-index:5;
    display:flex; align-items:center; overflow:hidden;
  }
.cs-takeover-fill{
    position:absolute; left:0; right:0; bottom:0;
    height:var(--cs-fill,0%);
    background:var(--blue); z-index:0; will-change:height;
  }
.cs-takeover-fill::before{
    content:""; position:absolute; inset:0; pointer-events:none;
    background:
      radial-gradient(ellipse at 82% 18%, rgba(255,255,255,0.10) 0%, transparent 52%),
      radial-gradient(ellipse at 14% 88%, rgba(255,255,255,0.06) 0%, transparent 46%);
  }
.cs-takeover-content{
    position:relative; z-index:1; width:100%;
    opacity:0; transition:opacity .12s linear;
  }
.cs-takeover-content .wrap{ width:100%; }
.cs-question-text{
    font-family:var(--sans); font-weight:300;
    font-size:clamp(1.9rem,4.4vw,3.6rem); line-height:1.1;
    letter-spacing:-.02em; color:var(--on-blue); max-width:20ch; text-wrap:balance;
    transform:translateY(20px);
    transition:transform .6s cubic-bezier(.25,.1,.25,1);
  }
.cs-takeover.is-revealed .cs-question-text{ transform:none; }
.cs-stack-cover{ position:relative; z-index:6; background:var(--paper); }
.full-width-image{
    margin-top:clamp(2.4rem,4vw,3.4rem);
    border:1px solid var(--rule); background:var(--paper-2); border-radius:3px;
    overflow:hidden;
  }
.full-width-image img{ display:block; width:100%; height:auto; }
.cs-video{ border:1px solid var(--rule); background:var(--paper-2);
    border-radius:3px; overflow:hidden; }
.cs-video video{ display:block; width:100%; height:auto; }
.cap-body{ display:grid; grid-template-columns:1fr 0.9fr; gap:3.6rem; align-items:start; }
.cap-body--balanced{ grid-template-columns:1fr 1fr; gap:clamp(2.4rem,4vw,3.4rem); }
.cap-lead p{ font-size:1.05rem; color:var(--ink-2); line-height:1.66; margin-bottom:1.1rem; }
.cap-lead p:last-child{ margin-bottom:0; }
.cap-visual{ border:1px solid var(--rule); background:var(--paper-2);
    border-radius:3px; overflow:hidden; align-self:stretch; }
.cap-visual img{ display:block; width:100%; height:auto; }
.cap-visual.photo{ display:flex; flex-direction:column; align-self:start; }
.cap-visual.bare,
  .full-width-image.bare{ background:transparent; border:0; border-radius:0; overflow:visible; }
.cap-detail{ margin-top:3.4rem; padding-top:2.7rem; border-top:1px solid var(--rule); }
.cap-detail .eyebrow{ display:block; margin-bottom:1.35rem; color:var(--ink-3); }
.cs-list{ list-style:none; display:grid; grid-template-columns:1fr 1fr; column-gap:2.6rem; }
.cs-list li{ display:flex; gap:.9rem; align-items:flex-start;
    padding:.82rem 0; border-top:1px solid var(--rule); font-size:1rem; color:var(--ink-2); }
.cs-list li:first-child,
  .cs-list li:nth-child(2){ border-top:0; padding-top:0; }
.cs-list li::before{ content:""; flex-shrink:0; width:6px; height:6px; margin-top:.52rem;
    background:var(--blue); transform:rotate(45deg); }
.partners-list{ list-style:none; display:grid; grid-template-columns:1fr; max-width:calc(50% - 1.3rem); }
.partners-list li{ display:flex; gap:.9rem; align-items:flex-start;
    padding:.82rem 0; border-top:1px solid var(--rule); font-size:1rem; color:var(--ink-2); }
.partners-list li:first-child{ border-top:0; padding-top:0; }
.partners-list li::before{ content:""; flex-shrink:0; width:6px; height:6px;
    margin-top:.52rem; background:var(--blue); transform:rotate(45deg); }
.engagement-meta{ list-style:none; display:grid; grid-template-columns:1fr; max-width:calc(72% - 1.3rem); }
.engagement-row{ display:grid; grid-template-columns:11rem 1fr; gap:1.4rem; align-items:baseline;
    padding:.95rem 0; border-top:1px solid var(--rule); }
.engagement-row:first-child{ border-top:0; padding-top:0; }
.engagement-row dt{ font-family:var(--mono); font-size:.7rem; font-weight:500;
    letter-spacing:.14em; text-transform:uppercase; color:var(--ink-3); }
.engagement-row dd{ font-size:1rem; color:var(--ink-2); line-height:1.55; }
.cs-closing-grid{ display:grid; grid-template-columns:1fr 1.3fr;
    gap:clamp(2.4rem,5vw,4.2rem); align-items:start; }
.cs-closing-cta{ padding-top:.6rem; }
.related-work .eyebrow{ display:block; color:var(--blue); margin-bottom:1.4rem; }
.related-list{ list-style:none; }
.related-list li{ border-top:1px solid var(--rule); }
.related-list li:first-child{ border-top:0; }
.related-item{ display:flex; flex-direction:column; padding:1.2rem 0;
    transition:padding-left .25s cubic-bezier(.3,.6,.2,1); }
.related-item:hover{ padding-left:.4rem; }
.related-title{ font-size:1.05rem; color:var(--ink); font-weight:500;
    letter-spacing:-.005em; margin-bottom:.35rem; }
.related-item:hover .related-title{ color:var(--blue); }
.related-context{ font-size:.85rem; color:var(--ink-2); line-height:1.5; }
.btn{ display:inline-flex; align-items:center; gap:.6rem; white-space:nowrap;
    font-family:var(--sans); transition:all .25s ease; }
.btn-ghost{
    font-size:.9rem; font-weight:500; color:var(--ink);
    border:1px solid var(--ink); border-radius:999px; padding:.85rem 1.6rem;
  }
.btn-ghost:hover{ background:var(--ink); color:var(--paper); gap:.85rem; }
@media (max-width:860px){
    .cap-body{ grid-template-columns:1fr; gap:2.4rem; }
    .cs-list{ grid-template-columns:1fr; }
    .cs-list li:nth-child(2){ border-top:1px solid var(--rule); padding-top:.82rem; }
    .partners-list{ max-width:none; }
    .engagement-meta{ max-width:none; }
    .engagement-row{ grid-template-columns:1fr; gap:.4rem; }
    .cs-closing-grid{ grid-template-columns:1fr; gap:2.4rem; }
  }


/* ── Langrand masthead — site-system chrome, all pages ──────────────────
   Unique class names (lg-mast*, tf-nav*, foot-wordmark) deliberately do NOT
   reuse any legacy selector (.brand-logo, .brand-lockup, .foot-lockup, etc.)
   so nothing from the old full/mark toggle system can collide with or
   override these rules regardless of cascade order or stale caches. ── */
/* Langrand logo height mirrors thinklangrand.com's own three breakpoint
   tiers (measured directly off their live site — NOT a smooth fluid scale,
   Wix snaps between independently-set values per tier, so we do too).
   Transformation's nav mark is derived from --lg-h at --tf-ratio, so the
   two can never drift out of sync when either changes. Ratio is higher at
   tablet/mobile (0.75) than desktop (0.55) — at the smaller Langrand sizes,
   0.55 made the full "TRANSFORMATION" wordmark unreadably small. */
:root{ --lg-h:22.48px; --tf-ratio:0.55; }
@media (max-width:1200px){ :root{ --lg-h:13.16px; --tf-ratio:0.75; } }  /* tablet — assumed split, verify against Wix's actual breakpoint */
@media (max-width:960px){  :root{ --lg-h:15.74px; } }                   /* mobile — synced to the site's existing nav-collapse breakpoint; ratio stays 0.75 from the tablet tier above */

/* Outer strip carries the full-bleed border + the collapse animation, so the
   divider always spans edge-to-edge and disappears cleanly with the rest of
   the masthead on scroll. Inner .lg-mast stays wrap-constrained for layout. */
.lg-mast-outer{
  border-bottom:1px solid var(--rule);
  max-height:110px; opacity:1; overflow:hidden;
  transition:max-height .3s ease, opacity .25s ease, border-color .3s ease;
}
.site-header.is-scrolled .lg-mast-outer{
  max-height:0; opacity:0; border-bottom-color:transparent;
}
.lg-mast{
  display:grid; grid-template-columns:1fr auto 1fr; align-items:center; gap:.6rem;
  padding:1.4rem var(--pad);
  max-width:var(--maxw); margin:0 auto; box-sizing:border-box;
}
.lg-mast-spacer{ display:block; }
.lg-mast-mark{ display:flex; align-items:center; justify-content:center; line-height:0; }
.lg-mast-mark svg{ display:block; height:var(--lg-h); width:auto; }
.lg-mast-link{
  justify-self:end; font-family:var(--sans); font-size:.92rem; color:var(--ink-2); text-decoration:none;
  display:inline-flex; align-items:center; gap:.35rem; transition:color .2s ease; white-space:nowrap;
}
.lg-mast-link:hover{ color:var(--blue); }
.lg-mast-link .arr{ font-size:.8rem; display:inline-block; }
/* mobile — logo moves to the left margin, matching thinklangrand.com's own mobile header */
@media (max-width:960px){
  .lg-mast{ grid-template-columns:auto 1fr; padding-top:1rem; padding-bottom:1rem; }
  .lg-mast-spacer{ display:none; }
  .lg-mast-mark{ justify-content:flex-start; }
}

/* Nav wordmark — Transformation mark, sole clickable logo, derived from --lg-h * --tf-ratio */
.tf-nav-mark{ display:block; line-height:0; }
.tf-nav-mark svg{ display:block; height:calc(var(--lg-h) * var(--tf-ratio)); width:auto; }
