@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,700&display=swap');
:root{--ink:#020509; --navy:#111315; /* near-black, used for structural dark sections (how we work, footer, cta bands) */
  --navy-rgb:17,19,21; --navy-2:#0A0A0B; /* darkest near-black */
  --paper:#F6F5F1; --paper-rgb:246,245,241; --paper-2:#DAD5CD; --paper-2-rgb:218,213,205; --colbut:#01A4A3; --teal:#01A4A3; --teal-dark:#018382; --teal-rgb:1,164,163; --olanji:orange; --slate:#555658; --text:#555658; /* brand dark grey - body copy */
  --line:rgba(16,24,32,0.14); --line-light:rgba(246,245,241,0.22); --white:#FFFFFF; --white-rgb:255,255,255; --maxw:1600px;}
*{box-sizing:border-box;}
/* Fluid root size: 16px on phones/laptops, growing smoothly to ~24px on
   very large screens. Everything sized in rem scales with it. */
html{scroll-behavior:smooth;}
body{margin:0;
  background:var(--paper);
  color:var(--text);
  font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif;
  font-size:16px;
  line-height:1.7;
  -webkit-font-smoothing:antialiased;}
h1,h2,h3,h4{font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif;
  font-weight:700;
  line-height:1.15;
  margin:0 0 0.5em 0;
  color:var(--ink);}
h1{font-size:clamp(2.4rem,5vw,4.4rem); font-weight:700; letter-spacing:-0.01em;}
h2{font-size:clamp(1.9rem,3.4vw,2.8rem);}
h3{font-size:1.4rem;}
p{margin:0 0 1.1em 0; max-width:64ch;}
a{color:inherit;}
img{max-width:100%; display:block;}
.container{max-width:var(--maxw);
  margin:0 auto;
  padding:0 2rem;
  position:relative;
  z-index:1;}
@media(max-width:720px){
  section{padding:3.5rem 0;}
}
.section-light{background:rgba(var(--paper-rgb),0.85); backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);}
.section-alt{background:rgba(var(--paper-rgb),0.85); backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);}
.section-dark{background:rgba(var(--teal-rgb),0.82); color:var(--paper); position:relative; overflow:hidden; backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);}
.section-dark h1,.section-dark h2,.section-dark h3{color:var(--white);}
.section-dark p{color:rgba(255,255,255,0.88);}
/* Ambient flowing-line background, reused across dark panes site-wide */
.ambient-lines{position:absolute; inset:0;
  overflow:hidden; pointer-events:none; z-index:0;}
.ambient-lines svg{width:100%; height:100%; display:block;}
@keyframes flow-move{
  to{stroke-dashoffset:-240;}
}
/* Three richer animated background graphics, reusing the same visual
   language as the homepage hero (drawing line chart / growing bars /
   pulsing network), used on page headers, "How We Work", "Why
   Together" and the CTA bands so the motion feels consistent as you
   move through the site. Each runs on a continuous loop rather than
   the hero's one-shot "on active" version. */
/* Variant 1: drawing/flowing line chart */
.ambient-chart .amb-line{fill:none;
  stroke:rgba(255,255,255,0.55);
  stroke-width:2.5;
  stroke-dasharray:18 14;
  animation:flow-move 6s linear infinite;}
/* Variant 2: growing bars */
.ambient-bars .amb-bar{fill:rgba(255,255,255,0.35);
  transform-origin:bottom;
  transform-box:fill-box;
  animation:pulse-bar 2.8s ease-in-out infinite;}
.ambient-bars .amb-bar:nth-child(odd){fill:rgba(255,255,255,0.22);}
.ambient-bars .amb-bar:nth-child(1){animation-delay:0s;}
.ambient-bars .amb-bar:nth-child(2){animation-delay:.25s;}
.ambient-bars .amb-bar:nth-child(3){animation-delay:.5s;}
.ambient-bars .amb-bar:nth-child(4){animation-delay:.75s;}
.ambient-bars .amb-bar:nth-child(5){animation-delay:1s;}
.ambient-bars .amb-bar:nth-child(6){animation-delay:1.25s;}
@keyframes pulse-bar{
  0%,100%{transform:scaleY(0.35);}
  50%{transform:scaleY(1);}
}
/* Variant 3: pulsing network map */
.ambient-network .amb-link{stroke:rgba(255,255,255,0.3);
  stroke-width:1.5;
  stroke-dasharray:10 8;
  animation:flow-move 5s linear infinite;}
.ambient-network .amb-node{fill:rgba(255,255,255,0.65);
  animation:pulse-dot 3.2s ease-in-out infinite;}
@keyframes pulse-dot{
  0%,100%{opacity:0.3;}
  50%{opacity:1;}
}
@media(prefers-reduced-motion:reduce){
  .ambient-chart .amb-line,
  .ambient-bars .amb-bar,
  .ambient-network .amb-link,
  .ambient-network .amb-node{animation:none; opacity:0.5;}
}
.eyebrow{font-size:clamp(1.2rem, 1.7vw, 1.55rem);  /* section label size - raise/lower here */
  line-height:1.3;
  color:var(--teal-dark);
  font-weight:700;
  margin-bottom:0.7rem;
  display:block;}
.section-dark .eyebrow{color:var(--white);}
/* Nav */
.nav{position:sticky; top:0; z-index:50;
  background:rgba(var(--white-rgb),0.88);
  backdrop-filter:blur(12px);
  -webkit-backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line);}
.nav-inner{max-width:var(--maxw);
  margin:0 auto;
  padding:1.1rem 2rem;
  display:flex;
  align-items:center;
  justify-content:space-between;}
.logo{font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif;
  font-weight:700;
  font-size:1.35rem;
  color:var(--white);
  text-decoration:none;
  letter-spacing:0.01em;}
.logo span{color:var(--teal);}
.logo-img{height:52px; width:auto; display:block;}
.menu-panel-head .logo-img{height:42px;}
.footer-grid .logo-img{height:60px;}
.nav-links{display:flex;
  align-items:center;
  gap:0.4rem;
  list-style:none;
  margin:0; padding:0;}
.nav-links a{color:var(--ink);
  text-decoration:none;
  font-size:0.95rem;
  font-weight:500;
  padding:0.6rem 0.9rem;
  border-radius:4px;
  transition:color .15s ease, background .15s ease;}
.nav-links a:hover{background:rgba(var(--teal-rgb),0.14);}
.nav-links a.active{background:rgba(var(--teal-rgb),0.18); box-shadow:inset 0 -2px 0 var(--olanji);}
/* "Company" dropdown inside the top nav (Why ODS / About / Our Values) */
.nav-dropdown{position:relative;}
.nav-dropdown-trigger{display:inline-flex; align-items:center; gap:0.35rem;
  background:none; border:none; cursor:pointer;
  color:var(--ink);
  font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif;
  font-size:0.95rem; font-weight:500;
  padding:0.6rem 0.9rem;
  border-radius:4px;
  transition:color .15s ease, background .15s ease;}
.nav-dropdown-trigger:hover,
.nav-dropdown-trigger[aria-expanded="true"]{background:rgba(var(--teal-rgb),0.14);}
.nav-dropdown-trigger.active{background:rgba(var(--teal-rgb),0.18); box-shadow:inset 0 -2px 0 var(--olanji);}
.nav-dropdown-trigger .chevron{transition:transform .2s ease;}
.nav-dropdown-trigger[aria-expanded="true"] .chevron{transform:rotate(180deg);}
.nav-dropdown-menu{position:absolute; top:calc(100% + 12px); left:50%;
  transform:translate(-50%,-8px);
  min-width:190px;
  background:rgba(255,255,255,0.68);
  backdrop-filter:blur(16px) saturate(160%);
  -webkit-backdrop-filter:blur(16px) saturate(160%);
  border:1px solid rgba(255,255,255,0.4);
  border-top:3px solid var(--teal);
  border-radius:14px;
  box-shadow:0 12px 28px rgba(2,5,9,0.10);
  list-style:none; margin:0; padding:0.5rem; overflow:hidden;
  opacity:0; visibility:hidden;
  transition:opacity .18s ease, transform .18s ease;
  z-index:60;}
.nav-dropdown-menu.open{opacity:1; visibility:visible; transform:translate(-50%,0);}
.nav-dropdown-menu li a{display:block; padding:0.65rem 1rem;
  font-size:0.95rem; color:var(--ink); text-decoration:none;
  border-radius:8px; background:none;}
.nav-dropdown-menu li a:hover, .nav-dropdown-menu li a.active{color:var(--teal-dark); background:rgba(var(--teal-rgb),0.10);}
.nav-cta{background:var(--white); color:var(--navy-2); padding:0.65rem 1.5rem; border-radius:999px; text-decoration:none; margin-left:2.5rem; font-weight:700; white-space:nowrap; display:inline-flex; align-items:center; gap:0.5rem; transition:background .2s ease, transform .2s ease;}
.nav-cta:hover{background:var(--teal-dark); transform:translateY(-1px);}
.nav-cta svg{transition:transform .2s ease;}
.nav-cta:hover svg{transform:translate(2px,-2px);}
.nav-toggle{display:none;}
/* On phones, the horizontal nav links + old right-side dropdown are
   switched off entirely - the left-side "Menu" slide-in panel is the
   only navigation method shown, so the two don't compete. The teal
   "Get in touch" button stays visible for quick access. */
@media(max-width:860px){
  .nav-links{display:none;}
  .nav-toggle{display:none;}
}
/* Left-side menu (secondary navigation) - full-height slide-in panel */
.nav-left{display:flex; align-items:center; gap:1.2rem;}
.menu-left{position:relative;}
/* Logo now sits as its own flex item between .nav-left (waffle) and
   .nav-links (Home...) - flex:1 makes it claim exactly that gap, and
   centering its content inside puts the logo squarely in the middle
   of that space, however wide the screen is. */
.logo-center{flex:1;
  display:flex;
  justify-content:center;}
.menu-btn{display:flex; align-items:center; gap:0.65rem;
  background:none; border:none; cursor:pointer;
  color:var(--ink);
  font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif;
  font-size:0.9rem; font-weight:700;
  padding:0.4rem 0;}
.menu-btn:hover{color:var(--olanji);}
.waffle{display:inline-grid;
  grid-template-columns:repeat(3, 4px);
  grid-template-rows:repeat(3, 4px);
  gap:3px;
  width:19px; height:19px;
  flex-shrink:0;}
.waffle span{width:4px; height:4px;
  border-radius:1px;
  background:currentColor;
  transition:transform .2s ease, opacity .2s ease;}
.menu-btn[aria-expanded="true"]{color:var(--teal-dark);}
.menu-btn[aria-expanded="true"] .waffle span{transform:scale(0.7); opacity:0.6;}
.menu-overlay{position:fixed; inset:0;
  background:rgba(9,15,22,0.55);
  backdrop-filter:blur(2px);
  opacity:0; visibility:hidden;
  transition:opacity .3s ease;
  z-index:90;}
.menu-overlay.open{opacity:1; visibility:visible;}
.menu-panel{position:fixed; top:0; left:0; height:100vh;
  width:420px; max-width:88vw;
  backdrop-filter:blur(18px) saturate(140%);
  -webkit-backdrop-filter:blur(18px) saturate(140%);
  border-right:1px solid rgba(255,255,255,0.12);
  border-radius:0 22px 22px 0;
  box-shadow:8px 0 40px rgba(2,5,9,0.18);
  transform:translateX(-100%);
  transition:transform .4s cubic-bezier(.4,0,.2,1);
  z-index:100;
  overflow-y:auto;
  padding:2.4rem 2.6rem 2.2rem 2.6rem;
  display:flex; flex-direction:column;}
.menu-panel.open{transform:translateX(0);}
.menu-panel-head{display:flex; justify-content:space-between; align-items:center;
  margin-bottom:3rem;}
.menu-panel-head .logo{color:var(--white);}
.menu-close{background:none; border:none; color:var(--white);
  font-size:1.9rem; line-height:1; cursor:pointer; padding:0;}
.menu-close:hover{color:var(--teal);}
.menu-links ul{list-style:none; margin:0; padding:0;}
.menu-links li{border-bottom:1px solid var(--line-light);
  opacity:0; transform:translateX(-16px);
  transition:opacity .4s ease, transform .4s ease;}
.menu-panel.open .menu-links li{opacity:1; transform:translateX(0);}
.menu-panel.open .menu-links li:nth-child(1){transition-delay:.10s;}
.menu-panel.open .menu-links li:nth-child(2){transition-delay:.16s;}
.menu-panel.open .menu-links li:nth-child(3){transition-delay:.22s;}
.menu-panel.open .menu-links li:nth-child(4){transition-delay:.28s;}
.menu-panel.open .menu-links li:nth-child(5){transition-delay:.34s;}
.menu-panel.open .menu-links li:nth-child(6){transition-delay:.40s;}
@media(prefers-reduced-motion:reduce){
  .menu-links li{transition:none; opacity:1; transform:none;}
}
.menu-links li a{display:block; padding:1.05rem 0 1.05rem 0.9rem; margin-left:-0.9rem; font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif; font-size:1.55rem; font-weight:500; color:var(--white); text-decoration:none; border-left:3px solid transparent; transition:color .15s ease, border-color .15s ease, padding-left .15s ease;}
.menu-links li a:hover, .menu-links li a.active{color:var(--olanji);
  border-left-color:var(--olanji);
  padding-left:1.3rem;}
.menu-panel-footer{margin-top:auto; padding-top:2rem;
  border-top:1px solid var(--olanji);}
.menu-contact{font-size:0.95rem; margin-bottom:1.4rem; line-height:1.9;}
.menu-contact a{color:rgba(246,245,241,0.85); text-decoration:none;}
.menu-contact a:hover{color:var(--teal);}
.menu-social{display:flex; gap:1.1rem;}
.menu-social a{color:rgba(246,245,241,0.75);}
.menu-social a:hover{color:var(--teal);}
.menu-social svg{width:19px; height:19px; display:block;}
@media(max-width:480px){
  .menu-panel{padding:2rem 1.6rem;}
  .menu-links li a{font-size:1.3rem;}
}
/* Buttons */
.btn{display:inline-block;
  padding:0.9rem 1.9rem;
  border-radius:999px;
  text-decoration:none;
  font-weight:700;
  font-size:0.95rem;
  border:1px solid transparent;
  transition:all .15s ease;}
.btn-primary{background:var(--teal); color:var(--navy-2);}
.btn-primary:hover{background:var(--teal-dark);}
.btn-outline{border-color:rgba(255,255,255,0.6); color:var(--white);}
.btn-outline:hover{background:var(--white); color:var(--ink); border-color:var(--white);}
.btn-outline-dark{border-color:var(--ink); color:var(--ink);}
.btn-outline-dark:hover{border-color:var(--teal); color:var(--teal-dark); background:rgba(var(--teal-rgb),0.08);}
.btn-row{display:flex; gap:1rem; flex-wrap:wrap; margin-top:1.8rem;}
/* On the teal hero specifically, a teal-filled primary button would
   blend into the background - so buttons there flip to solid white
   with dark text instead (a common, bold "GEICO-style" pattern of a
   white pill button sitting on a bold color block). */
