/* =============================================================================
   Ojus Consulting — shared styles

   THEME MODEL
   The page ground is light. Dark is punctuation, not the canvas: the home hero,
   the closing CTA band, and the footer. Everything in between is warm off-white
   with white cards, so 41 pages of content stay readable and feel like air
   rather than a lightbox.

   PALETTE — electric blue on cool neutrals. One accent, used sparingly:
   rules, links, the CTA, one card per band. Neutrals carry a blue bias so
   they read as chosen rather than default grey.

   TYPE — Schibsted Grotesk (a grotesk with slightly humanist proportions,
   deliberately not Inter) for everything structural; IBM Plex Mono for
   eyebrows, labels and data, which is where the technical register lives;
   Newsreader italic for the two editorial moments (pull quote, footer
   statement). Faces are embedded in fonts.css as data URIs.
   ========================================================================== */
:root{
  /* ground + ink */
  --bg:#FBFCFE;          /* page ground, cool off-white   */
  --tint:#F1F4FA;        /* alternating section band      */
  --surface:#FFFFFF;     /* card surface                  */
  --ink:#0B1020;         /* body + headings, blue-black   */
  --ink-2:#4A5468;       /* secondary text                */
  /* tertiary / captions. Darkened from #6B7689, which cleared 4.5:1 on white
     but not on the tint band (4.16) — and the card wash takes it lower still.
     This value clears 4.5:1 on white, on tint, and at the deepest point of
     the wash, so captions stay legible wherever a card puts them.          */
  --muted:#5A6376;
  --line:#E3E8F2;        /* hairlines on light            */

  /* dark bands */
  --dark:#070B18;
  --dark-2:#101832;
  --dark-line:#232C47;
  --dark-ink:#F3F6FC;
  --dark-muted:#A7B1C6;

  /* brand */
  --accent:#0442F0;      /* the blue — fills, rules, CTA         */
  --accent-2:#7C9BFF;    /* lifted blue — hover/links on dark    */
  --accent-dk:#0433BE;   /* deepened — small text on light (AA)  */
  --wash:4,66,240;
  --wash-2:124,155,255;

  /* legacy aliases kept so generated markup needs no changes */
  --paper:#FFFFFF;
  --paper-ink:#0B1020;
  --panel:#FFFFFF;
  --maroon:#0A1F6B;

  --shadow:0 1px 2px rgba(16,26,64,.05), 0 10px 30px rgba(16,26,64,.06);
  --shadow-lift:0 2px 6px rgba(16,26,64,.07), 0 22px 48px rgba(16,26,64,.11);

  /* MOTION — one easing curve and three durations across the whole site, so
     nothing feels like it belongs to a different page. The curve is a gentle
     decelerate: fast to start, settles without bounce.                      */
  --ease:cubic-bezier(.22,.61,.36,1);
  --t-fast:140ms;   /* colour + small state changes */
  --t-mid:260ms;    /* hovers, panels              */
  --t-slow:520ms;   /* reveals                     */

  --max:1340px;
  --pad:clamp(20px,4vw,56px);
  --hdr:82px;
  --sans:"Schibsted Grotesk","Helvetica Neue",Arial,system-ui,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --serif:"Newsreader",Georgia,"Times New Roman",serif;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
/* the fixed header would otherwise cover an anchored heading on jump links */
:target{scroll-margin-top:calc(var(--hdr) + 24px)}
/* long pages: let the browser skip layout+paint for sections still offscreen.
   contain-intrinsic-size keeps the scrollbar honest while they're skipped.  */
main>section{content-visibility:auto;contain-intrinsic-size:auto 600px}
main>section.hero{content-visibility:visible}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);
  -webkit-font-smoothing:antialiased;font-size:17px;line-height:1.65;overflow-x:hidden}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
.wrap{max-width:var(--max);margin:0 auto;padding-inline:var(--pad)}

/* ---------------- type ----------------
   Labels are mono and small; headings are grotesk with negative tracking that
   tightens as the size grows. That contrast — technical label against a tight
   display line — is doing most of the work here.                            */
.eyebrow{font-family:var(--mono);font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;
  font-weight:500;color:var(--accent-dk)}
.h2{font-size:clamp(1.8rem,3.2vw,2.85rem);line-height:1.06;font-weight:700;
  letter-spacing:-.035em;margin:0;color:var(--ink);text-wrap:balance}
.lead{color:var(--ink-2);font-size:clamp(1.02rem,1.15vw,1.14rem);max-width:60ch;margin:0}
.rule{width:36px;height:2px;background:var(--accent);margin-bottom:1.4rem}
.chip{display:inline-flex;align-items:center;gap:.6rem;font-weight:700;color:var(--accent-dk);font-size:.9rem}
.chip i{display:grid;place-items:center;width:22px;height:22px;background:var(--accent);color:#fff;
  font-style:normal;font-size:.75rem;transition:transform var(--t-fast) var(--ease)}
