/* Ludia Consulting — website
   Tokens mirror .claude/skills/ludia-web-design-system/assets/theme.json.
   Brand green #6EA92D is pending final confirmation. */
/* Type (Lucas, 2026-10-01): Segoe UI for headlines and body. Windows, and any device with Office, uses the installed
   Segoe UI (local); every other device downloads Selawik, Microsoft's open-source, metric-compatible stand-in for
   Segoe UI (OFL, assets/fonts/SELAWIK-LICENSE.txt), so line breaks and layout match on every device. CSS weight 500
   maps to Semibold, the weight headlines use. */
@font-face{font-family:"Ludia Sans";font-style:normal;font-weight:300 400;font-display:swap;src:local("Segoe UI"),local("SegoeUI"),url(../fonts/selawik-regular.woff2) format("woff2")}
@font-face{font-family:"Ludia Sans";font-style:normal;font-weight:500 600;font-display:swap;src:local("Segoe UI Semibold"),local("SegoeUI-Semibold"),url(../fonts/selawik-semibold.woff2) format("woff2")}
@font-face{font-family:"Ludia Sans";font-style:normal;font-weight:700 900;font-display:swap;src:local("Segoe UI Bold"),local("SegoeUI-Bold"),url(../fonts/selawik-bold.woff2) format("woff2")}
@font-face{font-family:"Ludia Sans";font-style:italic;font-weight:300 400;font-display:swap;src:local("Segoe UI Italic"),local("SegoeUI-Italic"),url(../fonts/selawik-regular.woff2) format("woff2")}
:root{
  --green-500:#6EA92D;--green-400:#82BC45;--green-700:#467319;--green-800:#2F5212;
  --forest-900:#1A281D;--forest-800:#243A29;--lime-300:#C3CF56;
  --ink:#0A0A0A;--gray-800:#333333;--gray-700:#4A4A4A;--gray-600:#5C5C5C;
  --hairline:#D8D8D6;--error:#B42318;--tile:#EEF0EA;--paper:#FCFCFA;--white:#FFFFFF;
  --serif:"Ludia Sans","Segoe UI",Selawik,system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
  --sans:"Ludia Sans","Segoe UI",Selawik,system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
  --fs-eyebrow:.8125rem;--fs-small:.9375rem;--fs-ui:1rem;
  --fs-body:clamp(1.0625rem,1.04rem + .09vw,1.125rem);
  --fs-article:clamp(1.125rem,1.08rem + .19vw,1.25rem);
  --fs-lead:clamp(1.1875rem,1.14rem + .19vw,1.3125rem);
  --fs-h4:clamp(1.1875rem,1.14rem + .19vw,1.3125rem);
  --fs-h3:clamp(1.5rem,1.37rem + .56vw,1.875rem);
  --fs-quote:clamp(1.625rem,1.44rem + .75vw,2.125rem);
  --fs-h2:clamp(1.875rem,1.65rem + .94vw,2.5rem);
  --fs-h1:clamp(2.125rem,1.73rem + 1.69vw,3.25rem);
  --fs-display:clamp(2.375rem,1.89rem + 2.07vw,3.75rem);
  --fs-stat:clamp(2.5rem,1.97rem + 2.25vw,4rem);
  --gutter:clamp(1rem,.6rem + 1.2vw,1.25rem);
  --wide:1280px;--measure:700px;
  --section:clamp(3rem,2rem + 3vw,4rem);--band:clamp(4rem,2.5rem + 4.5vw,6rem);
  --rule:3px solid var(--green-500);--hl:1px solid var(--hairline);
  --shadow:0 3px 6px rgba(10,10,10,.16);
  --motion-fast:200ms;--motion-base:320ms;--motion-slow:600ms;--motion-cine:900ms;
  --ease-ed:cubic-bezier(.22,1,.36,1);--ease-std:cubic-bezier(.65,0,.35,1);
  --header-h:72px;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:var(--fs-body);line-height:1.65;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:underline;text-decoration-color:var(--green-500);text-underline-offset:3px;text-decoration-thickness:1px;transition:color var(--motion-fast) var(--ease-std)}