.hero-slider .btn-primary{background:var(--white); color:var(--ink);}
.hero-slider .btn-primary:hover{background:rgba(255,255,255,0.85);}
/* Contact page "Send message" button - a more distinct, pill-shaped
   variant of the primary button, with the same icon-nudge hover as
   the "Get in touch" nav button for consistency. */
.btn-send{border-radius:999px;
  display:inline-flex;
  align-items:center;
  gap:0.55rem;
  padding:0.85rem 1.9rem;
  border:none;
  cursor:pointer;
  font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif;
  transition:background .2s ease, transform .2s ease;}
.btn-send:hover{transform:translateY(-1px);}
.btn-send svg{transition:transform .2s ease;}
.btn-send:hover svg{transform:translate(2px,-2px);}
.btn-send:disabled{opacity:0.7; cursor:default; transform:none;}
/* Hero */
/* Values row */
.values-row{display:grid;
  grid-template-columns:repeat(auto-fit,minmax(190px,1fr));
  gap:1.2rem;
  margin-top:2.5rem;}
.values-row .value{padding:1.8rem 1.6rem;
  border:1px solid var(--line);
  border-radius:16px;
  background:var(--white);
  box-shadow:0 4px 16px rgba(2,5,9,0.05);
  transition:transform .2s ease, box-shadow .2s ease;}
.values-row .value:hover{transform:translateY(-3px); box-shadow:0 8px 22px rgba(2,5,9,0.08);}
.values-row h3{font-size:1.05rem; margin-bottom:0.5rem;}
.values-row p{font-size:0.92rem; color:var(--slate); margin:0;}
@media(max-width:560px){
  .values-row{grid-template-columns:1fr;}
}
/* Two column split */
.split{display:grid;
  grid-template-columns:0.9fr 1.1fr;
  gap:4rem;
  align-items:start;}
@media(max-width:860px){
  .split{grid-template-columns:1fr; gap:2.5rem;}
}
/* Makes a photo in a .split column fill the whole column - top to
   bottom, matching the height of whatever text sits in the other
   column - rather than sitting at a fixed, boxed-in size. */
/* Service list */
.service-list{margin-top:2rem;}
.service-item{padding:2rem 0;
  border-top:1px solid var(--line);
  display:grid;
  grid-template-columns:1fr 2fr;
  gap:2rem;}
.service-item:last-child{border-bottom:1px solid var(--line);}
.service-item h3{margin-bottom:0.6rem;}
.service-item p{margin:0; color:var(--slate);}
@media(max-width:720px){
  .service-item{grid-template-columns:1fr; gap:0.6rem;}
}
/* Process steps */
.process{position:relative; display:grid; grid-template-columns:repeat(4,1fr);}
/* The connecting line running through the step badges, plus the
   fill that grows as each step is scrolled past (see script.js,
   "ANIMATED HOW WE WORK DIAGRAM"). */
.process-track{position:absolute; height:2px; z-index:0;}
.process-track-fill{height:100%; width:0%;
  background:var(--white);
  transition:width .7s ease;}
.process-step h3{transition:opacity .4s ease;}
.process-step p{color:rgba(255,255,255,0.7);
  opacity:0.55;
  transition:opacity .4s ease;}
.process-step.active p{opacity:1;}
.step-num{position:relative;
  z-index:1;
  width:40px; height:40px;
  display:flex; align-items:center; justify-content:center;
  border-radius:50%;
  font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif;
  font-size:1rem; font-weight:700;
  color:var(--white);
  background:rgba(255,255,255,0.12);
  border:2px solid rgba(255,255,255,0.35);
  margin-bottom:1.2rem;
  transition:background .35s ease, border-color .35s ease, transform .35s ease, color .35s ease;}
@media(max-width:860px){
  .process{grid-template-columns:1fr 1fr; gap:2rem;}
}
@media(max-width:560px){
  .process{grid-template-columns:1fr; gap:2.2rem; padding-left:1.5rem;}
  .process-track{top:0; bottom:0; left:19px; right:auto; width:2px; height:auto;}
  .process-track-fill{width:100%; height:0%;}
}
@media(prefers-reduced-motion:reduce){
  .process-step p, .process-step .step-num{transition:none;}
}
/* Testimonial */
.testimonial{border-left:4px solid var(--teal);
  background:rgba(var(--white-rgb), 0.82);
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
  border-radius:0 16px 16px 0;
  padding:1.8rem 2rem;
  margin:1.6rem 0;}
.testimonial p{font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif; font-size:1.35rem; font-style:italic; color:var(--ink);}
.testimonial cite{display:block; margin-top:1rem; font-style:normal; font-size:0.9rem; color:var(--slate);}
/* Region strip */
.region-strip{display:flex; flex-wrap:wrap; gap:0;
  margin-top:2rem;
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);}
.region-strip div{flex:1; min-width:140px;
  padding:1.3rem 1.5rem;
  border-right:1px solid var(--line);
  font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif;
  font-size:1.05rem;}
.region-strip div:last-child{border-right:none;}
/* Logo placeholder grid */
.logo-grid{display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:1.2rem;
  margin-top:2rem;}
.logo-slot{border:1px dashed var(--line);
  padding:2rem 1rem;
  text-align:center;
  font-size:0.82rem;
  color:var(--slate);
  border-radius:12px;}
.logo-grid-3{grid-template-columns:repeat(3,1fr);}
.logo-slot-filled{border:1px solid var(--line);
  background:var(--white);
  display:flex; align-items:center; justify-content:center;
  padding:2.2rem 1.5rem;
  box-shadow:0 4px 16px rgba(2,5,9,0.05);
  transition:transform .2s ease, box-shadow .2s ease;}
.logo-slot-filled:hover{transform:translateY(-3px); box-shadow:0 8px 22px rgba(2,5,9,0.08);}
.logo-slot-filled img{max-height:48px; width:auto; max-width:100%;}
@media(max-width:720px){
  .logo-grid{grid-template-columns:repeat(2,1fr);}
  .logo-grid-3{grid-template-columns:repeat(2,1fr);}
}
/* Services page: "What We Deliver" capability cards */
.capability-card{border:1px solid var(--line); border-radius:18px; padding:2rem 1.6rem; background:var(--white); box-shadow:0 4px 16px rgba(2,5,9,0.05); transition:transform .2s ease, border-color .2s ease, box-shadow .2s ease;}
.capability-card:hover{transform:translateY(-4px);
  border-color:var(--teal);
  box-shadow:0 10px 26px rgba(2,5,9,0.09);}
.capability-card h3{font-size:1.05rem; margin-bottom:0.5rem;}
.capability-card p{font-size:0.92rem; color:var(--slate); margin:0;}
/* Bulleted engagement lists on the Services page (replaces a dense paragraph) */
.feature-list{list-style:none; margin:0 0 1.4rem 0; padding:0;}
.feature-list li{position:relative;
  padding-left:1.4rem;
  margin-bottom:0.6rem;
  color:var(--slate);}
.feature-list li::before{content:"";
  position:absolute; left:0; top:0.6em;
  width:8px; height:2px;
  background:var(--teal);}
/* Contact page: live map embed */
.contact-map{margin-top:1.8rem;
  border:1px solid var(--line);
  border-radius:16px;
  overflow:hidden;}
.contact-map iframe{display:block;}
/* CTA band */
.cta-band{background:rgba(var(--navy-rgb),0.82);
  color:var(--white);
  position:relative;
  overflow:hidden;
  padding:4.5rem 0;
  text-align:left;
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);}
.cta-band .container{display:flex; justify-content:space-between; align-items:center; gap:2rem; flex-wrap:wrap;}
/* White variant - used on the Home and Why ODS pages, where this is the
   final section directly above the footer. Same layout, but light instead
   of black, with the ambient graphic recolored from white to teal so it
   stays visible against the light background. */
.cta-band-light{background:rgba(var(--white-rgb),0.85); color:var(--ink);}
.cta-band-light h2{color:var(--ink);}
.cta-band-light p{color:var(--slate);}
.cta-band-light .amb-line{stroke:rgba(var(--teal-rgb),0.4);}
.cta-band-light .amb-bar{fill:rgba(var(--teal-rgb),0.28);}
.cta-band-light .amb-bar:nth-child(odd){fill:rgba(var(--teal-rgb),0.16);}
.cta-band-light .amb-link{stroke:rgba(var(--teal-rgb),0.35);}
.cta-band-light .amb-node{fill:rgba(var(--teal-rgb),0.55);}
.cta-band-stacked .container{display:block;}
.cta-band-stacked .container > div{max-width:60ch;}
.cta-band h2{margin-bottom:0.3rem;}
/* Contact */
.contact-grid{display:grid;
  grid-template-columns:1fr 1fr;
  gap:4rem;}
@media(max-width:860px){
  .contact-grid{grid-template-columns:1fr;}
}
.contact-detail{margin-bottom:1.6rem;}
.contact-detail .eyebrow{margin-bottom:0.3rem;}
.contact-detail a{text-decoration:none; font-size:1.1rem;}
form.contact-form{display:flex; flex-direction:column; gap:1.3rem;}
.contact-form label{font-size:0.85rem; font-weight:700; margin-bottom:0.5rem; display:block;}
.field-wrap{position:relative;}
.field-icon{position:absolute; left:1rem; top:50%; transform:translateY(-50%);
  width:19px; height:19px;
  color:var(--slate);
  pointer-events:none;
  transition:color .2s ease;}
.field-wrap-textarea .field-icon-top{top:1.1rem; transform:none;}
/* Shown only when script.js decides what's typed isn't a valid email address */
.field-error{display:none;
  font-size:0.95rem;
  font-weight:600;
  color:#B3261E;
  margin:0.5rem 0 0;}
.field-error.visible{display:block;}
.contact-form input.is-invalid{border-color:#B3261E;
  box-shadow:0 0 0 4px rgba(179,38,30,0.10);}
.contact-form input.is-invalid:focus{border-color:#B3261E; box-shadow:0 0 0 4px rgba(179,38,30,0.14);}
.contact-form input, .contact-form textarea{width:100%;
  padding:0.95rem 1.1rem 0.95rem 2.9rem;
  border:1.5px solid var(--line);
  border-radius:14px;
  background:var(--white);
  font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif;
  font-size:0.95rem;
  color:var(--ink);
  transition:border-color .2s ease, box-shadow .2s ease;}
.contact-form textarea{padding-top:1rem; resize:vertical; min-height:120px;}
.contact-form input::placeholder, .contact-form textarea::placeholder{color:var(--slate);}
.contact-form input:hover, .contact-form textarea:hover{border-color:rgba(var(--teal-rgb),0.5);}
.contact-form input:focus, .contact-form textarea:focus{outline:none;
  border-color:var(--teal);
  box-shadow:0 0 0 4px rgba(var(--teal-rgb),0.14);}
.field-wrap:focus-within .field-icon{color:var(--teal-dark);}
.contact-form button{align-self:flex-start;}
.form-status{font-size:0.95rem; font-weight:600; margin-top:0.9rem; min-height:1.3em;}
.form-status-success{color:var(--teal-dark);}
.form-status-error{color:#B3261E;}
/* Footer */
footer{background:rgba(var(--navy-rgb),0.88);
  color:rgba(246,245,241,0.75);
  padding:2.2rem 0 1.3rem 0;
  font-size:0.88rem;
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);}
.footer-grid{display:grid;
  grid-template-columns:2fr 1fr 1fr;
  gap:2rem;
  padding-bottom:1.6rem;
  border-bottom:1px solid var(--olanji);}
.footer-grid h4{color:var(--white); font-size:0.9rem; margin-bottom:0.7rem; font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif; font-weight:700;}
.footer-grid ul{list-style:none; margin:0; padding:0;}
.footer-grid li{margin-bottom:0.4rem;}
.footer-grid a{text-decoration:none; color:rgba(246,245,241,0.75);}
.footer-grid a:hover{color:var(--teal);}
.footer-bottom{padding-top:1rem; display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:0.6rem; font-size:0.82rem;}
.footer-social{display:flex; gap:1rem;}
.footer-social a{color:rgba(246,245,241,0.75);}
.footer-social a:hover{color:var(--teal);}
.footer-social svg{width:18px; height:18px; display:block;}
@media(max-width:720px){
  .footer-grid{grid-template-columns:1fr; gap:1.4rem;}
}
/* Reveal animation - single orchestrated entrance on hero only */
.reveal{opacity:0; transform:translateY(14px); animation:reveal .7s ease forwards;}
.reveal-1{animation-delay:.05s;}
.reveal-2{animation-delay:.18s;}
.reveal-3{animation-delay:.31s;}
@keyframes reveal{
  to{opacity:1; transform:translateY(0);}
}
@media(prefers-reduced-motion:reduce){
  .reveal{animation:none; opacity:1; transform:none;}
  html{scroll-behavior:auto;}
}
/* Hero slideshow */
.hero-slider{position:relative; min-height:640px; overflow:hidden;}
@media(max-width:720px){
  .hero-slider{min-height:560px;}
}
.slide{position:absolute; inset:0;
  display:flex; align-items:center;
  opacity:0; visibility:hidden;
  transition:opacity 1s ease, visibility 0s linear 1s;   /* stay visible while fading out, then hide */
  z-index:1;}
.slide.active{opacity:1; visibility:visible; position:relative; z-index:2; transition:opacity 1s ease, visibility 0s;}
.slide-visual{position:absolute; inset:0;
  z-index:0;
  /* extra scale gives room for the parallax shift below without
     ever revealing empty space at the edges */
  transform:scale(1.08) translate(var(--px, 0px), var(--py, 0px));
  transition:transform .3s ease-out;}
.slide-visual svg{width:100%; height:100%; opacity:0.55;}
/* Real photo backgrounds (used on the hero and page headers): the
   photo itself stays fully visible, with a teal wash on top for
   brand consistency and text legibility - rather than fading the
   whole image out the way the abstract SVG graphics are faded. */
.slide-photo{position:absolute; inset:0;
  width:100%; height:100%;
  object-fit:cover;
  display:block;}
.slide-photo-overlay{position:absolute; inset:0;}
@media(prefers-reduced-motion:reduce){
  .slide-visual{transition:none;}
}
/* Slide 4: real video background, no text overlay - just fills the
   slide edge-to-edge like the animated graphics do on the other slides. */
/* Standalone video section, below the hero slideshow */
.hero-video{display:block;
  width:100%;
  height:auto;}
.slide-content{position:relative; z-index:1;
  max-width:760px;}
.slide .eyebrow{color:var(--white);}
.slide h1{color:var(--white); font-size:clamp(2.2rem,4.6vw,4rem);}
.slide p{color:rgba(246,245,241,0.85); font-size:1.1rem;}
/* Centered quote-style slide (e.g. the Managing Director slide) */
.slide h3{color:rgba(255,255,255,0.85);
  font-family:'Roboto','Trebuchet MS',Calibri,Arial,Helvetica,sans-serif;
  font-weight:500;
  font-size:1.05rem;
  margin-top:1.3rem;}
.chart-line{stroke-dasharray:600;
  stroke-dashoffset:600;}
.slide.active .chart-line{animation:draw-line 1.8s ease forwards .3s;}
@keyframes draw-line{
  to{stroke-dashoffset:0;}
}
.bar{transform-origin:bottom; transform:scaleY(0);}
.slide.active .bar{animation:grow-bar 1s ease forwards;}
.bar:nth-child(1){animation-delay:.2s !important;}
.bar:nth-child(2){animation-delay:.35s !important;}
.bar:nth-child(3){animation-delay:.5s !important;}
.bar:nth-child(4){animation-delay:.65s !important;}
.bar:nth-child(5){animation-delay:.8s !important;}
@keyframes grow-bar{
  to{transform:scaleY(1);}
}
.node-dot{opacity:0; transform:scale(0);}
.slide.active .node-dot{animation:pop-node .5s ease forwards;}
.node-dot:nth-child(1){animation-delay:.2s !important;}
.node-dot:nth-child(2){animation-delay:.4s !important;}
.node-dot:nth-child(3){animation-delay:.6s !important;}
.node-dot:nth-child(4){animation-delay:.8s !important;}
@keyframes pop-node{
  to{opacity:1; transform:scale(1);}
}
.node-line{stroke-dasharray:300; stroke-dashoffset:300;}
.slide.active .node-line{animation:draw-line 1.2s ease forwards .3s;}
@media(prefers-reduced-motion:reduce){
  .chart-line,.bar,.node-dot,.node-line{animation:none !important; opacity:1; transform:none; stroke-dashoffset:0;}
}
.slide-dots{position:absolute; bottom:1.8rem; left:0; right:0;
  display:flex; justify-content:center; gap:1.1rem;
  z-index:3;}
.dot{width:14px; height:14px;
  border-radius:50%;
  border:2px solid rgba(246,245,241,0.75);
  background:transparent;
  cursor:pointer;
  padding:0;
  position:relative;
  transition:background .2s ease, transform .2s ease, border-color .2s ease;}
/* invisible larger click/tap area around each round dot */
.dot::after{content:""; position:absolute; inset:-9px;}
.dot:hover{transform:scale(1.2); border-color:var(--white);}
.dot:focus-visible{outline:2px solid var(--white); outline-offset:3px;}
.dot.active{background:var(--white); border-color:var(--white); transform:scale(1.15);}
/* Intro stats (light background variant) */
/* "At a glance" key-fact cards (home page) */
.glance{margin-top:3rem;}
.glance-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:1.4rem; margin-top:0.8rem;}
.glance-card{background:rgba(var(--teal-rgb),0.10); border-radius:20px; padding:1.6rem 1.7rem;}
.glance-card:nth-child(even){background:rgba(var(--white-rgb),0.72);}
.glance-card strong{display:block; font-size:1.8rem; line-height:1.2; color:var(--teal-dark); font-weight:700;}
.glance-card em{display:block; font-style:normal; font-size:0.78rem; font-weight:700;
  letter-spacing:0.08em; text-transform:uppercase; color:var(--slate); margin:0.5rem 0 0.7rem;}