.chip:hover i{transform:translateX(4px)}
.skip{position:absolute;left:-9999px;top:0;background:var(--ink);color:#fff;padding:.8rem 1.2rem;z-index:99}
.skip:focus{left:0}
:focus-visible{outline:2px solid var(--accent-dk);outline-offset:3px}

/* ---------------- header ---------------- */
header{position:fixed;inset:0 0 auto;z-index:60;background:rgba(251,252,254,.88);
  backdrop-filter:blur(14px);border-bottom:1px solid var(--line);transition:border-color var(--t-mid) var(--ease),box-shadow var(--t-mid) var(--ease)}
header.solid,header.pinned{border-bottom-color:var(--line);box-shadow:0 1px 20px rgba(16,26,64,.05)}
.bar{display:flex;align-items:center;gap:2rem;height:var(--hdr);max-width:var(--max);margin:0 auto;
  padding-inline:var(--pad)}

/* Official supplied lockup. The source carries generous transparent padding;
   this frame removes only that padding while keeping its pixels untouched. */
.logo{display:flex;align-items:center;flex:none}
.logo-art{position:relative;display:block;width:132px;aspect-ratio:273/113;overflow:hidden;flex:none}
.logo-art img{position:absolute;max-width:none;width:183.15%;height:auto;left:-54.21%;top:-169.91%;
  transition:opacity var(--t-fast) var(--ease)}
.logo:hover .logo-art img{opacity:.82}

/* scoped to the header bar so the drawer's <nav> keeps normal block flow */
.bar nav{margin-inline:auto;display:flex;gap:2rem}
.navitem>button,.navitem>a{position:relative;display:flex;align-items:center;gap:.4rem;height:var(--hdr);
  font-size:.97rem;font-weight:500;color:var(--ink)}
.navitem>button svg{width:10px;transition:transform var(--t-fast) var(--ease)}
.navitem:hover>button svg,.navitem:focus-within>button svg{transform:rotate(180deg)}
.navitem:hover>button,.navitem>a:hover{color:var(--accent-dk)}
/* you-are-here: the section owning this page keeps a rule on the header edge */
.navitem.current>button,.navitem.current>a{color:var(--accent-dk);font-weight:700}
.navitem.current>button::after,.navitem.current>a::after{content:"";position:absolute;
  left:0;right:0;bottom:0;height:2px;background:var(--accent)}
/* and the exact page is marked inside the open mega panel */
.megacols li a[aria-current]{color:var(--accent-dk);font-weight:700}
.megacols li a[aria-current]::before{content:"";display:inline-block;width:6px;height:6px;
  background:var(--accent);margin-right:.5rem;vertical-align:middle}

/* full-width mega panel */
.mega{position:fixed;left:0;right:0;top:var(--hdr);background:var(--surface);
  border-bottom:1px solid var(--line);padding:clamp(2rem,3.4vw,3rem) 0 clamp(2.2rem,4vw,3.4rem);
  opacity:0;visibility:hidden;translate:0 -10px;transition:opacity var(--t-mid) var(--ease),visibility var(--t-mid),translate var(--t-mid) var(--ease);
  box-shadow:0 30px 60px rgba(16,26,64,.10);max-height:calc(100svh - var(--hdr));overflow:auto}
.navitem:hover .mega,.navitem:focus-within .mega{opacity:1;visibility:visible;translate:0 0}
.mega h3{display:flex;align-items:center;gap:.8rem;margin:0 0 clamp(1.4rem,2.4vw,2.2rem);
  font-size:clamp(1.3rem,1.9vw,1.7rem);font-weight:700;letter-spacing:-.02em}
.mega h3 i{display:grid;place-items:center;width:24px;height:24px;background:var(--accent);color:#fff;
  font-style:normal;font-size:.8rem}
/* Two segments, one per group — four even columns of links made the two
   groups read as a single undifferentiated block. A rule down the gap does
   the separating so the headings don't have to.                           */
.megacols{position:relative;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:0 clamp(2.5rem,5vw,5rem);max-width:860px}
.megacols::before{content:"";position:absolute;top:.2rem;bottom:.2rem;left:50%;
  width:1px;background:var(--line)}
.megacols h4{grid-row:1;margin:0 0 1.1rem;color:var(--muted);font-family:var(--mono);font-weight:500;
  font-size:.68rem;letter-spacing:.1em;text-transform:uppercase}
.megacols h4.c1{grid-column:1}.megacols h4.c2{grid-column:2}
.megacols ul{grid-row:2;margin:0;padding:0;list-style:none}
.megacols li a{padding:.5rem 0}
.megacols li a{display:block;padding:.42rem 0;color:var(--ink-2);font-size:.97rem}
.megacols li a:hover{color:var(--accent-dk)}
.utils{display:flex;align-items:center;gap:1.3rem}
.utils svg{width:19px;height:19px}
.burger{display:none}

/* ---------------- topic bar ---------------- */
.subnav{position:fixed;top:var(--hdr);left:0;right:0;z-index:55;background:var(--maroon);color:#fff}
.subnav .in{max-width:var(--max);margin:0 auto;padding-inline:var(--pad);display:flex;align-items:stretch;
  overflow-x:auto;scrollbar-width:none}
.subnav .in::-webkit-scrollbar{display:none}
.subnav b{display:flex;align-items:center;font-family:var(--mono);font-size:.7rem;font-weight:500;
  margin-right:auto;padding:.85rem 1.4rem .85rem 0;white-space:nowrap;letter-spacing:.08em;text-transform:uppercase;
  color:rgba(255,255,255,.72)}
.subnav a{display:flex;align-items:center;padding:.85rem 1.1rem;font-size:.93rem;white-space:nowrap;
  color:rgba(255,255,255,.88);transition:background var(--t-fast) var(--ease),color var(--t-fast) var(--ease)}
.subnav a:hover{background:rgba(255,255,255,.12);color:#fff}
.subnav a[aria-current="true"]{background:var(--bg);color:var(--maroon);font-weight:700}
/* The bar hides its scrollbar, so the only thing telling you there is more of
   it is this fade. Applied per edge by site.js, so a bar that fits has none.
   mask-image rather than an overlay: the gradient has to eat the links, and
   an overlay would sit above them and swallow clicks.                      */
.subnav .in.has-l{mask-image:linear-gradient(90deg,transparent 0,#000 34px)}
.subnav .in.has-r{mask-image:linear-gradient(90deg,#000 calc(100% - 34px),transparent 100%)}
.subnav .in.has-l.has-r{mask-image:linear-gradient(90deg,transparent 0,#000 34px,
  #000 calc(100% - 34px),transparent 100%)}

/* ---------------- hero: home (the one dark moment up top) ---------------- */
.hero{position:relative;min-height:clamp(560px,86svh,860px);display:flex;align-items:center;
  padding-top:var(--hdr);overflow:hidden;background:var(--dark);color:var(--dark-ink)}
canvas.field{position:absolute;inset:0;width:100%;height:100%;opacity:.85}
/* Home hero: the copy stacks into the left column, the globe gets a real right
   column of its own. A flow column rather than an absolute box means the grid
   gap keeps them apart at every width with no arithmetic — the earlier
   absolute+calc version measured as a 235px overlap.                       */
/* Home hero: shorter than the base .hero, with less top/bottom padding so it
   doesn't dominate the fold. */
.hero.globe{min-height:clamp(480px,64svh,680px)}
.hero.globe .wrap{grid-template-columns:minmax(0,1fr) clamp(300px,40vw,520px);
  align-items:center;padding-block:clamp(1.4rem,2.4vw,2.4rem)}
.hero.globe .htext{min-width:0}
/* The headline must be exactly two lines: "TALENT THAT" / "TRANSF>RMS".
   Sizing it off the viewport (6.6vw) broke that — the text column shrinks by
   the globe's fixed width, so past ~1300px the words outgrew their column and
   wrapped to three lines. Size it off the COLUMN instead (container query) and
   stop the first line wrapping, so both lines always fit whatever width the
   column is. 13cqw keeps the longest line (~7.1em) inside the column with a
   margin.                                                                   */
.hero.globe .htext{container-type:inline-size}
.hero.globe h1{font-size:clamp(2.4rem,12cqw,6rem);white-space:nowrap}
.hero.globe h1 .ind{padding-left:clamp(0px,3vw,2.4rem)}
.hero.globe .htext aside{margin-top:clamp(1.6rem,3vw,2.6rem);max-width:52ch}
.hero.globe .htext aside p{max-width:52ch}
.gcol{position:relative;min-width:0;align-self:center;justify-self:end;width:100%}
/* Country tags on the globe markers. Mirrored from cobe's helper elements by
   hero-globe.js (see there), so they position without CSS Anchor Positioning.
   Styled like the mono labels used elsewhere; a small tail points down to the
   marker. Sit above the marker, centred, and fade with the marker's facing.  */
.gtag{position:absolute;transform:translate(-50%,calc(-100% - 9px));
  font-family:var(--mono);font-size:.58rem;letter-spacing:.09em;text-transform:uppercase;
  white-space:nowrap;pointer-events:none;z-index:3;
  padding:.28rem .5rem;border-radius:2px;
  background:#0B1020;color:#fff;border:1px solid rgba(124,155,255,.4);
  box-shadow:0 2px 10px rgba(0,0,0,.4);opacity:0;
  transition:opacity .5s var(--ease)}
.gtag::after{content:"";position:absolute;top:100%;left:50%;transform:translateX(-50%);
  border:5px solid transparent;border-top-color:#0B1020}
/* smaller on the mobile dome so the labels fit the ~300px globe */
@media(max-width:640px){.gtag{font-size:.5rem;padding:.2rem .38rem;letter-spacing:.06em}}

/* A soft halo so the sphere separates from the near-black hero — the canvas is
   transparent outside the globe, so drop-shadow traces the sphere's edge.   */
#heroglobe{filter:drop-shadow(0 0 48px rgba(4,66,240,.42));
  display:block;width:100%;aspect-ratio:1;height:auto;margin-inline:auto;
  max-width:min(40vw,520px);
  opacity:0;transition:opacity 1.2s var(--ease)}

@media(max-width:900px){
  /* one column: copy first, globe a band beneath it — never behind the text */
  .hero.globe .wrap{grid-template-columns:minmax(0,1fr)}
  .hero.globe .htext aside{max-width:none}
  .gcol{margin-top:1.5rem}
  #heroglobe{max-width:min(72vw,360px)}
}
@media(max-width:520px){
  #heroglobe{max-width:82vw}
}
.hero::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 80% at 50% 55%,transparent 30%,var(--dark) 80%)}
.hero .wrap{position:relative;z-index:2;display:grid;
  grid-template-columns:minmax(0,1fr) minmax(300px,380px);
  gap:clamp(2rem,4vw,4rem);align-items:center;width:100%;padding-block:4rem}
h1{margin:0;font-weight:700;letter-spacing:-.05em;line-height:.94;
  font-size:clamp(2.8rem,6.6vw,6.4rem);text-transform:uppercase}
h1 .ind{padding-left:clamp(0px,6vw,6rem);display:block}
h1 em{font-style:normal;color:var(--accent)}
.hero aside h2{font-size:clamp(1.15rem,1.5vw,1.4rem);margin:0 0 .9rem;font-weight:700;letter-spacing:-.01em}
.hero aside p{color:#D9D0CC;margin:0 0 1.6rem;font-size:1.02rem;max-width:36ch}
.hero .chip{color:var(--accent-2)}
.hero .chip i{background:var(--accent);color:#fff}
.pause{position:absolute;left:var(--pad);bottom:7%;z-index:3;width:32px;height:32px;
  display:grid;place-items:center;border:1px solid rgba(255,255,255,.25)}
.pause span{display:block;width:10px;height:14px;border-left:3px solid #fff;border-right:3px solid #fff}
.pause.paused span{border:0;width:0;height:0;border-left:12px solid #fff;border-top:7px solid transparent;
  border-bottom:7px solid transparent;margin-left:4px}

/* ---------------- hero: interior pages (light, editorial) ---------------- */
.hero.interior{background:var(--tint);color:var(--ink);min-height:0;
  padding-top:calc(var(--hdr) + 72px);padding-bottom:clamp(2.5rem,5vw,4rem);
  border-bottom:1px solid var(--line)}
.hero.interior::after{display:none}
.hero.interior canvas.field{opacity:.5}
.hero.interior .wrap{grid-template-columns:minmax(0,1.1fr) minmax(280px,400px);align-items:end;
  padding-block:clamp(2rem,4vw,3.5rem)}
.hero.interior h1{text-transform:none;font-weight:700;color:var(--ink);
  font-size:clamp(2.3rem,4.6vw,3.9rem);letter-spacing:-.045em;line-height:1.03;text-wrap:balance}
.hero.interior .eyebrow{color:var(--accent-dk)}
.hero.interior aside p{font-size:clamp(1.02rem,1.25vw,1.2rem);color:var(--ink-2);max-width:42ch;margin:0}
.hero.interior .pause{border-color:rgba(25,17,16,.18);bottom:1.5rem}
.hero.interior .pause span{border-color:var(--ink)}
.hero.interior .pause.paused span{border-left-color:var(--ink)}
main:not(.has-subnav) .hero.interior{padding-top:calc(var(--hdr) + 28px)}

/* ---------------- sections ---------------- */
section{scroll-margin-top:calc(var(--hdr) + 20px)}
.sec{padding:clamp(3.5rem,6vw,6rem) 0}
/* Alternating bands. The hero is always section 1, so tinting the ODD sections
   from 3 onward guarantees the first band after the hero contrasts with it —
   whether the hero is dark (home) or tinted (interior).                       */
main>section.sec:nth-of-type(2n+1){background:var(--tint)}
.sechead{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1.5rem 3rem;
  align-items:end;margin-bottom:clamp(2rem,3.6vw,3.2rem)}
.cards{padding:clamp(3rem,5vw,5rem) 0}

/* ---------------- card surface (light) ---------------- */
.crd,.svc article,.inds div,.step,.stat,.job,.logos span,.quote .said,.formcard,.lnk,.person,
.mrow span{
  position:relative;overflow:hidden;background:var(--surface);border:1px solid var(--line);
  border-radius:2px;padding:clamp(1.4rem,2vw,2rem);
  box-shadow:var(--shadow);
  transition:transform var(--t-mid) var(--ease),border-color var(--t-mid) var(--ease),box-shadow var(--t-mid) var(--ease)}
.crd:hover,.svc article:hover,.inds div:hover,.step:hover,.stat:hover,.job:hover,
.logos span:hover,.lnk:hover{transform:translateY(-4px);border-color:#C9D5EC;box-shadow:var(--shadow-lift)}

/* the ember wash, kept but reduced to a whisper on light ground */
.crd::after,.svc article::after,.inds div::after,.step::after,.stat::after,
.job::after,.logos span::after,.quote .said::after,.lnk::after,
.mrow span::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:62%;z-index:0;pointer-events:none;
  background:radial-gradient(58% 100% at var(--gx,38%) 122%,
    rgba(var(--wash),var(--ga,.11)) 0%,rgba(var(--wash),.03) 48%,transparent 72%);
  transition:opacity var(--t-mid) var(--ease)}
.crd:hover::after,.svc article:hover::after,.inds div:hover::after,.step:hover::after,
.stat:hover::after,.job:hover::after,.lnk:hover::after{opacity:1.35}
.crd>*,.svc article>*,.inds div>*,.step>*,.stat>*,.job>*,.logos span>*,
.quote .said>*,.formcard>*,.lnk>*,.person>*{position:relative;z-index:1}
.lnk:nth-child(odd),.inds div:nth-child(odd){--gx:26%}
.lnk:nth-child(even),.inds div:nth-child(even){--gx:74%}

/* ---------------- services ---------------- */
/* Services. Card colours run through per-card variables so a card flips
   light↔dark by reassigning tokens — every child follows automatically, at
   every breakpoint. One accented card per band of three keeps the grid from
   going flat without the checkerboard, which read as noise on light ground. */
.svc{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(14px,1.5vw,22px)}
/* The fade belongs to this one category. It is a real background gradient,
   not the ::after wash: that wash is a radial whose centre sits below the
   card, so the strongest pixel it can paint is about half the alpha you give
   it — at any value light enough to read on, you cannot see it. --ga is off
   here so the fade is the only shade on the card.                          */
.svc article{display:flex;flex-direction:column;
  --c-bg:linear-gradient(180deg,#fff 0%,#fff 38%,#E7EDFC 76%,#D3DEFA 100%);
  --c-bd:var(--line);--c-ink:var(--ink);--c-mut:var(--ink-2);
  --c-num:var(--accent-dk);--c-chip-bg:rgba(255,255,255,.72);--c-chip-bd:var(--line);
  --c-chip-tx:var(--ink-2);--c-link:var(--accent-dk);--ga:0;
  background:var(--c-bg);border-color:var(--c-bd)}
.svc .no{font-family:var(--mono);font-size:.8rem;color:var(--c-num);font-weight:500;letter-spacing:.04em}
.svc h3{font-size:clamp(1.12rem,1.45vw,1.35rem);margin:.5rem 0 .7rem;font-weight:700;
  letter-spacing:-.015em;color:var(--c-ink)}
.svc p{color:var(--c-mut);margin:0 0 1.3rem;font-size:.98rem;max-width:38ch}
.svc ul{margin:auto 0 0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:.4rem}
.svc li{font-size:.75rem;padding:.28rem .6rem;border-radius:2px;
  background:var(--c-chip-bg);border:1px solid var(--c-chip-bd);color:var(--c-chip-tx)}
.svc .chip{color:var(--c-link)}
/* No card here is picked out. Every card in the category gets the same fade,
   so the surface says "this is What we do" and never "this one matters more". */

/* ---------------- stats ---------------- */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(14px,1.5vw,22px)}
.stat{--ga:.09}
.stat b{display:block;font-size:clamp(2.1rem,3.8vw,3.2rem);font-weight:700;letter-spacing:-.05em;
  line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}
.stat b em{font-style:normal;color:var(--accent-dk)}
.stat span{color:var(--ink-2);font-size:.93rem;display:block;margin-top:.7rem;max-width:24ch}

/* ---------------- simple + linked card grids ---------------- */
/* Card grids size to their content count (see fit() in build.mjs) so the last
   row is never a line of empty cells.                                        */
.inds{display:grid;gap:clamp(14px,1.5vw,22px);grid-template-columns:repeat(4,1fr)}
.inds.cols-3{grid-template-columns:repeat(3,1fr)}
.inds.cols-4{grid-template-columns:repeat(4,1fr)}
.inds.lead-span>:first-child{grid-column:span 2}
/* Card surfaces rotate in threes: white → pale tint → saturated. Colours run
   through per-card variables so every child (title, body, chips, link) follows
   its surface automatically, at every breakpoint.                            */
.inds div,.lnk{
  --k-bg:var(--surface); --k-bd:var(--line); --k-ink:var(--ink); --k-mut:var(--ink-2);
  --k-line:var(--line); --k-chip:var(--tint); --k-chip-bd:var(--line); --k-chip-tx:var(--ink-2);
  --k-go:var(--accent-dk); --ga:.08;
  display:flex;flex-direction:column;gap:.5rem;
  background:var(--k-bg);border-color:var(--k-bd);color:var(--k-ink)}
.inds h3,.lnk h3{margin:0;font-size:clamp(1.02rem,1.2vw,1.15rem);font-weight:700;color:var(--k-ink);
  letter-spacing:-.015em}
.inds small,.lnk small{color:var(--k-mut);font-size:.93rem;line-height:1.55}
.inds div{justify-content:space-between;min-height:150px}
/* specialisms — the detail that stops these cards reading as empty boxes */
.tags{list-style:none;margin:.85rem 0 0;padding:.85rem 0 0;display:flex;flex-wrap:wrap;gap:.35rem;
  border-top:1px solid var(--k-line)}
.tags li{font-family:var(--mono);font-size:.66rem;letter-spacing:.02em;color:var(--k-chip-tx);
  background:var(--k-chip);border:1px solid var(--k-chip-bd);padding:.24rem .5rem;border-radius:2px}
.lnk .go{margin-top:auto;padding-top:1rem;font-weight:700;font-size:.84rem;color:var(--k-go)}

/* The index grids stay a plain white surface. The rotation that used to run
   through here — pale tint on the 2nd of each three, saturated blue on the
   3rd — was read as ranking rather than texture, which is exactly what a
   list of peers must not do. One category carries a fade (see .svc); these
   carry none, and industries will carry artwork instead.                   */

/* ---------------- figure band ----------------
   A dark band mid-page. The site keeps dark for punctuation — hero, this, the
   closing CTA, the footer — and this one earns it: a row of figures reads as a
   statement, and a statement wants a change of ground under it.            */
/* The alternating-band rule is main>section.sec:nth-of-type(2n+1), which at
   [0,2,2] outranks a plain class — a band that landed on an odd section would
   be repainted tint. .cta already carries this workaround; these need it too,
   and they need it whatever position adding a section pushes them into.    */
.figband,main>section.figband:nth-of-type(2n),main>section.figband:nth-of-type(2n+1){
  background:var(--dark);color:var(--dark-ink);
  background-image:radial-gradient(120% 90% at 50% -20%,rgba(4,66,240,.26),transparent 62%)}
/* the strips stay on the page ground at any position, for the same reason */
main>section.strip:nth-of-type(2n),main>section.strip:nth-of-type(2n+1){background:var(--bg)}
/* short sections: the default 600px reservation makes the scrollbar lurch
   past a 200px strip while it is still skipped                            */
main>section.strip{contain-intrinsic-size:auto 230px}
main>section.figband{contain-intrinsic-size:auto 430px}
.figh{color:#fff;text-align:center;margin-bottom:clamp(2rem,3.4vw,3rem)}
.figs{display:grid;grid-template-columns:repeat(5,1fr);gap:clamp(14px,2vw,32px)}
.fig{text-align:center}
.figart{width:clamp(88px,9vw,124px);margin:0 auto .9rem}
.figart svg{width:100%;height:auto;display:block;overflow:visible}
/* one colour vocabulary across all five motifs */
.figart .halo{fill:rgba(4,66,240,.16)}
.figart .rim{stroke:var(--accent-2);stroke-width:1.6;fill:none}
.figart .grat{stroke:rgba(124,155,255,.5);stroke-width:1.2;fill:none}
.figart .lens{fill:rgba(124,155,255,.22);stroke:none}
.figart .rib{stroke:rgba(124,155,255,.55);stroke-width:2.4;fill:none;stroke-linejoin:round}
.figart .pin,.figart .pind{fill:#fff}
.figart .pinf{fill:var(--accent-2)}
.figart .d0{fill:#fff}
.figart .d1{fill:var(--accent-2)}
.figart .d2{fill:rgba(124,155,255,.62)}
.fig b{display:block;font-size:clamp(2.2rem,4vw,3.4rem);font-weight:700;letter-spacing:-.05em;
  line-height:1;color:#fff;font-variant-numeric:tabular-nums}
.fig span{display:block;margin-top:.7rem;color:var(--dark-muted);font-size:.97rem}

/* --- interactive figures ------------------------------------------------
   Each figure lifts on hover, its number picks up the accent, and the motif
   brightens — the whole card responds as one. The count-up itself is driven
   by site.js when the band scrolls into view (and is skipped under reduced
   motion, where the final numbers just appear).                           */
.fig{transition:transform var(--t-mid) var(--ease)}
.fig{cursor:default}
.fig .figart{transition:transform var(--t-mid) var(--ease),filter var(--t-mid) var(--ease)}
.fig b{transition:color var(--t-fast) var(--ease)}
.fig:hover{transform:translateY(-6px)}
.fig:hover .figart{transform:scale(1.06);filter:drop-shadow(0 6px 18px rgba(4,66,240,.45))}
.fig:hover b{color:var(--accent-2)}
.fig:hover .figart .halo{fill:rgba(4,66,240,.32)}
.fig:hover .figart .rim{stroke:#fff}
/* while counting, the number pulses very slightly so it reads as "live" */
.fig b.counting{color:var(--accent-2)}

/* ---------------- client strip + globe ---------------- */
/* The strip sits directly under the hero, so it has to be quiet: a label, a
   row of wordmarks, no heading competing with the one above it.            */
.strip{padding:clamp(2rem,3.2vw,3rem) 0;overflow:hidden}
.striplab{font-family:var(--mono);font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);margin:0 0 .9rem;max-width:var(--max);
  padding-inline:var(--pad);margin-inline:auto}
/* the second rail's label needs air above it, not a full section gap */
.striplab + .marquee + .striplab{margin-top:1.6rem}
/* Marquee. Two identical rows in one track; the track slides exactly -50%, so
   the second row arrives where the first began and the loop never seams. It
   runs edge to edge rather than inside .wrap, because a rail that stops at
   the gutter looks like it broke rather than like it continues.
   The global reduced-motion rule kills the animation, which leaves the first
   row parked and readable — no special case needed.                        */
.marquee{position:relative;overflow:hidden;
  mask-image:linear-gradient(90deg,transparent 0,#000 90px,#000 calc(100% - 90px),transparent 100%)}
.mtrack{display:flex;width:max-content;animation:marq var(--marq,40s) linear infinite}
/* second rail runs the other way — two identical rails on one page read as
   a repeat rather than a pair                                          */
.marquee.rev .mtrack{animation-direction:reverse}
/* keeps scrolling under the cursor — no pause on hover */
@keyframes marq{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.mrow{display:flex;align-items:stretch;gap:clamp(12px,1.4vw,20px);
  padding-right:clamp(12px,1.4vw,20px)}
/* each mark is a card, same as everything else on the site */
.mrow span{--ga:.07;display:grid;place-items:center;flex:0 0 auto;min-width:210px;min-height:104px;
  padding:.9rem 1.6rem;color:var(--muted);font-weight:700;letter-spacing:.09em;font-size:.9rem;
  white-space:nowrap}
/* Fill the card: logos scale to the card's height rather than a fixed 38px,
   capped in width so a wide wordmark does not run edge to edge.
   Shown in their real brand colours (no greyscale).                        */
.mrow span img{height:56px;max-height:56px;width:auto;max-width:150px;object-fit:contain;
  transition:transform var(--t-mid) var(--ease)}
.mrow span:hover img{transform:scale(1.04)}

/* ---------------- process steps ---------------- */
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(14px,1.5vw,22px)}
.step{--ga:.09;border-top:2px solid var(--accent)}
.step b{display:block;font-family:var(--mono);font-size:.68rem;letter-spacing:.08em;
  color:var(--accent-dk);margin-bottom:.7rem;font-weight:500}
.step h3{margin:0 0 .5rem;font-size:1.15rem;font-weight:700;color:var(--ink)}
.step p{margin:0;color:var(--ink-2);font-size:.95rem}

/* ---------------- insight cards ---------------- */
.cardgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(14px,1.6vw,24px)}
.cardgrid.cols-3{grid-template-columns:repeat(3,1fr)}
.cardgrid.duo{grid-template-columns:repeat(2,1fr)}
.cardgrid.duo .card{aspect-ratio:16/9;min-height:280px}
.cardgrid.duo .card h3{font-size:clamp(1.2rem,1.7vw,1.6rem);max-width:22ch}
.card{position:relative;aspect-ratio:5/7;overflow:hidden;display:flex;flex-direction:column;
  padding:clamp(18px,1.7vw,28px);isolation:isolate;border-radius:2px;
  box-shadow:var(--shadow);transition:transform var(--t-mid) var(--ease),box-shadow var(--t-mid) var(--ease)}
.card:hover{transform:translateY(-6px);box-shadow:var(--shadow-lift)}
.card .eyebrow,.card h3,.card .go{position:relative;z-index:2}
.card h3{margin:.9rem 0 0;font-size:clamp(1.02rem,1.3vw,1.35rem);line-height:1.25;
  font-weight:700;letter-spacing:-.015em;max-width:16ch}
.card .go{margin-top:auto;font-weight:600;font-size:.86rem;opacity:0;translate:0 6px;transition:opacity var(--t-mid) var(--ease),translate var(--t-mid) var(--ease)}
.card:hover .go{opacity:1;translate:0 0}
.card.dark{background:var(--dark);color:#fff;border:1px solid var(--dark)}
.card.dark .eyebrow{color:var(--accent-2)}
.card.light{background:var(--surface);color:var(--ink);border:1px solid var(--line)}
.card .art{position:absolute;inset:auto 0 0 0;height:58%;z-index:1}
.c1 .art{background:radial-gradient(60% 60% at 30% 70%,rgba(var(--wash),.45),transparent 70%),
  linear-gradient(180deg,#0A1024,#131C3D)}
.c2 .art{background:linear-gradient(180deg,#fff,#F1F4FA)}
.c3 .art{background:radial-gradient(70% 70% at 60% 80%,rgba(var(--wash-2),.35),transparent 65%),
  linear-gradient(180deg,#070C1C,#101A38)}
.c4 .art{background:linear-gradient(180deg,#fff 0%,#D6E0FF 45%,var(--accent) 100%)}
.c5 .art{background:radial-gradient(65% 65% at 40% 75%,rgba(4,66,240,.42),transparent 70%),
  linear-gradient(180deg,#0B1226,#1A2450)}
.c6 .art{background:linear-gradient(180deg,#fff,#EAEFF8)}
.c7 .art{background:radial-gradient(70% 70% at 50% 80%,rgba(var(--wash),.38),transparent 66%),
  linear-gradient(180deg,#080D1D,#151E42)}
.c8 .art{background:linear-gradient(180deg,#fff 0%,#DCE4F7 40%,var(--maroon) 100%)}
.c8{color:#fff}
.c2 .ill{position:absolute;inset:auto 8% 6% 8%;width:84%;stroke:var(--maroon);fill:none;
  stroke-width:1.3;z-index:2;opacity:.55}

/* ---------------- tabs + jobs ---------------- */
.tabs{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.8rem}
.tab{border:1px solid var(--line);background:var(--surface);padding:.5rem 1rem;font-size:.9rem;
  color:var(--ink-2);border-radius:2px;transition:background var(--t-fast) var(--ease),color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease)}
.tab[aria-pressed="true"],.tab:hover{background:var(--ink);color:#fff;border-color:var(--ink)}
#joblist{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(14px,1.5vw,22px)}
.job{--ga:.07;display:grid;grid-template-columns:1fr auto;gap:.5rem 1.5rem;align-items:start}
.job h3{grid-column:1/-1;margin:0 0 .2rem;font-size:clamp(1.02rem,1.3vw,1.2rem);font-weight:700;color:var(--ink)}
.job .m{color:var(--ink-2);font-size:.92rem;font-variant-numeric:tabular-nums}
.job .m + .m{color:var(--muted)}
.job .apply{grid-column:2;grid-row:2/4;align-self:end;font-weight:600;font-size:.88rem;
  white-space:nowrap;color:var(--accent-dk)}
.job .apply::after{content:" \2192"}

/* ---------------- quote + logos ---------------- */
.quote{display:grid;grid-template-columns:1.15fr .85fr;gap:clamp(14px,1.6vw,24px);align-items:stretch}
.quote .said{--ga:.10;display:flex;flex-direction:column;justify-content:center;
  padding:clamp(1.8rem,2.8vw,2.8rem)}
.quote blockquote{margin:0;font-family:var(--serif);font-size:clamp(1.25rem,1.9vw,1.75rem);
  line-height:1.35;font-weight:400;letter-spacing:-.01em;color:var(--ink)}
.quote cite{display:block;margin-top:1.4rem;font-style:normal;color:var(--muted);font-size:.9rem}
.logos{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(14px,1.5vw,22px)}
/* the strip's grid mode uses the same fit() classes as every other grid,
   so a row never ends in empty cells                                    */
.logos.cols-3{grid-template-columns:repeat(3,1fr)}
.logos.cols-4{grid-template-columns:repeat(4,1fr)}
.logos.lead-span>:first-child,.logos.odd-n>:first-child{grid-column:span 2}
.logos span{--ga:.06;display:grid;place-items:center;padding:1.2rem;color:var(--muted);
  font-weight:700;letter-spacing:.08em;font-size:.82rem;min-height:86px}

/* ---------------- facts / prose / people / legal ---------------- */
.facts{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:0 clamp(1.5rem,3vw,3rem);padding:clamp(1.5rem,2.4vw,2.4rem)}
.kv{display:grid;grid-template-columns:minmax(130px,32%) 1fr;gap:1rem;align-items:start;
  padding:.95rem 0;border-bottom:1px solid var(--line)}
.kv dt{margin:0;font-family:var(--mono);font-size:.68rem;letter-spacing:.06em;text-transform:uppercase;
  color:var(--muted);font-weight:500;padding-top:.2rem}
.kv dd{margin:0;color:var(--ink-2);font-size:.97rem}
.kv dd a{color:var(--accent-dk);border-bottom:1px solid #E3CDC4}

.prose{padding:clamp(1.7rem,2.8vw,2.8rem)}
.prose p{margin:0 0 1.05rem;color:var(--ink-2);font-size:1.04rem;max-width:68ch;line-height:1.7}
.prose p:last-child{margin-bottom:0}
.ticks{margin:1.3rem 0 0;padding:0;list-style:none;display:grid;gap:.65rem}
.ticks li{position:relative;padding-left:1.6rem;color:var(--ink-2);max-width:68ch}
.ticks li::before{content:"";position:absolute;left:0;top:.62em;width:7px;height:7px;
  background:var(--accent);border-radius:1px}
.note{color:var(--ink-2);font-size:.92rem;margin:-1.2rem 0 2rem;max-width:70ch;
  border-left:2px solid var(--accent);padding-left:1rem;background:var(--tint);
  padding:.9rem 1rem;border-radius:2px}

.people{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(14px,1.5vw,22px)}
.person{--ga:.07}
.person h3{margin:0 0 .15rem;font-size:1.08rem;font-weight:700;color:var(--ink)}
.person .role{font-family:var(--mono);color:var(--accent-dk);font-size:.76rem;font-weight:500;
  letter-spacing:.02em;margin-bottom:.8rem}
.person p{margin:0;color:var(--ink-2);font-size:.94rem}
.avatar{width:50px;height:50px;display:grid;place-items:center;background:var(--tint);
  border:1px solid var(--line);color:var(--accent-dk);font-weight:700;letter-spacing:.03em;
  margin-bottom:1rem;border-radius:50%;font-size:.92rem}

.legal{padding:clamp(1.7rem,2.8vw,3rem);max-width:none}
.legal .updated{color:var(--muted);font-size:.85rem;margin:0 0 2rem}
.legal h2{margin:2rem 0 .7rem;font-size:clamp(1.05rem,1.4vw,1.25rem);font-weight:700;color:var(--ink)}
.legal h2:first-of-type{margin-top:0}
.legal p{margin:0 0 .85rem;color:var(--ink-2);max-width:72ch;line-height:1.7}

/* ---------------- closing CTA (dark band) ---------------- */
.cta{background:var(--dark);color:var(--dark-ink)}
main>section.cta:nth-of-type(2n),main>section.cta:nth-of-type(2n+1){background:var(--dark)}
.cta .h2{color:#fff}
.cta .lead{color:var(--dark-muted)}
.formcard{background:var(--surface);border-color:transparent;padding:clamp(1.7rem,2.8vw,2.8rem);
  box-shadow:0 30px 70px rgba(0,0,0,.35)}
.form{display:grid;grid-template-columns:1fr 1fr;gap:1.1rem}
.form label{display:flex;flex-direction:column;gap:.35rem;font-size:.7rem;font-weight:700;
  letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.form .full{grid-column:1/-1}
.form input,.form select,.form textarea{font:inherit;font-size:1rem;background:transparent;border:0;
  border-bottom:1.5px solid var(--line);padding:.6rem 0;color:var(--ink);border-radius:0}
.form input:focus,.form select:focus,.form textarea:focus{outline:0;border-bottom-color:var(--accent)}
.btn{background:var(--ink);color:#fff;padding:.95rem 1.9rem;font-weight:600;justify-self:start;
  display:inline-flex;align-items:center;gap:.6rem;border-radius:2px;transition:background var(--t-fast) var(--ease),color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease)}
.btn:hover{background:var(--accent-dk)}
.formnote{font-size:.82rem;color:var(--muted);grid-column:1/-1;margin:0}
.formnote.ok{color:#0F7A3D;font-weight:700}
.formnote.err{color:#B3261E;font-weight:700}
.btn[disabled]{opacity:.6;cursor:progress}
/* visually hidden, still read by screen readers */
.vh{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}
.tabcount{align-self:center;color:var(--ink-2);font-size:.9rem;margin-left:.6rem}

/* ---------------- footer (dark) ---------------- */
footer{background:var(--dark);color:var(--dark-ink);padding:clamp(4.5rem,7vw,7rem) 0 clamp(2.25rem,4vw,3.25rem)}
.fgrid{display:grid;grid-template-columns:minmax(230px,.85fr) minmax(0,2.15fr);
  gap:clamp(2rem,4vw,4rem);align-items:start}
.statement{font-family:var(--serif);font-size:clamp(1.5rem,2.4vw,2.1rem);font-weight:400;
  letter-spacing:-.015em;line-height:1.2;margin:0;max-width:14ch;color:#fff}
.statement em{font-style:italic;color:var(--accent-2)}
.flinks{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1.8rem}
.flinks h3{margin:0 0 .9rem;font-family:var(--mono);font-size:.66rem;letter-spacing:.08em;
  text-transform:uppercase;color:rgba(255,255,255,.5);font-weight:500}
.flinks a{display:block;color:var(--dark-muted);font-size:.92rem;padding:.28rem 0}
.flinks a:hover{color:var(--accent-2)}
.footer-brand{display:flex;flex-direction:column;align-items:flex-start;gap:1.5rem}
.footer-social{display:flex;gap:.6rem}
.footer-social a{display:grid;place-items:center;width:42px;height:42px;border:1px solid #33405E;color:#fff;transition:background var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),translate var(--t-fast) var(--ease)}
.footer-social a:hover{background:var(--accent);border-color:var(--accent);translate:0 -2px}
.footer-social svg{width:18px;height:18px;fill:currentColor}
.fbot{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;
  border-top:1px solid var(--dark-line);margin-top:clamp(3rem,5vw,5rem);padding-top:1.75rem;
  color:var(--dark-muted);font-size:.84rem}
.fbot a{color:var(--dark-muted)}.fbot a:hover{color:#fff}
.footer-legal-links{display:flex;gap:1.4rem;flex-wrap:wrap}
.footer-legal-links a{text-decoration:underline;text-underline-offset:3px}

/* ---------------- motion ----------------
   Reveals animate opacity + translate only — both composited, so they never
   trigger layout. will-change is set while hidden and dropped once revealed,
   so we don't hold a layer for every card on the page.                      */
/* The reveal uses an ANIMATION, not a transition. A shared `transition`
   declaration here would overwrite each component's own — which silently
   killed the card hover lift, since .rv sits later in the cascade.        */
.rv{opacity:0;translate:0 18px;will-change:opacity,translate}
.rv.in{animation:rv-in var(--t-slow) var(--ease) forwards;will-change:auto}
@keyframes rv-in{from{opacity:0;translate:0 18px}to{opacity:1;translate:0 0}}
/* without JS the reveal never runs, so the content must not start hidden */
html:not(.js) .rv{opacity:1;translate:none}

/* Cross-document view transitions: a short cross-fade between pages in
   browsers that support it, instead of a white flash.                       */
@view-transition{navigation:auto}
@media(prefers-reduced-motion:no-preference){
  ::view-transition-old(root){animation:vt-out 120ms var(--ease) both}
  ::view-transition-new(root){animation:vt-in 220ms var(--ease) both}
}
@keyframes vt-out{to{opacity:0}}
@keyframes vt-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ---------------- drawer ---------------- */
/* Mobile menu. The mega panels are desktop-only, so the drawer carries the
   full IA as accordions — otherwise the sub-pages are unreachable on a phone. */
.drawer{position:fixed;inset:var(--hdr) 0 0;background:var(--bg);z-index:56;
  padding:.5rem var(--pad) 3rem;display:none;overflow:auto;overscroll-behavior:contain}
.drawer.open{display:block}
.dsec{border-bottom:1px solid var(--line)}
.dtoggle{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%;
  padding:1.1rem 0;font-size:1.15rem;font-weight:600;color:var(--ink);text-align:left}
.dtoggle svg{width:13px;flex:none;color:var(--muted);transition:transform var(--t-fast) var(--ease)}
.dtoggle[aria-expanded="true"]{color:var(--accent-dk)}
.dtoggle[aria-expanded="true"] svg{transform:rotate(180deg);color:var(--accent-dk)}
.dpanel{padding:0 0 1.1rem}
.dpanel[hidden]{display:none}
.dpanel h5{margin:1rem 0 .5rem;font-family:var(--mono);font-size:.65rem;letter-spacing:.08em;
  text-transform:uppercase;color:var(--muted);font-weight:500}
.dpanel a{display:block;padding:.62rem 0 .62rem 1rem;font-size:1rem;color:var(--ink-2);
  border-left:2px solid var(--line)}
.dpanel a:hover,.dpanel a:focus-visible{color:var(--accent-dk);border-left-color:var(--accent)}
.dpanel .dall{font-weight:600;color:var(--ink);border-left-color:var(--accent);padding-left:1rem}
/* current page + current section in the mobile menu */
.dpanel a[aria-current]{color:var(--accent-dk);font-weight:700;background:var(--tint);
  border-left-color:var(--accent)}
.dsec.current>.dtoggle{color:var(--accent-dk)}
.dsolo{display:block;padding:1.1rem 0;font-size:1.15rem;font-weight:600;color:var(--ink);
  border-bottom:1px solid var(--line)}

/* ---------------- responsive ---------------- */
@media(max-width:1100px){
  /* scoped to the header — a bare `nav` selector here also hides the drawer's
     own <nav>, which is exactly where the mobile menu lives                   */
  .bar nav{display:none}
  .burger{display:grid;place-items:center;width:30px;height:30px}
  .burger span,.burger span::before,.burger span::after{content:"";display:block;width:22px;height:2px;
    background:var(--ink)}
  .burger span::before{translate:0 -7px}.burger span::after{translate:0 5px}
  .utils{margin-left:auto}
  .hero .wrap,.hero.interior .wrap{grid-template-columns:minmax(0,1fr);padding-block:3.5rem}
  h1 .ind{padding-left:0}
  /* the fit classes carry a class-level specificity, so the responsive
     overrides have to match it or the desktop track count sticks           */
  .cardgrid,.cardgrid.cols-3,.cardgrid.cols-4,.cardgrid.duo{grid-template-columns:repeat(2,1fr)}
  .svc,.steps,.stats,.inds,.inds.cols-3,.inds.cols-4,
  .logos,.logos.cols-3,.logos.cols-4{grid-template-columns:repeat(2,1fr)}
  .logos.lead-span>:first-child,.logos.odd-n>:first-child{grid-column:span 2}
  .inds.lead-span>:first-child,.inds.odd-n>:first-child{grid-column:span 2}
  .quote,.form,.fgrid,#joblist,.facts{grid-template-columns:1fr}
  .figs{grid-template-columns:repeat(3,1fr);row-gap:2.2rem}
  .people{grid-template-columns:repeat(2,1fr)}
  .megacols{grid-template-columns:1fr;max-width:none}
  .megacols::before{display:none}
  .megacols h4.c1,.megacols h4.c2{grid-column:1}
  .megacols h4.c2{margin-top:1.6rem}
  .megacols ul{grid-row:auto}
  .flinks{grid-template-columns:repeat(2,1fr)}
  .sechead{grid-template-columns:1fr}
}
@media(max-width:640px){
  .cardgrid,.cardgrid.cols-3,.cardgrid.cols-4,.cardgrid.duo,
  .svc,.stats,.inds,.inds.cols-3,.inds.cols-4,.steps,.logos,.logos.cols-3,.logos.cols-4,
  #joblist,.people{grid-template-columns:1fr}
  .logos.lead-span>:first-child,.logos.odd-n>:first-child{grid-column:auto}
  .inds.lead-span>:first-child,.inds.odd-n>:first-child{grid-column:auto}
  .cardgrid.duo .card{aspect-ratio:4/3;min-height:0}
  .flinks{grid-template-columns:repeat(2,1fr);gap:1.4rem}
  .kv{grid-template-columns:1fr;gap:.25rem}
  .card{aspect-ratio:4/3}
  .figs{grid-template-columns:repeat(2,1fr);row-gap:1.8rem}
  .figart{width:74px;margin-bottom:.7rem}
  .pause{display:none}
  .subnav b{display:none}

  /* Nothing to undo here any more — the surface rotation is gone from the
     base rules, so one column and four columns show the same surfaces. The
     fade on .svc is deliberate and applies at every width.                 */

  /* --- density -----------------------------------------------------------
     Every card is full width here, so the desktop breathing room stacks up:
     the same page is one column of it. Tighten the vertical rhythm and cap
     the specialism chips at one line — the full set is still there at any
     width where it can sit beside something.                               */
  .sec{padding:2.4rem 0}
  .cards{padding:2.2rem 0}
  .sechead{margin-bottom:1.4rem}
  .crd,.svc article,.inds div,.step,.stat,.job,.logos span,.formcard,.lnk,.person{padding:1.15rem}
  .quote .said{padding:1.5rem}
  .inds div{min-height:0}
  .svc,.steps,.stats,.inds,.cardgrid,#joblist,.logos,.people{gap:10px}
  .svc p{margin-bottom:1rem}
  .tags{margin-top:.65rem;padding-top:.65rem}

  /* --- insight cards become a rail ---------------------------------------
     Eight of these stacked is eight screens for a section that is browsing,
     not reading. Side by side they cost one screen; the next card peeks past
     the gutter so it is obvious there is more. Scrolling stays inside the
     rail — the page itself never moves sideways.                           */
  .cardgrid,.cardgrid.cols-3,.cardgrid.cols-4,.cardgrid.duo{
    display:flex;overflow:auto hidden;scroll-snap-type:x mandatory;
    scrollbar-width:none;-webkit-overflow-scrolling:touch;
    margin-inline:calc(var(--pad) * -1);padding:2px var(--pad) 10px}
  .cardgrid::-webkit-scrollbar{display:none}
  .cardgrid>.card{flex:0 0 80%;scroll-snap-align:start}
  .cardgrid>.card:hover{transform:none}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* =============================================================================
   Technology-first corporate homepage
   The existing logo marquees and verified figure band intentionally keep their
   original rules above. Everything below changes only the new MNC-level story.
   ========================================================================== */
.header-cta{--cta-fill:var(--bg);display:inline-flex;align-items:center;justify-content:center;
  background:linear-gradient(var(--cta-fill),var(--cta-fill)) padding-box,
    linear-gradient(105deg,#00DCD0,#4A7CFF 60%,#A56EFF) border-box;
  color:var(--ink);padding:.64rem 1.25rem;border:2px solid transparent;border-radius:999px;
  font-family:var(--mono);font-size:.7rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;white-space:nowrap;
  transition:color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease)}
.header-cta:hover{color:var(--accent-dk);transform:translateY(-1px)}
.locale-label{display:inline-flex;align-items:center;gap:.5rem;color:var(--ink);font-size:.76rem;font-weight:650;white-space:nowrap}
.locale-label i{font-style:normal;font-size:1.05rem;line-height:1}
.bar nav{gap:clamp(.85rem,1.4vw,1.55rem)}
.navitem>button,.navitem>a{font-size:.9rem}

.page-home header{background:rgba(2,5,13,.9);border-bottom-color:rgba(183,201,235,.28);box-shadow:none}
.page-home header .bar>nav>.navitem>button,.page-home header .bar>nav>.navitem>a{color:#F3F6FC}
.page-home header .bar>nav>.navitem:hover>button,.page-home header .bar>nav>.navitem>a:hover{color:#7CE9F1}
.page-home header .header-cta{--cta-fill:#02050D;color:#fff}
.page-home header .locale-label{color:#F3F6FC}
.page-home header .mega{color:var(--ink)}
.page-home header .mega .megacols li a{color:var(--ink-2)}
.page-home header .mega .megacols li a:hover,.page-home header .mega h3 a{color:var(--ink)}

.hero.tech-home{background:#02050D;color:#F7F9FF;min-height:clamp(620px,86svh,920px);
  padding-top:var(--hdr);border-bottom:1px solid #18243C;isolation:isolate}
.hero.tech-home::after{display:none}
.tech-hero-media{--hero-opacity:.94;position:absolute;z-index:-1;inset:0;overflow:hidden;background:#02050D}
.tech-hero-media img{width:100%;height:100%;object-fit:cover;object-position:center;
  opacity:var(--hero-opacity);transition:opacity .7s var(--ease)}
.tech-hero-fluid{position:absolute;inset:0;display:block;width:100%;height:100%;opacity:0;
  pointer-events:none;transition:opacity .7s var(--ease)}
.tech-hero-media.is-fluid img{opacity:0}
.tech-hero-media.is-fluid .tech-hero-fluid{opacity:var(--hero-opacity)}
.tech-home .tech-hero-grid{grid-template-columns:minmax(0,1fr);align-items:center;
  padding-block:clamp(4.5rem,8vw,8rem)}
.tech-home h1{text-transform:none;color:#F7F9FF;font-size:clamp(3.6rem,5.45vw,6.1rem);
  font-weight:400;line-height:1.01;letter-spacing:-.055em;text-wrap:balance;max-width:15.5ch}
.tech-home h1 em{display:inline;color:#62E8EB;font-style:normal;font-weight:520}
.architecture-copy .btn{display:inline-flex;align-items:center;gap:.85rem}
.btn.outline{background:transparent;color:var(--accent-dk);border:1px solid #9CB3F6}
.btn.outline:hover{background:#EDF2FF;border-color:var(--accent)}

.dark-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,430px);gap:2rem 5rem;
  align-items:end;margin-bottom:clamp(2rem,3.5vw,3.4rem)}
.dark-head .eyebrow{color:var(--accent-2);margin-bottom:.9rem}
.dark-head .h2{color:#fff;max-width:16ch}
.dark-head>p{margin:0;color:var(--dark-muted);max-width:55ch}

main>section.sec.tech-projects{background:#061022;color:#fff}
.project-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:#263553;border:1px solid #263553}
.project-card{display:flex;flex-direction:column;min-width:0;background:#081326}
.project-meta{display:flex;justify-content:space-between;gap:1rem;padding:1rem 1.15rem;border-bottom:1px solid #263553;
  font-family:var(--mono);font-size:.55rem;letter-spacing:.08em;text-transform:uppercase;color:#90A3C9}
.project-shot{position:relative;aspect-ratio:1;overflow:hidden;margin:1.15rem;border:1px solid #294471;background:#071428}
.project-shot img{display:block;width:300%;max-width:none;height:100%;object-fit:fill}
.project-shot.shot-2 img{transform:translateX(-33.3333%)}
.project-shot.shot-3 img{transform:translateX(-66.6667%)}
.project-ui{height:270px;display:grid;grid-template-columns:54px 1fr;margin:1.15rem;background:#0B1A33;border:1px solid #294471;
  box-shadow:inset 0 0 34px rgba(4,66,240,.09)}
.ui-rail{padding:.75rem .55rem;border-right:1px solid #223758;display:flex;flex-direction:column;gap:.65rem}
.ui-rail i{height:7px;background:#355481}.ui-rail i:first-child{background:var(--accent)}
.ui-body{padding:.9rem;display:flex;flex-direction:column;gap:.8rem}
.ui-top{display:flex;align-items:center;justify-content:space-between;gap:.5rem;color:#fff;font-size:.76rem;font-weight:700}
.ui-top b{font-family:var(--mono);font-size:.45rem;letter-spacing:.08em;text-transform:uppercase;color:#79A0FF}
.ui-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.45rem}
.ui-grid i{height:52px;border:1px solid #254169;background:#102441}
.ui-grid i::after{content:"";display:block;width:46%;height:2px;margin:14px 10px;background:#4380FF;box-shadow:0 9px 0 #29466E}
.ui-chart{height:74px;border:1px solid #254169;display:flex;align-items:end;gap:5px;padding:12px;background:#0A172D}
.ui-chart i{flex:1;background:#1D5DDA;height:var(--bar,40%)}
.ui-chart i:nth-child(2){--bar:72%}.ui-chart i:nth-child(3){--bar:52%}.ui-chart i:nth-child(4){--bar:84%}
.ui-chart i:nth-child(5){--bar:64%}.ui-chart i:nth-child(6){--bar:92%}
.ui-events{display:grid;gap:5px}.ui-events span{height:4px;background:#254169}.ui-events span:nth-child(2){width:78%}.ui-events span:nth-child(3){width:58%}
.ui-2 .ui-chart i{background:#477BFF}.ui-3 .ui-grid i:nth-child(2){border-color:#416FCC}
.project-copy{padding:1.2rem 1.25rem 1.6rem;display:flex;flex-direction:column;flex:1}
.project-copy .eyebrow{font-size:.56rem;color:#8CA8EE}
.project-copy h3{font-size:clamp(1.25rem,1.65vw,1.55rem);line-height:1.08;letter-spacing:-.03em;margin:.7rem 0}
.project-copy p{color:#B0BDD4;font-size:.92rem;line-height:1.55;margin:0 0 1.2rem}
.project-copy ul,.practice-card ul{list-style:none;display:flex;flex-wrap:wrap;gap:.35rem;margin:0 0 1.4rem;padding:0}
.project-copy li{font-family:var(--mono);font-size:.5rem;letter-spacing:.06em;text-transform:uppercase;color:#AFC1EE;
  border:1px solid #314465;padding:.28rem .48rem}
.text-link{display:inline-flex;align-items:center;gap:.65rem;margin-top:auto;font-weight:700;font-size:.82rem;color:#74A0FF}
.text-link span,.text-link b{font-weight:700}

.practice-section{background:#fff}
.practice-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border:1px solid var(--line)}
.practice-grid.five{grid-template-columns:repeat(5,minmax(0,1fr))}
.practice-card{min-height:360px;display:flex;flex-direction:column;padding:1.5rem 1.2rem;border-right:1px solid var(--line);border-bottom:1px solid var(--line);
  background:#fff;transition:background var(--t-mid) var(--ease),transform var(--t-mid) var(--ease)}
.practice-card:nth-child(3n){border-right:0}
.practice-card:nth-last-child(-n+3){border-bottom:0}
.practice-grid.five .practice-card{border-right:1px solid var(--line);border-bottom:0}
.practice-grid.five .practice-card:last-child{border-right:0}
.practice-card:hover{background:#F4F7FF;transform:translateY(-4px)}
.practice-card.secondary{background:#F4F6FA;color:#3B465B}.practice-card.secondary:hover{background:#EDEFF5}
.practice-no{font-family:var(--mono);font-size:.65rem;color:var(--accent-dk);letter-spacing:.08em}
.practice-card h3{font-size:clamp(1.08rem,1.32vw,1.3rem);line-height:1.12;letter-spacing:-.025em;margin:2.4rem 0 .9rem}
.practice-card p{font-size:.88rem;line-height:1.55;color:var(--ink-2);margin:0 0 1rem}
.practice-card li{font-family:var(--mono);font-size:.48rem;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);
  border:1px solid var(--line);padding:.24rem .42rem}
.practice-card .text-link{color:var(--accent-dk)}

main>section.sec.industry-depth{background:#fff;color:var(--ink)}
.industry-rail{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-top:1px solid var(--line)}
.industry-tile{min-height:232px;display:grid;grid-template-columns:minmax(128px,38%) minmax(0,1fr);gap:1.25rem;
  padding:1.4rem;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff;
  transition:background var(--t-mid) var(--ease)}
.industry-tile:nth-child(3n){border-right:0}.industry-tile:hover{background:#F6F8FC}
.industry-image{position:relative;min-height:184px;overflow:hidden;background:#E8EDF5}
.industry-image::after{content:"";position:absolute;inset:0;box-shadow:inset 0 0 0 1px rgba(11,16,32,.04)}
.industry-image img{position:absolute;left:0;top:50%;width:600%;max-width:none;height:auto;transform:translateY(-50%);transition:transform .7s var(--ease),filter .7s var(--ease)}
.industry-image.panel-2 img{left:-100%}.industry-image.panel-3 img{left:-200%}.industry-image.panel-4 img{left:-300%}
.industry-image.panel-5 img{left:-400%}.industry-image.panel-6 img{left:-500%}
.industry-tile:hover .industry-image img{transform:translateY(-50%) scale(1.035);filter:brightness(1.05)}
.industry-copy{display:flex;min-width:0;flex-direction:column;align-items:flex-start}
.industry-copy>span{font-family:var(--mono);font-size:.53rem;line-height:1.4;letter-spacing:.02em;text-transform:uppercase;color:var(--accent-dk)}
.industry-tile h3{font-size:clamp(1.06rem,1.35vw,1.28rem);line-height:1.18;letter-spacing:-.025em;margin:.7rem 0 .65rem}
.industry-tile p{color:var(--ink-2);font-size:.78rem;line-height:1.48;margin:0 0 1rem;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.industry-tile b{margin-top:auto;font-size:.69rem;color:var(--accent-dk)}.industry-tile b i{font:inherit;margin-left:.35rem}

.architecture-section{background:#fff}
.architecture-wrap{display:grid;grid-template-columns:minmax(260px,.7fr) minmax(560px,1.3fr);gap:clamp(2.5rem,5vw,6rem);align-items:center}
.architecture-copy .eyebrow{margin-bottom:1rem}.architecture-copy .h2{max-width:10ch}
.architecture-copy>p{color:var(--ink-2);max-width:42ch;margin:1.2rem 0 1.8rem}
.architecture-map{display:grid;grid-template-columns:minmax(125px,.7fr) minmax(280px,1.6fr) minmax(145px,.8fr);gap:.7rem;
  padding:1rem;border:1px solid var(--line);background:#F7F9FD;box-shadow:var(--shadow)}
.architecture-col,.architecture-core{display:flex;flex-direction:column;gap:.55rem}
.architecture-col>b{font-family:var(--mono);font-size:.58rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:.2rem}
.architecture-col>span{display:block;background:#fff;border:1px solid var(--line);padding:.72rem .75rem;font-size:.72rem;font-weight:600}
.architecture-core>div{display:flex;flex-direction:column;justify-content:center;min-height:96px;padding:1rem;border:1px solid #BFCDF0;background:#EEF3FF;text-align:center}
.architecture-core b{font-size:.8rem}.architecture-core span{font-family:var(--mono);font-size:.5rem;color:var(--muted);margin-top:.45rem;text-transform:uppercase}
.architecture-core small{font-family:var(--mono);font-size:.47rem;letter-spacing:.05em;text-transform:uppercase;text-align:center;color:var(--accent-dk);padding:.45rem}

.insight-section{background:#fff}.insight-list{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line)}
.insight-item{min-height:176px;padding:1.35rem 1.35rem 1.35rem 0;display:grid;grid-template-columns:minmax(108px,38%) 1fr;gap:1.15rem;border-bottom:1px solid var(--line);border-right:1px solid var(--line);transition:background var(--t-mid) var(--ease)}
.insight-item:nth-child(n+2){padding-left:1.35rem}.insight-item:last-child{border-right:0}.insight-item:hover{background:#F6F8FC}
.insight-image{position:relative;min-height:135px;overflow:hidden;background:#E8EDF5}
.insight-image img{position:absolute;left:0;top:50%;width:300%;max-width:none;height:auto;transform:translateY(-50%);transition:transform .7s var(--ease)}
.insight-image.panel-2 img{left:-100%}.insight-image.panel-3 img{left:-200%}.insight-item:hover .insight-image img{transform:translateY(-50%) scale(1.035)}
.insight-copy{display:flex;min-width:0;flex-direction:column;align-items:flex-start}
.insight-copy>span{font-family:var(--mono);font-size:.53rem;line-height:1.4;text-transform:uppercase;color:var(--accent-dk)}
.insight-item h3{font-size:1.02rem;line-height:1.24;letter-spacing:-.02em;margin:.65rem 0 .8rem}
.insight-item b{margin-top:auto;font-size:.69rem;color:var(--accent-dk)}.insight-item b i{font:inherit;margin-left:.35rem}

main>section.sec.enterprise-cta{background:#061022;color:#fff;padding-block:clamp(3.2rem,5vw,5rem)}
.enterprise-cta-in{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(260px,.8fr) auto;gap:2rem 4rem;align-items:center}
.enterprise-cta .eyebrow{color:var(--accent-2);margin-bottom:.8rem}.enterprise-cta h2{font-size:clamp(2rem,3.5vw,3.5rem);line-height:1;letter-spacing:-.045em;margin:0;max-width:14ch}
.enterprise-cta p{color:var(--dark-muted);margin:0;max-width:42ch}.enterprise-cta .btn{display:inline-flex;align-items:center;gap:.8rem;background:var(--accent);white-space:nowrap}

/* ---------------- global locations ---------------------------------------
   One generated landmark strip supplies three real photographic crops. The
   country image is deliberately distinct from the address: the photograph
   establishes geography; the copy names the exact Ojus office.              */
.location-panel-1,.location-panel-2,.location-panel-3{position:relative;overflow:hidden}
.location-panel-1 img,.location-panel-2 img,.location-panel-3 img{position:absolute;inset:0 auto auto 0;width:300%;max-width:none;height:100%;object-fit:fill;transition:transform .7s var(--ease),filter .7s var(--ease)}
.location-panel-2 img{left:-100%}.location-panel-3 img{left:-200%}

/* The vivid pre-footer moment follows the supplied reference: photography
   against a saturated aqua field, with three full-colour destination cards. */
main>section.sec.location-feature,main>section.sec.location-feature:nth-of-type(2n),main>section.sec.location-feature:nth-of-type(2n+1){
  background:linear-gradient(120deg,#1CCFF2 0%,#19E2C0 56%,#A7A1FF 100%);color:#050B18;
  padding-block:clamp(4.5rem,7vw,7rem)}
.location-feature-head{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(280px,.72fr);gap:2rem 6rem;align-items:end;margin-bottom:clamp(2.4rem,4vw,4rem)}
.location-feature-head .eyebrow{color:#061022;margin-bottom:1rem;font-weight:700}
.location-feature-head h2{font-size:clamp(2.7rem,5vw,5rem);line-height:.94;letter-spacing:-.055em;margin:0;max-width:11ch}
.location-feature-head p{font-size:clamp(1rem,1.25vw,1.18rem);line-height:1.55;margin:0 0 1.35rem;max-width:42ch}
.location-feature-link{display:inline-flex;align-items:center;gap:.8rem;font-weight:750;border-bottom:2px solid currentColor;padding-bottom:.25rem}
.location-feature-link span{transition:translate var(--t-fast) var(--ease)}.location-feature-link:hover span{translate:5px 0}
.location-feature-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(12px,1.5vw,22px)}
.location-feature-card{display:flex;min-width:0;flex-direction:column;background:#03060B;color:#fff;box-shadow:0 22px 45px rgba(6,25,73,.18);transition:translate var(--t-mid) var(--ease),box-shadow var(--t-mid) var(--ease)}
.location-feature-card:nth-child(2),.location-feature-card:nth-child(3){background:#03060B;color:#fff}
.location-feature-card:hover{translate:0 -6px;box-shadow:0 30px 58px rgba(6,25,73,.26)}
.location-feature-image{aspect-ratio:1;background:#C8E5F6}
.location-feature-card:hover .location-feature-image img{transform:scale(1.035);filter:saturate(1.08)}
.location-feature-copy{display:flex;flex:1;flex-direction:column;min-height:210px;padding:1.35rem 1.5rem 1.5rem}
.location-feature-copy>span{font-family:var(--mono);font-size:.55rem;line-height:1.4;letter-spacing:.07em;text-transform:uppercase;opacity:.76}
.location-feature-copy h3{font-size:clamp(1.7rem,2.7vw,2.65rem);line-height:1;letter-spacing:-.045em;margin:1rem 0 .55rem}
.location-feature-copy p{font-size:.9rem;margin:0 0 1.4rem;opacity:.84}
.location-feature-copy b{margin-top:auto;font-size:.76rem}.location-feature-copy b i{font:inherit;margin-left:.45rem}

/* Dedicated directory: a darker, more editorial version of the reference.
   The active controls filter the same card collection rather than navigating
   away, so visitors can compare all three countries on one page.            */
.locations-hero{min-height:calc(100svh - var(--hdr));padding:calc(var(--hdr) + 92px) 0 clamp(4.5rem,7vw,7.5rem);background:#03060B;color:#F5F7FB}
.locations-intro{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,.65fr);gap:2rem 6rem;align-items:end}
.locations-intro .eyebrow{color:#34E6DD;margin-bottom:1rem}
.locations-intro h1{font-size:clamp(4rem,7.3vw,7.1rem);font-weight:400;line-height:.84;letter-spacing:-.065em;text-transform:none}
.locations-intro>p{color:#AEBBD1;font-size:clamp(1.04rem,1.25vw,1.18rem);line-height:1.6;max-width:42ch;margin:0 0 .45rem}
.location-filters{display:flex;flex-wrap:wrap;gap:1.8rem;margin:clamp(3.5rem,6vw,5.5rem) 0 clamp(2rem,3.5vw,3.2rem);border-bottom:1px solid #243047}
.location-filters button{position:relative;padding:0 0 .95rem;font-family:var(--mono);font-size:.7rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:#9CAAC1}
.location-filters button::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:3px;background:#24E1D8;scale:0 1;transform-origin:left;transition:scale var(--t-mid) var(--ease)}
.location-filters button:hover,.location-filters button[aria-pressed="true"]{color:#fff}.location-filters button[aria-pressed="true"]::after{scale:1 1}
.location-directory{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(16px,1.6vw,24px);transition:max-width var(--t-mid) var(--ease)}
.location-directory[data-active="americas"]{grid-template-columns:repeat(2,minmax(0,1fr));max-width:880px}
.location-directory[data-active="apac"]{grid-template-columns:minmax(0,420px);max-width:420px}
.location-card{min-width:0;border:1px solid #243047;background:#07101F;scroll-margin-top:calc(var(--hdr) + 70px)}
.location-card[hidden]{display:none}
.location-card-image{aspect-ratio:1;background:#122039}
.location-card:hover .location-card-image img{transform:scale(1.035);filter:saturate(1.08)}
.location-card-copy{padding:1.25rem 1.35rem 1.55rem;border-top:1px solid #243047}
.location-card-copy>span{font-family:var(--mono);font-size:.53rem;line-height:1.4;letter-spacing:.08em;text-transform:uppercase;color:#66E9E0}
.location-card-copy h2{font-size:clamp(1.65rem,2.4vw,2.3rem);line-height:1.02;letter-spacing:-.035em;margin:.85rem 0 .3rem}
.location-card-copy>p{color:#C0CBE0;margin:0 0 1.25rem;font-size:.9rem}
.location-card-copy address{border-top:1px solid #243047;padding-top:1.1rem;color:#9FACC2;font-style:normal;font-size:.82rem;line-height:1.58}
.location-card-copy address strong{display:block;color:#fff;margin-bottom:.2rem}

/* Keep the location page chrome in the same night-time register as its hero. */
.location-page header{background:rgba(3,6,11,.94);border-bottom-color:#222C40;box-shadow:none}
.location-page header .bar>.utils>button,.location-page header .bar>nav>.navitem>button,.location-page header .bar>nav>.navitem>a{color:#F3F6FC}
.location-page header .bar>nav>.navitem.current>button{color:#fff}
.location-page header .header-cta{--cta-fill:#03060B;color:#fff}
.location-page header .locale-label{color:#F3F6FC}
.location-page header .mega{color:var(--ink)}
.location-page header .mega .megacols li a{color:var(--ink-2)}
.location-page header .mega .megacols li a:hover,.location-page header .mega h3 a{color:var(--ink)}
.location-page .burger span,.location-page .burger span::before,.location-page .burger span::after{background:#fff}

/* Global careers invitation, placed immediately before the footer on every
   page. Its image-left / message-right composition follows the supplied
   reference while the copy keeps Ojus's technology-first positioning.       */
main>section.sec.join-us,main>section.sec.join-us:nth-of-type(2n),main>section.sec.join-us:nth-of-type(2n+1){
  background:linear-gradient(118deg,#2FC9F2 0%,#18E4CD 72%,#26DFC2 100%);color:#061022;
  padding-block:clamp(5rem,8vw,8rem)}
.join-us-grid{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(320px,.82fr);gap:clamp(3rem,7vw,7.5rem);align-items:center}
.join-us-image{margin:0;aspect-ratio:1.38;overflow:hidden;background:#0E2743;box-shadow:0 24px 60px rgba(4,47,85,.18)}
.join-us-image img{width:100%;height:100%;object-fit:cover;object-position:center;transition:transform .8s var(--ease)}
.join-us-image:hover img{transform:scale(1.025)}
.join-us-copy{max-width:510px}
.join-us-copy .eyebrow{color:#061022;margin-bottom:clamp(2.2rem,4vw,4rem);font-weight:700;letter-spacing:.3em}
.join-us-copy h2{font-size:clamp(2.5rem,4.5vw,4.3rem);line-height:.98;letter-spacing:-.05em;margin:0}
.join-us-copy p{font-size:clamp(1rem,1.25vw,1.2rem);line-height:1.55;max-width:38ch;margin:1.6rem 0 2.5rem}
.join-us-copy>a{display:inline-flex;align-items:center;gap:1rem;font-weight:750;border-bottom:2px solid currentColor;padding-bottom:.28rem}
.join-us-copy>a span{transition:translate var(--t-fast) var(--ease)}.join-us-copy>a:hover span{translate:6px 0}

@media(max-width:1180px){
  .practice-grid,.practice-grid.five{grid-template-columns:repeat(2,1fr)}
  .practice-card,.practice-grid.five .practice-card{border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
  .practice-card:nth-child(2n),.practice-grid.five .practice-card:nth-child(2n){border-right:0}
  .practice-card:nth-last-child(-n+2){border-bottom:0}
  .practice-grid.five .practice-card:nth-last-child(2){border-bottom:1px solid var(--line)}
  .practice-grid.five .practice-card:last-child{grid-column:span 2;min-height:240px;border-right:0;border-bottom:0}
}
@media(max-width:900px){
  .tech-home .tech-hero-grid{padding-block:4rem}.tech-home h1{max-width:13ch}
  .tech-hero-media{--hero-opacity:.72}.tech-hero-media img{object-position:58% center}.project-grid{grid-template-columns:1fr}.project-ui{height:320px}
  .architecture-wrap{grid-template-columns:1fr}.architecture-map{min-width:0}
  .enterprise-cta-in{grid-template-columns:1fr}.enterprise-cta .btn{justify-self:start}
  .industry-rail{grid-template-columns:repeat(2,minmax(0,1fr))}
  .industry-tile:nth-child(3n){border-right:1px solid var(--line)}.industry-tile:nth-child(2n){border-right:0}
  .insight-item{grid-template-columns:1fr}.insight-image{min-height:190px}
  .location-feature-head,.locations-intro{grid-template-columns:1fr;gap:1.5rem}
  .location-directory{grid-template-columns:repeat(2,minmax(0,1fr))}
  .location-directory .location-card:last-child{grid-column:1/-1;max-width:calc(50% - 8px)}
  .location-directory[data-active="americas"]{grid-template-columns:repeat(2,minmax(0,1fr))}
  .location-directory[data-active="apac"]{grid-template-columns:minmax(0,1fr);max-width:none}
  .location-directory[data-active="apac"] .location-card:last-child{max-width:calc(50% - 8px)}
  .join-us-grid{grid-template-columns:1fr 1fr;gap:2rem}.join-us-image{aspect-ratio:1}
}
@media(max-width:640px){
  .header-cta{display:none}.tech-home .tech-hero-grid{padding-block:3rem}.tech-home h1{font-size:clamp(2.9rem,12vw,4rem);max-width:11ch}
  .page-home .burger span,.page-home .burger span::before,.page-home .burger span::after{background:#fff}
  .tech-hero-media{--hero-opacity:.58}.tech-hero-media img{object-position:62% center}
  .dark-head{grid-template-columns:1fr}.project-ui{height:240px;margin:.8rem}.practice-grid,.practice-grid.five{grid-template-columns:1fr}
  .practice-card,.practice-card:nth-child(2n),.practice-grid.five .practice-card,.practice-grid.five .practice-card:nth-child(2n){grid-column:auto;border-right:0;border-bottom:1px solid var(--line)}
  .practice-card:last-child,.practice-grid.five .practice-card:last-child{grid-column:auto;border-bottom:0;min-height:300px}
  .industry-rail{grid-template-columns:1fr}.industry-tile,.industry-tile:nth-child(2n),.industry-tile:nth-child(3n){grid-template-columns:112px minmax(0,1fr);min-height:172px;padding:1rem 0;gap:1rem;border-right:0}.industry-image{min-height:140px}
  .architecture-map{grid-template-columns:1fr}.architecture-col{display:grid;grid-template-columns:repeat(2,1fr)}.architecture-col>b{grid-column:1/-1}
  .insight-list{grid-template-columns:1fr}.insight-item,.insight-item:nth-child(n+2){grid-template-columns:112px 1fr;padding:1rem 0;border-right:0}.insight-image{min-height:118px}
  main>section.sec.location-feature,main>section.sec.location-feature:nth-of-type(2n),main>section.sec.location-feature:nth-of-type(2n+1){padding-block:3.5rem}
  .location-feature-head h2{font-size:clamp(2.75rem,13vw,4rem)}
  .location-feature-grid{display:flex;overflow:auto hidden;scroll-snap-type:x mandatory;scrollbar-width:none;margin-inline:calc(var(--pad) * -1);padding:2px var(--pad) 16px}
  .location-feature-grid::-webkit-scrollbar{display:none}.location-feature-card{flex:0 0 84%;scroll-snap-align:start}
  .location-feature-card:hover{translate:none}.location-feature-copy{min-height:185px;padding:1.15rem}
  .locations-hero{padding-top:calc(var(--hdr) + 76px)}
  .locations-intro h1{font-size:clamp(3.7rem,20vw,5rem)}
  .location-filters{gap:1.2rem;margin-top:3rem;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}.location-filters::-webkit-scrollbar{display:none}.location-filters button{white-space:nowrap}
  .location-directory,.location-directory[data-active="americas"],.location-directory[data-active="apac"]{grid-template-columns:1fr;max-width:none}
  .location-directory .location-card:last-child,.location-directory[data-active="apac"] .location-card:last-child{grid-column:auto;max-width:none}
  main>section.sec.join-us,main>section.sec.join-us:nth-of-type(2n),main>section.sec.join-us:nth-of-type(2n+1){padding-block:3.5rem}
  .join-us-grid{grid-template-columns:1fr;gap:2rem}.join-us-image{aspect-ratio:1.2}.join-us-copy .eyebrow{margin-bottom:1.5rem}.join-us-copy h2{font-size:clamp(2.6rem,13vw,3.8rem)}
}
@media(max-width:760px){.locale-label{display:none}}

/* =============================================================================
   Global MNC visual rhythm

   The strongest part of the site already alternates editorial white, deep
   navy, vivid global colour and the black footer. Carry that same cadence
   through the homepage and every interior page without changing the verified
   logo rails or figure band.
   ========================================================================== */
:root{
  --mnc-black:#03060B;
  --mnc-navy:#061022;
  --mnc-panel:#0C1830;
  --mnc-line:#263553;
  --mnc-cyan:#34E6DD;
  --mnc-blue:#0A3BE0;
}

/* Fragment links such as #industries and #in must land on their real section.
   The previous intrinsic placeholders could shift the target after paint. */
.mnc-page main>section{content-visibility:visible;contain-intrinsic-size:none}

/* Interior pages open with one confident global-company hero instead of a
   pale card-like banner. Family accents differentiate the practices. */
.mnc-page:not(.page-home) .hero.interior{
  min-height:clamp(430px,58svh,620px);background:var(--mnc-navy);color:#F5F7FB;
  border-bottom:4px solid var(--family-accent,var(--mnc-blue))}
.mnc-page:not(.page-home) .hero.interior canvas.field{opacity:.74}
.mnc-page:not(.page-home) .hero.interior .wrap{padding-block:clamp(4.5rem,7vw,7rem)}
.mnc-page:not(.page-home) .hero.interior h1{color:#fff;font-size:clamp(2.8rem,5.4vw,5rem);line-height:.96;max-width:14ch}
.mnc-page:not(.page-home) .hero.interior .eyebrow{color:var(--family-accent,var(--mnc-cyan));font-weight:700}
.mnc-page:not(.page-home) .hero.interior aside p{color:#B7C3D8;font-size:clamp(1.04rem,1.35vw,1.25rem)}
.mnc-page:not(.page-home) .hero.interior .rule{background:var(--family-accent,var(--mnc-cyan))}
.family-services{--family-accent:#6E96FF}
.family-industries{--family-accent:#34E6DD}
.family-insights{--family-accent:#A9B9FF}
.family-labs{--family-accent:#5F82FF}
.family-talent{--family-accent:#27D7E1}
.family-approach{--family-accent:#6F9CFF}
.family-company{--family-accent:#34E6DD}
.family-legal{--family-accent:#93A6CB}

/* After the dark hero, content moves light → dark → light. Scoped custom
   properties let every existing card component adopt the night surface. */
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1){
  --surface:var(--mnc-panel);--line:var(--mnc-line);--ink:#F5F7FB;--ink-2:#B5C1D6;
  --muted:#9EABC2;--accent-dk:#8EACFF;--tint:#101C33;
  background:var(--mnc-navy);color:#F5F7FB}
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .h2{color:#fff}
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .lead{color:#B5C1D6}
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .eyebrow,
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .step b,
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .lnk .go{color:#8EACFF}
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .svc article{
  --c-bg:var(--mnc-panel);--c-bd:var(--mnc-line);--c-ink:#F5F7FB;--c-mut:#B5C1D6;
  --c-num:#8EACFF;--c-chip-bg:#13213B;--c-chip-bd:#314261;--c-chip-tx:#C7D1E3;--c-link:#8EACFF}
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .architecture-map{
  background:#09162A;border-color:var(--mnc-line);box-shadow:none}
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .architecture-col>span{
  background:#0E1D35;border-color:var(--mnc-line);color:#E9EDF5}
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .architecture-core>div{
  background:#102B62;border-color:#31559D;color:#fff}
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .architecture-core small{color:#9EB7FF}
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .btn.outline{
  color:#fff;border-color:#5C78BA;background:transparent}
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .btn.outline:hover{background:#132344;border-color:#8EACFF}
.mnc-page:not(.page-home) main>section.sec:not(.cta):not(.join-us):nth-of-type(2n+1) .note{
  background:#101C33;border-left-color:#6E96FF;color:#C7D1E3}

/* MNC layouts read as architectural grids rather than floating app cards. */
.mnc-page main>section.sec:not(.cta):not(.join-us) .crd,
.mnc-page main>section.sec:not(.cta):not(.join-us) .svc article,
.mnc-page main>section.sec:not(.cta):not(.join-us) .inds div,
.mnc-page main>section.sec:not(.cta):not(.join-us) .step,
.mnc-page main>section.sec:not(.cta):not(.join-us) .stat,
.mnc-page main>section.sec:not(.cta):not(.join-us) .job,
.mnc-page main>section.sec:not(.cta):not(.join-us) .lnk,
.mnc-page main>section.sec:not(.cta):not(.join-us) .person{border-radius:0;box-shadow:none}

/* Homepage cadence: verified logos and figures retain their existing design;
   the services stay editorial-light and industries become the deep expertise
   moment between the trust band and white insight desk. */
.page-home main>section.sec.practice-section{background:#fff}
.page-home .practice-card{box-shadow:none}
.page-home main>section.sec.industry-depth,
.page-home main>section.sec.industry-depth:nth-of-type(2n),
.page-home main>section.sec.industry-depth:nth-of-type(2n+1){
  --ink:#F5F7FB;--ink-2:#B5C1D6;--line:var(--mnc-line);--accent-dk:#8EACFF;
  background:var(--mnc-navy);color:#F5F7FB;padding-block:clamp(4.5rem,7vw,7.25rem)}
.page-home .industry-depth .h2{color:#fff;font-size:clamp(2.4rem,4.5vw,4.6rem);max-width:12ch}
.page-home .industry-depth .lead{color:#B5C1D6}
.page-home .industry-rail{border-color:var(--mnc-line)}
.page-home .industry-tile{border-color:var(--mnc-line);background:transparent;color:#F5F7FB}
.page-home .industry-tile:nth-child(3n){border-right-color:transparent}
.page-home .industry-tile:hover{background:#0C1830}
.page-home .industry-image{background:#13213B}
.page-home .industry-copy>span,.page-home .industry-tile b{color:#79A3FF}
.page-home .industry-tile p{color:#B5C1D6}
.page-home main>section.sec.insight-section{background:#fff;color:var(--ink)}

/* Project cards remain a rich dark product showcase, but technology service
   pages place them on a pale band so the page keeps its alternating rhythm. */
.family-services main>section.sec.tech-projects,
.family-services main>section.sec.tech-projects:nth-of-type(2n),
.family-services main>section.sec.tech-projects:nth-of-type(2n+1){background:#EEF3FC;color:var(--ink)}
.family-services .tech-projects .dark-head .h2{color:var(--ink)}
.family-services .tech-projects .dark-head>p{color:var(--ink-2)}
.family-services .tech-projects .dark-head .eyebrow{color:var(--accent-dk)}

/* The second navigation row is useful on wide screens but consumes a large
   part of a phone viewport and can start mid-list. The drawer already exposes
   the same destinations, so mobile uses one navigation system. */
@media(max-width:760px){
  .subnav{display:none}
  main.has-subnav .hero.interior{padding-top:calc(var(--hdr) + 28px)}
  .mnc-page:not(.page-home) .hero.interior{min-height:400px}
  .mnc-page:not(.page-home) .hero.interior .wrap{padding-block:3.5rem}
  .mnc-page:not(.page-home) .hero.interior h1{font-size:clamp(2.55rem,12vw,4rem)}
}

@media(max-width:900px) and (min-width:641px){
  .page-home .industry-tile:nth-child(odd){border-right-color:var(--mnc-line)}
  .page-home .industry-tile:nth-child(even){border-right-color:transparent}
}
@media(max-width:640px){
  .page-home .industry-tile{border-right-color:transparent}
}