a:hover{color:var(--green-700);text-decoration-thickness:2px}
:focus-visible{outline:2px solid var(--green-700);outline-offset:3px}
.is-dark :focus-visible{outline-color:var(--green-500)}
h1,h2,h3{font-family:var(--serif);font-weight:500;line-height:1.2;margin:0 0 .5em;text-wrap:balance;font-optical-sizing:auto}
h1{font-size:var(--fs-h1);line-height:1.1;letter-spacing:-.01em}
h2{font-size:var(--fs-h2)}
h3{font-size:var(--fs-h3);line-height:1.3}
h4{font-family:var(--sans);font-size:var(--fs-h4);font-weight:600;line-height:1.35;margin:0 0 .4em}
p{margin:0 0 1em;text-wrap:pretty}
.skip{position:absolute;left:-9999px;top:8px;z-index:100;background:var(--forest-900);color:#fff;padding:10px 16px}
.skip:focus{left:8px}
.sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.wrap{max-width:var(--wide);margin:0 auto;padding:0 var(--gutter)}
.measure{max-width:var(--measure)}
.section{padding:var(--section) 0}
.band{padding:var(--band) 0}
.surface-tile{background:var(--tile)}
.is-dark{background:var(--forest-900);color:#fff}
.is-dark a{color:#fff}
.is-dark .muted{color:rgba(255,255,255,.72)}
.muted{color:var(--gray-700)}
.meta{color:var(--gray-600);font-size:var(--fs-small)}
.eyebrow{display:inline-block;font:600 var(--fs-eyebrow)/1.4 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--green-700);margin:0 0 .75rem}
.is-dark .eyebrow{color:var(--lime-300)}
.lead{font-size:var(--fs-lead);line-height:1.55;color:var(--gray-700);max-width:60ch}
.is-dark .lead{color:rgba(255,255,255,.85)}
.display{font-size:var(--fs-display);line-height:1.08;letter-spacing:-.015em}

/* Buttons */
.btn{display:inline-flex;align-items:center;gap:.5rem;font:600 .9375rem/1.2 var(--sans);padding:1rem 1.75rem;border:1px solid var(--green-500);background:var(--green-500);color:var(--forest-900);text-decoration:none;cursor:pointer;transition:background var(--motion-fast) var(--ease-std),color var(--motion-fast),border-color var(--motion-fast)}
.btn:hover{background:var(--green-400);border-color:var(--green-400);color:var(--forest-900)}
.btn--secondary{background:#fff;border-color:var(--hairline);color:var(--forest-900)}
.btn--secondary:hover{background:var(--forest-900);border-color:var(--forest-900);color:#fff}
.btn--ondark{background:transparent;border-color:rgba(255,255,255,.5);color:#fff}
.btn--ondark:hover{background:var(--green-500);border-color:var(--green-500);color:var(--forest-900)}
.cta-text{font:600 1rem/1.4 var(--sans);color:var(--green-700);text-decoration:none;display:inline-flex;gap:.4rem;align-items:center}
.cta-text .arr{display:inline-block;transition:transform var(--motion-fast) var(--ease-ed)}
.cta-text:hover{color:var(--green-800)}
.cta-text:hover .arr{transform:translateX(6px)}
.is-dark .cta-text{color:var(--lime-300)}
.actions{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:center;margin-top:1.5rem}

/* Header */
.site-header{position:sticky;top:0;z-index:50;background:#fff;border-bottom:var(--hl);transition:background var(--motion-fast),border-color var(--motion-fast)}
.site-header__bar{display:flex;align-items:center;gap:24px;height:var(--header-h)}
.logo{display:flex;align-items:center;text-decoration:none;flex:none}
.logo img{height:34px;width:auto}
.logo .logo-white{display:none}
.nav{display:flex;align-items:center;gap:4px;margin-left:12px}
.nav__item{position:static}
.nav__trigger,.nav__link{font:500 var(--fs-ui)/1 var(--sans);color:var(--gray-800);background:none;border:0;padding:26px 12px;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:6px;border-bottom:2px solid transparent;white-space:nowrap}
@media (min-width:1200px) and (max-width:1299px){.nav{margin-left:4px;gap:0}.nav__trigger,.nav__link{padding-left:8px;padding-right:8px}.header-tools{gap:12px}}
.nav__trigger:hover,.nav__link:hover,.nav__trigger[aria-expanded="true"]{color:var(--green-700);border-bottom-color:var(--green-500)}
.nav__trigger svg{transition:transform var(--motion-fast)}
.nav__trigger[aria-expanded="true"] svg{transform:rotate(180deg)}
.header-tools{margin-left:auto;display:flex;align-items:center;gap:18px}
.header-tools .careers{font:500 var(--fs-ui)/1 var(--sans);color:var(--gray-800);text-decoration:none}
.header-tools .careers:hover{color:var(--green-700)}
.icon-btn{background:none;border:0;padding:8px;cursor:pointer;color:var(--gray-800);display:inline-flex}
.header-tools .btn{padding:.7rem 1.1rem}
.menu-toggle{display:none}
/* overlay variant (home) */
.site-header.is-overlay:not(.is-solid){position:fixed;left:0;right:0;background:transparent;border-color:transparent}
.site-header.is-overlay:not(.is-solid) .nav__trigger,.site-header.is-overlay:not(.is-solid) .nav__link,.site-header.is-overlay:not(.is-solid) .careers,.site-header.is-overlay:not(.is-solid) .icon-btn{color:#fff}
.site-header.is-overlay:not(.is-solid) .logo-color{display:none}
.site-header.is-overlay:not(.is-solid) .logo-white{display:block}
.site-header.is-overlay:not(.is-solid) .btn--secondary{background:transparent;color:#fff;border-color:rgba(255,255,255,.55)}

/* Mega menu */
.mega{position:absolute;left:0;right:0;top:100%;background:#fff;border-top:var(--hl);border-bottom:6px solid var(--green-500);box-shadow:var(--shadow);opacity:0;visibility:hidden;transform:translateY(-8px);transition:opacity var(--motion-base) var(--ease-ed),transform var(--motion-base) var(--ease-ed),visibility 0s linear var(--motion-base)}
.mega.is-open{opacity:1;visibility:visible;transform:none;transition-delay:0s}
.mega__inner{display:grid;grid-template-columns:1.1fr 1.4fr 1fr;gap:40px;padding:32px var(--gutter) 36px;max-width:var(--wide);margin:0 auto;color:var(--ink)}
.mega h2{font:600 1.3125rem/1.3 var(--sans);margin:0 0 14px}
.mega ul{list-style:none;margin:0;padding:0}
.mega li{margin:0 0 10px}
.mega a{text-decoration:none;color:var(--gray-800);font-size:.9375rem}
.mega a:hover{color:var(--green-700);text-decoration:underline}
.mega .cols{columns:2;column-gap:28px}
.mega .viewall{display:inline-block;margin-top:8px;color:var(--green-700);font-weight:600}
.mega .col-primary{border-right:var(--hl);padding-right:32px}
.mega .feature{background:var(--tile);padding:16px}
.mega .feature .eyebrow{margin-bottom:6px}
.mega .feature p{font:600 1.0625rem/1.4 var(--sans);margin:0 0 10px;color:var(--ink)}
.mega .group-label{font:600 var(--fs-eyebrow)/1.4 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--gray-600);margin:0 0 8px}

/* Mobile nav */
.mobile-nav{position:fixed;inset:0 0 0 auto;width:min(420px,100%);background:var(--forest-900);color:#fff;z-index:80;transform:translateX(100%);transition:transform var(--motion-base) var(--ease-ed);display:flex;flex-direction:column;padding:20px}
.mobile-nav.is-open{transform:none}
.mobile-nav a{color:#fff;text-decoration:none;display:block;padding:12px 0;border-bottom:1px solid rgba(255,255,255,.15);font-size:1.0625rem}
.mobile-nav a.mobile-nav__sub{padding:8px 0 8px 16px;font-size:.9375rem;color:rgba(255,255,255,.8)}
.mobile-nav .close{align-self:flex-end;background:none;border:0;color:#fff;font-size:1.5rem;cursor:pointer}
.mobile-nav .pinned{margin-top:auto;display:grid;gap:10px;padding-top:16px}
.mobile-nav .pinned a{border:0;padding:0}
.scrim{position:fixed;inset:0;background:rgba(10,10,10,.4);z-index:70;opacity:0;visibility:hidden;transition:opacity var(--motion-base)}
.scrim.is-open{opacity:1;visibility:visible}

/* Breadcrumbs */
.crumbs{font-size:.875rem;color:var(--gray-700);padding:18px 0 0}
.crumbs ol{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.crumbs li+li::before{content:"›";margin-right:6px;color:var(--gray-600)}
.crumbs a{text-decoration:none;color:var(--gray-700)}
.crumbs a:hover{color:var(--green-700)}
.is-dark .crumbs,.is-dark .crumbs a{color:rgba(255,255,255,.75)}

/* Media placeholder (documentary photo / loop to be commissioned) */
.media{position:relative;overflow:hidden;background:linear-gradient(135deg,var(--forest-900) 0%,var(--forest-800) 55%,var(--gray-700) 100%)}
.media::after{content:attr(data-label);position:absolute;right:12px;bottom:10px;font:500 .75rem/1.3 var(--sans);color:rgba(255,255,255,.8);background:rgba(10,10,10,.35);padding:4px 8px;max-width:70%}
.media img{width:100%;height:100%;object-fit:cover}
.media--light{background:linear-gradient(135deg,var(--tile) 0%,var(--hairline) 100%)}
.media--light::after{color:var(--gray-800);background:rgba(255,255,255,.6)}
.ratio-3x2{aspect-ratio:3/2}.ratio-4x3{aspect-ratio:4/3}.ratio-4x5{aspect-ratio:4/5}.ratio-16x9{aspect-ratio:16/9}.ratio-21x9{aspect-ratio:21/9}

/* Heroes */
.hero-home{position:relative;min-height:var(--hero-h);display:flex;align-items:flex-end;color:#fff;background:var(--forest-900)}
.hero-home .media{position:absolute;inset:0}
.hero-home .scrim-left{position:absolute;inset:0;background:linear-gradient(90deg,rgba(26,40,29,.9) 0%,rgba(26,40,29,.55) 45%,rgba(26,40,29,.1) 75%)}
.hero-home .wrap{position:relative;width:100%;padding-bottom:clamp(3rem,6vw,5.5rem);padding-top:calc(var(--header-h) + 3rem)}
.hero-home h1{font-size:var(--fs-display);line-height:1.06;max-width:15ch;color:#fff}
.hero-home .lead,.hero-hub .lead{color:rgba(255,255,255,.88)}
.hero-home .eyebrow,.hero-hub:not(.hero-hub--split) .eyebrow{color:var(--lime-300)}
.hero-home .media-toggle{position:absolute;right:var(--gutter);bottom:24px;width:40px;height:40px;border-radius:50%;border:1px solid rgba(255,255,255,.6);background:rgba(10,10,10,.3);color:#fff;cursor:pointer;display:grid;place-items:center}
.hero-hub{position:relative;background:var(--forest-900);color:#fff;overflow:hidden}
.hero-hub .media{position:absolute;inset:0}
.hero-hub .scrim-left{position:absolute;inset:0;background:linear-gradient(90deg,rgba(26,40,29,.94) 0%,rgba(26,40,29,.72) 50%,rgba(26,40,29,.25) 100%)}
.hero-hub .wrap{position:relative;padding-top:1rem;padding-bottom:clamp(3rem,6vw,5rem)}
.site-header.is-overlay ~ main .hero-hub .wrap{padding-top:calc(var(--header-h) + 1rem)}
.hero-hub h1{color:#fff;max-width:18ch;margin-top:1.75rem}
.hero-hub--split{background:var(--paper);color:var(--ink)}
.hero-hub--split .grid{display:grid;grid-template-columns:1.1fr .9fr;gap:48px;align-items:center;padding:1rem 0 3rem}
.hero-hub--split h1{color:var(--ink)}
.hero-simple{padding:2.5rem 0 2rem;border-bottom:var(--hl)}
.hero-simple .grid{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:end}
.hero-simple h1{margin:0}
.hero-article{position:relative}
.hero-article .media{height:clamp(260px,34vw,520px)}
.hero-article .panel{position:relative;background:#fff;border-top:var(--rule);max-width:840px;margin:-120px 0 0;padding:32px 40px 28px}
.hero-article h1{font-size:var(--fs-h1)}
.byline{display:flex;flex-wrap:wrap;gap:6px 18px;align-items:center;margin-top:1rem;font-size:var(--fs-small);color:var(--gray-600)}
.byline a{color:var(--gray-800)}
.hero-case .grid{display:grid;grid-template-columns:1.05fr .95fr;gap:48px;align-items:center;padding:1rem 0 0}
.hero-case .media{border-bottom:6px solid var(--green-500)}
.hero-profile .grid{display:grid;grid-template-columns:1.2fr .8fr;gap:48px;align-items:end}

/* Section grammar */
.midline{display:flex;align-items:center;gap:20px;text-align:center;margin:0 0 2rem;font-size:var(--fs-h3)}
.midline::before,.midline::after{content:"";flex:1;height:1px;background:var(--hairline)}
.is-dark .midline::before,.is-dark .midline::after{background:rgba(255,255,255,.25)}
.rule-title{border-top:var(--rule);padding-top:16px;font-size:var(--fs-h3)}
.see-all{text-align:center;margin-top:2rem}
.ruled{display:grid;grid-template-columns:repeat(3,1fr);border-top:var(--hl)}
.ruled > *{padding:28px 32px 32px 0;border-bottom:var(--hl)}
.ruled > *:not(:nth-child(3n)){border-right:var(--hl);margin-right:0}
.ruled > *:nth-child(3n+2),.ruled > *:nth-child(3n){padding-left:32px}
.ruled h3{font-size:clamp(1.375rem,1.25rem + .4vw,1.625rem);margin-bottom:.4em}
.ruled p{font-size:1rem;color:var(--gray-700)}
.split{display:grid;grid-template-columns:1fr 1fr;gap:clamp(32px,5vw,72px);align-items:center}
.split--flip .split__media{order:-1}
.split h2{max-width:20ch}
.link-block{display:grid;grid-template-columns:repeat(3,1fr);gap:0 32px}
.link-block a{display:flex;justify-content:space-between;gap:12px;padding:16px 0;border-bottom:var(--hl);text-decoration:none;font:400 1.1875rem/1.35 var(--serif)}
.link-block a::after{content:"›";color:var(--green-500);font-family:var(--sans);font-weight:600}
.link-block a:hover{color:var(--green-700)}

/* Evidence */
.stat-strip{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;border-top:var(--hl);border-bottom:var(--hl)}
.stat{padding:28px 28px 28px 0}
.stat + .stat{border-left:1px solid var(--hairline);padding-left:28px}
.stat__num{font:500 var(--fs-stat)/1.05 var(--serif);font-variant-numeric:tabular-nums lining-nums;display:block;letter-spacing:-.01em}
.stat__desc{display:block;margin-top:8px;color:var(--gray-700);font-size:1rem;max-width:30ch}
.is-dark .stat-strip{border-color:rgba(255,255,255,.2)}
.is-dark .stat + .stat{border-color:rgba(255,255,255,.2)}
.is-dark .stat__num{color:var(--green-500)}
.is-dark .stat__desc{color:rgba(255,255,255,.8)}
.stat-note{font-size:.8125rem;color:var(--gray-600);margin-top:10px}
.tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.tile{background:var(--tile);padding:24px 28px}
.tile .stat__num{font-size:clamp(2rem,1.7rem + 1vw,2.75rem)}
.outcome-bar{background:#fff;border-top:var(--rule);box-shadow:var(--shadow);display:grid;grid-template-columns:repeat(3,1fr);margin-top:-48px;position:relative}
.outcome-bar .stat{padding:24px 28px}
.outcome-bar .stat__num{color:var(--green-700);font-size:clamp(2rem,1.7rem + 1.2vw,3rem)}
.credential-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border-top:var(--hl);border-bottom:var(--hl)}
.credential{padding:22px 24px 22px 0;display:flex;gap:14px;align-items:flex-start}
.credential + .credential{border-left:var(--hl);padding-left:24px}
.credential svg{flex:none;color:var(--green-700);margin-top:3px}
.credential b{display:block;font:600 1rem/1.35 var(--sans)}
.credential span{font-size:.9375rem;color:var(--gray-700)}
.coverage{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.coverage .tile h3{font:600 1.125rem/1.35 var(--sans);margin:0 0 6px}
.coverage .tile p{font-size:.9375rem;color:var(--gray-700);margin:0 0 10px}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:1.25rem}
.chip{font-size:.875rem;border:var(--hl);padding:4px 12px;border-radius:999px;color:var(--gray-800);background:#fff}

/* Cards */
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:32px}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:28px}
.grid-4 .tile h3{font-size:1.25rem}
.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:32px}
.card{position:relative;display:flex;flex-direction:column}
.card .media{margin-bottom:16px;transition:filter var(--motion-fast)}
.card:hover .media{filter:brightness(.92)}
.card h3{font:600 clamp(1.125rem,1.08rem + .2vw,1.3125rem)/1.35 var(--sans);margin:0 0 8px;transition:color var(--motion-fast)}
.card h3 a{text-decoration:none}
.card h3 a::after{content:"";position:absolute;inset:0}
.card:hover h3,.card:focus-within h3{color:var(--green-700)}
.card p{font-size:.9375rem;color:var(--gray-700);margin:0 0 12px}
.card .card-meta{margin-top:auto;font-size:.8125rem;color:var(--gray-600);display:flex;gap:10px}
.card .metric{font:500 1.25rem/1.3 var(--serif);color:var(--green-700);margin:0 0 8px}
.card--person .media{aspect-ratio:4/5}
.card--person h3{margin-bottom:2px}
.card--wide{grid-column:span 2}
.card--wide h3{font:500 var(--fs-h3)/1.25 var(--serif)}

/* Editorial */
.at-a-glance{border-top:var(--rule);border-bottom:var(--hl);padding:18px 0 22px;margin:0 0 2rem}
.at-a-glance h2{font:600 1.125rem/1.3 var(--sans);margin:0 0 12px}
.at-a-glance ul{list-style:none;margin:0;padding:0}
.at-a-glance li{position:relative;padding-left:28px;margin:0 0 12px;font-size:var(--fs-lead);line-height:1.45;color:var(--gray-800)}
.at-a-glance li::before{content:"→";position:absolute;left:0;color:var(--green-500);font-weight:600}
.pull-quote{margin:2.5rem 0;border-top:var(--rule);border-bottom:var(--hl);padding:24px 0}
.pull-quote blockquote{margin:0;font:400 var(--fs-quote)/1.42 var(--serif)}
.pull-quote em{color:var(--green-700)}
.pull-quote figcaption{margin-top:14px;font-size:var(--fs-small);color:var(--gray-600)}
.is-dark .pull-quote em{color:var(--lime-300)}
.faq details{border-bottom:var(--hl)}
.faq summary{cursor:pointer;list-style:none;padding:20px 40px 20px 0;position:relative;font:500 1.25rem/1.4 var(--serif)}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";position:absolute;right:4px;top:18px;font:400 1.5rem/1 var(--sans);color:var(--green-700)}
.faq details[open] summary::after{content:"–"}
.faq details > div{padding:0 0 22px;color:var(--gray-800);max-width:var(--measure)}
.article{display:grid;grid-template-columns:260px minmax(0,700px) 260px;gap:48px;justify-content:space-between;padding-top:2.5rem}
.article-body{font-size:var(--fs-article);line-height:1.7}
.article-body h2{font-size:clamp(1.625rem,1.5rem + .5vw,2rem);margin-top:2rem}
.rail{position:sticky;top:calc(var(--header-h) + 24px);align-self:start;font-size:.9375rem}
.rail h2{font:600 var(--fs-eyebrow)/1.4 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--gray-600);margin:0 0 12px}
.author{display:flex;gap:12px;align-items:center;margin-bottom:14px}
.author .media{width:64px;height:64px;flex:none}
.author b{display:block;font-weight:600}
.author a{text-decoration:none}
.rail ul{list-style:none;padding:0;margin:0 0 20px}
.rail li{margin:0 0 8px}
.promo-small{border:var(--hl);padding:18px}
.promo-small h3{font:600 1.0625rem/1.35 var(--sans)}
.method-note{background:var(--tile);padding:4px 20px;margin:2rem 0}
.method-note summary{cursor:pointer;font-weight:600;padding:14px 0}
.profile-box{border-top:var(--rule);padding-top:16px;margin:2rem 0}
.profile-box dl{display:grid;grid-template-columns:auto 1fr;gap:8px 20px;margin:0;font-size:.9375rem}
.profile-box dt{color:var(--gray-600)}
.profile-box dd{margin:0}
.progress{position:fixed;top:0;left:0;height:3px;width:100%;background:var(--green-500);transform-origin:left;transform:scaleX(0);z-index:60}

/* Filters */
.filter-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:18px 0;border-bottom:var(--hl);margin-bottom:28px}
.filter-bar label{font-size:.875rem;color:var(--gray-700);margin-right:6px}
.filter-bar select{font:inherit;font-size:.9375rem;padding:8px 30px 8px 12px;border:var(--hl);background:#fff;border-radius:0}
.filter-bar .count{margin-left:auto;font-size:.875rem;color:var(--gray-600)}

/* CTA band, contact module, forms */
.cta-band h2{color:#fff;max-width:18ch}
.cta-band .dual{display:grid;grid-template-columns:1fr 1fr}
.cta-band .dual > div{padding:8px 48px 8px 0}
.cta-band .dual > div + div{border-left:1px solid rgba(255,255,255,.2);padding-left:48px}
.contact-module{border:var(--hl);background:#fff;display:grid;grid-template-columns:1fr 1.1fr;gap:0}
.contact-module > div{padding:40px}
.contact-module > div + div{border-left:var(--hl);background:var(--paper)}
.next-steps{margin:1.5rem 0 0;padding-left:1.2rem;color:var(--gray-800)}
.next-steps li{margin:0 0 .75rem}
.person-line{display:flex;gap:14px;align-items:center;margin:20px 0}
.person-line .media{width:64px;height:64px;flex:none;border-radius:50%}
.form{display:grid;gap:14px}
.form .row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.form label{display:block;font-size:.875rem;font-weight:500;margin-bottom:6px}
.form input,.form select,.form textarea{width:100%;font:inherit;font-size:1rem;padding:12px 14px;border:1px solid var(--gray-700);background:#fff;border-radius:0;min-height:48px}
.form textarea{min-height:110px}
.form input:focus,.form select:focus,.form textarea:focus{outline:2px solid var(--green-700);outline-offset:1px}
.form .consent{display:flex;gap:10px;font-size:.875rem;color:var(--gray-700);align-items:flex-start}
.form .consent input{width:auto;min-height:0;margin-top:4px}
.form .fallback{font-size:.875rem;color:var(--gray-700)}
.form .error{color:var(--error);font-size:.875rem;display:none}
.form-note{font-size:.8125rem;color:var(--gray-600);border:1px dashed var(--hairline);padding:8px 10px}

/* Footer */
.site-footer{background:var(--forest-900);color:#fff;padding-top:56px}
.site-footer a{color:#fff;text-decoration:none}
.site-footer a:hover{color:var(--lime-300);text-decoration:underline}
.footer-news{display:grid;grid-template-columns:1.2fr 1fr;gap:40px;align-items:center;padding-bottom:40px;border-bottom:1px solid rgba(255,255,255,.18)}
.footer-news p{font-size:1.3125rem;line-height:1.45;margin:0}
.footer-news form{display:flex;gap:10px}
.footer-news input{flex:1;font:inherit;padding:12px 14px;border:1px solid rgba(255,255,255,.5);background:transparent;color:#fff;min-height:48px}
.footer-news input::placeholder{color:rgba(255,255,255,.6)}
.footer-cols{display:grid;grid-template-columns:repeat(4,1fr) 1.2fr;gap:32px;padding:40px 0}
.footer-cols h2{font:600 var(--fs-eyebrow)/1.4 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:rgba(255,255,255,.65);margin:0 0 14px}
.footer-cols ul{list-style:none;margin:0;padding:0}
.footer-cols li{margin:0 0 10px;font-size:.9375rem}
.footer-legal{display:flex;flex-wrap:wrap;gap:12px 24px;justify-content:space-between;padding:22px 0 32px;border-top:1px solid rgba(255,255,255,.18);font-size:.8125rem;color:rgba(255,255,255,.7)}
.footer-legal nav{display:flex;flex-wrap:wrap;gap:16px}

/* Added after first-draft review */
.in-page-nav{position:sticky;top:var(--header-h);z-index:20;background:#fff;border-bottom:var(--hl)}
.in-page-nav ul{list-style:none;margin:0;padding:0;display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}
.in-page-nav a{display:block;white-space:nowrap;padding:16px 14px;font:500 .9375rem/1 var(--sans);color:var(--gray-800);text-decoration:none;border-bottom:2px solid transparent}
.in-page-nav a:hover,.in-page-nav a[aria-current="true"]{color:var(--green-700);border-bottom-color:var(--green-500)}
.recommended{list-style:none;counter-reset:rec;margin:0;padding:0}
.recommended li{counter-increment:rec;display:grid;grid-template-columns:44px 1fr;gap:4px 12px;padding:16px 0;border-bottom:var(--hl)}
.recommended li::before{content:counter(rec);grid-row:span 2;font:500 2rem/1 var(--serif);color:var(--green-700)}
.recommended a{font:600 1.0625rem/1.4 var(--sans);text-decoration:none}
.recommended a:hover{color:var(--green-700)}
.coverage.values{grid-template-columns:repeat(5,1fr)}
.hero-hub .cta-text,.hero-home .cta-text,.is-dark .cta-text{color:var(--lime-300)}
.lead--center{margin:0 auto 2rem;text-align:center}
.tiles--2{grid-template-columns:1fr 1fr}
@media (max-width:1079px){.coverage.values{grid-template-columns:repeat(3,1fr)}}
@media (max-width:767px){.coverage.values{grid-template-columns:1fr 1fr}}

/* Motion (only when JS adds .js-motion and reduced motion isn't requested) */
.js-motion [data-reveal]:not(.is-revealed){opacity:.001;transform:translateY(16px)}
.js-motion [data-reveal]{transition:opacity var(--motion-slow) var(--ease-ed),transform var(--motion-slow) var(--ease-ed);transition-delay:calc(var(--i,0) * 70ms)}
.js-motion [data-intro]{opacity:.001;transform:translateY(16px);animation:rise var(--motion-cine) var(--ease-ed) forwards;animation-delay:calc(var(--i,0) * 90ms + 120ms)}
@keyframes rise{to{opacity:1;transform:none}}

/* who-we-are values list (2026-09-29) */
.values-list{list-style:none;margin:0 0 1rem;padding:0;border-top:var(--hl)}
.values-list li{padding:.85rem 0;border-bottom:var(--hl);font-size:1rem}
.values-list b{font-family:var(--serif);font-weight:600;font-size:1.125rem;color:var(--forest-900);margin-right:.35rem}
.band.is-dark .actions{display:flex;gap:1.5rem;align-items:center;flex-wrap:wrap;margin-top:1.5rem}

/* sister-site gateway pages: short by design (2026-09-29) */
.gateway h2{font-size:clamp(1.5rem,2.4vw,2rem)}
.gateway__list{list-style:none;margin:0;padding:0;border-top:var(--hl)}
.gateway__list li{border-bottom:var(--hl)}
.gateway__list a{display:flex;justify-content:space-between;padding:1rem 0;font:500 1.0625rem/1.4 var(--sans);color:var(--forest-900);text-decoration:none}
.gateway__list a:hover{color:var(--green-700)}

/* sister-site hand-off pages (2026-09-29) */
.handoff{min-height:62vh;display:flex;align-items:center}
.handoff__inner{max-width:var(--measure);margin:0 auto;text-align:center}
.handoff__inner .lead{margin-left:auto;margin-right:auto}
.handoff__path{display:flex;align-items:center;justify-content:center;gap:1rem;margin:0 0 2rem;font:600 1.125rem/1 var(--serif);color:var(--forest-900)}
.handoff__path .arr{color:var(--green-700)}
.handoff__count{font-size:1rem;color:var(--gray-700)}
.handoff .actions{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap;margin:1.5rem 0}
.handoff__back{margin-top:1rem}
.footer-sister{font-size:.875rem;margin:0 0 10px;color:rgba(255,255,255,.75)}
.footer-sister a{color:var(--white)}
.cta-band .dual--3{grid-template-columns:repeat(3,1fr)}

/* service-chain: the connected service operation (Lucas, 2026-09-29) */
.chain{margin-top:2rem}
.chain__links{list-style:none;margin:0;padding:0;display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);border-top:var(--hl)}
.chain__link{position:relative;padding:1.5rem 1.25rem 1.5rem 0;border-top:var(--rule);margin-top:-1px}
.chain__link+.chain__link{padding-left:1.25rem;border-left:var(--hl)}
.chain__link:not(:last-child)::after{content:"";position:absolute;right:-7px;top:-8px;width:13px;height:13px;background:var(--green-500);clip-path:polygon(0 0,100% 50%,0 100%);z-index:1}
.chain__num{display:block;font:600 var(--fs-eyebrow)/1.4 var(--sans);letter-spacing:.08em;color:var(--green-700);margin-bottom:.5rem}
.chain__link h3{font-size:1.25rem;margin-bottom:.4em}
.chain__link p{font-size:1rem;margin:0 0 .75rem}
.chain__link[aria-current]{background:var(--tile)}
.chain__agents{color:var(--gray-700);font-size:.875rem!important;border-top:var(--hl);padding-top:.6rem}
.chain__agents b{color:var(--green-700);font-weight:600}
.chain__layer{margin-top:1.5rem;background:var(--forest-900);color:var(--white);padding:1.25rem 1.5rem;display:flex;gap:1.5rem;align-items:baseline;flex-wrap:wrap}
.chain__layer .eyebrow{color:var(--lime-300);margin:0}
.chain__layer p{margin:0;flex:1 1 420px}
.chain__layer a{color:var(--lime-300)}
.is-dark .chain__links{border-top-color:rgba(255,255,255,.2)}
@media (max-width:1079px){.chain__links{grid-template-columns:1fr 1fr}.chain__link,.chain__link+.chain__link{padding:1.25rem 1rem 1.25rem 0;border-left:0}.chain__link:not(:last-child)::after{display:none}}
@media (max-width:767px){.chain__links{grid-template-columns:1fr}.chain__link{padding-left:1rem!important;border-top:0;border-left:var(--rule)!important;margin:0 0 .5rem}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}.js-motion [data-reveal],.js-motion [data-intro]{opacity:1!important;transform:none!important}}

/* ===== Bain-pattern imagery and components (2026-09-29) ===== */
/* Photos inside media slots (prototype: licensed stock; production: documentary shoot) */
.media.has-photo{background:var(--forest-900)}
.media.has-photo::after{display:none}
.media.has-photo img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;filter:saturate(.88) contrast(1.03)}
.hero-home .media.has-photo img,.hero-hub .media.has-photo img{filter:saturate(.82) contrast(1.05) brightness(.92)}

/* Home: story carousel (Bain hero carousel: tabbed slides with progress bars) */
.hero-stories{display:block;min-height:0;background:var(--forest-900)}
.hero-stories .story{position:relative;min-height:var(--hero-h);display:flex;align-items:flex-end;color:#fff;overflow:hidden}
.hero-stories .story .media{position:absolute;inset:0}
.hero-stories .story .wrap{position:relative;width:100%;padding-top:calc(var(--header-h) + 3rem);padding-bottom:calc(clamp(3rem,6vw,5.5rem) + 84px)}
.hero-stories .story h1,.hero-stories .story .story__title{color:#fff;max-width:16ch;font-size:var(--fs-display,clamp(2.5rem,5vw,4rem));line-height:1.08;margin:0 0 .4em;font-family:var(--serif);font-weight:500}
.hero-stories .story .lead{color:rgba(255,255,255,.88)}
.hero-stories .story .eyebrow{color:var(--lime-300)}
.stories__nav{position:absolute;left:0;right:0;bottom:0;z-index:3;border-top:1px solid rgba(255,255,255,.22);background:linear-gradient(0deg,rgba(26,40,29,.55),rgba(26,40,29,0))}
.stories__nav .wrap{display:grid;grid-template-columns:repeat(5,1fr) auto;align-items:stretch}
.stories__tab{all:unset;cursor:pointer;display:grid;grid-template-rows:auto auto;gap:6px;padding:16px 20px 20px 0;color:rgba(255,255,255,.7);font:500 .9375rem/1.3 var(--sans);position:relative}
.stories__tab + .stories__tab{padding-left:20px;border-left:1px solid rgba(255,255,255,.18)}
.stories__tab:focus-visible{outline:2px dotted var(--lime-300);outline-offset:-4px}
.stories__tab[aria-selected="true"]{color:#fff}
.stories__num{font:600 .75rem/1 var(--sans);letter-spacing:.08em;color:var(--lime-300)}
.stories__bar{position:absolute;left:0;right:20px;top:-1px;height:3px;background:transparent;overflow:hidden}
.stories__tab + .stories__tab .stories__bar{left:20px}
.stories__bar i{display:block;height:100%;background:var(--green-500);transform:scaleX(0);transform-origin:left}
.stories__tab[aria-selected="true"] .stories__bar i{transform:scaleX(1)}
.stories__pause{all:unset;cursor:pointer;align-self:center;width:40px;height:40px;border-radius:50%;border:1px solid rgba(255,255,255,.6);display:grid;place-items:center;color:#fff;margin-left:16px}
.stories__pause:focus-visible{outline:2px dotted var(--lime-300);outline-offset:3px}
/* enhanced (JS): stack slides, crossfade the active one */
.hero-stories.is-enhanced .stories__slides{display:grid}
.hero-stories.is-enhanced .story{grid-area:1/1;opacity:0;visibility:hidden;transition:opacity var(--motion-slow,600ms) var(--ease-std),visibility 0s linear var(--motion-slow,600ms)}
.hero-stories.is-enhanced .story.is-active{opacity:1;visibility:visible;transition:opacity var(--motion-slow,600ms) var(--ease-std),visibility 0s}
.hero-stories.is-enhanced.is-playing .stories__tab[aria-selected="true"] .stories__bar i{transform:scaleX(0);animation:story-progress var(--story-ms,9000ms) linear forwards}
.hero-stories.is-enhanced.is-paused .stories__tab[aria-selected="true"] .stories__bar i{animation-play-state:paused}
@keyframes story-progress{to{transform:scaleX(1)}}
.hero-stories:not(.is-enhanced) .stories__nav{display:none}

/* Finder (Bain "answer two questions" personalization) */
.finder{background:var(--white);border-bottom:var(--hl)}
.finder__grid{display:grid;grid-template-columns:.8fr 1.6fr;gap:48px;align-items:start}
.finder__head h2{margin:0 0 .4em}
.finder__head p{color:var(--gray-700);margin:0}
.finder fieldset{border:0;margin:0 0 1.25rem;padding:0}
.finder legend{font:600 var(--fs-eyebrow)/1.4 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--green-700);margin-bottom:.75rem;padding:0}
.finder legend b{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--forest-900);color:#fff;font-size:.75rem;margin-right:8px;letter-spacing:0}
.chips-choice{display:flex;flex-wrap:wrap;gap:8px}
.chips-choice label{position:relative}
.chips-choice input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.chips-choice span{display:inline-block;padding:.55rem 1rem;border:1px solid var(--hairline);border-radius:999px;font:500 .9375rem/1.2 var(--sans);color:var(--forest-900);background:var(--white);transition:background var(--motion-fast),border-color var(--motion-fast),color var(--motion-fast)}
.chips-choice input:hover + span{border-color:var(--green-500)}
.chips-choice input:focus-visible + span{outline:2px dotted var(--green-700);outline-offset:3px}
.chips-choice input:checked + span{background:var(--forest-900);border-color:var(--forest-900);color:#fff}
.finder__result{border-top:3px solid var(--green-500);background:var(--tile);padding:1.25rem 1.5rem;margin-top:.5rem}
.finder__result[hidden]{display:none}
.finder__result p{margin:0 0 .75rem}
.finder__result ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:12px 28px}
.finder__fallback ul{list-style:none;margin:0;padding:0;columns:2;column-gap:28px}
.finder__fallback li{padding:.35rem 0}
.finder form[hidden],.finder__fallback[hidden]{display:none}

/* Featured client results carousel (Bain: story + "The impact" stat tiles + image, dots) */
.rc{position:relative}
.rc__slide{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center}
.rc__slide + .rc__slide{margin-top:56px;padding-top:56px;border-top:var(--hl)}
.rc__slide h3{font-size:clamp(1.5rem,2.4vw,2rem);margin:0 0 .5em}
.rc__slide h3 a{text-decoration:none}
.rc__slide h3 a:hover{color:var(--green-700)}
.rc__impact{font:600 var(--fs-eyebrow)/1.4 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--gray-700);margin:1.25rem 0 .6rem}
.rc__tiles{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:1.25rem}
.rc__tiles .tile{background:var(--tile);padding:18px 20px;border-top:3px solid var(--green-500)}
.rc__tiles .stat__num{display:block;font:500 clamp(1.75rem,3vw,2.5rem)/1.05 var(--serif);color:var(--forest-900);margin-bottom:6px}
.rc__tiles .stat__num--text{font-size:1.25rem;line-height:1.25}
.rc__tiles .stat__desc{font-size:.9375rem;color:var(--gray-700)}
.rc__media{aspect-ratio:4/3}
.rc__controls{display:none;align-items:center;gap:16px;margin-top:28px}
.rc__btn{all:unset;cursor:pointer;width:44px;height:44px;border:1px solid var(--hairline);display:grid;place-items:center;color:var(--forest-900);transition:background var(--motion-fast),color var(--motion-fast)}
.rc__btn:hover{background:var(--forest-900);color:#fff}
.rc__btn:focus-visible{outline:2px dotted var(--green-700);outline-offset:3px}
.rc__dots{display:flex;gap:10px}
.rc__dot{all:unset;cursor:pointer;width:10px;height:10px;border-radius:50%;border:1px solid var(--forest-900)}
.rc__dot[aria-current="true"]{background:var(--forest-900)}
.rc__dot:focus-visible{outline:2px dotted var(--green-700);outline-offset:3px}
.rc.is-enhanced .rc__slide{display:none;margin:0;padding:0;border:0}
.rc.is-enhanced .rc__slide.is-active{display:grid}
.js-motion .rc.is-enhanced .rc__slide.is-active{animation:rc-in var(--motion-slow,600ms) var(--ease-ed) both}
@keyframes rc-in{from{opacity:.001;transform:translateX(16px)}to{opacity:1;transform:none}}
.rc.is-enhanced .rc__controls{display:flex}

/* Full-width image banner with an overlapping text panel (Bain promo banner / About hero) */
.banner{position:relative;overflow:hidden;min-height:clamp(420px,48vw,560px);display:flex;align-items:flex-end;background:var(--forest-900)}
.banner .media{position:absolute;inset:0}
.banner .media img{transition:scale 900ms var(--ease-ed)}
.banner:hover .media img,.banner:focus-within .media img{scale:1.04}
.banner__panel{position:relative;z-index:2;background:rgba(255,255,255,.96);border-top:3px solid var(--green-500);max-width:560px;padding:28px 32px;margin:0 0 clamp(2rem,5vw,4rem)}
.banner__panel h2{font-size:clamp(1.5rem,2.6vw,2.125rem);margin:0 0 .4em}
.banner__panel p{color:var(--gray-700)}

/* About hero: full-bleed image + translucent panel with accent rule (Bain About) */
.hero-about{position:relative;background:var(--forest-900)}
.hero-about .media{position:absolute;inset:0}
.hero-about .hero-about__inner{position:relative;min-height:var(--hero-h);display:flex;align-items:flex-end;padding-bottom:0}
.hero-about .hero-about__panel{position:relative;z-index:2;background:rgba(255,255,255,.95);border-top:3px solid var(--green-500);max-width:680px;padding:32px 36px 36px;transform:translateY(48px)}
.hero-about .hero-about__panel h1{font-size:clamp(2rem,3.6vw,3rem);line-height:1.1;margin:.2em 0 .45em}
.hero-about .hero-about__panel .lead{color:var(--gray-700)}
.hero-about + *{padding-top:calc(48px + 2rem)}
.site-header.is-overlay ~ main .hero-about .crumbs{padding-top:calc(var(--header-h) + 1rem)}
.hero-about .crumbs{position:relative;z-index:2;color:#fff}
.hero-about .crumbs a{color:#fff}

@media (max-width:1079px){
  .finder__grid{grid-template-columns:1fr;gap:24px}
  .rc__slide{grid-template-columns:1fr;gap:24px}
  .rc__media{order:-1}
  .stories__nav .wrap{grid-template-columns:repeat(5,1fr) auto}
  .stories__label{display:none}
}
@media (max-width:767px){
  .stories__nav .wrap{grid-template-columns:repeat(5,1fr) auto}
  .stories__tab{padding:14px 10px 16px 0}
  .stories__tab + .stories__tab{padding-left:10px}
  .hero-stories .story .wrap{padding-bottom:calc(2.5rem + 64px)}
  .rc__tiles{grid-template-columns:1fr}
  .banner__panel{margin:0 0 24px;padding:22px 20px}
  .hero-about .hero-about__panel{transform:none;padding:24px 20px}
  .hero-about + *{padding-top:2rem}
  .finder__fallback ul{columns:1}
}
@media (prefers-reduced-motion:reduce){
  .banner:hover .media img{scale:1}
}

/* ===== Consent, language, cookie policy (2026-09-29) ===== */
.cookie-banner{position:fixed;left:16px;bottom:16px;z-index:95;max-width:520px;background:var(--white);color:var(--ink);border-top:3px solid var(--green-500);box-shadow:var(--shadow);padding:20px 22px}
.cookie-banner[hidden]{display:none}
.cookie-banner__title{font:600 1.125rem/1.3 var(--serif);margin:0 0 .4rem}
.cookie-banner p{font-size:.9375rem;margin:0 0 .75rem}
.cookie-banner__gpc{color:var(--green-700)}
.cookie-banner__actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.cookie-banner__actions .btn{padding:.7rem 1.2rem;flex:1 1 auto;justify-content:center}
.cookie-banner__choose,.footer-cookie-btn{all:unset;cursor:pointer;font:600 .9375rem/1.2 var(--sans);color:var(--green-700);text-decoration:underline;text-underline-offset:3px;padding:.5rem .25rem}
.footer-cookie-btn{color:inherit;font-weight:inherit;font-size:inherit}
.cookie-banner__choose:focus-visible,.footer-cookie-btn:focus-visible{outline:2px dotted var(--green-700);outline-offset:3px}
.consent-dialog{max-width:640px;width:calc(100% - 32px);border:0;border-top:3px solid var(--green-500);padding:28px 28px 24px;box-shadow:var(--shadow);color:var(--ink)}
.consent-dialog::backdrop{background:rgba(10,10,10,.5)}
.consent-dialog__head{display:flex;justify-content:space-between;align-items:start;gap:16px}
.consent-dialog__head h2{margin:0 0 .5rem;font-size:1.5rem}
.consent-dialog__close{all:unset;cursor:pointer;font-size:1.75rem;line-height:1;padding:0 6px;color:var(--gray-700)}
.consent-dialog__close:focus-visible{outline:2px dotted var(--green-700)}
.consent-dialog p{font-size:.9375rem}
.consent-cat{display:flex;justify-content:space-between;align-items:center;gap:24px;padding:14px 0;border-top:var(--hl)}
.consent-cat h3{font:600 1rem/1.3 var(--sans);margin:0 0 .25rem}
.consent-cat p{margin:0;color:var(--gray-700);font-size:.875rem}
.consent-cat__always{font:600 .8125rem/1 var(--sans);color:var(--green-700);white-space:nowrap}
.consent-switch{appearance:none;-webkit-appearance:none;flex:none;width:46px;height:26px;border-radius:13px;background:var(--hairline);position:relative;cursor:pointer;transition:background var(--motion-fast);margin:0}
.consent-switch::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:var(--white);transition:transform var(--motion-fast) var(--ease-std);box-shadow:0 1px 2px rgba(0,0,0,.25)}
.consent-switch:checked{background:var(--green-700)}
.consent-switch:checked::after{transform:translateX(20px)}
.consent-switch:focus-visible{outline:2px dotted var(--green-700);outline-offset:3px}
.cookie-banner__actions--dialog{margin-top:18px;border-top:var(--hl);padding-top:18px}
.lang-switch{font:600 .8125rem/1 var(--sans);letter-spacing:.06em;color:var(--gray-800);text-decoration:none;border:1px solid var(--hairline);padding:6px 8px}
.lang-switch:hover{color:var(--green-700);border-color:var(--green-500)}
.site-header.is-overlay:not(.is-solid) .lang-switch{color:#fff;border-color:rgba(255,255,255,.55)}
.lang-switch--mobile{display:inline-block;margin:12px 0;color:#fff;border-color:rgba(255,255,255,.4);font-size:.9375rem;padding:8px 12px}
.cookie-table{width:100%;border-collapse:collapse;margin:0 0 1.5rem;font-size:.9375rem}
.cookie-table th,.cookie-table td{text-align:left;padding:10px 12px 10px 0;border-bottom:var(--hl);vertical-align:top}
.cookie-table th{font:600 .75rem/1.4 var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--gray-700)}
@media (max-width:767px){
  .cookie-banner{left:8px;right:8px;bottom:8px;max-width:none;padding:16px}
  .cookie-table thead{display:none}
  .cookie-table tr{display:block;border-bottom:var(--hl);padding:8px 0}
  .cookie-table td{display:block;border:0;padding:2px 0}
}

/* Ken Burns: slow photo motion (2026-09-29). Animates `scale` only (compositor-friendly, and it
   leaves a mirrored image's transform alone). Runs only under .js-motion, so reduced-motion
   visitors and no-JS readers see still photos. Page heroes zoom in from scale 1 over 5 s (WCAG 2.2.2 needs
   no pause control); the home stories drift while a slide is showing and pause with the carousel. */
@keyframes ken-settle-soft{from{scale:1.05}to{scale:1}}
@keyframes ken-drift{from{scale:1}to{scale:1.07}}
/* Heroes zoom in from their natural size, so the first frame of a new page matches the last frame of the
   page you left (starting at 1.08 and settling out read as a jump on every navigation; 2026-09-29). */
@keyframes ken-in{from{scale:1}to{scale:1.06}}
.media.has-photo img{transform-origin:50% 50%}
.js-motion .hero-hub .media.has-photo img,
.js-motion .hero-about .media.has-photo img{animation:ken-in 5s var(--ease-std) forwards}
.js-motion .banner .media.has-photo.is-inview img{animation:ken-in 5s var(--ease-std) forwards}
.js-motion .split__media.has-photo.is-inview img,
.js-motion .rc__media.has-photo.is-inview img,
.js-motion .card .media.has-photo.is-inview img{animation:ken-settle-soft 1.6s var(--ease-ed) backwards}
.js-motion .card:hover .media.has-photo img{scale:1.03;transition:scale 600ms var(--ease-ed)}
.js-motion .hero-stories.is-enhanced .story .media.has-photo img{animation:ken-drift 9s linear both;animation-play-state:paused}
.js-motion .hero-stories.is-enhanced.is-playing:not(.is-paused) .story.is-active .media.has-photo img{animation-play-state:running}

/* Responsive */
@media (max-width:1079px){
  .nav,.header-tools .careers,.header-tools .btn{display:none}
  .menu-toggle{display:inline-flex}
  .ruled,.link-block,.coverage,.grid-3,.tiles,.credential-strip{grid-template-columns:1fr 1fr}
  .ruled > *{padding:24px 20px 24px 0!important;border-right:0!important}
  .grid-4{grid-template-columns:1fr 1fr}
  .article{grid-template-columns:minmax(0,1fr)}
  .rail{position:static}
  .footer-cols{grid-template-columns:repeat(2,1fr)}
  .credential + .credential{border-left:0;padding-left:0}
}
@media (max-width:767px){
  .split,.hero-hub--split .grid,.hero-simple .grid,.hero-case .grid,.hero-profile .grid,.contact-module,.cta-band .dual,.footer-news,.grid-2,.grid-3,.grid-4,.ruled,.link-block,.coverage,.tiles,.credential-strip,.form .row{grid-template-columns:1fr}
  .card--wide{grid-column:auto}
  .stat-strip{grid-auto-flow:row}
  .stat + .stat{border-left:0;padding-left:0;border-top:var(--hl)}
  .outcome-bar{grid-template-columns:1fr;margin-top:16px}
  .contact-module > div + div{border-left:0;border-top:var(--hl)}
  .contact-module > div{padding:24px}
  .cta-band .dual > div + div{border-left:0;padding-left:0;border-top:1px solid rgba(255,255,255,.2);padding-top:24px;margin-top:16px}
  .hero-article .panel{margin-top:-40px;padding:22px 20px}
  .footer-news form{flex-direction:column}
  .footer-cols{grid-template-columns:1fr 1fr}
  .split--flip .split__media{order:0}
}

/* seven top-level items: switch to the menu button below 1200px (2026-09-29) */
@media (max-width:1199px){.nav,.header-tools .careers,.header-tools .btn{display:none}.menu-toggle{display:inline-flex}}

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

.hero-about .actions{display:flex;gap:1.5rem;align-items:center;flex-wrap:wrap;margin-top:1.25rem}
.hero-about::before{content:"";position:absolute;inset:0 0 auto 0;height:220px;background:linear-gradient(180deg,rgba(26,40,29,.78),rgba(26,40,29,0));z-index:1;pointer-events:none}

.hero-hub--split .lead{color:var(--gray-700)}
.hero-hub--split .media{position:relative;inset:auto}

.also-serving{text-align:center;color:var(--gray-700);margin:1.5rem auto 0;max-width:var(--measure)}
.hero-hub:not(.hero-hub--split) .crumbs,.hero-hub:not(.hero-hub--split) .crumbs a{color:rgba(255,255,255,.85)}

/* Services menu: each Service Operations area with its Microsoft Dynamics 365 product (2026-09-29) */
.mega__intro{font-size:.875rem;color:var(--gray-700);margin:-.25rem 0 1rem;max-width:34ch}
.mega__areas li{margin:0 0 12px}
.mega__area{display:block;font-weight:600;color:var(--forest-900)}
.mega__product{display:block;font-size:.8125rem;color:var(--gray-700);margin-top:2px}
.mega a:hover .mega__area{color:var(--green-700)}

.chain__product{font:600 .75rem/1.35 var(--sans);color:var(--forest-900);background:var(--tile);display:inline-block;padding:4px 8px;margin:0 0 .6rem!important}
.is-dark .chain__product{background:rgba(255,255,255,.1);color:#fff}
@media (max-width:1079px){.chain__links{grid-auto-flow:row;grid-template-columns:1fr 1fr}}
@media (max-width:767px){.chain__links{grid-template-columns:1fr}}

/* Microsoft alignment: official links, and official icons where Microsoft's terms allow (2026-09-29) */
.ms-link{text-decoration-color:var(--green-500)}
.ms-ext{font-size:.75em;margin-left:2px;color:var(--gray-700)}
.is-dark .ms-ext{color:rgba(255,255,255,.7)}
.ms-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px 4px 8px;border:1px solid var(--hairline);background:var(--white);color:var(--forest-900);font:600 .75rem/1.3 var(--sans);text-decoration:none;margin:0 6px 6px 0;transition:border-color var(--motion-fast),color var(--motion-fast)}
.ms-chip:hover{border-color:var(--green-500);color:var(--green-700)}
.ms-chip:focus-visible{outline:2px dotted var(--green-700);outline-offset:2px}
.is-dark .ms-chip{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.25);color:#fff}
.ms-icon{display:block;flex:none;object-fit:contain}
.chain__product{background:none!important;padding:0!important;display:flex!important;flex-wrap:wrap}
.ms-row{display:flex;flex-wrap:wrap;margin:1rem 0 .5rem}
.ms-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;margin-top:1.5rem}
.ms-tile{display:grid;grid-template-rows:auto auto 1fr auto;gap:8px;padding:20px;background:var(--white);border:1px solid var(--hairline);border-top:3px solid var(--green-500);text-decoration:none;color:var(--ink);transition:border-color var(--motion-fast),transform var(--motion-fast)}
.ms-tile:hover{border-color:var(--green-500)}
.ms-tile:focus-visible{outline:2px dotted var(--green-700);outline-offset:3px}
.ms-tile__icon{min-height:40px;display:flex;align-items:center}
.ms-tile__icon:empty{min-height:0}
.ms-tile__name{font:600 1rem/1.3 var(--sans);color:var(--forest-900)}
.ms-tile__use{font-size:.9375rem;color:var(--gray-700)}
.ms-tile__more{font:600 .8125rem/1.2 var(--sans);color:var(--green-700)}
.ms-guided{text-align:center;margin-top:1.25rem;color:var(--gray-700)}
.ms-guided .ms-chip{vertical-align:middle}
.ms-badges{margin:1.5rem 0;padding-top:1.25rem;border-top:1px solid rgba(255,255,255,.2)}
.ms-badges__label{font:600 var(--fs-eyebrow)/1.4 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--lime-300);margin:0}
.footer-tm{font-size:.75rem;color:rgba(255,255,255,.6);margin:0 0 12px;max-width:80ch}

/* Events (2026-09-29) */
.events-hero{padding-bottom:1rem}
.events-hero h1{max-width:20ch}
.event-list{display:grid;gap:0;border-top:var(--hl)}
.event-card{display:grid;grid-template-columns:96px 1fr 280px;gap:28px;padding:28px 0;border-bottom:var(--hl);align-items:start}
.event-card__date{display:grid;justify-items:center;border-top:3px solid var(--green-500);background:var(--tile);padding:12px 8px;font-family:var(--sans)}
.event-card__date .m{font:600 .75rem/1 var(--sans);letter-spacing:.1em;color:var(--green-700)}
.event-card__date .d{font:500 1.5rem/1.2 var(--serif);color:var(--forest-900);margin:4px 0}
.event-card__date .y{font-size:.75rem;color:var(--gray-700)}
.event-card h3{margin:0 0 .3em;font-size:1.375rem}
.event-card__meta{color:var(--gray-700);font-size:.9375rem;margin:0 0 .6rem}
.event-card__links{display:flex;gap:24px;flex-wrap:wrap;margin:.5rem 0 0}
.event-card__media{aspect-ratio:16/9;overflow:hidden;background:var(--tile)}
.event-card__media img{width:100%;height:100%;object-fit:cover}
.event-list--past .event-card{opacity:.9}
@media (max-width:1079px){.event-card{grid-template-columns:80px 1fr}.event-card__media{grid-column:2}}
@media (max-width:767px){.event-card{grid-template-columns:64px 1fr;gap:16px}.event-card__media{grid-column:1 / -1}}

.mega__static{font-size:.9375rem;color:var(--gray-700)}

.fasttrack-org{margin:2rem 0 0;padding:1.5rem 0 0;border-top:3px solid var(--green-500);max-width:var(--measure)}
.fasttrack-org h3{color:#fff;font-size:1.5rem;margin:.2rem 0 .6rem}

/* mobile hygiene (health review 2026-09-29) */
.in-page-nav{max-width:100%;overflow:hidden}
.in-page-nav ul{overflow-x:auto;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
.in-page-nav li{flex:none}
main p a,main li a,.cookie-table td{overflow-wrap:anywhere}
@media (max-width:767px){.coverage.values{grid-template-columns:repeat(2,minmax(0,1fr))}.coverage .tile h3{overflow-wrap:anywhere;hyphens:auto}}
@media (max-width:479px){.coverage.values{grid-template-columns:1fr}}

/* Photo heroes on hub and utility pages (Contact, Events, Insights, Client results; 2026-09-29) */
/* Ken Burns on every page's main picture: case-study and article heroes too */
.hero-case .media.has-photo,.hero-article .media.has-photo{overflow:hidden}
.js-motion .hero-case .media.has-photo img,
.js-motion .hero-article .media.has-photo img{animation:ken-in 5s var(--ease-std) forwards}

.handoff__to{font:500 .9rem/1.4 var(--sans);color:var(--gray-700);margin-top:-.5rem}

/* page-transition (motion spec): same-origin navigations crossfade instead of cutting, so one page's
   picture dissolves into the next. Browsers without cross-document View Transitions just navigate. */
@media (prefers-reduced-motion:no-preference){
  @view-transition{navigation:auto}
  ::view-transition-old(root),::view-transition-new(root){animation-duration:250ms;animation-timing-function:var(--ease-std)}
}

/* One height for every full-width photo hero (2026-09-29): the picture no longer grows or shrinks with the
   length of the headline, so moving between pages doesn't jump. Text sits at the bottom, as on the home page. */
:root{--hero-h:min(100svh,880px)}
.hero-hub:not(.hero-hub--split){min-height:var(--hero-h);display:flex;align-items:flex-end}
.hero-hub:not(.hero-hub--split) > .wrap{width:100%}
.hero-hub:not(.hero-hub--split) h1{max-width:21ch}
.hero-hub:not(.hero-hub--split) .lead{max-width:68ch}
.hero-stories .story h1,.hero-stories .story .story__title{max-width:21ch}
.hero-stories .story .lead{max-width:60ch}
/* Phones: long headlines can outgrow one screen. The picture keeps the same size on every page and fades
   into the forest background; any extra text runs on below it instead of stretching the photo. */
@media (max-width:767px){
  .hero-hub:not(.hero-hub--split) > .media,.hero-home > .media,.hero-stories .story > .media,.hero-about > .media{bottom:auto;height:var(--hero-h);
    -webkit-mask-image:linear-gradient(to bottom,#000 70%,transparent);mask-image:linear-gradient(to bottom,#000 70%,transparent)}
  .hero-hub:not(.hero-hub--split) > .scrim-left,.hero-stories .story > .scrim-left{background:linear-gradient(180deg,rgba(26,40,29,.35) 0%,rgba(26,40,29,.8) 45%,rgba(26,40,29,.94) 70%)}
}
.hero-stories .story h1,.hero-stories .story .story__title{max-width:23ch}
.hero-stories .story .wrap{padding-top:calc(var(--header-h) + 2rem)}
/* About: the breadcrumb sits above the panel, so pin the picture to the shared hero height */
.hero-about > .media{bottom:auto;height:var(--hero-h)}
.hero-about .hero-about__inner{min-height:calc(var(--hero-h) - var(--header-h) - 2.4rem)}
/* Short laptop screens: keep the longest home headline (Spanish) inside one screen */
@media (min-width:768px) and (max-height:860px){.hero-stories .story h1,.hero-stories .story .story__title{font-size:min(var(--fs-display,4rem),3.4rem)}}
/* Tablet and up: one hero height for every page, 840–880px, even on short laptop screens where the
   longest Spanish headlines need ~834px. Phones keep the screen height with the pinned picture above. */
@media (min-width:768px){:root{--hero-h:clamp(840px,100svh,880px)}}

/* Header CTA never wraps (2026-09-29): "Talk to us" was squeezed to three lines at 1366px+, and the Spanish
   row ran wider than the container. Buttons hold their width; Spanish labels sit a little tighter. */
.site-header .btn{white-space:nowrap;flex-shrink:0}
.header-tools,.header-tools > *{flex-shrink:0}
html[lang="es"] .nav{gap:0}
html[lang="es"] .nav__trigger,html[lang="es"] .nav__link{padding-left:8px;padding-right:8px}
html[lang="es"] .header-tools{gap:12px}

/* Header row, desktop (2026-09-29): the menu never shrinks under its labels (that let "About" slide under the
   language button). Language switch sits at the far right, sized to the header controls: 42px, the height of
   the "Talk to us" button. */
.nav{flex-shrink:0}
.nav__trigger,.nav__link{padding-left:9px;padding-right:9px}
.nav{gap:0}
.header-tools{gap:14px}
.header-tools .lang-switch{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;height:42px;min-width:42px;padding:0 8px;line-height:1}
@media (min-width:1200px){.header-tools .lang-switch{order:10}}
/* The header bar may run wider than the 1280px reading grid (as on bain.com), so the full menu, Careers,
   search, "Talk to us" and the language switch fit in one row on wide screens. */
.site-header__bar{max-width:1440px}
.header-tools{gap:12px}
/* Spanish labels are longer: the full menu needs ~1,306px, so Spanish uses the menu button until 1340px */
@media (min-width:1200px) and (max-width:1339px){
  html[lang="es"] .nav,html[lang="es"] .header-tools .careers,html[lang="es"] .header-tools .btn{display:none}
  html[lang="es"] .menu-toggle{display:inline-flex}
  html[lang="es"] .header-tools .lang-switch{order:0}
}
/* One control size in the header: search, menu, and language switch are 42px squares, the "Talk to us" height */
.header-tools .icon-btn{box-sizing:border-box;width:42px;height:42px;padding:0;align-items:center;justify-content:center}

/* Review fixes (2026-09-29)
   About: the panel overlapped the next section, but that section is the sticky in-page nav (white, z 20),
   which covered the panel's buttons. The panel now sits inside the hero; the nav gets no extra top padding. */
.hero-about .hero-about__panel{transform:none;margin-bottom:clamp(2rem,4vw,3.5rem)}
.hero-about + .in-page-nav{padding-top:0}
/* Split heroes are light: the lime text link (meant for dark heroes) failed contrast on cream */
.hero-hub--split .cta-text{color:var(--green-700)}

/* Microsoft product logo at the first mention of each product on a page (2026-09-29) */
.ms-link .ms-icon{display:inline-block;width:1.1em;height:1.1em;vertical-align:-.18em;margin-right:.3em}

/* "Talk to Ludia" band (2026-09-29): the only contact form lives on /contact/; every other page links to it */
.talk-band{border-top:var(--hl)}
.talk-band__inner{display:grid;grid-template-columns:1fr auto;gap:40px;align-items:end;border-top:3px solid var(--green-500);padding-top:2rem}
.talk-band h2{margin:.2em 0 .4em;max-width:24ch}
.talk-band .muted{max-width:60ch;margin:0}
@media (max-width:767px){.talk-band__inner{grid-template-columns:1fr;gap:20px}}
/* Services without their own page yet: listed as plain labels, no arrow (2026-09-29) */
.link-block__item{display:block;padding:16px 0;border-bottom:var(--hl);font:400 1.1875rem/1.35 var(--serif);color:var(--gray-700)}

/* Home "How we help" row: four short cards that link to the deep pages (2026-09-29) */
.ruled--4{grid-template-columns:repeat(4,1fr)}
.explore .ruled--4 .cta-text + .cta-text{margin-left:14px}
@media (max-width:1079px){.ruled--4{grid-template-columns:1fr 1fr}}
@media (max-width:767px){.ruled--4{grid-template-columns:1fr}}

/* Language toggle as US / Spain flags side by side (2026-09-29) */
.lang-switch.lang-flags,.header-tools .lang-switch.lang-flags{display:inline-flex;align-items:center;gap:2px;border:0;padding:0;min-width:0;height:42px;background:none}
.lang-flag{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:38px;height:42px;padding:0 6px;border:1px solid transparent;text-decoration:none;color:inherit}
.lang-flag svg{display:block;width:24px;height:16px;box-shadow:0 0 0 1px rgba(0,0,0,.18)}
.lang-flag.is-current{border-color:var(--hairline)}
.site-header.is-overlay:not(.is-solid) .lang-flag.is-current{border-color:rgba(255,255,255,.55)}
a.lang-flag{opacity:.5;transition:opacity var(--motion-fast)}
a.lang-flag:hover,a.lang-flag:focus-visible{opacity:1;border-color:var(--green-500)}
.lang-switch--mobile.lang-flags{margin:12px 0;gap:8px;height:auto}
.lang-switch--mobile .lang-flag{color:#fff;height:44px;padding:0 12px;font:500 .9375rem/1 var(--sans)}
.lang-switch--mobile a.lang-flag{opacity:.7}
.lang-switch--mobile .lang-flag.is-current{border-color:rgba(255,255,255,.4)}
/* Home: compact industry links and a short Dynamics for Good band (2026-09-29) */
.ruled--links > div{padding-top:20px;padding-bottom:20px}
.ruled--links h3{margin:0;font-size:1.25rem}
.ruled--links h3 a{text-decoration:none;display:flex;justify-content:space-between;gap:12px}
.ruled--links h3 a:hover{color:var(--green-700)}
.dfg-band{max-width:880px}
.dfg-band h2{max-width:26ch}
.section--tight{padding-top:2rem;padding-bottom:2rem}
.dfg-inline{margin-top:1.75rem;padding:20px 22px;background:var(--forest-900);color:#fff;border-top:3px solid var(--green-500)}
.dfg-inline p{margin:0 0 14px;color:rgba(255,255,255,.88)}
.dfg-inline b{color:#fff}

/* RESET guiding principles (Lucas's core values, 2026-09-29): a letter block, the official statement,
   and what it means for clients and for the team. Square corners, the deck's palette from brand tokens. */
.reset{margin-top:2rem;border-top:var(--rule);position:relative}
.reset__label{display:inline-block;margin:0;transform:translateY(-50%);background:var(--green-500);color:var(--forest-900);font:600 .75rem/1 var(--sans);letter-spacing:.08em;text-transform:uppercase;padding:6px 10px}
.reset__list{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.reset__item{display:grid;grid-template-columns:88px 1fr;background:var(--paper);border:1px solid var(--hairline)}
.reset__letter{display:flex;align-items:center;justify-content:center;font:700 2.75rem/1 var(--sans);color:#fff}
.reset__letter--r{background:var(--green-500)}
.reset__letter--e1{background:var(--forest-800)}
.reset__letter--s{background:var(--lime-300);color:var(--forest-900)}
.reset__letter--e2{background:var(--gray-600)}
.reset__letter--t{background:var(--gray-800)}
.reset__body{padding:18px 22px}
.reset__body h3{margin:0 0 4px;font:600 1.25rem/1.25 var(--sans)}
.reset__stmt{margin:0 0 12px;color:var(--gray-800)}
.reset__means{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:0}
.reset__means dt{font:600 .75rem/1.2 var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--green-700);margin-bottom:4px}
.reset__means dd{margin:0;font-size:.9375rem;color:var(--gray-700)}
@media (max-width:767px){.reset__item{grid-template-columns:56px 1fr}.reset__letter{font-size:1.9rem}.reset__means{grid-template-columns:1fr}}

/* Services menu (2026-09-29): Services and AI as two clearly separate zones */
.mega__inner--services{grid-template-columns:2.1fr 1fr;gap:36px}
.mega-svc h2{margin-top:2px}
.mega-svc__grid{display:grid;grid-template-columns:1.7fr 1fr;gap:32px;margin:6px 0 14px}
.mega-svc .mega__areas{columns:2;column-gap:28px;margin:0;padding:0;list-style:none}
.mega-svc .mega__areas li{break-inside:avoid}
.mega-svc__deliver{border-left:var(--hl);padding-left:24px}
.mega-svc__deliver ul{list-style:none;margin:0;padding:0}
.mega-svc__deliver li{margin:0 0 10px}
.mega-ai{background:var(--forest-900);color:#fff;padding:22px 24px 24px;border-top:3px solid var(--green-500);align-self:start}
.mega-ai .group-label{color:var(--lime-300)}
.mega-ai__line{font:500 1.0625rem/1.35 var(--serif);margin:0 0 14px;color:#fff}
.mega-ai ul{list-style:none;margin:0;padding:0}
.mega-ai li{margin:0;padding:12px 0;border-top:1px solid rgba(255,255,255,.15)}
.mega-ai a{text-decoration:none}
.mega-ai .mega__area{color:#fff}
.mega-ai .mega__product{color:rgba(255,255,255,.72)}
.mega-ai a:hover .mega__area,.mega-ai a:focus-visible .mega__area{color:var(--lime-300)}
.mega-svc .mega__intro{max-width:none}

/* Services menu, balanced (2026-09-29): two equal zones with the same anatomy */
.mega__inner--services{grid-template-columns:1fr 1fr;gap:24px;align-items:stretch}
.mega-zone{padding:22px 26px 24px;border-top:3px solid var(--green-500);display:flex;flex-direction:column}
.mega-zone--svc{background:var(--tile)}
.mega-zone--ai{background:var(--forest-900);color:#fff}
.mega-zone--ai .group-label{color:var(--lime-300)}
.mega-zone__line{font:500 1.125rem/1.35 var(--serif);margin:0 0 14px}
.mega-zone--ai .mega-zone__line{color:#fff}
.mega-zone__list{list-style:none;margin:0 0 12px;padding:0;display:grid;gap:0 24px}
.mega-zone__list--2{grid-template-columns:1fr 1fr}
.mega-zone__list li{padding:10px 0;border-top:1px solid var(--hairline)}
.mega-zone--ai .mega-zone__list li{border-top-color:rgba(255,255,255,.15)}
.mega-zone__list a{text-decoration:none;display:block}
.mega-zone--ai .mega__area{color:#fff}
.mega-zone--ai .mega__product{color:rgba(255,255,255,.72)}
.mega-zone--ai a:hover .mega__area,.mega-zone--ai a:focus-visible .mega__area{color:var(--lime-300)}
.mega-zone__note{font-size:.8125rem;color:var(--gray-700);margin:0 0 12px}
.mega-zone .viewall{margin-top:auto}
.mega-zone--ai .viewall{color:var(--lime-300)}

/* Footer social profiles (Lucas, 2026-09-29): right-hand brand column */
.footer-social{margin-top:18px}
.footer-social__label{font:600 var(--fs-eyebrow)/1.4 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:rgba(255,255,255,.65);margin:0 0 10px}
.footer-social ul{list-style:none;margin:0;padding:0;display:flex;gap:10px}
.footer-social a{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border:1px solid rgba(255,255,255,.35);color:var(--white);transition:background-color var(--motion-fast),border-color var(--motion-fast),color var(--motion-fast)}
.footer-social a:hover,.footer-social a:focus-visible{background:var(--white);border-color:var(--white);color:var(--forest-900)}
.footer-social a:focus-visible{outline:2px solid var(--lime-300);outline-offset:2px}

/* Phone menu fixes (QA 2026-09-29): the generic .mobile-nav a rule was flattening the pinned buttons and stacking the flag link */
.mobile-nav .pinned a.btn{display:flex;padding:1rem 1.75rem;justify-content:center;border:1px solid var(--green-500)}
.mobile-nav .pinned a.btn--ondark{border-color:rgba(255,255,255,.5)}
.mobile-nav .lang-switch--mobile a.lang-flag{display:inline-flex;border:1px solid transparent;padding:0 12px}
.mobile-nav .lang-switch--mobile a.lang-flag:hover,.mobile-nav .lang-switch--mobile a.lang-flag:focus-visible{opacity:1;border-color:rgba(255,255,255,.4)}

/* Menu breathing room (Lucas, 2026-09-29): a little more space between top-level items, only where the bar has room,
   so the menu never runs into Careers / search / Talk to us / flags (the 24px bar gap stays the minimum). */
@media (min-width:1340px) and (max-width:1439px){html[lang="en"] .nav__trigger,html[lang="en"] .nav__link{padding-left:11px;padding-right:11px}}
@media (min-width:1440px){
  html[lang="en"] .nav__trigger,html[lang="en"] .nav__link{padding-left:14px;padding-right:14px}
  html[lang="es"] .nav__trigger,html[lang="es"] .nav__link{padding-left:10px;padding-right:10px}
}

/* Footer newsletter: form, privacy note, and the live status message (2026-09-29) */
.footer-news__signup{display:grid;gap:8px}
.footer-news .newsletter__note,.footer-news .newsletter__msg{margin:0;font-size:.8125rem;line-height:1.4;color:rgba(255,255,255,.7)}
.footer-news .newsletter__msg:empty{display:none}
.footer-news .newsletter__msg{color:var(--white);font-size:.9375rem}
.newsletter__note a{color:inherit}
.footer-news input[aria-invalid="true"]{border-color:var(--lime-300)}
.form [type=submit][disabled],.newsletter [type=submit][disabled]{opacity:.6;cursor:progress}

/* Header search (2026-09-29): panel under the header bar, instant results; the WordPress results page reuses .search-list */
.search-panel{position:absolute;left:0;right:0;top:100%;background:var(--white);border-top:var(--hl);border-bottom:6px solid var(--green-500);box-shadow:var(--shadow);padding:28px 0 32px;color:var(--ink)}
.search-panel[hidden]{display:none}
.search-form{display:flex;gap:10px;max-width:760px}
.search-form input{flex:1;font:inherit;font-size:1.125rem;padding:12px 14px;border:1px solid var(--gray-600);min-height:52px;color:var(--ink);background:var(--white)}
.search-form input:focus-visible{outline:2px solid var(--green-700);outline-offset:1px}
.search-hint{margin:10px 0 0;font-size:.875rem;color:var(--gray-700)}
.search-results{list-style:none;margin:16px 0 0;padding:0;max-width:760px}
.search-results:empty{display:none}
.search-results li{border-top:var(--hl)}
.search-results a{display:block;padding:12px 0;text-decoration:none;color:var(--ink)}
.search-results a:hover .search-results__t,.search-results a:focus-visible .search-results__t{color:var(--green-700);text-decoration:underline}
.search-results a:focus-visible{outline:2px solid var(--green-700);outline-offset:2px}
.search-results__t{display:block;font-weight:600}
.search-results__d{display:block;font-size:.875rem;color:var(--gray-700);margin-top:2px}
.search-results__none,.search-results__all a{padding:12px 0;font-size:.9375rem}
.search-results__all a{color:var(--green-700);font-weight:600}
.search-list{list-style:none;margin:0;padding:0;max-width:var(--measure)}
.search-list li{border-top:var(--hl);padding:18px 0}
.search-list h2{font-size:1.25rem;margin:0 0 6px}
.search-list p{margin:0;color:var(--gray-700)}
@media (max-width:767px){.search-form{flex-direction:column}.search-panel{padding:20px 0 24px}}


/* Executive team: round LinkedIn avatar at LinkedIn's own profile-photo size, with a LinkedIn badge (Lucas, 2026-09-29) */
:root{--linkedin:#0A66C2} /* LinkedIn's brand blue, fixed by LinkedIn like the flag colours */
.exec{max-width:var(--measure);padding:40px 0;border-top:var(--hl)}
.exec:first-child{border-top:0;padding-top:0}
.exec__head{display:flex;align-items:center;gap:28px;margin-bottom:20px}
.exec__head h2{margin:.2rem 0 0}
.exec__avatar{position:relative;flex:0 0 auto;display:block;width:152px;height:152px;border-radius:50%;box-shadow:0 0 0 1px var(--hairline)}
.exec__avatar img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block}
.exec__badge{position:absolute;right:4px;bottom:4px;width:34px;height:34px;border-radius:8px;background:var(--linkedin);color:var(--white);display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 3px var(--white)}
.exec__avatar:hover img,.exec__avatar:focus-visible img{filter:brightness(.92)}
.exec__avatar:focus-visible{outline:3px solid var(--green-700);outline-offset:4px}
@media (max-width:767px){.exec__head{gap:18px}.exec__avatar{width:120px;height:120px}.exec__badge{width:30px;height:30px;right:2px;bottom:2px}}
.exec__body .chips{margin-bottom:1.25rem}

/* Home hero (fix 2026-09-30): the story-tabs strip is taller than its tabs and sat over the hero links
   ("Talk to Ludia", "See how it connects"), swallowing clicks. Let clicks pass through its empty area. */
.stories__nav{pointer-events:none}
.stories__nav .stories__tab,.stories__nav .stories__pause,.stories__nav a,.stories__nav button{pointer-events:auto}

/* Performance (2026-09-30). With JS on, the home stories take their carousel layout from the first paint
   (the no-JS stack no longer collapses when site.js runs, which was a full-screen layout shift), and a
   slide's photo loads only when it is next up (site.js adds .is-loaded). Without JS the stories stack as before. */
.js .hero-stories .stories__slides{display:grid}
.js .hero-stories .story{grid-area:1/1}
.js .hero-stories:not(.is-enhanced) .story:not(:first-child){opacity:0;visibility:hidden}
.js .hero-stories .story:not(.is-active):not(.is-loaded) .media img{display:none}

/* Launch QA (2026-10-01): the story tabs sit in their own tablist (the pause button isn't a tab) without
   changing the grid; phone-menu primary button keeps dark text on green (4.5:1); links inside footer text
   are underlined so they stand out from the text around them. */
.stories__tabs{display:contents}
.mobile-nav .pinned a.btn:not(.btn--secondary):not(.btn--ondark){color:var(--forest-900)}
.footer-cols p a{text-decoration:underline;text-underline-offset:.2em}
/* Launch QA, round 2 (2026-10-01): past events keep full contrast (no dimming); the primary button keeps dark
   text on green inside dark heroes and bands; card titles on the generated Solutions index are h2s styled as h3s. */
.event-list--past .event-card{opacity:1}
.hero-hub a.btn:not(.btn--secondary):not(.btn--ondark),.hero-home a.btn:not(.btn--secondary):not(.btn--ondark),.is-dark a.btn:not(.btn--secondary):not(.btn--ondark){color:var(--forest-900)}
h2.h3{font-size:var(--fs-h3,1.375rem);line-height:1.3;margin:0 0 .4em}
/* Frontline use cases on industry pages (2026-10-01): what stays the worker's call, set apart under a hairline. */
.frontline{display:flex;flex-direction:column}
.frontline .muted{flex:1}
.frontline__call{margin:12px 0 0;padding-top:12px;border-top:1px solid var(--hairline);font-size:.9375rem;color:var(--gray-800)}
.frontline__call b{color:var(--green-700)}
/* Readability (2026-10-01, harness "contrast"): light tiles inside dark bands keep dark text; credentials in dark bands read white. */
.is-dark .tile{color:var(--ink)}
.is-dark .tile .stat__num{color:var(--green-700)}
.is-dark .tile .stat__desc,.is-dark .tile .muted{color:var(--gray-700)}
.is-dark .tile a:not(.btn){color:var(--green-700)}
.is-dark .credential b{color:#fff}
.is-dark .credential span{color:rgba(255,255,255,.82)}
/* AI foundation (2026-10-01): Azure and Microsoft Foundry underneath the five links. A second, deeper band under
   "Across every link", and on the home page a compact view of the whole stack. */
.chain__foundation{margin-top:2px;background:var(--forest-800);color:#fff;padding:1.25rem 1.5rem;display:grid;grid-template-columns:auto 1fr;gap:.5rem 1.5rem;align-items:baseline}
.chain__foundation .eyebrow{color:var(--lime-300);margin:0;grid-row:span 2}
.chain__foundation p{margin:0;color:rgba(255,255,255,.88)}
.chain__foundation a:not(.ms-chip){color:var(--lime-300)}
.chain__stack{display:flex;flex-wrap:wrap}
.chain__foundation .ms-chip{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.25);color:#fff}
.chain__foundation .ms-chip:hover{border-color:var(--lime-300);color:var(--lime-300)}
@media (max-width:767px){.chain__foundation{grid-template-columns:1fr}.chain__foundation .eyebrow{grid-row:auto}}
.stack{margin-top:2rem}
.stack__links{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(5,1fr);gap:2px}
.stack__links li{background:var(--tile);padding:1.25rem 1.25rem 1.5rem;border-top:3px solid var(--green-500);display:grid;gap:.35rem;align-content:start}
.stack__num{font:600 .75rem/1 var(--sans);letter-spacing:.08em;color:var(--green-700)}
.stack__links b{font:500 1.25rem/1.2 var(--serif);color:var(--ink)}
.stack__links li>span:last-child{color:var(--gray-700);font-size:.9375rem}
.stack .chain__layer{margin-top:2px}
@media (max-width:1023px){.stack__links{grid-template-columns:repeat(2,1fr)}}
@media (max-width:519px){.stack__links{grid-template-columns:1fr}}
/* Usability pass (2026-10-01, harness "usability"): comfortable reading and tapping on phones. */
.metric,.card .metric{line-height:1.4}
@media (max-width:767px){
  main p:not(.eyebrow):not(.stat-note):not(.card-meta):not(.chain__num):not(.frontline__call):not(.chain__agents){font-size:max(1rem,1em)}
  .crumbs a,.cta-text,.ms-chip,.see-all a,.footer-cols li a{display:inline-flex;align-items:center;min-height:24px}
  .crumbs ol{row-gap:4px}
  .crumbs a{padding:3px 0}
}
/* Final usability pass (2026-10-01): small text at the top of photo heroes (eyebrow, breadcrumbs) gets a darker shade
   behind it; the video pause control only appears where there is a video; phone tap targets of at least 24px. */
.hero-hub:not(.hero-hub--split) > .media::after,.hero-about > .media::after,.hero-stories .story > .media::after{content:"";position:absolute;inset:0 0 auto 0;height:55%;background:linear-gradient(180deg,rgba(26,40,29,.8) 0%,rgba(26,40,29,.55) 55%,rgba(26,40,29,0) 100%);pointer-events:none}
.hero-home .scrim-left{background:linear-gradient(90deg,rgba(26,40,29,.92) 0%,rgba(26,40,29,.7) 50%,rgba(26,40,29,.15) 80%)}
.hero-hub:not(.hero-hub--split) .crumbs,.hero-hub:not(.hero-hub--split) .crumbs a,.hero-about .crumbs,.hero-about .crumbs a{color:rgba(255,255,255,.95)}
.media-toggle{position:absolute;right:var(--gutter);bottom:24px;width:40px;height:40px;border-radius:50%;border:1px solid rgba(255,255,255,.6);background:rgba(10,10,10,.3);color:#fff;cursor:pointer;display:grid;place-items:center;z-index:3}
section:not(:has(video)) > .media-toggle{display:none}
@media (max-width:767px){
  .hero-hub:not(.hero-hub--split) > .scrim-left,.hero-stories .story > .scrim-left{background:linear-gradient(180deg,rgba(26,40,29,.78) 0%,rgba(26,40,29,.86) 45%,rgba(26,40,29,.94) 70%)}
  .footer-legal a,.footer-cols p a,.chain__product a,main li > a:only-child{display:inline-flex;align-items:center;min-height:24px}
  input[type=checkbox],input[type=radio]{width:24px;height:24px;flex:0 0 24px}
  .chips a,.card h3 a,.related a{display:inline-flex;align-items:center;min-height:24px}
}
/* About hero (bright office photo, no scrim): a top shade under the menu and the breadcrumbs. */
.hero-about::before{content:"";position:absolute;inset:0 0 auto 0;height:min(320px,40%);background:linear-gradient(180deg,rgba(26,40,29,.85) 0%,rgba(26,40,29,.6) 50%,rgba(26,40,29,0) 100%);z-index:1;pointer-events:none}
/* Home stories (2026-10-01): the tab bar sits inside .hero-home, so the hero's own .wrap padding (header clearance)
   leaked into it and stretched the bar 120px upward; its top border then ran through the slide text. The bar keeps
   only its bottom spacing, so the border sits right on top of the tabs. */
.hero-home .stories__nav .wrap{padding-top:0;padding-bottom:28px}
/* Rotating hero background (Dynamics for Good event photos, 2026-10-02). The first photo shows without JS
   and for reduced motion; later photos load one ahead; the pause control shows only while it rotates. */
.media.is-rotator > picture{position:absolute;inset:0;transition:opacity 1.2s var(--ease-std)}
.media.is-rotator > picture:not(.is-active){opacity:0}
.js .media.is-rotator > picture:not(.is-active):not(.is-loaded) img{display:none}
section:has(> .media.is-rotator.is-running) > .media-toggle{display:grid}
/* Hand-off pages on phones (2026-10-02): "dynamicsforgood.com." is one unbreakable word; with Segoe UI it was
   a few pixels wider than a 375px screen and stretched the flex container. Scale the headline with the screen. */
.handoff > .wrap{min-width:0}
@media (max-width:480px){.handoff h1{font-size:min(2.125rem,8.6vw)}}
/* Header on the smallest phones (2026-10-02): at 320px the logo, flags, search and menu needed 355px, so the
   menu button sat half off-screen. Tighter gaps and a slightly smaller logo below 375px; buttons keep their size. */
@media (max-width:374px){
  .site-header__bar{gap:10px}
  .header-tools,html[lang="es"] .header-tools{gap:4px}
  .logo img{height:28px}
}
/* Reading comfort (2026-10-02 harness): keep running text under ~95 characters per line on wide screens.
   Notes, statements and lists that sat across the full 1280px grid now stop at a comfortable measure. */
.stat-note,.reset__stmt,.values-list,.chain__foundation p,.card--wide p,.section > .wrap > p:not([class]){max-width:46em}
.ms-guided,.see-all{max-width:46em;margin-left:auto;margin-right:auto}
.values-list{max-width:42em}
/* Services menu (Lucas, 2026-10-02): the official Microsoft icon before each product the menu names. */
.mega__icons{display:inline-flex;align-items:center;gap:.2em;margin-right:.45em;vertical-align:-.2em}
.mega__icons .ms-icon{display:inline-block;width:1.15em;height:1.15em}
/* Helios 2 hero (Lucas, 2026-10-02): the radial portfolio mark from ludiahelios.com in place of a photo.
   Visible without JS; with motion allowed the rings arrive inside-out, then the outer rings turn slowly,
   a light sweeps the edge, and the glow breathes. The hub with the name never turns. */
.helios-mark{margin:0;align-self:center;max-width:34rem;justify-self:center;width:100%}
.helios-mark__svg{display:block;width:100%;height:auto;overflow:visible}
.helios-mark__caption{margin-top:.75rem;text-align:center;font-size:.875rem;color:var(--gray-700)}
.helios-mark__svg .ring,.helios-mark__svg .turn,.helios-mark__svg .sweep,.helios-mark__svg .corona-pulse{transform-box:view-box;transform-origin:50% 50%}
@keyframes helios-in{from{opacity:0;transform:scale(.86)}to{opacity:1;transform:scale(1)}}
@keyframes helios-spin{to{transform:rotate(360deg)}}
@keyframes helios-pulse{0%,100%{opacity:.3;transform:scale(1)}50%{opacity:.62;transform:scale(1.035)}}
.js-motion .helios-mark__svg .ring{animation:helios-in .85s cubic-bezier(.2,.75,.3,1) both}
.js-motion .helios-mark__svg .r2{animation-delay:.16s}
.js-motion .helios-mark__svg .r3{animation-delay:.32s}
.js-motion .helios-mark__svg .r4{animation-delay:.48s}
.js-motion .helios-mark__svg .hub{animation-delay:.62s}
.js-motion .helios-mark__svg .turn{animation:helios-spin 210s linear infinite}
.js-motion .helios-mark__svg .sweep{animation:helios-spin 14s linear infinite}
.js-motion .helios-mark__svg .corona-pulse{animation:helios-pulse 7s ease-in-out infinite}
@media (max-width:767px){.helios-mark{max-width:22rem;margin-top:1.5rem}}
.helios-mark{position:relative}
.helios-mark__toggle{position:absolute;right:0;bottom:2.25rem;width:36px;height:36px;border-radius:50%;border:1px solid var(--hairline);background:#fff;color:var(--forest-900);cursor:pointer;display:grid;place-items:center}
.helios-mark__toggle:hover{border-color:var(--green-700);color:var(--green-700)}
.helios-mark.is-paused .helios-mark__svg *{animation-play-state:paused!important}
/* Case-study hero (2026-10-02): the outcome bar rises 48px into the hero; keep the text column clear of it so a
   long lead is never covered (the bar only overlaps the photo or empty space). Phones stack the bar below. */
@media (min-width:768px){.hero-case .grid>div:first-child{padding-bottom:4rem}}
.section > .wrap > p.muted,.ms-badges > .ms-row{max-width:46em}

/* WordPress integration (generated): content blocks sit flush, as in the prototype */
.wp-site-blocks{padding:0}
.wp-site-blocks>*,.ludia-main>*,.ludia-main .wp-block-post-content>*{margin-block:0}
.ludia-main .wp-block-post-content{margin:0}
body.admin-bar .site-header{top:32px}
@media (max-width:782px){body.admin-bar .site-header{top:46px}}