.glance-card p{margin:0; font-size:0.92rem; line-height:1.5; color:var(--slate);}
@media(max-width:1000px){
  .glance-grid{grid-template-columns:1fr 1fr;}
}
@media(max-width:560px){
  .glance-grid{grid-template-columns:1fr;}
}
/* Page header (for inner pages) */
.page-header{padding:4.5rem 0 3.5rem 0;
  position:relative;
  overflow:hidden;
  background:var(--teal); /* overrides the black .section-dark default - inner-page headers are bold teal, like the homepage hero */}
.page-header p{font-size:1.15rem; color:rgba(255,255,255,0.9); max-width:60ch;}
.page-header .eyebrow{color:var(--white);}
/* overrides .section-dark's teal eyebrow, which would vanish on this teal background */
/* Mini header slideshow (About/Services/Solutions/Clients/Contact) */
.mini-slide-wrap{display:grid;}
.mini-slide{grid-area:1/1;
  opacity:0;
  pointer-events:none;
  transition:opacity .7s ease;}
.mini-slide.active{opacity:1; pointer-events:auto;}
.mini-dots{display:flex; justify-content:center; gap:1.1rem; margin-top:1.9rem;}
/* =========================================================================
   SCROLL PROGRESS BAR
   A thin bar fixed to the very top of the screen. Its width is driven by
   JavaScript to reflect how far down the page you've scrolled, and the
   teal dashes inside continuously slide sideways for extra motion -
   this is the "animated line/dash" effect that runs on every page.
   ========================================================================= */
.scroll-progress{position:fixed; top:0; left:0; right:0;
  height:4px;
  background:rgba(var(--teal-rgb),0.18);
  z-index:200;}
.scroll-progress-bar{height:100%; width:0%;
  background-image:repeating-linear-gradient(
    90deg,
    var(--teal) 0px, var(--teal) 14px,
    var(--teal-dark) 14px, var(--teal-dark) 22px
  );
  background-size:200% 100%;
  animation:scroll-dash-slide 2.4s linear infinite;
  transition:width .1s linear;}
@keyframes scroll-dash-slide{
  0%{background-position:0 0;}
  100%{background-position:-72px 0;}
}
@media(prefers-reduced-motion:reduce){
  .scroll-progress-bar{animation:none; background-image:none; background-color:var(--teal);}
}
/* =========================================================================
   SPLASH SCREEN
   A full-screen white/paper overlay shown briefly when the site is first
   opened: the ODS icon, then an animated loading bar. Deliberately built
   to hide ITSELF via a plain CSS animation (see splash-sequence below) -
   it does NOT wait on JavaScript to remove it. That way, even if
   something goes wrong in script.js (e.g. a browser blocking
   sessionStorage when a page is opened directly from disk instead of a
   real server), the splash still disappears on its own and never gets
   stuck covering the page. JS is only used for the optional "don't show
   again this session" behaviour - see script.js, "SPLASH SCREEN".
   ========================================================================= */
.splash-screen{position:fixed; inset:0;
  z-index:500;
  background:var(--paper);
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:2rem;
  animation:splash-sequence 2.2s ease forwards;
  pointer-events:none; /* never blocks clicks, even before the animation finishes */}
/* Already shown this session - skip instantly, no flash on page navigation */
html.skip-splash .splash-screen{display:none;}
@keyframes splash-sequence{
  0%{opacity:1; visibility:visible;}
  80%{opacity:1; visibility:visible;}
  100%{opacity:0; visibility:hidden;}
}
.splash-icon{width:96px; height:auto;
  animation:splash-pop .5s ease;}
@keyframes splash-pop{
  0%{opacity:0; transform:scale(0.85);}
  100%{opacity:1; transform:scale(1);}
}
.splash-bar{width:180px; height:4px;
  border-radius:999px;
  background:rgba(var(--teal-rgb),0.15);
  overflow:hidden;}
.splash-bar-fill{height:100%; width:0%;
  border-radius:999px;
  background:linear-gradient(90deg, var(--teal), var(--teal-dark));
  animation:splash-bar-fill 1.6s cubic-bezier(.4,0,.2,1) forwards;}
@keyframes splash-bar-fill{
  to{width:100%;}
}
@media(prefers-reduced-motion:reduce){
  .splash-screen{animation:none; opacity:0; visibility:hidden;}
  .splash-icon{animation:none;}
  .splash-bar-fill{animation:none;}
}
/* =========================================================================
   PHOTO PLACEHOLDERS
   Marked spots where real photography can be dropped in later. Each one
   states what kind of photo fits there and a suggested size. To replace
   one: delete the placeholder .image-placeholder div and put an <img>
   (or <div style="background-image:...">) in its place, at roughly the
   dimensions noted inside it.
   ========================================================================= */
/* Small circular version, used for client/testimonial headshots */
/* =========================================================================
   CAPABILITY DETAIL PANES (Services page "What We Deliver" cards)
   Clicking a capability card opens one of these as a large overlay pane
   with more detail and a photo. See script.js, "CAPABILITY DETAIL PANES".
   ========================================================================= */
.capability-card{cursor:pointer;}
.capability-card:focus-visible{outline:2px solid var(--teal); outline-offset:2px;}
.modal-overlay{position:fixed; inset:0;
  background:rgba(2,5,9,0.6);
  backdrop-filter:blur(3px);
  opacity:0; visibility:hidden;
  transition:opacity .25s ease, visibility 0s linear .25s;
  z-index:300;}
.modal-overlay.open{opacity:1; visibility:visible;
  transition:opacity .25s ease, visibility 0s linear 0s;}
.modal-pane{position:fixed; top:50%; left:50%; transform:translate(-50%, -48%); width:min(78vw, 980px); max-height:85vh; background:var(--white); border-radius:22px; box-shadow:0 30px 70px rgba(2,5,9,0.35); opacity:0; visibility:hidden; transition:opacity .28s ease, transform .28s ease, visibility 0s linear .28s; z-index:301; display:grid; grid-template-columns:0.85fr 1.15fr;}
.modal-pane.open{opacity:1; visibility:visible; transform:translate(-50%, -50%); transition:opacity .28s ease, transform .28s ease, visibility 0s linear 0s;}
.modal-media{background:var(--paper-2);}
.modal-media img{width:100%; height:100%; object-fit:cover; display:block; min-height:280px;}
.modal-body{padding:2.6rem 2.8rem;}
.modal-body h2{margin-bottom:0.9rem;}
.modal-body .feature-list{margin-top:0.4rem;}
.modal-close{position:absolute; top:1.1rem; right:1.1rem;
  width:38px; height:38px;
  border-radius:50%;
  border:none;
  background:rgba(2,5,9,0.06);
  color:var(--ink);
  font-size:1.5rem; line-height:1;
  cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  z-index:2;
  transition:background .15s ease;}
.modal-close:hover{background:rgba(2,5,9,0.12);}
@media(max-width:820px){
  .modal-pane{grid-template-columns:1fr;
    width:min(92vw, 560px);}
  .modal-media img{min-height:200px;}
  .modal-body{padding:2rem 1.6rem;}
}
@media(prefers-reduced-motion:reduce){
  .modal-overlay, .modal-pane{transition:none;}
}
/* Stylish "corner bracket" photo frame - like a viewfinder - used on
   the TM1 and Power BI screenshots in "Platforms in Depth". */
.corner-frame img{display:block; width:100%; border-radius:20px;}
/* =========================================================================
   CONTACT SECTION - frosted form card
   ========================================================================= */
.contact-section{position:relative; overflow:hidden;}
/* Left column drops down a touch so its heading lines up with the one inside the card */
.contact-section .contact-grid > div:first-child{padding-top:2.2rem;}
.contact-card{background:rgba(255,255,255,0.10);
  backdrop-filter:blur(12px);
  -webkit-backdrop-filter:blur(12px);
  border:1px solid rgba(255,255,255,0.55);
  border-radius:22px;
  padding:2.2rem 2.4rem 2.4rem;
  box-shadow:0 18px 44px rgba(2,5,9,0.08);}
/* See-through form: the card and the text boxes are almost fully transparent so the
   photo shows through. The soft white glow behind the labels keeps them readable.
   If any text ever feels hard to read, raise the 0.10 / 0.22 numbers a little. */
.contact-card label,
.contact-card .eyebrow{text-shadow:0 0 10px rgba(255,255,255,0.9), 0 0 3px rgba(255,255,255,0.8);}
.contact-card .eyebrow{color:var(--ink);}
.contact-card .contact-form input,
.contact-card .contact-form textarea{background:rgba(255,255,255,0.22);
  border:1.5px solid rgba(255,255,255,0.8);
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);}
.contact-card .contact-form input:hover,
.contact-card .contact-form textarea:hover{background:rgba(255,255,255,0.34);}
.contact-card .contact-form input:focus,
.contact-card .contact-form textarea:focus{background:rgba(255,255,255,0.55);
  border-color:var(--teal);}
/* Stop the browser's autofill from painting the boxes solid blue/yellow */
.contact-card .contact-form input:-webkit-autofill,
.contact-card .contact-form textarea:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px rgba(255,255,255,0.35) inset;
  -webkit-text-fill-color:var(--ink);
  transition:background-color 9999s ease-out 0s;}
@media(max-width:860px){
  .contact-section .contact-grid > div:first-child{padding-top:0;}
  .contact-card{padding:1.6rem 1.4rem 1.8rem;}
}
/* =========================================================================
   OUR VALUES - PICTURE CARDS + CLICK-TO-OPEN PANES
   Each of the five values is a card with a picture; clicking it opens a
   detail pane (same pop-up system as the Services page). The ODS logo sits
   behind both the cards and the panes as a soft watermark - to make it
   stronger/fainter, change the "opacity" numbers marked below.
   ========================================================================= */
.values-row.values-row-media{grid-template-columns:repeat(5,1fr); gap:1.2rem;}
.value-card{position:relative;
  isolation:isolate;          /* keeps the watermark behind the text but above the card's white */
  overflow:hidden;
  cursor:pointer;
  display:flex; flex-direction:column;
}
.value-card:focus-visible{outline:2px solid var(--teal); outline-offset:3px;}

/* THE ODS LOGO AS THE PANE BACKGROUND (only shows once a pane pops up - the cards stay clean) */
.modal-values .modal-body::before{
  content:"";
  position:absolute; z-index:-1; pointer-events:none;
  background:url('Assets/logo-whitebg-nav.png') center / contain no-repeat;
}

.value-thumb{
  width:100%; max-width:168px;
  aspect-ratio:3 / 2;
  border-radius:14px;
  overflow:hidden;
  margin-bottom:1.15rem;
  box-shadow:0 6px 16px rgba(2,5,9,0.14);
}
.value-thumb img{width:100%; height:100%; object-fit:cover; display:block; transition:transform .35s ease;}
.value-card:hover .value-thumb img{transform:scale(1.07);}
.value-card h3{font-size:1.2rem;}
.value-more{
  margin-top:auto; padding-top:1.1rem;
  display:inline-flex; align-items:center; gap:0.4rem;
  font-size:0.95rem; font-weight:700; color:var(--teal-dark);
}
.value-more svg{width:14px; height:14px; transition:transform .2s ease;}
.value-card:hover .value-more svg{transform:translateX(4px);}

/* Medium screens: 3 cards on top, 2 wider cards underneath */
@media(max-width:1180px){
  .values-row.values-row-media{grid-template-columns:repeat(6,1fr);}
  .values-row-media .value:nth-child(-n+3){grid-column:span 2;}
  .values-row-media .value:nth-child(n+4){grid-column:span 3;}
}
/* Phones: one per row */
@media(max-width:640px){
  .values-row.values-row-media{grid-template-columns:1fr;}
  .values-row-media .value:nth-child(n){grid-column:auto;}
}

/* --- the detail panes --- */
.modal-pane.modal-values{display:block; width:min(92vw, 780px); max-height:92vh;}
.modal-values .modal-body{
  position:relative; isolation:isolate; overflow:hidden;
  padding:2.6rem 2.8rem 2.8rem;
}
.modal-values .modal-body::before{top:0; right:0; bottom:0; left:0; margin:auto; width:68%; height:54%; opacity:0.10;}  /* centred in the pane; opacity = watermark strength */
.modal-values-head{display:flex; align-items:center; gap:1.5rem; margin-bottom:1.5rem; padding-right:2.2rem;}
.modal-values-head img{
  width:158px; height:105px; object-fit:cover; flex-shrink:0;
  border-radius:14px; box-shadow:0 8px 20px rgba(2,5,9,0.16);
}
.modal-values-head h2{margin:0 0 0.3rem; font-size:clamp(1.8rem, 3vw, 2.3rem);}
.modal-values-head .modal-values-tag{margin:0; color:var(--slate); font-size:0.98rem;}
.modal-values .modal-sub{font-size:1rem; margin:1.1rem 0 0.5rem;}
.modal-values .btn{margin-top:0.4rem;}
/* a little more compact, so the pane fits on laptop-height windows without scrolling */
.modal-values .modal-body{padding-top:2.1rem; padding-bottom:2.2rem;}
.modal-values-head{margin-bottom:1.1rem;}
.modal-values .modal-body > p{line-height:1.6; margin-bottom:0.85em;}
.modal-values .feature-list{margin-bottom:0.9rem;}
.modal-values .feature-list li{margin-bottom:0.4rem;}
@media(max-width:560px){
  .modal-values .modal-body{padding:2rem 1.5rem 2.2rem;}
  .modal-values-head{flex-direction:column; align-items:flex-start; gap:1rem;}
  .modal-values-head img{width:132px; height:88px;}
}

/* Hover-to-open panes (Our Values): the dim layer is see-through to the mouse, so you can
   keep hovering the other cards, and it's lighter so it doesn't feel heavy for a hover. */
.modal-overlay.is-hover{
  pointer-events:none;
  background:rgba(2,5,9,0.30);
  backdrop-filter:none; -webkit-backdrop-filter:none;
}

/* A pane that is closing (still fading out) no longer catches the mouse, so it can't get in
   the way of the next card you move onto. Only a fully open pane is clickable/hoverable. */
.modal-pane{pointer-events:none;}
.modal-pane.open{pointer-events:auto;}
/* Our Values > Our Mission photo: rounded corners (from .corner-frame) + a wide banner crop */
.mission-photo img{aspect-ratio:21 / 9; object-fit:cover; object-position:center 70%;}
@media(max-width:640px){
  .mission-photo img{aspect-ratio:4 / 3; object-position:center;}
}
/* =========================================================================
   SITE BACKGROUND PHOTO
   A photo fixed behind the whole website. The plain-colour sections (off-white,
   teal, black) are slightly see-through, so the picture shows softly through them.
   - To REMOVE it: delete this whole block.
   - To try a DIFFERENT picture: change the file name inside url(...) below.
   - "center bottom" keeps the bottom of the photo (the buildings) in view; use
     "center center" if you'd rather crop equally from the top and bottom.
   - It is a fixed layer (not "background-attachment: fixed") so it also behaves
     properly on phones and iPads, where that older trick zooms the photo way in.
   ========================================================================= */
body::before{content:"";
  position:fixed;
  top:0; right:0; bottom:0; left:0;
  z-index:-1;
  background:url('Assets/Skyscrapers.jpg') center bottom / cover no-repeat;
  pointer-events:none;}
/* ---- HOW VISIBLE IS THE PICTURE?  (the two numbers to play with) ------------------
   --bg-veil : how solid the light sections are. 1 = fully solid (picture hidden),
               0.85 = faint ghost of the picture, 0.72 = clearly visible, 0.6 = strong.
   --bg-blur : how frosted the picture looks through the sections. 0px = sharp.
   Lower numbers show more of the picture but make the small grey text a little harder
   to read where the dark towers sit behind it - so change them in small steps.
   Deleting this block puts the sections back to how they were.                      */
:root{--bg-veil:0.72; --bg-blur:4px;}
.section-light,
.section-alt{background:rgba(var(--paper-rgb), var(--bg-veil));
  backdrop-filter:blur(var(--bg-blur));
  -webkit-backdrop-filter:blur(var(--bg-blur));}
/* "At a glance" cards: interactive + their equal-size detail panes */
.glance-card{cursor:pointer; transition:transform .2s ease, box-shadow .2s ease;}
.glance-card:hover, .glance-card:focus-visible{transform:translateY(-4px); box-shadow:0 10px 26px rgba(2,5,9,0.12);}
.glance-card:focus-visible{outline:2px solid var(--teal); outline-offset:2px;}
.modal-pane.modal-glance{overflow:hidden;}
.modal-glance .modal-media{height:100%; overflow:hidden;}
.modal-glance .modal-media img{height:100%; min-height:0;}
.modal-glance .modal-body{display:flex; flex-direction:column; justify-content:center; padding:2rem 2.4rem; overflow-y:auto;}
.modal-glance .modal-body p{margin-bottom:0.8em;}
.modal-glance .feature-list{margin-bottom:1rem;}
.modal-glance .btn{align-self:flex-start;}
/* the teal "What we deliver" card shown as the End-to-end pane's picture */
.deliver-card{height:100%; min-height:280px; box-sizing:border-box;
  background:var(--teal); color:var(--white);
  padding:2.2rem 2rem; display:flex; flex-direction:column; justify-content:center;}
.deliver-card .deliver-eyebrow{font-weight:700; margin-bottom:1.2rem;}
.deliver-card h3{color:var(--white); font-size:clamp(1.4rem,2.2vw,1.8rem); line-height:1.25; margin:0 0 1.4rem;}
.deliver-card .deliver-rule{display:block; width:110px; height:3px; background:orange; margin-bottom:1.4rem;}
.deliver-card p{color:var(--white); margin:0;}
@media(max-width:820px){
  .modal-pane.modal-glance{height:min(88vh, 640px); overflow-y:auto;}
  .modal-glance .modal-media{height:200px;}
  .deliver-card{min-height:200px; padding:1.4rem;}
  .modal-glance .modal-body{display:block; overflow:visible; padding:1.6rem;}
}
/* Easy-reading text blocks: bigger type, a bold lead line, short tick lists and a callout */
.readable p{font-size:1.2rem; line-height:1.65; max-width:60ch;}
.readable .lead{font-size:1.5rem; line-height:1.4; font-weight:500; color:var(--ink); margin-bottom:1rem;}
.readable strong{color:var(--ink); font-weight:700;}
.tick-list{list-style:none; margin:0.4rem 0 1.4rem; padding:0; max-width:60ch;}
.tick-list li{position:relative; padding:0.35rem 0 0.35rem 2rem; font-size:1.2rem; line-height:1.5;}
.tick-list li::before{content:""; position:absolute; left:0; top:0.62rem; width:1.15rem; height:1.15rem; border-radius:50%;
  background:var(--teal) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 12.5 10.5 17 18 8'/></svg>") center/70% no-repeat;}
.readable .callout{border-left:4px solid var(--teal); padding:0.3rem 0 0.3rem 1.2rem; margin:1.4rem 0;
  font-size:1.25rem; color:var(--ink); font-weight:500;}
/* Home "What We Do" rows: bold headline sentence, supporting line underneath, bigger */
.service-item p{font-size:1.15rem; line-height:1.55;}
.service-item p strong{display:block; color:var(--ink); font-weight:700; margin-bottom:0.2rem;}
.service-item p span{display:block;}
/* Our Values panes: short lead line + four numbered "in practice" tiles (easy to scan) */
.modal-values .values-lead{font-size:1.2rem; line-height:1.5; font-weight:500; color:var(--ink); margin:0.2rem 0 1rem; max-width:none;}
.modal-values .modal-sub{font-size:0.8rem; letter-spacing:0.09em; text-transform:uppercase; color:var(--teal-dark); margin:0 0 0.7rem;}
.practice-grid{display:grid; grid-template-columns:1fr 1fr; gap:0.8rem; margin-bottom:1.3rem;}
.practice-tile{display:flex; gap:0.8rem; align-items:flex-start;
  background:rgba(var(--teal-rgb),0.09); border-radius:14px; padding:0.9rem 1rem;}
.practice-tile:nth-child(2), .practice-tile:nth-child(3){background:rgba(2,5,9,0.045);}
.practice-num{flex:0 0 1.9rem; height:1.9rem; border-radius:50%; background:var(--teal); color:var(--white);
  font-weight:700; font-size:0.95rem; display:flex; align-items:center; justify-content:center;}
.practice-tile strong{display:block; color:var(--ink); font-size:1.05rem; line-height:1.3;}
.practice-tile span:not(.practice-num){display:block; font-size:0.95rem; line-height:1.45; color:var(--slate); margin-top:0.15rem;}
@media(max-width:560px){
  .practice-grid{grid-template-columns:1fr;}
}
/* Services panes: each one has its own easy-scan layout */
/* 1. numbered steps with a connecting line */
/* 2. four feature cards */
/* 3. before / after */
/* pills (3 and 4) */
/* 5. badges + ticks */
.modal-pane:not(.modal-values):not(.modal-glance) .modal-body{padding:2.2rem 2.4rem;}
.modal-pane:not(.modal-values):not(.modal-glance) .modal-body h2{font-size:clamp(1.6rem,2.3vw,2rem); margin-bottom:0.7rem;}
/* Orange accent on every pop-up card: a thin orange top edge + a short orange rule under the heading */
.modal-pane{border-top:5px solid var(--olanji);}
.modal-body h2::after, .modal-values-head h2::after{content:""; display:block; width:56px; height:3px; border-radius:2px;
  background:var(--olanji); margin-top:0.55rem;}
.modal-values-head h2::after{margin-bottom:0.3rem;}
/* ---- HOW WE WORK: four white cards on the teal photo ---- */
.process{gap:1.6rem; margin-top:4rem;}
.process-track{top:0; left:12.5%; right:12.5%; background:rgba(255,255,255,0.35);}
.process-step{position:relative; background:rgba(255,255,255,0.95); border-radius:20px; padding:2.6rem 1.6rem 1.8rem; box-shadow:0 14px 34px rgba(2,5,9,0.18); border-bottom:4px solid var(--olanji); text-align:left; opacity:0.82; transition:opacity .4s ease, transform .4s ease, box-shadow .4s ease;}
.process-step.active{opacity:1; transform:translateY(-6px); box-shadow:0 20px 42px rgba(2,5,9,0.24);}
.process-step .step-num{position:absolute; top:-1.4rem; left:50%; margin:0; transform:translateX(-50%); width:2.8rem; height:2.8rem; font-size:1rem; background:var(--white); color:var(--teal-dark); border:3px solid var(--teal);}
.process-step.active .step-num{background:var(--teal); color:var(--white); border-color:var(--white); transform:translateX(-50%) scale(1.12);}
.step-icon{width:3rem; height:3rem; border-radius:14px; background:rgba(var(--teal-rgb),0.12); color:var(--teal-dark);
  display:flex; align-items:center; justify-content:center; margin-bottom:1rem;}
.step-icon svg{width:1.5rem; height:1.5rem;}
.process-step h3{color:var(--ink); font-size:1.6rem; margin-bottom:0.5rem;}
.process-step p, .process-step.active p{opacity:1; color:var(--text);}
.process-step .step-lead{font-size:1.1rem; color:var(--teal-dark); line-height:1.35; margin-bottom:0.6rem;}
.process-step .step-detail{font-size:1rem; line-height:1.55; margin:0; max-width:none;}
@media(max-width:860px){
  .process{grid-template-columns:1fr 1fr; gap:2.8rem 1.4rem;}
  .process-track{display:none;}
}
@media(max-width:560px){
  .process{grid-template-columns:1fr; padding-left:0;}
}
/* Hero background video: anchor the crop to the TOP so people's heads are not cut off.
   (0% = top of the video, 50% = centre, 100% = bottom. Try 10%-20% if you want a little less top.) */
.slide-visual video.slide-photo{object-position:center 0%;}
/* Home intro: wording first, then the team photo underneath it as a wide rounded banner */
.intro-stack > div:first-child p{max-width:80ch;}
.intro-photo{margin-top:2.2rem;}
.intro-photo img{display:block; width:100%; aspect-ratio:21 / 9; object-fit:cover; object-position:center 35%;
  border-radius:20px; box-shadow:0 18px 44px rgba(2,5,9,0.16); border-bottom:4px solid var(--olanji);}
@media(max-width:720px){
  .intro-photo img{aspect-ratio:4 / 3;}
}
/* Video showcase (About page): rounded frame with the orange accent line */
.video-frame{margin-top:1.8rem; border-radius:20px; overflow:hidden; box-shadow:0 18px 44px rgba(2,5,9,0.18); border-bottom:4px solid var(--olanji); line-height:0;}
.video-frame .hero-video{display:block; width:100%; height:auto;}
/* Home intro video: spans the full width of the page, edge to edge (like the original strip) */
.video-full{width:100%; margin:2.5rem 0 0; line-height:0;}
.video-full .hero-video{display:block; width:100%; height:auto;}
/* Slide 1: wording on the left, a rounded photo on the right */
/* ---- HOW WE WORK: hover (or focus / tap) a card to play its animated graphic ----
   Pure CSS/SVG animation - no video files, loads instantly, always on-brand. */
.process-step{cursor:pointer;}
.process-step:focus-visible{outline:3px solid var(--white); outline-offset:3px;}
.step-anim{position:absolute; inset:0; z-index:3; border-radius:inherit; background:var(--white);
  padding:1rem 1rem 1.1rem; display:flex; flex-direction:column;
  opacity:0; visibility:hidden; transform:scale(0.98);
  transition:opacity .3s ease, transform .3s ease, visibility 0s linear .3s;}
.process-step:hover .step-anim, .process-step:focus-visible .step-anim, .process-step:focus-within .step-anim{opacity:1; visibility:visible; transform:none; transition:opacity .3s ease, transform .3s ease, visibility 0s;}
.step-anim svg{display:block; width:100%; height:auto; flex:0 0 auto;}
.step-anim strong{display:block; margin-top:0.7rem; color:var(--ink); font-size:1.05rem; line-height:1.3;}
.step-anim span{display:block; margin-top:0.2rem; color:var(--text); font-size:0.92rem; line-height:1.45;}
/* animation helpers (they only run while the card is hovered / focused) */
.step-anim svg *{transform-box:fill-box;}
.a-d2{animation-delay:.25s !important;}
.a-d3{animation-delay:.5s !important;}
.a-d4{animation-delay:.75s !important;}
.a-d5{animation-delay:1s !important;}
.process-step:hover .a-lens, .process-step:focus-within .a-lens{animation:a-scan 3.6s ease-in-out infinite;}
.process-step:hover .a-pain, .process-step:focus-within .a-pain{animation:a-pulse 1.2s ease-in-out infinite;}
.process-step:hover .a-pop, .process-step:focus-within .a-pop{animation:a-pop 3s ease-out infinite; transform-origin:center bottom;}
.process-step:hover .a-bot, .process-step:focus-within .a-bot{animation:a-bot 3.6s ease-in-out infinite;}
.process-step:hover .a-check polyline, .process-step:focus-within .a-check polyline{animation:a-check 3.6s ease-in-out infinite; stroke-dasharray:40;}
.process-step:hover .a-knob, .process-step:focus-within .a-knob{animation:a-knob 3.2s ease-in-out infinite alternate;}
.process-step:hover .a-bar, .process-step:focus-within .a-bar{animation:a-grow 3.4s ease-out infinite; transform-origin:center bottom;}
.process-step:hover .a-trend, .process-step:focus-within .a-trend{animation:a-draw 3.4s ease-out infinite; stroke-dasharray:320;}
.process-step:hover .a-end, .process-step:focus-within .a-end{animation:a-pulse 1.2s ease-in-out infinite; animation-delay:1.2s;}
.process-step:hover .a-play, .process-step:focus-within .a-play{animation:a-pulse 1.4s ease-in-out infinite; transform-origin:center;}
.process-step:hover .a-progress, .process-step:focus-within .a-progress{animation:a-fill 3.4s ease-in-out infinite; transform-origin:left center;}
@keyframes a-scan{
  0%{transform:translate(0,0);}
  30%{transform:translate(120px,24px);}
  60%{transform:translate(40px,48px);}
  100%{transform:translate(0,0);}
}
@keyframes a-pulse{
  0%,100%{transform:scale(1); opacity:1;}
  50%{transform:scale(1.5); opacity:.6;}
}
@keyframes a-pop{
  0%{transform:scale(0); opacity:0;}
  25%,85%{transform:scale(1); opacity:1;}
  100%{transform:scale(1); opacity:0;}
}
@keyframes a-bot{
  0%{transform:translateX(0);}
  40%{transform:translateX(96px);}
  80%,100%{transform:translateX(192px);}
}
@keyframes a-check{
  0%,10%{stroke-dashoffset:40; opacity:0;}
  40%,90%{stroke-dashoffset:0; opacity:1;}
  100%{opacity:0;}
}
@keyframes a-knob{
  from{transform:translateX(-50px);}
  to{transform:translateX(120px);}
}
@keyframes a-grow{
  0%{transform:scaleY(0);}
  45%,100%{transform:scaleY(1);}
}
@keyframes a-draw{
  0%{stroke-dashoffset:320;}
  55%,100%{stroke-dashoffset:0;}
}
@keyframes a-fill{
  0%{transform:scaleX(0);}
  70%,100%{transform:scaleX(1);}
}
@media(prefers-reduced-motion:reduce){
  .step-anim svg *{animation:none !important;}
}
.process-step .step-num{z-index:5;}
/* keeps the number badge on top of the graphic */
/* Space between page sections (top + bottom padding of every section).
   Change --section-pad to taste: smaller = tighter page, larger = more breathing room. (was 5.5rem) */
:root{--section-pad:3.25rem;}
section{padding:var(--section-pad) 0;}
@media(max-width:720px){
  :root{--section-pad:2.5rem;}
}
/* Slide 1 photo: fills the whole right-hand side of the hero (top to bottom), like a feature panel */
/* Photo is taken out of the height calculation so the hero stays exactly 640px */
.hero-slider{padding-top:0; padding-bottom:0;}
@media(max-width:860px){
  .hero-slider{padding-top:2rem; padding-bottom:2rem;}
}
/* Slide 2: big title, clear gap, comfortable paragraph */
.slide .eyebrow.slide-title{display:block; line-height:1.1; font-weight:700; letter-spacing:-0.01em; margin:0 0 1.8rem; text-shadow:0 2px 14px rgba(2,5,9,0.25);}
.slide p.slide-lead-p{font-size:clamp(1.1rem,1.5vw,1.3rem); line-height:1.65; color:rgba(255,255,255,0.95); max-width:62ch; margin:0 0 2.2rem; text-shadow:0 1px 10px rgba(2,5,9,0.25);}
/* Keep every slide's content vertically centred in the 640px hero */
.slide.active{min-height:640px; box-sizing:border-box;}
.slide-content:has(.slide-title){max-width:1000px;}
.slide .eyebrow.slide-title{font-size:clamp(2.2rem,4.2vw,3.6rem);}
@media(max-width:860px){
  .slide.active{min-height:560px;}
}
/* Larger, easier-to-read paragraph text across the site (matches the hero slide size) */
:root{--p-size:clamp(1.1rem,1.5vw,1.3rem);}
:where(main,section,.page-header,.slide) :is(p,.tick-list li,.callout,.step-lead,.step-detail):not(.modal-pane *):not(.glance-card *):not(.capability-card *):not(.process-step *){font-size:var(--p-size); line-height:1.65;}
.glance-card p,.capability-card p,.values-row p,.process-step p,.step-lead,.step-detail{font-size:1.05rem; line-height:1.6;}
.service-item p strong{font-size:calc(var(--p-size) + 0.08rem);}
/* Card text brought up to match the rest of the site */
.glance-card p,.capability-card p,.values-row p,.process-step p,.step-detail{font-size:var(--p-size); line-height:1.6;}
.step-lead{font-size:calc(var(--p-size) + 0.05rem); line-height:1.4;}
/* Final overrides: intro paragraph and How We Work card text */
.intro-stack p,.intro-stack > div p{font-size:var(--p-size) !important; line-height:1.65 !important; max-width:80ch;}
.process-step p,.process-step .step-detail,.process-step .step-lead{font-size:var(--p-size) !important; line-height:1.55 !important;}
.process-step .step-lead{font-weight:600;}
/* ===== Pop-up cards: larger, easier-to-read text (panes scroll rather than cut off) ===== */
.modal-pane{overflow-y:auto;}
.modal-pane .modal-body p,.modal-pane .modal-body li{font-size:1.15rem; line-height:1.55;}
.modal-pane .values-lead{font-size:1.35rem; line-height:1.45;}
.modal-pane .practice-tile span:not(.practice-num){font-size:1.05rem; line-height:1.45;}
.modal-pane .practice-tile strong{font-size:1.15rem;}
.modal-pane.modal-glance{width:min(94vw, 1000px); height:min(90vh, 520px); overflow-y:auto;}
.modal-glance .modal-body{overflow:visible;}
.modal-glance .modal-body h2{font-size:clamp(1.6rem,2.6vw,2rem);}
.deliver-card p{font-size:1.15rem;}
.deliver-card .deliver-eyebrow{font-size:1rem;}
/* Why ODS photo slider: second photo slides up from the bottom over the first */
.photo-slider{position:relative; overflow:hidden; border-radius:20px; aspect-ratio:3 / 2; background:var(--paper-2);}
.photo-slider .ps-img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover; border-radius:0; display:block;}
.photo-slider .ps-img{transition:transform 1s ease; will-change:transform;}
.photo-slider .ps-next{transform:translateY(100%);}
@media(prefers-reduced-motion:reduce){
  .photo-slider .ps-img{transition:none;}
}
/* Our X-Factor: four colour panels over an optional photo */
.xfactor{position:relative;}
.xfactor .container{position:relative; z-index:1;}
.xf-eyebrow{color:var(--olanji);}
.xf-title{color:var(--white); margin:0 0 2rem;}
.xf-teal{background:rgba(1,164,163,0.80);}
.xf-dark{background:rgba(43,38,38,0.82);}
.xf-orange{background:rgba(255,176,59,0.88); color:#2c3550;}
/* X-Factor: contained to the page width, rounded, photo sits behind the panels only */
.xfactor{background:rgba(var(--paper-rgb), var(--bg-veil)); padding:var(--section-pad) 0; overflow:visible;}
.xfactor .xf-title{color:var(--ink);}
.xfactor .xf-eyebrow{color:var(--teal-dark);}
.xf-wrap{margin:0 auto;}
/* X-Factor block spans the full page content width (matches the other sections) */
.xf-wrap{width:100%;}
/* Taller panels so each reads closer to a square */
/* X-Factor: a little smaller */
.xf-wrap{max-width:1250px; margin-left:auto; margin-right:auto;}
/* ===== "Click here to learn more" panes (Services: TM1 and Power BI) ===== */
.modal-pane.modal-learn{display:block; width:min(94vw,900px); max-height:90vh; overflow-y:auto; padding:0;}
.learn-head{background:var(--teal); color:var(--white); padding:2.2rem 2.6rem 1.8rem; position:relative;}
.learn-head .learn-tag{display:inline-block; font-size:0.9rem; font-weight:700; letter-spacing:0.08em; text-transform:uppercase; color:var(--white); opacity:0.9; margin-bottom:0.5rem;}
.learn-head h2{color:var(--white); font-size:clamp(1.7rem,3vw,2.3rem); margin:0 0 0.9rem; padding-right:2.5rem;}
.learn-head h2::after{content:""; display:block; width:90px; height:3px; background:var(--olanji); margin-top:0.8rem;}
.learn-head p{color:rgba(255,255,255,0.96); font-size:1.15rem; line-height:1.55; margin:0; max-width:none;}
.learn-body{padding:1.8rem 2.6rem 2.4rem;}
.learn-body p{font-size:1.1rem; line-height:1.65; color:var(--slate); max-width:none;}
.learn-h{font-size:1.25rem; color:var(--ink); margin:1.6rem 0 0.7rem; padding-left:0.8rem; border-left:4px solid var(--olanji); line-height:1.3;}
.learn-body > .learn-h:first-child{margin-top:0;}
.learn-cards{display:grid; grid-template-columns:1fr 1fr; gap:0.8rem;}
.learn-cards div{display:flex; gap:0.8rem; align-items:flex-start; background:rgba(var(--teal-rgb),0.09); border-top:3px solid var(--teal); border-radius:12px; padding:0.95rem 1rem;}
.learn-cards b{flex:0 0 auto; width:1.9rem; height:1.9rem; border-radius:50%; background:var(--teal); color:var(--white); display:flex; align-items:center; justify-content:center; font-size:0.95rem;}
.learn-cards span{font-size:1.05rem; line-height:1.45; color:var(--ink);}
.learn-ticks{list-style:none; margin:0; padding:0;}
.learn-ticks li{position:relative; padding:0.4rem 0 0.4rem 2rem; font-size:1.1rem; line-height:1.55; color:var(--slate);}
.learn-ticks li::before{content:""; position:absolute; left:0; top:0.78rem; width:1rem; height:0.55rem; border-left:3px solid var(--teal); border-bottom:3px solid var(--teal); transform:rotate(-45deg) scale(0.9);}
.learn-why{margin:1.8rem 0 1.6rem; padding:1.3rem 1.5rem 1.4rem; background:rgba(var(--teal-rgb),0.1); border-radius:16px;}
.learn-why .learn-h{margin-top:0;}
.learn-why p{margin:0 0 0.7rem;}
.learn-why .learn-closing{font-weight:700; color:var(--teal-dark); margin:0;}
@media(max-width:640px){
  .learn-head{padding:1.6rem 1.3rem 1.4rem;}
  .learn-body{padding:1.4rem 1.3rem 1.8rem;}
  .learn-cards{grid-template-columns:1fr;}
}
/* X-Factor: panels far left, comment box far right, same height */
.xfactor .container{text-align:left;}
.xf-layout{display:grid; gap:1.4rem; align-items:stretch; max-width:none;}
.xf-layout .xf-wrap{max-width:none; width:100%; margin:0;}
.xf-note{background:var(--white); border-radius:22px; border-top:5px solid var(--olanji); box-shadow:0 18px 44px rgba(2,5,9,0.18); padding:1.8rem 1.7rem; display:flex; flex-direction:column; justify-content:center; text-align:left; position:relative;}
.xf-note::before{content:"\201C"; position:absolute; top:0.2rem; right:1.2rem; font-size:5rem; line-height:1; color:rgba(var(--teal-rgb),0.2); font-family:Georgia,serif;}
.xf-note-tag{font-size:0.85rem; font-weight:700; letter-spacing:0.08em; text-transform:uppercase; color:var(--teal-dark); margin-bottom:0.7rem;}
.xf-note .xf-note-lead{font-size:1.2rem; line-height:1.45; font-weight:700; color:var(--ink); margin:0 0 1.1rem; max-width:none;}
.xf-note h3{font-size:1.1rem; color:var(--teal-dark); margin:0 0 0.6rem; padding-left:0.7rem; border-left:4px solid var(--olanji);}
.xf-note ul{list-style:none; margin:0; padding:0;}
.xf-note li{position:relative; padding:0.3rem 0 0.3rem 1.5rem; line-height:1.5; color:var(--slate);}
.xf-note li::before{content:""; position:absolute; left:0; top:0.75rem; width:0.7rem; height:0.7rem; border-radius:50%; background:var(--teal);}
@media(max-width:1000px){
  .xf-layout{grid-template-columns:1fr;}
  .xf-note{padding:1.6rem;}
}
.xf-note li{font-size:1.08rem;}
/* ===== Knowledge Hub page ("coming soon") ===== */
.kh-main{min-height:62vh; display:flex; align-items:center; justify-content:center; padding:7rem 0 5rem;}
.kh-main .container{display:flex; justify-content:center;}
.kh-pane{background:rgba(255,255,255,0.94); border-top:5px solid var(--olanji); border-radius:22px; box-shadow:0 24px 60px rgba(2,5,9,0.25); padding:3rem clamp(1.6rem,5vw,4rem) 3rem; text-align:center; max-width:640px; width:100%;}
.kh-tag{display:block; font-size:1rem; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--teal-dark); margin-bottom:0.6rem;}
.kh-pane h1{font-size:clamp(2.4rem,5vw,3.6rem); color:var(--ink); margin:0;}
.kh-rule{display:block; width:90px; height:3px; background:var(--olanji); margin:1rem auto 1.4rem;}
.kh-pane p{font-size:var(--p-size); line-height:1.65; color:var(--slate); margin:0 auto 1.8rem; max-width:48ch;}
/* ===== Contact form: consent tick-box + "I'm not a robot" pop-up ===== */
.consent-row{display:flex; align-items:center; flex-wrap:wrap; gap:0.7rem;}
.contact-card .contact-form .consent-row input[type="checkbox"], .contact-form .consent-row input[type="checkbox"]{-webkit-appearance:none; appearance:none; flex:0 0 auto;
  width:24px; height:24px; min-height:0; padding:0; margin:0;
  border:1.5px solid rgba(2,5,9,0.35); border-radius:7px;
  background:rgba(255,255,255,0.9); backdrop-filter:none; -webkit-backdrop-filter:none;
  cursor:pointer; position:relative; transition:background .2s ease, border-color .2s ease, box-shadow .2s ease;}
.contact-form .consent-row input[type="checkbox"]:hover{border-color:var(--teal);}
.contact-form .consent-row input[type="checkbox"]:focus-visible{outline:none; box-shadow:0 0 0 4px rgba(var(--teal-rgb),0.2); border-color:var(--teal);}
.contact-card .contact-form .consent-row input[type="checkbox"]:checked, .contact-form .consent-row input[type="checkbox"]:checked{background:var(--teal); border-color:var(--teal);}
.contact-form .consent-row input[type="checkbox"]:checked::after{content:""; position:absolute; left:7px; top:2px; width:6px; height:12px; border:solid #fff; border-width:0 2.5px 2.5px 0; transform:rotate(45deg);}
.contact-form .consent-row label{margin:0; display:inline; font-size:1rem; font-weight:400; line-height:1.4; color:var(--slate); cursor:pointer; flex:1 1 220px;}
.contact-form .consent-row label a{color:var(--teal-dark); font-weight:700; text-decoration:none; border-bottom:2px solid var(--olanji);}
.contact-form .consent-row label a:hover{color:var(--ink);}
.consent-row .req{color:#B3261E; font-weight:700;}
.consent-verified{font-size:0.9rem; font-weight:700; color:var(--teal-dark); background:rgba(var(--teal-rgb),0.12); padding:0.2rem 0.7rem; border-radius:999px;}
.consent-verified[hidden]{display:none;}
.captcha-overlay{position:fixed; inset:0; z-index:500; display:none; align-items:center; justify-content:center; background:rgba(2,5,9,0.55); backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px); padding:1rem;}
.captcha-overlay.open{display:flex;}
.captcha-card{position:relative; background:var(--white); border-top:5px solid var(--olanji); border-radius:20px; box-shadow:0 30px 70px rgba(2,5,9,0.4); padding:1.8rem 1.8rem 1.6rem; max-width:94vw; text-align:center;}
.captcha-card h3{font-size:1.3rem; color:var(--ink); margin:0 0 0.3rem;}
.captcha-card p{font-size:1rem; color:var(--slate); margin:0 0 1.1rem; max-width:none;}
.captcha-close{position:absolute; top:0.6rem; right:0.8rem; width:34px; height:34px; border:none; border-radius:50%; background:rgba(2,5,9,0.06); font-size:1.4rem; line-height:1; cursor:pointer; color:var(--ink);}
#captchaBox{display:flex; justify-content:center; min-height:78px;}
@media(max-width:380px){
  #captchaBox{transform:scale(0.88); transform-origin:center;}
}
/* Footer privacy link */
.footer-policy{color:inherit; text-decoration:underline; text-underline-offset:3px;}
.footer-policy:hover{color:var(--olanji);}
/* ===== Privacy policy page ===== */
.policy-main{padding:4.5rem 0 4rem;}
.policy-wrap{max-width:980px; margin:0 auto; background:rgba(255,255,255,0.95); border-top:5px solid var(--olanji); border-radius:22px; box-shadow:0 24px 60px rgba(2,5,9,0.22); padding:clamp(1.6rem,4vw,3.2rem);}
.policy-wrap h1{font-size:clamp(2rem,4vw,2.8rem); color:var(--ink); margin:0 0 0.3rem;}
.policy-updated{font-size:1rem; color:var(--teal-dark); font-weight:700; margin:0 0 1.2rem;}
.policy-wrap h2{font-size:1.45rem; color:var(--ink); margin:2.2rem 0 0.7rem; padding-left:0.8rem; border-left:4px solid var(--olanji); line-height:1.3;}
.policy-wrap p, .policy-wrap li{font-size:var(--p-size); line-height:1.65; color:var(--slate); max-width:none;}
.policy-wrap ul{margin:0 0 1rem; padding-left:1.3rem;}
.policy-wrap li{margin-bottom:0.35rem;}
.policy-wrap a{color:var(--teal-dark); font-weight:700;}
.policy-lead{font-size:1.25rem; line-height:1.55; color:var(--ink); font-weight:500;}
.policy-toc{display:flex; flex-wrap:wrap; gap:0.5rem; margin:1.2rem 0 0.4rem; padding:0; list-style:none;}
.policy-toc a{display:inline-block; background:rgba(var(--teal-rgb),0.1); color:var(--teal-dark); border-radius:999px; padding:0.4rem 0.95rem; font-size:0.95rem; text-decoration:none;}
.policy-toc a:hover{background:rgba(var(--teal-rgb),0.2);}
.policy-grid{display:grid; grid-template-columns:1fr 1fr; gap:0.8rem; margin:0.5rem 0 1rem;}
.policy-grid div{background:rgba(var(--teal-rgb),0.08); border-top:3px solid var(--teal); border-radius:12px; padding:0.9rem 1.1rem;}
.policy-grid strong{display:block; color:var(--ink); font-size:1.1rem; margin-bottom:0.2rem;}
.policy-grid span{font-size:1.02rem; line-height:1.5; color:var(--slate);}
.policy-contact{background:rgba(var(--teal-rgb),0.1); border-radius:16px; padding:1.2rem 1.4rem; margin-top:1rem;}
.policy-contact p{margin:0 0 0.4rem;}
.policy-contact p:last-child{margin:0;}
@media(max-width:700px){
  .policy-grid{grid-template-columns:1fr;}
  .policy-main{padding:3rem 0 3rem;}
}
/* Footer blurb under the logo */
.footer-blurb{margin:0.8rem 0 0; max-width:75ch; font-size:0.95rem; line-height:1.65; color:rgba(246,245,241,0.72);}
/* Footer: align link columns with first line of the blurb; hide Instagram/Facebook for now
   (delete the two rules below to bring them back) */
@media(min-width:721px){
  .footer-grid > div:nth-child(n+2){padding-top:2.8rem;}
}
.footer-social a[aria-label="Instagram"],.footer-social a[aria-label="Facebook"],
.menu-social a[aria-label="Instagram"],.menu-social a[aria-label="Facebook"]{display:none;}
/* ---- Services "What We Deliver": photo-top cards (IBM-style) ---- */
/* ---- Services "What We Deliver": tabbed layout ---- */
.svc-tabs{display:flex; flex-wrap:wrap; margin-top:2rem; border:1px solid #d0d0d0; border-radius:4px; background:#f4f4f4; width:fit-content; max-width:100%; overflow:hidden;}
.svc-tab{appearance:none; border:0; border-right:1px solid #d0d0d0; background:#f4f4f4; color:var(--ink); font:inherit; font-size:1.05rem; padding:1.05rem 1.5rem; cursor:pointer; position:relative; transition:background .2s ease;}
.svc-tab:last-child{border-right:0;}
.svc-tab:hover{background:#e8e8e8;}
.svc-tab:focus-visible{outline:2px solid var(--teal); outline-offset:-2px;}
.svc-tab[aria-selected="true"]{background:#fff;}
.svc-tab[aria-selected="true"]::after{content:""; position:absolute; left:0; right:0; bottom:0; height:3px; background:var(--olanji);}
.svc-panel{margin-top:1.5rem; display:grid; grid-template-columns:minmax(0,5fr) minmax(0,7fr); gap:1.8rem; align-items:stretch;}
.svc-panel[hidden]{display:none;}
.svc-panel.active{animation:svcIn .35s ease;}
@keyframes svcIn{
  from{opacity:0; transform:translateY(10px);}
  to{opacity:1; transform:none;}
}
.svc-media{border-radius:10px; overflow:hidden; background:rgba(var(--teal-rgb),0.12); min-height:320px; border:1px solid #e0e0e0;}
.svc-media img{width:100%; height:100%; object-fit:cover; display:block;}
.svc-info{background:#f4f4f4; border:1px solid #e0e0e0; border-radius:10px; padding:2rem 2rem 1.8rem; display:flex; flex-direction:column;}
.svc-tag{font-weight:700; color:var(--teal-dark); font-size:0.95rem; letter-spacing:.02em; margin-bottom:0.4rem;}
.svc-info h3{font-size:1.7rem; margin:0 0 0.8rem; color:var(--ink);}
.svc-info p.svc-lead{margin:0 0 1.4rem; color:#393939; font-size:1.08rem !important; line-height:1.6;}
.svc-cards{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:0.9rem; margin-bottom:0.9rem;}
.svc-cards-three{grid-template-columns:repeat(3,minmax(0,1fr));}
.svc-card{background:#fff; border:1px solid #e0e0e0; border-left:4px solid var(--teal); border-radius:8px; padding:0.95rem 1.1rem; display:flex; flex-direction:column; gap:0.2rem; position:relative;}
.svc-card strong{font-size:1.02rem; color:var(--ink);}
.svc-card span{font-size:0.95rem; color:#555658; line-height:1.45;}
.svc-cards-steps .svc-card{padding-left:3.4rem;}
.svc-cards-steps .svc-card:last-child{grid-column:span 2;}
.svc-card > b{font-weight:700;}
.svc-cards-steps .svc-card > b{position:absolute; left:0.9rem; top:0.85rem; width:1.7rem; height:1.7rem; border-radius:50%; background:var(--teal); color:#fff; display:flex; align-items:center; justify-content:center; font-size:0.9rem;}
.svc-badge{align-items:flex-start;}
.svc-badge > b{font-size:1.35rem; color:var(--teal-dark);}
.svc-card em{font-style:normal; font-weight:700; font-size:0.8rem; text-transform:uppercase; letter-spacing:.08em; color:var(--slate);}
.svc-note{margin:0.3rem 0 1.2rem; padding:0.9rem 1.1rem; background:rgba(var(--teal-rgb),0.10); border-radius:8px; color:#2b2b2b; font-size:0.98rem !important; line-height:1.55;}
.svc-actions{margin-top:auto; padding-top:1rem; display:flex; flex-wrap:wrap; gap:0.8rem;}
@media(max-width:980px){
  .svc-panel{grid-template-columns:1fr;}
  .svc-media{min-height:220px; max-height:300px;}
  .svc-tabs{width:100%;}
  .svc-tab{flex:1 1 auto; padding:0.9rem 1rem; font-size:0.95rem;}
}
@media(max-width:620px){
  .svc-cards,.svc-cards-three{grid-template-columns:1fr;}
  .svc-cards-steps .svc-card:last-child{grid-column:auto;}
  .svc-info{padding:1.4rem 1.2rem;}
  .svc-tab{flex:1 1 100%; border-right:0; border-bottom:1px solid #d0d0d0;}
}
.svc-info p.svc-note{max-width:none; width:100%;}
/* Services "Platforms in Depth": content beside the photo */
.depth-info h2{margin-bottom:1rem;}
.depth-info > p{margin:0;}
.depth-info .learn-h{margin-top:1.4rem;}
.depth-info > h2 + .learn-h{margin-top:0;}
.depth-info .learn-why{margin:1.6rem 0 0;}
.depth-info .learn-why p{margin:0 0 0.6rem; font-size:1.1rem; line-height:1.55;}
.depth-info .learn-why p:last-child{margin-bottom:0;}
.depth-info p.depth-lead{margin:0 0 1.4rem;}
.depth-info .learn-cards strong{display:block; font-size:1.08rem; margin-bottom:0.2rem; color:var(--ink);}
.depth-info .learn-cards span{font-size:0.98rem;}
.depth-info .depth-cta{margin-top:1.6rem;}
/* LinkedIn icon in the top nav, after "Get in touch" */
.nav-social{width:40px; height:40px; margin-left:0.7rem; border-radius:50%; background:var(--white); color:var(--navy-2); display:inline-flex; align-items:center; justify-content:center; flex:0 0 auto; transition:background .2s ease, color .2s ease, transform .2s ease;}
.nav-social:hover{background:var(--teal-dark); color:#fff; transform:translateY(-1px);}
.nav-social:focus-visible{outline:2px solid var(--teal); outline-offset:2px;}
@media(max-width:560px){
  .nav-social{display:none;}
}
/* Cookie notice */
.cookie-notice{position:fixed; left:1.2rem; bottom:1.2rem; z-index:400; max-width:560px; display:flex; align-items:center; gap:1.1rem; background:#0f1a24; color:rgba(246,245,241,0.9); padding:1.05rem 1.3rem; border-radius:14px; box-shadow:0 12px 34px rgba(2,5,9,0.35); border-top:3px solid var(--teal); opacity:0; transform:translateY(14px); transition:opacity .3s ease, transform .3s ease;}
.cookie-notice.show{opacity:1; transform:none;}
.cookie-notice p{margin:0; font-size:0.92rem !important; line-height:1.5; color:rgba(246,245,241,0.9);}
.cookie-notice a{color:#fff; text-decoration:underline;}
.cookie-notice a:hover{color:var(--teal);}
.cookie-accept{flex:0 0 auto; appearance:none; border:0; cursor:pointer; background:var(--teal); color:#fff; font:inherit; font-weight:700; font-size:0.92rem; padding:0.65rem 1.4rem; border-radius:999px; transition:background .2s ease;}
.cookie-accept:hover{background:var(--teal-dark);}
.cookie-accept:focus-visible{outline:2px solid #fff; outline-offset:2px;}
@media(max-width:560px){
  .cookie-notice{left:0.7rem; right:0.7rem; bottom:0.7rem; flex-direction:column; align-items:stretch; text-align:left;}
  .cookie-accept{width:100%;}
}
/* ---- Card hover motion (consistent across the site) ---- */
.svc-card, .learn-cards > div, .practice-tile, .testimonial, .service-item{transition:transform .25s ease, box-shadow .25s ease, border-color .25s ease, background-color .25s ease;}
.svc-card:hover, .learn-cards > div:hover, .practice-tile:hover, .testimonial:hover{transform:translateY(-5px); box-shadow:0 14px 30px rgba(2,5,9,0.16);}
.svc-card:hover{border-color:var(--teal); border-left-color:var(--olanji);}
.learn-cards > div:hover{border-top-color:var(--olanji);}
.service-item:hover{transform:translateX(8px);}
/* small badges / numbers inside cards react too */
.svc-cards-steps .svc-card > b,.learn-cards b,.practice-num,.svc-badge > b{transition:transform .3s cubic-bezier(.3,1.6,.5,1), background-color .25s ease;}
.svc-card:hover > b,.learn-cards > div:hover b,.practice-tile:hover .practice-num{transform:scale(1.18) rotate(-6deg);}
.svc-cards-steps .svc-card:hover > b,.learn-cards > div:hover b{background:var(--olanji);}
.svc-card:hover > b{display:inline-block;}
@media(hover:none){
  .svc-card:hover, .learn-cards > div:hover, .practice-tile:hover, .testimonial:hover{transform:none;}
  .service-item:hover{transform:none;}
}
@media(prefers-reduced-motion:reduce){
  .svc-card, .learn-cards > div, .practice-tile, .testimonial, .service-item, .svc-card > b, .learn-cards b, .practice-num{transition:none !important;}
  .svc-card:hover, .learn-cards > div:hover, .practice-tile:hover, .testimonial:hover, .service-item:hover{transform:none !important;}
}
/* Contact banner: let the paragraph run as wide as the heading so the slide stays short */
.mini-slide p, .page-header .mini-slide p{max-width:none !important;}
/* Home intro: text on the left, video on the right (side by side) */
.intro-split{display:grid;}
.intro-split .intro-video{margin-top:0;}
@media(max-width:900px){
  .intro-split{grid-template-columns:1fr;}
}
/* Sub-headings (eyebrows): first letter of every word capitalised */
.eyebrow,.slide .eyebrow.slide-title{text-transform:capitalize;}
/* Left side menu list: all caps */
.menu-links li a{text-transform:uppercase; letter-spacing:0.06em;}
/* Section headings site-wide (h1/h2): first letter of every word capitalised */
h1,h2{text-transform:capitalize;}
/* Home intro paragraph (next to the video): a little larger */
.intro-split .intro-stack p, .intro-stack.intro-split p, .intro-split > div:first-child p{font-size:clamp(1.25rem,1.75vw,1.5rem) !important; line-height:1.6 !important;}
/* Home hero slides: paragraph text 24px */
.slide p, .slide p.slide-lead-p{font-size:24px !important; line-height:1.55 !important;}
@media(max-width:720px){
  .slide p, .slide p.slide-lead-p{font-size:18px !important;}
}
/* Banner slides on every page: paragraph text 24px */
.mini-slide p, .page-header .mini-slide p{font-size:24px !important; line-height:1.55 !important;}
/* About, Why ODS and Our Values: all page paragraphs 24px (footer, pop-ups and the cookie notice keep their own size) */
body.big-text p:not(footer *):not(.modal-pane *):not(.cookie-notice *):not(.captcha-card *):not(.menu-panel *){font-size:24px !important; line-height:1.55 !important;}
@media(max-width:720px){
  .mini-slide p, .page-header .mini-slide p, body.big-text p:not(footer *):not(.modal-pane *):not(.cookie-notice *):not(.captcha-card *):not(.menu-panel *){font-size:18px !important;}
}
/* Home hero slides: a slightly darker teal background (lower the hex values for darker still) */
.hero-slider{background:var(--teal);}
/* Same darker teal over any photo/video behind the hero text */
.slide-photo-overlay{background:linear-gradient(135deg, rgba(var(--teal-rgb),0.82), rgba(var(--teal-rgb),0.58));}
/* Hero slide 1: logo top-left, tagline bottom-right */
.slide.active[data-index="0"]{padding:0;}
.slide-brand{position:absolute; inset:0; padding:2.2rem clamp(1.5rem,4vw,4rem) 4.2rem;}
.slide-brand-logo{position:absolute; top:2.2rem; width:clamp(190px,24vw,340px); height:auto;}
.slide .slide-brand-tag{position:absolute; right:clamp(1.5rem,4vw,4rem); bottom:4.2rem; margin:0; max-width:90%; text-align:right; color:#fff; text-transform:uppercase; letter-spacing:.14em; font-weight:500; font-size:clamp(1.1rem,2.2vw,2rem) !important; line-height:1.3;}
@media(max-width:860px){
  .slide-brand-logo{top:1.6rem;}
  .slide-brand{padding-bottom:3.6rem;}
  .slide .slide-brand-tag{bottom:3.6rem;}
}
/* Intro: video stacked under the Humanising Performance Management text, larger */
.intro-split{grid-template-columns:1fr !important; gap:2.2rem; align-items:start;}
.intro-split .intro-video{width:100%; max-width:960px;}
.intro-split .intro-video video{width:100%; height:auto; display:block;}
.intro-split .intro-video{margin:0 auto !important; justify-self:center;}
.intro-split > div:first-child p, .intro-split > div:first-child h2{max-width:min(100%,1280px) !important;}
/* Slide 1 only: clear photo (no teal wash); other slides keep the colour overlay */
.slide-photo-overlay{transition:opacity .8s ease;}
.slide-brand-tag{text-shadow:0 1px 10px rgba(0,0,0,.55);}
@media(min-width:861px){
  .slide .slide-brand-tag{bottom:1.4rem;}
}
/* Hero slides 2-4: content nudged to the right */
@media(min-width:861px){
  .slide:not([data-index="0"]) .slide-content{padding-left:clamp(3rem,7vw,7rem);}
}
/* Hero slides 2-4: content block pushed right, its right edge at ~94% of the slide */
@media(min-width:1100px){
  .slide:not([data-index="0"]) .slide-content{max-width:none; width:100%; box-sizing:border-box; padding-left:max(7rem, calc(94% - 820px)); padding-right:6%;}
  .slide:not([data-index="0"]) .slide-content > *{max-width:820px;}
}
/* Logo on hero slides 2-4, sized to sit on the chair (wide screens only) */
.slide-side-logo{display:none;}
@media(min-width:1100px){
  .slide-side-logo{display:block; position:absolute; left:20.8%; top:60%; width:17.5%; max-width:360px; height:auto; z-index:3; pointer-events:none;}
}
/* ===== Services: "What We Deliver" as alternating feature rows (no tabs) ===== */
.cap-rows{display:flex; flex-direction:column; margin-top:2.4rem;}
.cap-row{position:relative; display:grid; grid-template-columns:minmax(0,5fr) minmax(0,7fr); gap:0; align-items:stretch; border-radius:14px; overflow:visible;}
.cap-row-flip{grid-template-columns:minmax(0,7fr) minmax(0,5fr);}
.cap-row-flip .svc-media{order:2;}
.cap-row .svc-media{min-height:340px; border-radius:14px; box-shadow:0 18px 40px rgba(1,60,60,.18);}
.cap-row .svc-info{margin:2.2rem 0 2.2rem -3.2rem; position:relative; z-index:2; box-shadow:0 20px 45px rgba(1,60,60,.14); border-radius:14px;}
.cap-row-flip .svc-info{margin:2.2rem -3.2rem 2.2rem 0;}
.cap-row::before{content:attr(data-num); position:absolute; left:1rem; z-index:3; font-size:clamp(3.2rem,6vw,5rem); font-weight:800; line-height:1; color:transparent; -webkit-text-stroke:2px var(--teal); opacity:.85; pointer-events:none;}
.cap-row-flip::before{left:auto; right:1rem;}
.cap-row .svc-tag{display:inline-block; background:var(--teal); color:#fff; padding:.2rem .7rem; border-radius:999px; font-size:.78rem; letter-spacing:.06em; text-transform:uppercase;}
@media(max-width:980px){
  .cap-row,.cap-row-flip{grid-template-columns:1fr;}
  .cap-row-flip .svc-media{order:0;}
  .cap-row .svc-media{min-height:220px; max-height:300px;}
  .cap-row .svc-info,.cap-row-flip .svc-info{margin:-2rem 0.8rem 0;}
  .cap-row::before,.cap-row-flip::before{top:-1.4rem; left:1rem; right:auto;}
}
.cap-row .svc-tag{width:fit-content; align-self:flex-start;}
.cap-row::before{top:-3rem;}
.cap-rows{gap:clamp(3.6rem,7vw,5.2rem);}
@media(max-width:980px){
  .cap-row::before,.cap-row-flip::before{top:-3rem;}
}
.process-step[data-href]{cursor:pointer;}
.process-step[data-href]:focus-visible{outline:3px solid var(--olanji); outline-offset:3px;}
/* Services: collapsible "How We Work" */
.hw-toggle-wrap{display:flex; justify-content:center; padding:.5rem 0;}
.hw-toggle{display:inline-flex; align-items:center; gap:.6rem; background:#fff; color:var(--teal-dark); border:2px solid var(--teal); border-radius:999px; padding:.85rem 1.7rem; font:inherit; font-weight:600; font-size:1rem; cursor:pointer; transition:background-color .25s ease, color .25s ease, transform .25s ease;}
.hw-toggle:hover{background:var(--teal); color:#fff; transform:translateY(-2px);}
.hw-toggle:focus-visible{outline:3px solid var(--olanji); outline-offset:3px;}
.hw-body{margin-top:2rem;}
.hw-body[hidden]{display:none;}
/* Three cascading chevrons inside the toggle button */
.hw-chevs{display:inline-flex; flex-direction:column; align-items:center; gap:0; line-height:0; margin-left:.1rem; transition:transform .35s ease;}
.hw-chevs svg{display:block; margin-top:-5px; opacity:.25; animation:hwCascade 1.5s ease-in-out infinite;}
.hw-chevs svg:first-child{margin-top:0;}
.hw-chevs svg:nth-child(2){animation-delay:.18s;}
.hw-chevs svg:nth-child(3){animation-delay:.36s;}
@keyframes hwCascade{
  0%,100%{opacity:.25; transform:translateY(-2px);}
  45%{opacity:1; transform:translateY(2px);}
}
.hw-toggle:hover .hw-chevs svg{animation-duration:.9s;}
.hw-toggle.open .hw-chevs{transform:rotate(180deg);}
.hw-toggle.open .hw-chevs svg{animation-name:hwCascadeUp;}
@keyframes hwCascadeUp{
  0%,100%{opacity:.25; transform:translateY(2px);}
  45%{opacity:1; transform:translateY(-2px);}
}
.hw-toggle svg{transition:none;}
.hw-toggle.open svg{transform:none;}
.hw-body:not([hidden]){animation:hwReveal .5s ease both;}
@keyframes hwReveal{
  from{opacity:0; transform:translateY(-14px);}
  to{opacity:1; transform:none;}
}
@media(prefers-reduced-motion:reduce){
  .hw-chevs svg,.hw-body:not([hidden]){animation:none; opacity:1;}
}
/* Solutions: benefits card under the photo */
.depth-benefits{margin-top:1.6rem; background:#e6f5f5; border-radius:16px; padding:1.6rem 1.8rem 1.2rem; box-shadow:0 10px 26px rgba(1,60,60,.08);}
.depth-benefits .learn-h{margin-top:0; margin-bottom:.8rem;}
.depth-benefits .learn-ticks li{font-size:1.05rem;}
/* Solutions: centred "What We Offer" title at the top of the solutions */
/* Solutions tabs: no pictures, transparent tab buttons, heading nudged up */
.sol-tabs-section{padding-top:1.2rem;}
.sol-tabs-section .svc-tabs{margin-top:0; background:transparent; border-color:rgba(1,130,131,.35);}
.sol-tabs-section .svc-tab{background:transparent; border-right-color:rgba(1,130,131,.35);}
.sol-tabs-section .svc-tab:hover{background:rgba(1,164,163,.12);}
.sol-tabs-section .svc-tab[aria-selected="true"]{background:transparent; color:var(--teal-dark); font-weight:600;}
.sol-tabs-section .svc-panel{grid-template-columns:1fr;}
/* Top nav: all caps */
.nav-links a,.nav-dropdown-trigger,.nav-dropdown-menu a,.nav-cta{text-transform:uppercase; letter-spacing:.05em;}
@media(min-width:861px){
  .slide .slide-brand-tag{bottom:3.4rem;}
}
.slide-brand-logo{left:auto; right:clamp(1.5rem,4vw,4rem);}
/* Our Values hero: long mission heading, smaller so the banner stays compact */
.mini-slide h1.mission-h1{font-size:clamp(1.5rem,2.8vw,2.3rem) !important; line-height:1.25; max-width:1100px;}
h2.mission-h2{font-size:clamp(1.4rem,2.4vw,2rem) !important; line-height:1.3; max-width:1000px;}
/* Top nav: 2px smaller */
.nav-links a,.nav-dropdown-trigger,.nav-dropdown-menu a{font-size:13.2px;}
.nav-cta{font-size:12.7px;}
/* Stop the "bounce" overscroll at the very top/bottom of a page, which was
   revealing the fixed background photo outside the header and footer. */
html,body{overscroll-behavior:none;}
/* About: "Who we are" restructure */
.who-top{display:grid; grid-template-columns:minmax(0,1.15fr) minmax(0,0.85fr); gap:clamp(1.8rem,4vw,3.5rem); align-items:center; margin-top:.6rem;}
.who-lead{font-size:clamp(1.35rem,2vw,1.8rem) !important; line-height:1.55 !important; color:var(--ink); font-weight:500; margin:0; border-left:5px solid var(--olanji); padding-left:1.4rem; max-width:none !important;}
.who-photo{margin:0 !important;}
.who-photo img{display:block; width:100%; height:auto; border-radius:18px; box-shadow:0 18px 40px rgba(1,60,60,.18);}
.who-cards{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:1.4rem; margin-top:2.4rem;}
.who-card{background:#fff; border-radius:16px; padding:1.6rem 1.6rem 1.4rem; border-top:4px solid var(--teal); box-shadow:0 10px 26px rgba(1,60,60,.09); transition:transform .3s ease, box-shadow .3s ease;}
.who-card:hover{transform:translateY(-6px); box-shadow:0 18px 36px rgba(1,60,60,.16);}
.who-num{display:block; font-size:clamp(2.6rem,4vw,3.6rem); font-weight:800; line-height:1; color:var(--teal); margin-bottom:.4rem;}
.who-card h3{margin:0 0 .5rem; font-size:1.25rem;}
.who-card p{margin:0; font-size:1.05rem !important; line-height:1.6 !important; color:var(--slate); max-width:none !important;}
@media(max-width:900px){
  .who-top{grid-template-columns:1fr;}
  .who-cards{grid-template-columns:1fr;}
}
body.big-text p.who-p:not(footer *):not(.modal-pane *):not(.cookie-notice *):not(.captcha-card *):not(.menu-panel *){font-size:1.1rem !important; line-height:1.6 !important;}
/* About: Managing Director quote band under the intro */
.who-quote{margin:2.4rem 0 0; border-radius:16px; padding:2rem clamp(1.4rem,4vw,3.5rem); text-align:right; position:relative;}
.who-quote::before{content:"\201C"; position:absolute; left:1.4rem; top:-.2rem; font-size:6rem; line-height:1; font-family:Georgia,serif;}
.who-quote blockquote{margin:0; font-size:clamp(1.25rem,2.2vw,1.9rem); font-weight:600; line-height:1.4;}
.who-quote figcaption{margin-top:.8rem; font-size:.95rem; letter-spacing:.02em;}
@media(max-width:700px){
  .who-quote{text-align:left;}
}
.who-quote{margin-top:2.2rem;}
.who-quote{background:transparent !important; box-shadow:none !important; color:var(--ink);}
.who-quote::before{color:rgba(1,164,163,.35);}
.who-quote blockquote{color:var(--teal-dark) !important;}
.who-quote figcaption{color:var(--slate) !important;}
/* About: follow-on statement under lead */
body.big-text p.who-follow{font-size:clamp(1.05rem,1.5vw,1.35rem) !important; line-height:1.6 !important; color:var(--slate); font-weight:400; margin:1.4rem 0 0 !important; max-width:none !important;}
body.big-text p.who-follow{border-left:0 !important; padding-left:0 !important; border-right:5px solid var(--teal); padding-right:1.4rem; text-align:right;}
/* Why ODS: X-Factor as tabs */
.xf-wrap .xf-tabs{display:flex; width:100%; margin:0; border:0; border-radius:0; background:rgba(20,22,26,.78); overflow:hidden;}
.xf-wrap .xf-tabs .svc-tab{flex:1 1 0; background:transparent; border-right:1px solid rgba(255,255,255,.18); text-align:center; padding:1.15rem .8rem;}
.xf-wrap .xf-tabs .svc-tab[aria-selected="true"]{background:rgba(1,164,163,.85);}
.xf-wrap .xf-tabs .svc-tab[aria-selected="true"]::after{background:var(--olanji);}
.xf-panels{position:relative;}
.xf-wrap .xf-panel{display:block; margin:0; padding:2.4rem clamp(1.6rem,5vw,4rem) 2.6rem; text-align:left; color:#fff;}
.xf-wrap .xf-panel[hidden]{display:none;}
.xf-wrap .xf-panel.xf-teal{background:rgba(1,164,163,.80);}
.xf-wrap .xf-panel.xf-dark{background:rgba(43,38,38,.82);}
.xf-wrap .xf-panel.xf-orange{background:rgba(255,176,59,.88);}
.xf-panel .xf-num{display:block; font-weight:700; opacity:.35; line-height:1; margin-bottom:.6rem;}
.xf-panel h3{color:inherit; margin:0 0 .6rem; font-size:clamp(1.5rem,2.2vw,1.9rem);}
.xf-panel p{color:inherit; max-width:46rem; font-size:1.2rem; line-height:1.6;}
@media(max-width:760px){
  .xf-wrap .xf-tabs{flex-direction:column;}
  .xf-wrap .xf-tabs .svc-tab{border-right:0; border-bottom:1px solid rgba(255,255,255,.18);}
}
/* Why ODS: X-Factor now full width (note card moved to About) */
.xf-layout{grid-template-columns:1fr !important;}
/* About: story + note side by side */
.story-split{display:grid; gap:clamp(1.6rem,4vw,3.5rem); align-items:start;}
.story-split .readable{max-width:none;}
@media(max-width:1000px){
  .story-split{grid-template-columns:1fr;}
}
/* About story: card aligned with heading, transparent */
.story-split{grid-template-columns:minmax(0,1.1fr) minmax(280px,420px); grid-template-areas:"eyebrow note" "title note" "body note"; grid-template-rows:auto auto 1fr; column-gap:clamp(1.6rem,4vw,3.5rem); row-gap:0;}
.story-split .story-eyebrow{grid-area:eyebrow;}
.story-split .story-h2{grid-area:title;}
.story-split .readable{grid-area:body;}
.story-split .xf-note{grid-area:note; align-self:start; background:transparent !important; box-shadow:none !important;}
@media(max-width:1000px){
  .story-split{grid-template-columns:1fr; grid-template-areas:"eyebrow" "title" "body" "note";}
  .story-split .xf-note{margin-top:1.5rem;}
}
.story-split .xf-note{margin-top:3.1rem;}
@media(max-width:1000px){
  .story-split .xf-note{margin-top:1.5rem;}
}
/* X-Factor tabs: transparent backgrounds */
.xf-wrap .xf-tabs, .xf-wrap .xf-tabs .svc-tab, .xf-wrap .xf-tabs .svc-tab[aria-selected="true"],
.xf-wrap .xf-panel, .xf-wrap .xf-panel.xf-teal, .xf-wrap .xf-panel.xf-dark, .xf-wrap .xf-panel.xf-orange{background:transparent !important;}
.xf-wrap .xf-tabs .svc-tab[aria-selected="true"]{box-shadow:inset 0 -3px 0 var(--olanji);}
.xf-wrap .xf-panel.xf-orange{color:#fff;}
.xf-wrap .xf-tabs .svc-tab{font-weight:600;}
/* X-Factor tabs: no background photo, dark text on page background */
.xf-wrap{background:transparent !important; box-shadow:none !important; border-radius:0; overflow:visible;}
.xf-wrap .xf-tabs, .xf-wrap .xf-panel{text-shadow:none !important; color:var(--ink) !important;}
.xf-wrap .xf-tabs{border-bottom:1px solid rgba(1,130,131,.35);}
.xf-wrap .xf-tabs .svc-tab{color:var(--ink) !important; border-right-color:rgba(1,130,131,.3);}
.xf-wrap .xf-tabs .svc-tab:hover{background:rgba(1,164,163,.12) !important;}
.xf-wrap .xf-tabs .svc-tab[aria-selected="true"]{color:var(--teal-dark) !important; font-weight:700;}
.xf-wrap .xf-panel.xf-teal, .xf-wrap .xf-panel.xf-dark, .xf-wrap .xf-panel.xf-orange{color:var(--ink) !important;}
.xf-wrap .xf-panel{min-height:0; padding-left:.4rem; padding-right:.4rem;}
.xf-wrap .xf-panel h3{color:var(--teal-dark) !important;}
.xf-wrap .xf-panel .xf-sub{color:var(--slate) !important;}
.xf-wrap .xf-panel .xf-num{color:var(--teal); opacity:.5;}
/* X-Factor tabs: text one size up */
.xf-wrap .xf-tabs .svc-tab{font-size:calc(1.05rem + 2px);}
.xf-wrap .xf-panel h3{font-size:calc(clamp(1.5rem,2.2vw,1.9rem) + 2px);}
.xf-wrap .xf-panel .xf-sub{font-size:calc(1.2rem + 2px);}
.xf-wrap .xf-panel p{font-size:calc(1.2rem + 2px);}
.xf-panel .xf-num{font-size:calc(2.6rem + 2px);}
/* About: Why we exist, broken into three beats */
body.big-text .story-split .readable p.st-lead{font-size:clamp(1.35rem,2vw,1.75rem) !important; line-height:1.45 !important; color:var(--ink) !important; font-weight:500; margin:0 0 1.4rem !important;}
body.big-text .story-split .readable p.st-lead strong{color:var(--teal-dark);}
body.big-text .story-split .readable p.st-observe{font-size:clamp(1.1rem,1.5vw,1.3rem) !important; line-height:1.6 !important; color:var(--slate) !important; margin:0 0 1.4rem !important; padding-left:1.2rem; border-left:4px solid var(--olanji);}
body.big-text .story-split .readable p.st-gap{font-size:clamp(1.1rem,1.5vw,1.3rem) !important; line-height:1.6 !important; color:var(--ink) !important; margin:0 0 1.4rem !important; padding-left:1.2rem; border-left:4px solid var(--teal);}
body.big-text .story-split .readable p.st-gap strong{color:var(--teal-dark);}
/* About ODS: opening line */
body.big-text p.who-first{font-size:clamp(1.05rem,1.5vw,1.3rem) !important; line-height:1.5 !important; color:var(--slate) !important; margin:0 0 1.2rem !important; max-width:none !important;}
body.big-text p.who-first strong{color:var(--teal-dark);}
/* About story: bars on the right for the last two blocks */
body.big-text .story-split .readable p.st-gap,
.story-split .readable .callout{border-left:0 !important; padding-left:0 !important; border-right:4px solid var(--teal); padding-right:1.2rem; text-align:right;}
/* Our principle: no bar, back on the left */
.story-split .readable .callout{border:0 !important; padding:.3rem 0 !important; text-align:left !important;}
/* Why ODS: wider testimonial text */
.testimonial p{max-width:85%;}
@media(max-width:900px){
  .testimonial p{max-width:none;}
}
/* Clickable client logos + testimonial panes */
button.logo-btn{font:inherit; cursor:pointer; appearance:none; -webkit-appearance:none;}
button.logo-btn:focus-visible{outline:3px solid var(--teal); outline-offset:3px;}
button.logo-btn:hover{border-color:var(--teal); box-shadow:0 10px 26px rgba(1,130,131,.18);}
.modal-client .modal-body{max-width:760px;}
.client-pane-logo{display:block; max-height:54px; width:auto; max-width:220px; margin:0 0 1.2rem;}
.client-quote{margin:1rem 0 1.2rem; padding:0 0 0 1.3rem; border-left:4px solid var(--teal); font-size:1.25rem; line-height:1.6; font-style:italic; color:var(--ink);}
.client-cite{margin:0; font-size:.95rem; color:var(--slate);}
/* Services: 3D Consulting as tabs (same look as the X-Factor tabs) */
.d3-tabs{display:flex; width:100%; margin:1rem 0 0; border:0; border-bottom:1px solid rgba(1,130,131,.35); border-radius:0; background:transparent; overflow:hidden;}
.d3-tabs .svc-tab{flex:1 1 0; background:transparent; text-align:center; font-weight:600; font-size:1.1rem; color:var(--ink); padding:1.05rem .6rem; border-right:1px solid rgba(1,130,131,.3);}
.d3-tabs .svc-tab:hover{background:rgba(1,164,163,.12);}
.d3-tabs .svc-tab[aria-selected="true"]{background:rgba(1,164,163,.14); color:var(--teal-dark); font-weight:700;}
.d3-tabs .svc-tab[aria-selected="true"]::after{background:var(--olanji);}
.d3-n{opacity:.5; margin-right:.25rem; font-weight:700;}
.d3-panel{display:block; margin:0; padding:1.4rem .4rem .4rem;}
.d3-panel[hidden]{display:none;}
.d3-panel h4{margin:0 0 .6rem; font-size:1.4rem; color:var(--teal-dark);}
.d3-panel p{margin:0; font-size:1.12rem; line-height:1.65; color:var(--ink); max-width:none;}
.svc-info .d3-tabs + .d3-panel, .d3-panel + .svc-actions{margin-top:0;}
.cap-row .svc-info .svc-actions{margin-top:1.4rem;}
@media(max-width:600px){
  .d3-tabs{flex-direction:column;}
  .d3-tabs .svc-tab{border-right:0; border-bottom:1px solid rgba(1,130,131,.3);}
}
/* anchored solution sections sit below the fixed header */
#planning-analytics,#power-bi,#data-automation{scroll-margin-top:100px;}
.nav-dropdown-menu{width:max-content; min-width:0;} .nav-dropdown-menu a{white-space:nowrap;}
.mini-slide h1.sol-h1,.mini-slide h1.why-h1{font-size:clamp(2.1rem,4.4vw,3.9rem);}

/* ---------- Mail pop-in (home page): mail icon first, then the message opens ---------- */
.mail-pop{position:fixed; right:1.2rem; bottom:1.4rem; z-index:350; display:flex; align-items:flex-start; gap:.7rem; --mp-w:min(330px, calc(100vw - 6.4rem)); transform:translateX(140%); opacity:0; transition:transform .55s cubic-bezier(.2,.8,.2,1), opacity .45s ease; pointer-events:none;}
.mail-pop.show{transform:none; opacity:1; pointer-events:auto;}
.mail-pop-icon{order:2; position:relative; flex:0 0 auto; width:54px; height:54px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:var(--teal-dark); background:rgba(255,255,255,0.45); -webkit-backdrop-filter:blur(14px); backdrop-filter:blur(14px); border:1px solid rgba(255,255,255,0.7); box-shadow:0 8px 26px rgba(15,26,36,0.16);}
.mail-pop-dot{position:absolute; top:11px; right:11px; width:9px; height:9px; border-radius:50%; background:var(--olanji); box-shadow:0 0 0 2px rgba(255,255,255,0.8);}
.mail-pop:not(.open) .mail-pop-icon{animation:mailPing 1.1s ease .5s 1;}
.mail-pop.open .mail-pop-dot{display:none;}
@keyframes mailPing{0%,100%{transform:scale(1);}40%{transform:scale(1.14);}}
.mail-pop-body{order:1; width:0; opacity:0; overflow:hidden; border-radius:16px; background:rgba(255,255,255,0.55); -webkit-backdrop-filter:blur(16px); backdrop-filter:blur(16px); border:1px solid rgba(255,255,255,0.7); box-shadow:0 10px 30px rgba(15,26,36,0.16); transition:width .6s cubic-bezier(.2,.8,.2,1), opacity .45s ease .1s;}
.mail-pop.open .mail-pop-body{width:var(--mp-w); opacity:1;}
.mail-pop-inner{position:relative; width:var(--mp-w); padding:1rem 2.4rem 1rem 1.15rem; box-sizing:border-box; transition:opacity .35s ease;}
.mail-pop-inner.swap{opacity:0;}
.mail-pop-label{display:block; margin-bottom:.45rem; color:var(--teal-dark); font-size:.78rem; font-weight:700; letter-spacing:.08em; text-transform:uppercase;}
.mail-pop-text{margin:0; color:var(--ink); font-size:.95rem !important; line-height:1.5; font-weight:500;}
.mail-pop-who{display:block; margin-top:.6rem; color:var(--slate); font-size:.82rem; font-style:normal; font-weight:600;}
.mail-pop-close{position:absolute; top:.45rem; right:.5rem; width:28px; height:28px; border:0; border-radius:50%; background:transparent; color:var(--ink); font-size:1.4rem; line-height:1; cursor:pointer;}
.mail-pop-close:hover{background:rgba(15,26,36,0.08);}
@media (prefers-reduced-motion:reduce){.mail-pop,.mail-pop-body{transition:opacity .2s ease;} .mail-pop{transform:none;} .mail-pop:not(.open) .mail-pop-icon{animation:none;}}
.mail-pop.left{right:auto; left:1.2rem; flex-direction:row-reverse; transform:translateX(-140%);}
.mail-pop.left.show{transform:none;}
@media (prefers-reduced-motion:reduce){.mail-pop.left{transform:none;}}
.cap-row[data-num="02"]::before{-webkit-text-stroke-color:var(--olanji);}