/*
  cramer-home-new.css (HOME PAGE - COMBINED)
  ---------------------------------------------------------------------------
  Combined styles for hero, clients, FAQs, slide rows, capabilities, stats sections
  
  QUICK EDIT GUIDE (search these labels)
  - HERO CONTAINER: .cramer-hero-new
  - HERO TEXT: .cramer-hero-new__text, .cramer-hero-word
  - MOUSE FOLLOW ARROW: .mouse-follow-scroll-arrow
  - CLIENTS SECTION: .cramer-clients-section, .cramer-clients-track
  - CLIENT CARDS: .cramer-client-card, .cramer-client-card__logo
  - CAPABILITIES: .cramer-capabilities-section
  - STATS GRID: .cramer-stats-section, .cramer-stats-rows, .cramer-stat-row
  ---------------------------------------------------------------------------
*/

/* ============================================================================
   BASE UTILITY CLASSES - Home Page Self-Contained Styles
   ============================================================================ */

/* Home page text styling for headings */

.cramer-home-text {
  font-family: "Montserrat", sans-serif;
  font-style: italic;
  font-weight: 900;
  letter-spacing: -0.01em;
  font-size: 2.8rem;
  line-height: 1;
  color: #ffffff;
}
body{
  background-color: #000;
}
/* Title block text alignment — desktop default is left.
 * data-title-align is set inline by PHP from the ACF 'Title Alignment (Desktop)' field.
 * data-title-align-mobile is applied at the mobile breakpoint. */
.cramer-stat-block--title .cramer-home-text,
.cramer-stat-block[data-title-align="left"] .cramer-home-text {
  text-align: left;
}
.cramer-stat-block[data-title-align="center"] .cramer-home-text {
  text-align: center;
}
.cramer-stat-block[data-title-align="right"] .cramer-home-text {
  text-align: right;
}
/* Home page accent color */
.cramer-home-accent {
  color: #ee710c;
  font-style: italic;
}

/* Home page button styling */
.cramer-home-btn {
  box-sizing: border-box;
  display: inline-block;
  background-color: #ee710c;
  color: #000;
  text-transform: uppercase;
  font-size: clamp(2.25rem, 3vw, 2.75rem);
  font-weight: 700;
  line-height: 1;
  padding: clamp(2.5rem, 4vw, 3.5rem) clamp(6rem, 10vw, 10rem);
  transform: skew(-13deg);
  overflow: hidden;
  position: relative;
  text-decoration: none;
  transition: all 0.2s ease;
  z-index: 1;
  
}

.cramer-home-btn:active,
.cramer-home-btn:visited {
  background: #ee710c;
  color: #000;
}

.cramer-home-btn:before {
  content: " ";
  position: absolute;
  display: block;
  left: 100%;
  right: 0;
  top: 0;
  bottom: 0;
  background-color: rgba(255, 255, 255, 0.7);
  transition: all 0.2s ease;
  z-index: -1;
}

.cramer-home-btn:hover,
.cramer-home-btn:focus {
  color: #000;
  text-decoration: none;
  transform: skew(-13deg) translateY(-2px);
}

.cramer-home-btn:hover:before,
.cramer-home-btn:focus:before {
  left: 0;
}

/* Slide rows buttons */
.cramer-slide-rows .cramer-home-btn {
  /* min raised to 1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size: clamp(1.6rem, 1.6vw, 2rem);
  padding: clamp(1rem, 1.6vw, 1.4rem) clamp(2.75rem, 4.5vw, 4rem);
  font-weight: 900;
}

.cramer-slide-rows .cramer-home-btn:hover,
.cramer-slide-rows .cramer-home-btn:focus {
  transform: skew(-13deg) translateY(-2px);
}

/* ============================================================================
   HERO SECTION
   ============================================================================ */

/*
  HERO CONTAINER
  - Full-viewport, full-bleed section that spans edge-to-edge
  - Uses 100vw and negative margins to escape centered page wrappers
*/
.cramer-hero-new{
  position:relative;
  width:100vw;
  height:100vh;
  min-height:100vh;
  overflow:hidden;
  background:#000;
  z-index:1;
  margin-left:calc(50% - 50vw);
  margin-right:calc(50% - 50vw);
}

/*
  Media layer
  - Holds background video/image and clips overflow
*/
.cramer-hero-new__media{
  position:absolute;
  inset:0;
  overflow:hidden;
  z-index:1;
  /* Removed background:#000 — it was compositing over the video and making it appear too dark.
     The video uses object-fit:cover so no black bleed-through is expected. */
  background:transparent;
}

/*
  Background media elements
  - Video/image cover the full container with object-fit
*/
.cramer-hero-new__video,
.cramer-hero-new__image{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
}

/*
  Embedded media (iframe/video)
  - Centered horizontally; object position favors top
*/
.cramer-hero-new__media iframe,
.cramer-hero-new__media video{
  position:absolute;
  top:0;
  left:50%;
  transform:translateX(-50%);
  border:0;
  display:block;
  max-width:none;
  max-height:none;
  object-fit:cover;
  object-position:top center;
  pointer-events:none;
}

/*
  Overlay layer
  - For UI elements above media (e.g., scroll arrow)
  - Pointer events disabled except for specific children
*/
.cramer-hero-new__overlay{
  position:absolute;
  inset:0;
  z-index:2;
  pointer-events:none;
}

.cramer-hero-new__overlay .scroll-arrow{
  pointer-events:auto;
}

/*
  Cutout mask
  - SVG mask that can reveal text over the hero media
*/
.cramer-cutout{
  position:absolute;
  top:0;
  left:0;
  width:100%;
  height:100%;
  z-index:3;
  opacity:0;
  pointer-events:none;
}

/*
  Cutout text styling
  - Large, uppercase, bold type sized to viewport height
*/
.cramer-cutout-text{
  font-family:inherit;
  font-weight:700;
  font-size:100vh;
  letter-spacing:.02em;
  text-transform:uppercase;
  opacity:0;
}

/*
  Cutout mask fill
  - Solid black rect used for SVG mask
*/
.cramer-cutout-rect{
  fill:rgba(0, 0, 0, 1);
}

/*
  Left panel
  - Foreground content container (logo, title, menu)
  - Uses CSS container for size-based adjustments
*/
.cramer-left-panel{
  position:absolute;
  left:0;
  top:0;
  height:100%;
  z-index:4;
  opacity:0;
  color:#000;
  background:rgba(0, 0, 0, 0.95);
  overflow:hidden;
  display:flex;
  align-items:flex-start;
  flex-direction:column;
  justify-content:top;
  padding:var(--cramer-left-panel-pad-y, 10%) var(--cramer-left-panel-pad-x, 10%);
  pointer-events:auto;
  container-type:size;
}

/*
  Logo wrapper
  - Centers SVG within left panel
*/
.cramer-left-panel__logo{
  padding:0 1vw 1.5rem;
  line-height:0;
  width:100%;
  text-align:center;
}

/*
  Logo SVG sizing
*/
.cramer-left-panel__logo svg{
  display:block;
  width:100%;
  max-width:100%;
  height:auto;
  margin:0 auto;
}

/*
  Logo draw styling
  - Outline-only stroke for animated paths
  - Visibility is toggled on in JS once lengths are set
*/
.cramer-hero-new__logo .cramer-logo-draw .cramer-logo-path{
  stroke:#ffffff;
  stroke-linecap:round;
  stroke-linejoin:round;
  visibility:hidden;
}

.cramer-hero-new__logo .cramer-logo-draw .cramer-logo-border{
  stroke-width:4;
}

.cramer-hero-new__logo .cramer-logo-draw .cramer-logo-border{
  fill:none !important;
}

.cramer-hero-new__logo .cramer-logo-draw .cramer-logo-letter{
  fill:transparent;
  stroke-width:1;
}

.cramer-hero-new__logo .cramer-logo-border-fill{
  display:none;
}

/*
  Hero title
  - Variable font sizing via CSS custom properties
*/
.cramer-left-panel h1{
  margin:0;
  padding:0;
  font-weight:900;
  font-style:italic;
  font-size:var(--cramer-left-title-font, 10rem);
  color:#ffffff;
}

/*
  Hero rotating word highlight
*/
.cramer-hero-new__text .cramer-hero-word{
  color:#ff7800;
  display:inline-block;
  will-change:filter, opacity, transform;
}

/*
  Title size modifiers
*/
.cramer-left-panel h1.hero-text-size-medium{
  --cramer-left-title-font: 7.5rem;
}

.cramer-left-panel h1.hero-text-size-small{
  --cramer-left-title-font: 5rem;
}

/*
  Left panel menu container
  - Right-aligned vertical list
*/
.cramer-left-panel__menu{
  margin:1.5rem 0 0;
  padding:0;
  width:100%;
  text-align:right;
  flex:1 1 auto;
  display:flex;
  min-height:0;
}

/*
  Menu list styles
*/
.cramer-left-panel__menu .menu{
  list-style:none;
  margin:0;
  padding:0;
  display:flex;
  flex-direction:column;
  gap:var(--cramer-left-menu-gap, .25em);
  align-items:flex-end;
  justify-content:flex-start;
  flex:1 1 auto;
  width:100%;
  font-size:var(--cramer-left-menu-font, 1.2rem);
  line-height:1.15;
  height:100%;
}

/*
  Menu items
*/
.cramer-left-panel__menu .menu > li{
  margin:0;
  font-weight:800;
  text-transform:uppercase;
  font-size:1em;
}

/*
  Menu links
  - Default: white text; hover/active: orange
*/
.cramer-left-panel__menu .menu > li > a{
  color:#ffffff;
  text-decoration:none;
  transition:color .2s ease-out;
  white-space:nowrap;
}

.cramer-left-panel__menu .menu > li > a:focus,
.cramer-left-panel__menu .menu > li > a:hover,
.cramer-left-panel__menu .menu > li.current-menu-item > a,
.cramer-left-panel__menu .menu > li.current-menu-ancestor > a{
  color:#ff7800;
}

/*
  CTA-style last menu item
  - Applies to left panel and top-menu variant
*/
.cramer-left-panel__menu .menu > li:last-child > a,
.secondary-menu-flip-target .menu.is-top-menu > li:last-child > a{
  /* background:#ff7800; */
  color:#ff7800;
}

/*
  CTA hover/active states
*/
.cramer-left-panel__menu .menu > li:last-child > a:hover,
.cramer-left-panel__menu .menu > li:last-child > a:focus,
.secondary-menu-flip-target .menu.is-top-menu > li:last-child > a:hover,
.secondary-menu-flip-target .menu.is-top-menu > li:last-child > a:focus{
  color:#ffffff;
;
}

/*
  MOUSE FOLLOW ARROW
  - Global prompt to scroll to the next section
*/
.mouse-follow-scroll-arrow{
  position:fixed;
  left:0;
  top:0;
  width:110px;
  height:110px;
  transform:translate(-50%, -50%);
  pointer-events:none;
  z-index:10000;
  will-change:transform;
  transition:opacity 0.15s ease;
}

.mouse-follow-scroll-arrow.is-hidden{
  opacity:0;
}

.mouse-follow-scroll-arrow.is-hidden .mouse-follow-scroll-arrow__button{
  pointer-events:none;
}

.mouse-follow-scroll-arrow__button{
  width:110px;
  height:110px;
  padding:0;
  margin:0;
  border:0;
  background:transparent;
  cursor:pointer;
  pointer-events:none;
}

.mouse-follow-scroll-arrow svg{
  display:block;
  width:110px;
  height:110px;
  filter:drop-shadow(0 4px 10px rgba(0, 0, 0, 0.25));
}

.mouse-follow-scroll-arrow circle{
  fill:none;
  stroke:#ffffff;
  stroke-width:6;
}

.mouse-follow-scroll-arrow path,
.mouse-follow-scroll-arrow polygon{
  fill:#ffffff;
  stroke:none;
}

.has-mouse-follow-arrow{
  cursor:none;
}

/*
  Scroll arrow stroke styling
*/
.cramer-hero-new .scroll-arrow circle{
  fill:none;
  stroke:#ffffff;
  stroke-width:6;
}

.cramer-hero-new .scroll-arrow path,
.cramer-hero-new .scroll-arrow polygon{
  fill:#ffffff;
  stroke:none;
}


/*
  Topbar menu flip target
  - Used for animated menu/logo transitions on scroll
*/
.secondary-menu-flip-target{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  flex:1 1 auto;
}

/*
  Fixed topbar container
  - Positioned above hero when scrolled
*/
.secondary-menu-flip-target--fixed{
  position:fixed;
  top:0;
  right:24px;
  height:50px;
  z-index:1000;
  pointer-events:none;
  display:flex;
  align-items:center;
}

/*
  CLIENTS SECTION
  - Pinned horizontal scroll on desktop with full-height cards
*/
.cramer-clients-section{
  width:100vw;
  min-height:100vh;
  margin-left:calc(50% - 50vw);
  margin-right:calc(50% - 50vw);
  background:#000000 url("/wp-content/themes/cramer/assets/images/pattern.png") repeat;
  background-size: 50% 50%;
  overflow-x:hidden;
  position:static;
  /* padding-top:var(--cramer-sticky-nav-offset, 85px); */
  --cramer-clients-pad-y:clamp(1.25rem, 2.5vw, 5rem);
  --cramer-client-logo-height:clamp(7rem, 18vh, 14rem);
  height:100vh;
  padding-bottom:var(--cramer-clients-pad-y);
  /* padding-top: 2rem; */
  /* padding-top:calc(var(--cramer-sticky-nav-offset, 85px) + var(--cramer-clients-pad-y)); */
  box-sizing:border-box;

}

.cramer-clients-track{
  display:flex;
  width:max-content;
  height:100%;
  gap:clamp(0.5rem, 1vw, 1.25rem);
  padding:0 clamp(0.5rem, 1vw, 1.25rem);
}

.cramer-clients-section.is-static .cramer-clients-track{
  display:grid;
  grid-template-columns:repeat(3, 1fr);
  grid-auto-rows:100%;
  width:100%;
  height:auto;
  gap:clamp(0.5rem, 1vw, 1.25rem);
  padding:0 clamp(0.5rem, 1vw, 1.25rem);
}

.cramer-clients-section.is-static .cramer-client-card{
  height:100%;
  /* border-bottom:1px solid #e2ddd3; */
}

.cramer-client-card{
  flex:0 0 calc(100vw / 3);
  height:100%;
  display:flex;
  flex-direction:column;
  background:transparent;
  color:#111111;
  border:2px solid #1c1c1c;
  will-change:transform;
  position:relative;
  backface-visibility:hidden;
  transform:translateZ(0);
  border-radius: 8px;
}

.cramer-client-card--title{
  background:#0000004a;
  color:#ffffff;
  justify-content:center;
  align-items:center;
  padding:clamp(2rem, 4vw, 8rem) clamp(0.5rem, 1vw, 1rem);
}

.cramer-client-card__title{
  width:100%;
  max-width:48rem;
  margin:0 auto;
  text-align:left;
}

.cramer-client-card--title .cramer-home-text{
  font-size:clamp(2.5rem, 3.8vw, 4.8rem);
  line-height:1.05;
}

.cramer-client-card__subtitle{
  margin:1rem 0 0;
  max-width:48rem;
  /* min raised to 1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size:clamp(1.6rem, 1.6vw, 2rem);
  line-height:1.5;
  font-weight:500;
  font-style: normal;
  color:rgba(255, 255, 255, 0.75);
  text-align:left;
  /* margin-left:auto; */
  /* margin-right:auto; */
}

.cramer-client-card--trusted{
  background:#0000004a;
  color:#ffffff;
  align-items:center;
  justify-content:center;
  padding:clamp(2rem, 4vw, 4rem);
}

.cramer-trusted-ring-wrapper{
  --trusted-count:12;
  --trusted-radius:clamp(10rem, 22vw, 24rem);
  position:relative;
  width:clamp(24rem, 58vw, 40rem);
  height:clamp(24rem, 58vw, 40rem);
  display:flex;
  align-items:center;
  justify-content:center;
}

.cramer-trusted-ring{
  position:absolute;
  inset:0;
  /* border:1px solid rgba(255, 255, 255, 0.08); */
  border-radius:50%;
  will-change:transform;
}

.cramer-trusted-ring-item{
  position:absolute;
  top:50%;
  left:50%;
  width:clamp(3.5rem, 7vw, 15rem);
  height:clamp(3.5rem, 7vw, 15rem);
  transform:translate(-50%, -50%) rotate(calc((360deg / var(--trusted-count)) * var(--i))) translate(var(--trusted-radius)) rotate(90deg);
  display:flex;
  align-items:center;
  justify-content:center;
}

.cramer-trusted-ring-item img{
  max-width:100%;
  max-height:100%;
  object-fit:contain;
  filter:brightness(0) invert(1);
  opacity:0.9;
}

.cramer-trusted-ring-item--pga img{
  filter:none;
}

.cramer-trusted-ring-item--sanofi{
  padding:clamp(0.25rem, 0.6vw, 0.75rem);
}

.cramer-trusted-ring-item--sanofi img{
  max-height:85%;
}

.cramer-trusted-center{
  position:relative;
  z-index:2;
  text-align:center;
}

.cramer-trusted-center__text{
  margin:0;
  /* min raised to 1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size:clamp(1.6rem, 2.2vw, 4rem);
  /* font-weight:700; */
  /* letter-spacing:0.06em; */
  /* text-transform:uppercase; */
  color:rgba(255, 255, 255, 0.85);
}

.cramer-trusted-split{
  display:grid;
  grid-template-columns:minmax(0, 1fr) minmax(0, 1fr);
  align-items:stretch;
  gap:0;
  position:relative;
  width:100%;
  height:100%;
  background:#000000;
  border:none;
  border-radius:0;
  overflow:hidden;
  padding-top: 5rem;
  padding-bottom: 5rem;
}

.cramer-trusted-split::after{
  content:"";
  position:absolute;
  top:0;
  bottom:0;
  left:50%;
  width:1px;
  background:rgba(255, 255, 255, 0.15);
  transform:translateX(-0.5px);
  pointer-events:none;
}

.cramer-trusted-split__title{
  display:flex;
  align-items:center;
  justify-content:center;
  align-self:stretch;
  text-align:center;
  padding:clamp(1.5rem, 2.25vw, 3rem);
  background:#000000;
  box-sizing:border-box;
}

.cramer-trusted-title{
  margin:0;
  font-family:"Montserrat", sans-serif;
  font-style:italic;
  font-weight:900;
  letter-spacing:-0.01em;
  color:#ffffff;
  font-size:clamp(2.5rem, 5vw, 6rem);
  line-height:1;
}

.cramer-trusted-split__carousel{
  display:flex;
  align-items:center;
  align-self:stretch;
  width:100%;
  padding:0;
  background:#000000;
  box-sizing:border-box;
}

.cramer-trusted-scroller{
  width:100%;
  display:flex;
  flex-direction:column;
  gap:clamp(1rem, 2.5vw, 2.5rem);
  padding:0;
  overflow:hidden;
}

.cramer-trusted-row{
  --scroll-duration: 40s;
  --scroll-direction: normal;
  width:100%;
  overflow:hidden;
  position:relative;
}

.cramer-trusted-row--right{
  --scroll-duration: 48s;
  --scroll-direction: reverse;
}

.cramer-trusted-track{
  display:flex;
  width:max-content;
  animation:cramer-trusted-scroll var(--scroll-duration) linear infinite;
  animation-direction:var(--scroll-direction);
  will-change:transform;
}

.cramer-trusted-list{
  display:flex;
  align-items:center;
  gap:clamp(2rem, 4vw, 4.5rem);
  padding:0;
}

.cramer-trusted-item{
  width:clamp(20rem, 22vw, 25rem);
  height:clamp(8rem, 10vw, 12rem);
  display:flex;
  align-items:center;
  justify-content:center;
}

.cramer-trusted-item img{
  max-width:100%;
  max-height:100%;
  object-fit:contain;
  filter:brightness(0) invert(1);
  opacity:0.9;
}

.cramer-trusted-item--pga img{
  filter:none;
}

.cramer-trusted-item--sanofi{
  padding:clamp(0.25rem, 0.6vw, 0.75rem);
}

.cramer-trusted-item--sanofi img{
  max-height:85%;
}

@keyframes cramer-trusted-scroll{
  0%{
    transform:translateX(0);
  }
  100%{
    transform:translateX(-50%);
  }
}

@media (prefers-reduced-motion: reduce){
  .cramer-trusted-track{
    animation:none;
    transform:translateX(0);
  }
}

@media (max-width: 900px){
  .cramer-trusted-split{
    grid-template-columns:1fr;
    /* Zero out the desktop 5rem top/bottom padding so the stacked title
       and carousel cells control their own spacing independently. */
    padding-top:0;
    padding-bottom:0;
  }

  .cramer-trusted-split::after{
    display:none;
  }

  .cramer-trusted-split__title{
    display:flex;
    align-items:center;
    justify-content:center;
    width:100%;
    text-align:center;
    opacity:1;
    visibility:visible;
    /* Explicit equal top/bottom padding is the most reliable way to achieve
       visible vertical centering. min-height alone doesn't guarantee equal
       space above and below the text when the flex container collapses.
       clamp floor of 5rem (50px) gives clear, intentional centering at all
       mobile widths. */
    padding-top:clamp(5rem, 9vw, 8rem);
    padding-bottom:clamp(5rem, 9vw, 8rem);
    padding-left:clamp(2rem, 4vw, 3.5rem);
    padding-right:clamp(2rem, 4vw, 3.5rem);
    border-bottom:1px solid rgba(255, 255, 255, 0.15);
  }

  .cramer-trusted-title{
    display:block;
    width:100%;
    color:#ffffff;
    opacity:1;
    visibility:visible;
    /* Larger font size on mobile — the clamp min of 2.5rem (25px) is too
       small on narrow screens; raise the floor to 4rem (40px). */
    font-size:clamp(4rem, 9vw, 6rem);
  }

  .cramer-trusted-split__carousel{
    display:flex;
    align-items:center;
    justify-content:center;
    min-height:9.5rem;
    padding:clamp(2rem, 5vw, 3.2rem) 0;
  }

  .cramer-trusted-scroller,
  .cramer-trusted-row{
    display:flex;
    align-items:center;
    justify-content:center;
    min-height:100%;
  }

  /* Increase logo gap on mobile — the desktop clamp of clamp(2rem, 4vw, 4.5rem)
     collapses to only 20px on narrow screens. A higher floor gives logos
     enough breathing room in the scrolling carousel. */
  .cramer-trusted-list{
    gap:clamp(4rem, 8vw, 6rem);
  }

  .cramer-trusted-item{
    width:clamp(24rem, 26.4vw, 30rem);
    height:clamp(9.6rem, 12vw, 14.4rem);
  }

  .cramer-trusted-item img{
    transform:none;
  }
}

.cramer-mosaic-block--trusted{
  display:flex;
  align-items:stretch;
  justify-content:stretch;
  padding:0;
  border:1px solid rgba(255, 255, 255, 0.15);
}

.cramer-client-card--see-all{
  background:#0000004a;
  color:#ffffff;
  align-items:center;
  justify-content:center;
  padding:clamp(2rem, 4vw, 4rem) clamp(1rem, 2vw, 2rem);
}

.cramer-client-card__see-all{
  max-width:48rem;
  text-align:center;
  margin:0 auto;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:clamp(1rem, 2.5vw, 3.5rem);
}

.cramer-client-card__see-all-title{
  margin:0;
  font-size:clamp(2.5rem, 3.8vw, 4.8rem);
  line-height:1.05;
  font-weight:900;
  text-transform:uppercase;
  letter-spacing:0.02em;
  white-space:nowrap;
}

.cramer-client-card__see-all-text{
  margin:0;
  max-width:40rem;
  /* min raised to 1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size:clamp(1.6rem, 1.6vw, 2rem);
  line-height:1.5;
  font-weight:500;
  color:rgba(255, 255, 255, 0.75);
}

.cramer-client-card__see-all .cramer-home-btn{
  white-space:nowrap;
  align-self:center;
}

.cramer-client-card__logo{
  background:rgba(0, 0, 0, 0.40);
  filter: blur(6);
  display:flex;
  align-items:center;
  justify-content:center;
  padding:clamp(1.5rem, 2.5vw, 2.75rem);
  overflow:hidden;
  flex:0 0 var(--cramer-client-logo-height);
  height:var(--cramer-client-logo-height);
}

.cramer-client-card__logo img{
  max-width:100%;
  max-height:100%;
  object-fit:contain;
  filter:brightness(0) invert(1);
  transform:scale(2);
  transform-origin:center;
}

.cramer-client-card__media{
  position:relative;
  flex:1 1 auto;
  overflow:hidden;
  background:transparent;
  display:flex;
  align-items:flex-end;
  justify-content:center;
}

.cramer-client-card__media img{
  will-change:transform;
  display:block;
  backface-visibility:hidden;
  transform:translateZ(0);
}

.cramer-client-card__media img{
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:center bottom;
  transition:none;
}

.cramer-client-card__cta{
  position:absolute;
  left:50%;
  bottom:clamp(1.25rem, 3vw, 2.5rem);
  transform:translateX(-50%);
  z-index:2;
}

.cramer-client-card__cta .cramer-home-btn{
  background-color:#ee710c;
}

.cramer-client-card__cta .cramer-home-btn{
  /* min raised to 1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size:clamp(1.6rem, 1.6vw, 2rem);
  padding:clamp(1rem, 1.6vw, 1.4rem) clamp(2.75rem, 4.5vw, 4rem);
  font-weight:900;
  white-space:nowrap;
  line-height:1;
}



@media (max-width: 1024px){
  .cramer-clients-section{
    height:auto;
    min-height:0;
  }

  .cramer-clients-section.is-static .cramer-clients-track{
    grid-template-columns:repeat(2, 1fr);
    grid-auto-rows:auto;
    height:auto;
  }

  .cramer-clients-section.is-static .cramer-client-card{
    height:auto;
  }

  .cramer-client-card{
    flex-basis:50vw;
  }
}

@media (max-width: 768px){
  .cramer-client-card__see-all-title{
    white-space:normal;
  }
  .cramer-clients-section.is-static .cramer-clients-track{
    grid-template-columns:1fr;
  }

  .cramer-clients-track{
    display:grid;
    grid-template-columns:1fr;
    width:100%;
    height:auto;
  }

  .cramer-client-card{
    flex:none;
    width:100%;
    height:100%;
    /* border:1px solid #e2ddd3; */
  }

  .cramer-client-card:last-child{
    border-bottom:1px solid #e2ddd3;
  }
}

/*
  Enable interaction on fixed menu only
*/
.secondary-menu-flip-target--fixed .menu{
  pointer-events:auto;
  align-items:center;
}

/*
  Topbar background strip
  - Fades in when topbar becomes visible
*/
.flip-topbar{
  position:fixed;
  top:0;
  left:0;
  right:0;
  height:50px;
  background:rgba(0, 0, 0, 0.90);
  opacity:0;
  transition:opacity .3s ease-out;
  z-index:998;
  pointer-events:none;

}

/*
  Visible state for topbar background
*/
.flip-topbar.is-visible{
  opacity:1;
}

/*
  Fixed logo container
  - Appears in topbar on scroll
*/
.logo-flip-target--fixed{
  position:fixed;
  top:16px;
  left:24px;
  z-index:1000;
  pointer-events:none;
  opacity:0;
  transition:opacity .3s ease-out;
  background:transparent;
  padding:0;
  border-radius:0;
}

/*
  Visible state for fixed logo
*/
.logo-flip-target--fixed.is-visible{
  opacity:1;
}

/*
  Fixed logo sizing
*/
.logo-flip-target--fixed .cramer-left-panel__logo{
  padding:0;
  width:84px;
  height:29px;
  display:flex;
  align-items:center;
  text-align:left;
  pointer-events:auto;
}

/*
  Fixed logo SVG sizing
*/
.logo-flip-target--fixed .cramer-left-panel__logo svg{
  width:100%;
  height:100%;
}

/*
  Top menu list (fixed header)
*/
.secondary-menu-flip-target .menu.is-top-menu{
  display:flex;
  list-style:none;
  margin:0 86px 0 0;
  padding:0;
  gap:18px;
  align-items:center;
  flex-wrap:nowrap;
  height:100%;
}

/*
  Top menu items
*/
.secondary-menu-flip-target .menu.is-top-menu > li{
  font-weight:800;
  text-transform:uppercase;
  font-size:1.6rem;
  margin:0;
}

/*
  Top menu links
*/
.secondary-menu-flip-target .menu.is-top-menu > li > a{
  color:#ffffff;
  text-decoration:none;
  transition:color .2s ease-out;
  white-space:nowrap;
}

.secondary-menu-flip-target .menu.is-top-menu > li > a:hover,
.secondary-menu-flip-target .menu.is-top-menu > li > a:focus,
.secondary-menu-flip-target .menu.is-top-menu > li.current-menu-item > a,
.secondary-menu-flip-target .menu.is-top-menu > li.current-menu-ancestor > a{
  color:#ff7800;
}

/*
  Scroll arrow bounce animation
*/
@keyframes cramer-scroll-arrow-bounce{
  0%, 100%{ transform:translateY(0); }
  50%{ transform:translateY(6px); }
}

/*
  Mobile/desktop media swap helpers
*/
.cramer-hero-new.has-mobile-version .cramer-hero-new__image.mobile{
  display:block;
}

.cramer-hero-new.has-mobile-version .cramer-hero-new__video.desktop{
  display:none;
}

/*
  Desktop breakpoint
  - Restore desktop media for larger screens
*/
@media screen and (min-width:769px){
  .cramer-hero-new.has-mobile-version .cramer-hero-new__video.desktop{
    display:block;
  }
  .cramer-hero-new.has-mobile-version .cramer-hero-new__image.mobile{
    display:none;
  }
}

/*
  Mobile breakpoint
  - Simplified hero with cutout effect
*/
@media screen and (max-width:768px){
  .cramer-hero-new .cramer-left-panel{
    display:none !important;
  }
  .cramer-hero-new .scroll-arrow{
    display:none !important;
  }
}

/*
  Tablet breakpoint
  - Adjust logo padding and title size
*/
@media screen and (max-width: 992px){
  .cramer-left-panel__logo{
    padding:0 1vw 1rem;
  }
  .cramer-left-panel h1{
    --cramer-left-title-font: 8rem;
    margin:65px 0 0;
  }
  .cramer-left-panel h1.hero-text-size-medium{
    --cramer-left-title-font: 6.5rem;
  }
  .cramer-left-panel h1.hero-text-size-small{
    --cramer-left-title-font: 5rem;
  }
}

/*
  Small mobile breakpoint
  - Reduce title sizes further
*/
@media screen and (max-width: 560px){
  .cramer-left-panel h1{
    --cramer-left-title-font: 4.4rem;
  }
  .cramer-left-panel h1.hero-text-size-medium,
  .cramer-left-panel h1.hero-text-size-small{
    --cramer-left-title-font: 4.4rem;
  }
}
.site-branding{
  position: relative; /* anchor for absolute dock */
}

/* Measurable target that doesn't consume layout space */
.header-logo-container{
  position: fixed;
  top: 16px;
  left: 24px;
  transform: none;

  width: 111px;
  height: 42px;

  display: flex;
  align-items: center;

  pointer-events: none;
  opacity: 1;
  z-index: 1000;
  transition: opacity .3s ease-out;
}

.header-logo-container .logo{
  display: block;
  pointer-events: auto;
}

.header-logo-container .cramer-left-panel__logo{
  padding: 0;
  width: 111px;
  height: 42px;
  display: flex;
  align-items: center;
  text-align: left;
}

.cramer-left-panel__logo.logo-in-dock{
  width: 111px !important;
  height: 42px !important;
  padding: 0 !important;
  margin: 0 !important;
}

.cramer-left-panel__logo.logo-in-dock svg{
  width: 100% !important;
  height: 100% !important;
  max-width: 100% !important;
}

.header-logo-container .logo svg{
  width: 100%;
  height: 100%;
  display: block;
}

/* Hero text container */
.cramer-hero-new__text-container{
  position: absolute;
  inset: 0;
  z-index: 4;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  text-align: left;
  padding: clamp(1.5rem, 4vw, 4rem);
  color: #ffffff;
  background-color: #0000003e;
  flex-direction: column;
  gap: 1.25rem;
}

.cramer-hero-new__text{
  margin: 0;
  font-size: clamp(3.5rem, 7.2vw, 8rem) !important;
  line-height: 1.05;
  /* Prevent first-paint flash before JS applies the blur/slide intro state. */
  opacity: 0;
  will-change: transform, filter, opacity;
}

.cramer-hero-new__text--medium{
  font-size: clamp(3.1rem, 6.2vw, 6.75rem) !important;
}

.cramer-hero-new__text--small{
  /* Temporarily matched to the default large size — text size field will migrate to the new home page ACF group */
  font-size: clamp(3.5rem, 7.2vw, 8rem) !important;
}

/* Centered hero logo above typewriter text */
.cramer-hero-new__logo{
  position: absolute;
  right: clamp(2rem, 5vw, 4rem);
  bottom: clamp(3rem, 5vw, 6rem);
  width: 100%;
  max-width: 312px;
  margin: 0;
  line-height: 0;
  pointer-events: auto;
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.6s ease, visibility 0.6s ease;
}

.cramer-hero-new__logo.is-visible{
  opacity: 1;
  visibility: visible;
}

.cramer-hero-new__logo-inner{
  width: 100%;
}

.cramer-hero-new__logo svg{
  display: block;
  width: 100%;
  height: auto;
}

@media screen and (max-width:768px){
  .cramer-hero-new{
    --cramer-sticky-nav-offset: clamp(56px, 8vh, 84px);
    height:calc(50vh + var(--cramer-sticky-nav-offset));
    min-height:calc(50vh + var(--cramer-sticky-nav-offset));
  }

  .cramer-hero-new__media,
  .cramer-hero-new__video,
  .cramer-hero-new__image,
  .cramer-hero-new__overlay,
  .cramer-cutout,
  .cramer-hero-new__text-container{
    height:100%;
  }

  .cramer-hero-new .cramer-hero-new__video.desktop{
    display:block !important;
    opacity:1 !important;
  }

  .cramer-hero-new .cramer-hero-new__image.mobile{
    display:none !important;
  }

  .cramer-hero-new .cramer-cutout{
    display:block !important;
    opacity:1;
  }

  .cramer-hero-new__text-container{
    align-items:flex-start;
    justify-content:center;
    text-align:left;
    padding:calc(var(--cramer-sticky-nav-offset) + 0.5rem) 1.25rem calc(7rem + env(safe-area-inset-bottom));
    background:linear-gradient(180deg, rgba(0, 0, 0, 0.18) 0%, rgba(0, 0, 0, 0.55) 100%);
    gap:0.85rem;
  }

  .cramer-hero-new__text{
    font-size:clamp(3rem, 13vw, 8rem) !important;
    line-height:1.08;
    width:100%;
    max-width:none;
  }

  .cramer-hero-new__text--medium,
  .cramer-hero-new__text--small{
    /* Reduced vw multiplier — 12vw was too large on small screens */
    font-size:clamp(2.2rem, 8vw, 3.5rem) !important;
  }

  .cramer-hero-new__logo{
    position:absolute;
    left:50%;
    right:auto;
    bottom:calc(1rem + env(safe-area-inset-bottom));
    transform:translateX(-50%);
    width:min(72vw, 220px);
    max-width:none;
    margin:0;
    padding-top:0;
  }
}

/* ============================================================================
   SLIDE ROWS SECTION
   ============================================================================ */

.cramer-slide-rows {
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  position: relative;
  z-index: 5;
}

.cramer-slide-rows__buffer {
  display: none;
}

/* First Row - Black Background */
.cramer-slide-rows__row {
  display: grid;
  grid-template-columns: 25% 50% 25%;
  align-items: center;
  align-content: center;
  /* padding: 3.5rem 0 3.5rem 4.5rem; */
  background: #000000;
  min-height: clamp(180px, 32vw, 240px);
  max-height: 400px;
  overflow: hidden;
  position: relative;
}

.cramer-slide-rows__row > * {
  align-self: center;
}

.cramer-slide-rows__row--left {
  background: #000000;
}

/* Logo Column */
.cramer-slide-rows__logo {
  display: flex;
  align-items: center;
  gap: 0;
  padding: 2rem 0 2rem 4.5rem;
  background: #000000;
  min-height: clamp(240px, 20vw, 320px);
  overflow: hidden;
  box-sizing: border-box;
  position: relative;
}
.cramer-slide-rows__logo svg,
.cramer-slide-rows__logo img {
  width: auto;
  max-width: 100%;
  height: auto;
  display: block;
}
/* image should be cover and clipped to the logo column */
.cramer-slide-rows__logo img {
  object-fit: cover;
  object-position: top center;
  height: 100%;

}

/* Content Column (Heading + Button) */
.cramer-slide-rows__body {
  padding: 0 3rem 0 8rem;
  justify-self: stretch;
}

.cramer-slide-rows__content {
  display: flex;
  flex-direction: column;
  gap: 2rem;
  align-items: flex-start;
  text-align: left;
}

.cramer-slide-rows__content h2 {
  font-size: clamp(2.75rem, 4.6vw, 5rem);
  line-height: 1.1;
  font-weight: 900;
  font-style: italic;
  letter-spacing: -0.02em;
  color: #ffffff;
  margin: 0;
}

.cramer-slide-rows__content .cramer-home-btn {
  align-self: flex-start;
}

/* Image Column */
.cramer-slide-rows__media {
  width: 100%;
  height: 100%;
  align-self: stretch;
  overflow: hidden;
}

.cramer-slide-rows__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top center;
  display: block;
}

.cramer-slide-rows__media--padded {
  padding: 0;
}

/* Second Row - White Background */
.cramer-slide-rows__row--right {
  background: #ffffff;
  grid-template-columns: 25% 50% 25%;
  gap: 0;
  color: #000000;
}

.cramer-slide-rows__row--right .cramer-slide-rows__content h2 {
  color: #000000;
}

.cramer-slide-rows__row--right .cramer-slide-rows__body {
  padding: 0 3rem 0 8rem;
  justify-self: stretch;
}

.cramer-slide-rows__row--right .cramer-slide-rows__media img {
  object-position: top right;
}

.cramer-slide-rows__row--right .cramer-slide-rows__logo {
  background: #ffffff;
  padding: 2rem 4.5rem 2rem 0;
  justify-content: flex-end;
}

/* Responsive Tablet */
@media screen and (max-width: 1024px) {
  .cramer-slide-rows__row {
    grid-template-columns: 1fr 1fr;
    grid-template-areas:
      "media media"
      "logo body";
    padding: 0;
    gap: 0;
    min-height: auto;
    max-height: none;
  }

  .cramer-slide-rows__logo {
    grid-area: logo;
    padding: 5.5rem 2rem;
    align-self: stretch;
  }

  .cramer-slide-rows__body {
    grid-area: body;
    padding: 5.5rem 2rem;
    align-self: stretch;
  }

  .cramer-slide-rows__media {
    grid-area: media;
    height: clamp(240px, 45vw, 360px);
  }
  
  .cramer-slide-rows__logo {
    width: 100%;
    max-width: 300px;
    min-height: auto;
    justify-content: center;
    background: transparent;
  }

  .cramer-slide-rows__logo img,
  .cramer-slide-rows__logo svg {
    height: auto;
    max-height: 160px;
    object-fit: contain;
  }
  
  .cramer-slide-rows__body {
    text-align: left;
    align-self: center;
  }
  
  .cramer-slide-rows__content {
    align-items: flex-start;
  }
  
  .cramer-slide-rows__content h2 {
    font-size: clamp(2.25rem, 6vw, 3.5rem);
  }
  
  .cramer-slide-rows__media {
    height: clamp(240px, 45vw, 360px);
  }
  
  .cramer-slide-rows__row--right {
    grid-template-columns: 1fr 1fr;
    grid-template-areas:
      "media media"
      "logo body";
    padding: 0;
  }

  .cramer-slide-rows__row--right .cramer-slide-rows__logo {
    padding: 5.5rem 2rem;
    justify-content: center;
    background: transparent;
  }

  .cramer-slide-rows__row--right .cramer-slide-rows__body {
    padding: 5.5rem 2rem;
  }
  
  .cramer-slide-rows__row--right .cramer-slide-rows__logo {
    margin: 0 auto;
  }
  
  .cramer-slide-rows__row--right .cramer-slide-rows__body {
    padding: 0;
  }
}

/* Responsive Mobile */
@media screen and (max-width: 768px) {
  .cramer-slide-rows__row {
    padding: 2.5rem 1.5rem;
    gap: 1.75rem;
  }
  
  .cramer-slide-rows__logo {
    max-width: 140px;
  }
  
  .cramer-slide-rows__content h2 {
    font-size: clamp(2rem, 7vw, 2.75rem);
  }
  
  .cramer-slide-rows__content {
    gap: 1.5rem;
  }
  
  .cramer-slide-rows__media {
    height: 280px;
  }
  
  .cramer-slide-rows__row--right {
    padding: 2.5rem 1.5rem;
  }
}

/* ============================================================================
   FAQS SECTION - 2x4 GRID LAYOUT
   ============================================================================ */

.cramer-faqs-section{
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  max-width: none;
  color: #ffffff;
  /* Height is content-driven — no min-height forced on this section. */
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  z-index: 5;
  padding: 0;
}

.cramer-faqs-grid{
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  /* grid-auto-rows: auto lets every row size to its own content.
     No PHP-generated grid-template-rows is needed since there is no
     forced container height for 1fr tracks to distribute against. */
  grid-auto-rows: auto;
  width: 100%;
  gap: 0;
}

.cramer-faq-cell{
  position: relative;
  /* grid-column and grid-row are written directly as inline style properties by
     PHP (e.g. style="grid-column:1;grid-row:2"). Title cell placement is still
     handled by .cramer-faq-cell--title below. */
  padding: clamp(1.5rem, 2.5vw, 3rem);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background-color 0.4s ease;
  overflow: hidden;
}

.cramer-faq-cell:not(.cramer-faq-cell--title){
  cursor: pointer;
  background: #000000;
}

/* Grid borders.
   All non-title cells get a bottom border — this closes the grid visually
   on all rows including the last.  The cramer-faq-cell--last-row PHP class
   is kept in the markup for potential JS use but is no longer used to
   suppress the border.
   With an odd number of items the previous "suppress last two" logic caused
   the right cell of the penultimate row to lose its border even though the
   left cell of the next row was still below it, making the divider look
   broken halfway across the grid.
   cramer-faq-cell--left is set by PHP on all odd cells (column 1). */
.cramer-faq-cell:not(.cramer-faq-cell--title){
  border-bottom: 1px solid rgba(255, 255, 255, 0.15);
}

.cramer-faq-cell--title,
.cramer-faq-cell--left{
  border-right: 1px solid rgba(255, 255, 255, 0.15);
}

/* Title cell styling */
.cramer-faq-cell--title{
  grid-column: 1 / -1;
  grid-row: 1;
  background: #000000;
  /* Standard white divider — the orange accent line was not requested. */
  border-bottom: 1px solid rgba(255, 255, 255, 0.15);
  /* Vertical padding reduced from the previous clamp(12rem,12vh,24rem) which
     was producing 120px–240px of space above/below the heading. */
  padding: clamp(4rem, 6vh, 8rem) clamp(2rem, 3vw, 4rem);
}

.cramer-faq-cell--title h2{
  margin: 0;
  font-size: clamp(3rem, 5vw, 7rem);
  line-height: 1.1;
  font-weight: 900;
  font-style: italic;
  text-align: center;
  letter-spacing: -0.02em;
  color: #ffffff;
}



/* FAQ cell positions and reveal delays are now set as CSS custom properties
   via PHP inline styles (style="--faq-grid-col:1;--faq-grid-row:2;--faq-reveal-delay:0s").
   The .cramer-faq-cell base rule above reads those vars for grid placement;
   the animation uses --faq-reveal-delay. No per-cell CSS rules needed here. */

/* Cell inner content */
.cramer-faq-cell__inner{
  width: 100%;
  max-width: 600px;
  opacity: 0;
  filter: blur(8px);
  transform: translateY(12px);
}

.cramer-faqs-section.is-inview .cramer-faq-cell__inner{
  animation: cramer-faq-reveal 0.8s ease forwards;
  animation-delay: var(--faq-reveal-delay);
}

@keyframes cramer-faq-reveal{
  to{
    opacity: 1;
    filter: blur(0);
    transform: translateY(0);
  }
}

/* Number styling */
.cramer-faq-cell__number{
  /* min raised to 1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size: clamp(1.6rem, 2vw, 2rem);
  font-weight: 700;
  color: #ff8400;
  margin-bottom: 1rem;
  letter-spacing: 0.05em;
}

/* Question styling */
.cramer-faq-cell__question{
  margin: 0 0 1.25rem;
  /* min raised to 1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size: clamp(1.6rem, 1.8vw, 2.4rem);
  line-height: 1.3;
  font-weight: 400;
  font-style: normal;
  color: #ffffff;
  letter-spacing: -0.01em;
}

.cramer-faq-cell__toggle{
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
  width: 100%;
  border: none;
  background: transparent;
  padding: 0;
  text-align: left;
  color: inherit;
  cursor: pointer;
}

.cramer-faq-cell__question-text{
  display: inline-block;
  font-style: normal;
}

.cramer-faq-cell__icon{
  position: relative;
  width: 18px;
  height: 18px;
  flex: 0 0 18px;
  margin-top: 0.3rem;
}

.cramer-faq-cell__icon::before,
.cramer-faq-cell__icon::after{
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 18px;
  height: 2px;
  background: #ff8400;
  transform: translate(-50%, -50%);
  transition: transform 0.25s ease, opacity 0.25s ease, background 0.25s ease;
}

.cramer-faq-cell__icon::after{
  transform: translate(-50%, -50%) rotate(90deg);
}

/* Answer styling */
.cramer-faq-cell__answer{
  margin: 0;
  /* min and max both raised to ≥1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size: clamp(1.6rem, 1.4vw, 2rem);
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.75);
  opacity: 0;
  filter: blur(10px);
  transform: translateY(6px);
  max-height: 0;
  overflow: hidden;
  transition: opacity 0.35s ease, filter 0.45s ease, transform 0.35s ease, max-height 0.45s ease;
}

/* Hover state */
.cramer-faq-cell:not(.cramer-faq-cell--title):hover{
  background: #1a1a1a;
  cursor: pointer;
}

.cramer-faq-cell.is-open .cramer-faq-cell__answer{
  opacity: 1;
  filter: blur(0);
  transform: translateY(0);
  max-height: 24rem;
}

.cramer-faq-cell.is-open .cramer-faq-cell__number{
  color: #ffffff;
}

.cramer-faq-cell.is-open .cramer-faq-cell__icon::after{
  transform: translate(-50%, -50%) rotate(90deg) scaleY(0);
  opacity: 0;
}


/* Mobile layout */
@media (max-width: 1024px){
  .cramer-faqs-section{
    /* No additional section-level padding — the title cell and FAQ cells
       supply their own internal padding so adding more here doubles up. */
    padding: 0;
  }
  
  .cramer-faqs-grid{
    grid-template-columns: 1fr;
  }
  
  .cramer-faq-cell--title{
    grid-column: 1;
    grid-row: 1;
    border-right: none;
  }
  
  /* Override the PHP inline grid placement: single column on mobile.
     !important is required to beat the element-level inline style. */
  .cramer-faq-cell{
    grid-column: 1 !important;
    grid-row: auto !important;
  }
  
  .cramer-faq-cell{
    border-right: none !important;
    padding: 3rem 2rem;
  }
  
  .cramer-faq-cell__answer{
    display: block;
  }
}

/* ============================================================================
   CAPABILITIES SECTION - ROLODEX STYLE
   ============================================================================ */

.cramer-capabilities-section {
  background: #000000;
  color: #ffffff;
  min-height: 100vh;
  display: flex;
  align-items: flex-start;
  width: 100vw;
  position: relative;
  left: 50%;
  right: 50%;
  margin-left: -50vw;
  margin-right: -50vw;
  padding-top: 115px;
  /* Must exceed .cap2-steps-nav (z-index:20) so the section and its heading
     paint over the GSAP-pinned nav as it scrolls into view — same reason
     .cramer-stats-section uses z-index:25. */
  z-index: 25;
}

.cramer-capabilities-section::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: url('/wp-content/themes/cramer/assets/images/pattern.png') repeat center center;
  background-size: 50% 50%;
  opacity: 0.8;
  z-index: 0;
}

@media screen and (min-width: 993px) {
  .cramer-capabilities-section {
    padding-top: 132px;
  }
}

.cramer-capabilities__container {
  position: relative;
  z-index: 1;
  width: 100%;
  padding: 0 clamp(32px, 6vw, 48px);
}

.cramer-capabilities__heading {
  margin: 0 0 clamp(10px, 4vw, 10px);
  font-size: clamp(3rem, 5vw, 7rem);
  line-height: 1.1;
  font-weight: 900;
  font-style: italic;
  letter-spacing: -0.02em;
}

.cramer-capabilities__content {
  display: grid;
  grid-template-columns: 1fr 5fr;
  gap: 80px;
  align-items: start;
}

.cramer-capabilities__right {
  margin-top: 80px;
}

/* Left - Rolodex Container */
.cramer-capabilities__left {
  position: relative;
}

.cramer-capabilities__rolodex {
  position: relative;
  min-height: 400px;
  display: flex;
  align-items: center;
  justify-content: flex-end;
}

.cramer-capabilities__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  will-change: transform;
}

.cramer-capabilities__item {
  appearance: none;
  background: none;
  border: none;
  color: inherit;
  cursor: pointer;
  display: flex;
  flex-direction: row-reverse;
  align-items: center;
  justify-content: flex-start;
  gap: 16px;
  padding: 20px 0;
  width: 100%;
  opacity: 0.35;
  transform-origin: center right;
  flex-shrink: 0;
}

.cramer-capabilities__item:hover .cramer-capabilities__title {
  color: #ff8400;
}

.cramer-capabilities__item.is-active {
  opacity: 1;
}

.cramer-capabilities__number {
  font-size: clamp(22px, 2.6vw, 36px);
  font-weight: 900;
  color: #ff8400;
  font-style: italic;
  min-width: 60px;
  text-align: right;
  flex-shrink: 0;
}

.cramer-capabilities__title {
  font-size: clamp(22px, 2.6vw, 36px);
  font-weight: 800;
  font-style: italic;
  line-height: 1.2;
  text-align: inherit;
  white-space: nowrap;
}

.cramer-capabilities__item.is-active .cramer-capabilities__title {
  color: #ff8400;
}

/* Right - Content Panels */
.cramer-capabilities__right {
  position: relative;
  /* padding-left: clamp(32px, 4vw, 64px); */
  border-left: 1px solid rgba(255, 255, 255, 0.15);
}

.cramer-capabilities__panels {
  position: relative;
}

.cramer-capabilities__panel {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  opacity: 0;
  filter: blur(10px);
  pointer-events: none;
  visibility: hidden;
  will-change: opacity, filter;
}

.cramer-capabilities__panel-inner {
  display: block;
}

.cramer-capabilities__panel.has-media .cramer-capabilities__panel-inner {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 0.9fr);
  gap: clamp(24px, 4vw, 56px);
  align-items: start;
}

.cramer-capabilities__panel-media {
  position: relative;
}

.cramer-capabilities__panel-image {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 12px;
  border: 1px solid rgba(255, 255, 255, 0.15);
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.35);
}

.cramer-capabilities__panel.is-active {
  opacity: 1;
  filter: blur(0px);
  pointer-events: auto;
  visibility: visible;
}

.cramer-capabilities__panel-heading {
  font-size: clamp(24px, 2.8vw, 38px);
  line-height: 1.3;
  font-weight: 900;
  font-style: italic;
  margin: 0 0 16px;
  display: flex;
  align-items: baseline;
  gap: 12px;
}

.cramer-capabilities__panel-number {
  color: #ff8400;
  font-size: clamp(20px, 2.2vw, 28px);
}

.cramer-capabilities__panel-subheading {
  font-size: clamp(18px, 2vw, 24px);
  line-height: 1.4;
  font-weight: 700;
  font-style: italic;
  color: #b8b8b8;
  margin: 0 0 24px;
}

.cramer-capabilities__panel-description {
  font-size: clamp(16px, 1.8vw, 20px);
  line-height: 1.6;
  margin-bottom: 32px;
}

.cramer-capabilities__panel-description p:last-child {
  margin-bottom: 0;
}

.cramer-capabilities__panel-services {
  margin-top: 32px;
}

.cramer-capabilities__services-title {
  /* min raised to 16px */
  font-size: clamp(16px, 1.6vw, 18px);
  line-height: 1.4;
  font-weight: 900;
  font-style: italic;
  color: #ff8400;
  text-transform: uppercase;
  margin: 0 0 16px;
  letter-spacing: 0.05em;
}

.cramer-capabilities__services-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 12px 24px;
}

.cramer-capabilities__services-list li {
  /* min raised to 16px */
  font-size: clamp(16px, 1.6vw, 18px);
  line-height: 1.5;
  font-weight: 700;
  font-style: italic;
  padding-left: 20px;
  position: relative;
}

.cramer-capabilities__services-list li::before {
  content: "→";
  position: absolute;
  left: 0;
  color: #ff8400;
  font-weight: 900;
}



/* Mobile Responsive */
/* Breakpoint matches all other home-page sections (Trusted By, Stats, FAQs)
   so the single-column layout triggers consistently at 1024px. */
@media (max-width: 1024px) {
  /* Centre the section heading on mobile — on desktop it sits above the
     rolodex list which is left-aligned, so centering makes sense there.
     On mobile the list stacks full-width, so centering the heading first
     gives the section a clear visual anchor. */
  .cramer-capabilities__heading {
    text-align: center;
  }

  .cramer-capabilities__content {
    grid-template-columns: 1fr;
    gap: 48px;
  }
  
  .cramer-capabilities__left {
    position: relative;
    top: auto;
    transform: none;
  }
  
  .cramer-capabilities__rolodex {
    height: auto;
    overflow: visible;
  }
  
  .cramer-capabilities__list {
    display: flex;
    flex-direction: column;
    gap: 16px;
  }
  
  .cramer-capabilities__item {
    padding: 12px 0;
  }
  
  .cramer-capabilities__right {
    padding-left: 0;
    border-left: none;
    border-top: 1px solid rgba(255, 255, 255, 0.15);
    padding-top: 32px;
  }
  
  .cramer-capabilities__panel:not(:first-child) {
    position: static;
  }
  
  .cramer-capabilities__panel:not(.is-active) {
    display: none;
  }

  .cramer-capabilities__panel.has-media .cramer-capabilities__panel-inner {
    grid-template-columns: 1fr;
  }
}

/* ============================================================================
   STATS SECTION - ASYMMETRIC GRID LAYOUT
   ============================================================================ */

.cramer-stats-section {
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  background: #ffffff;
  color: #000000;
  /* height is determined by the rows — no fixed/viewport height */
  position: relative;
  /* z-index must exceed .cap2-steps-nav (z-index:20) so this section paints
   * over the GSAP-pinned (position:fixed) nav as it scrolls into view. */
  z-index: 25;
  /* Borders live on the section (the actual full-width element) so they always
   * span viewport width, even when an ancestor has overflow:hidden that would
   * clip a border placed on a child wrapper. */
  border-top: 1px solid rgba(0, 0, 0, 0.2);
  border-bottom: 1px solid rgba(0, 0, 0, 0.2);
}

@media screen and (min-width: 993px) {
  .cramer-stats-section {
    padding-top: 0;
  }
}

/*
 * .cramer-stats-rows — simple stacking wrapper that holds the section borders.
 * Each row defines its own CSS grid via an inline style attribute set from PHP
 * (identical pattern to .cramer-mosaic-grid-row-dynamic in the Mosaic section).
 */
.cramer-stats-rows {
  display: block;
  width: 100%;
  /* height is intentionally auto — rows size to their content, matching the mosaic pattern */
  /* border-top/bottom are on .cramer-stats-section instead — see comment there */
}

/* Individual row — grid properties are set inline by PHP */
.cramer-stat-row {
  align-items: stretch;
  width: 100%;
}

/* Remove right border from the last block in each row */
.cramer-stat-row .cramer-stat-block:last-child {
  border-right: none;
}

/* Bottom border is intentionally retained on the last row — the section's
   own border-bottom closes the outer edge.  Removing it created a visual
   gap where the last row appeared to float without a closing line. */

/* .cramer-stats-rows height is auto at all breakpoints — no override needed */

.cramer-stat-block {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: clamp(1.5rem, 3vw, 3rem);
  background: #ffffff;
  border-right: 1px solid rgba(0, 0, 0, 0.15);
  border-bottom: 1px solid rgba(0, 0, 0, 0.15);
  overflow: hidden;
  --stat-reveal-delay: 0s;
}

/* Title block — column span is already set inline by PHP via the ACF 'Span' field.
 * No grid-row: span here — each .cramer-stat-row is a self-contained grid and
 * forcing row-span creates an empty implicit second row that breaks equal heights. */
.cramer-stat-block--title {
  background: #ffffff;
  padding: clamp(2rem, 4vw, 4rem);
}

/* Dark background variant */
.cramer-stat-block--dark {
  background: #1a1a1a;
  color: #ffffff;
  border-color: rgba(255, 255, 255, 0.1);
}
.cramer-stat-block--dark .cramer-stat-block__label {
  color: rgba(255, 255, 255, 0.75);
}
.cramer-stat-block--dark .cramer-stat-block__quote {
  color: rgba(255, 255, 255, 0.9);
}

.cramer-stat-block--title h2 {
  margin: 0;
  font-size: clamp(3rem, 5vw, 7rem);
  line-height: 1.1;
  font-weight: 900;
  font-style: italic;
  letter-spacing: -0.02em;
  color: #000000;
}

/*
 * Block grid positions: each column’s grid-column:span N is set as an inline style
 * from PHP based on the ACF ‘Span’ field — no per-block CSS position rules needed.
 * Right and bottom border removal is handled by .cramer-stat-row rules above
 * (.cramer-stat-row .cramer-stat-block:last-child and .cramer-stat-row:last-child .cramer-stat-block).
 * --stat-reveal-delay is set as an inline custom property per block from PHP.
 */

/* Content wrapper */
.cramer-stat-block__content {
  width: 100%;
  max-width: 100%;
  opacity: 0;
  filter: blur(8px);
  transform: translateY(12px);
}

.cramer-stats-section.is-inview .cramer-stat-block__content {
  animation: cramer-stat-reveal 0.8s ease forwards;
  animation-delay: var(--stat-reveal-delay);
}

@keyframes cramer-stat-reveal {
  to {
    opacity: 1;
    filter: blur(0);
    transform: translateY(0);
  }
}

/* Number + suffix wrapper — keeps the animated number and its static suffix visually inline */
.cramer-stat-block__number-wrap {
  display: flex;
  align-items: center; /* vertical center so suffix sits mid-height of the number */
  justify-content: center;
  line-height: 1;
  margin-bottom: 0.5rem;
}

/* Stat number styling — targeted by animateStatNumbers() count-up; contains ONLY the numeric value */
.cramer-stat-block__number {
  font-size: clamp(6rem, 10vw, 12rem);
  font-weight: 700;
  font-style: italic;
  color: #ff8400;
  line-height: 1;
}

/* Suffix (e.g. m, +, %) — static sibling of __number; never touched by the count-up JS.
 * Matches the number's font size so +/- symbols read at full weight alongside the figure. */
.cramer-stat-block__suffix {
  font-size: clamp(6rem, 10vw, 12rem);
  font-weight: 700;
  font-style: italic;
  color: #ff8400;
  line-height: 1;
  margin-left: 0.05em;
}

/* Optional body copy below the label */
.cramer-stat-block__text-below {
  font-size: clamp(1.4rem, 1.6vw, 1.8rem);
  line-height: 1.6;
  color: rgba(0, 0, 0, 0.6);
  margin-top: 0.75rem;
}
.cramer-stat-block--dark .cramer-stat-block__text-below {
  color: rgba(255, 255, 255, 0.55);
}

/* Stat label styling */
.cramer-stat-block__label {
  /* min raised to 1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size: clamp(1.6rem, 1.92vw, 2rem);
  line-height: 1.4;
  font-weight: 600;
  color: rgba(0, 0, 0, 0.85);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

/* Quote styling */
.cramer-stat-block__quote {
  font-size: clamp(2rem, 2.8vw, 3rem);
  line-height: 1.5;
  font-style: italic;
  color: rgba(0, 0, 0, 0.9);
  margin: 0;
}

.cramer-stat-block__quote-author {
  display: block;
  /* min raised to 1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size: clamp(1.6rem, 2vw, 2rem);
  font-weight: 700;
  font-style: normal;
  color: #ff8400;
  margin-top: 1rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

/* Mobile layout */
@media (max-width: 1024px) {
  /* .cramer-stats-section height is auto — no overrides needed */

  .cramer-stats-rows {
    height: auto;
  }

  /* Each row collapses to a single column on mobile */
  .cramer-stat-row {
    display: grid !important;
    grid-template-columns: 1fr !important;
    grid-auto-rows: auto !important;
  }

  /* All blocks go full-width; reset any span overrides from inline style */
  .cramer-stat-block,
  .cramer-stat-block--title {
    grid-column: 1 !important;
    grid-row: auto !important;
    border-right: none;
  }

  .cramer-stat-block--title {
    padding: clamp(3rem, 5vw, 4rem) clamp(2rem, 4vw, 3rem);
  }

  /* Mobile title alignment — data-title-align-mobile overrides the desktop value */
  .cramer-stat-block[data-title-align-mobile="left"] .cramer-home-text {
    text-align: left !important;
  }
  .cramer-stat-block[data-title-align-mobile="center"] .cramer-home-text {
    text-align: center !important;
  }
  .cramer-stat-block[data-title-align-mobile="right"] .cramer-home-text {
    text-align: right !important;
  }

  /* Bottom border kept on last block — section border-bottom closes the outer edge. */
}

/* ============================================================================
   MOSAIC SECTION - ASYMMETRIC GRID LAYOUT
   ============================================================================ */

.cramer-mosaics-section {
  --cramer-mosaic-quote-author-size: clamp(1.25rem, 3.2vw, 2rem);
  width: 100vw;
  background: #000000;
  color: #ffffff;
  height: auto;
  z-index: 5;
  padding-top: 0;
  display: flow-root;
}

.cramer-mosaic-grid-row-1 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr;
  gap: 0;
  width: 100%;
}

/* maintain 2:1 aspect ratio for grid block 1 row 1 */
/* .cramer-mosaic-grid-row-1 .cramer-mosaic-block:first-child {
  aspect-ratio: 2 / 1;
} */
/* maintain 1:1 aspect ratio for grid block 2 row 1 */
/* .cramer-mosaic-grid-row-1 .cramer-mosaic-block:last-child {
  aspect-ratio: 2 / 1;
} */



.cramer-mosaic-grid-row-2 {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
  grid-template-rows: 1fr;
  gap: 0;
  width: 100%;
  height: auto;
}

.cramer-mosaic-block__logo{
  width: 100%;
  max-width: 300px;
  justify-content: center;
  background: transparent;
}
.cramer-mosaic-block{
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
 
  text-align: left;
  /* padding: 10%; */
  background: #000000;
  /* Right + bottom only — matches stats section border pattern.
     Together these form a shared-edge grid line without doubling up. */
  border-right: 1px solid rgba(255, 255, 255, 0.15);
  border-bottom: 1px solid rgba(255, 255, 255, 0.15);
  padding: 5rem;
  box-sizing: border-box;
}

/* Remove right border from the last block in every dynamic row so the
   rightmost edge of the mosaic grid stays clean (no border against viewport). */
.cramer-mosaic-grid-row-dynamic > div:last-child > .cramer-mosaic-block {
  border-right: none;
}

/* ── White background modifier ─────────────────────────────────────────────
   Applied via cramer-mosaic-block--bg-white when admin selects "White".
   Mirrors the stats section treatment: white bg, dark borders, dark text.
   .cramer-home-accent stays orange; chamfer-btn stays orange/black.
   ───────────────────────────────────────────────────────────────────────── */
.cramer-mosaic-block--bg-white {
  background: #ffffff;
  /* Override both border-right and border-bottom colours for white bg blocks. */
  border-right-color: rgba(0, 0, 0, 0.15);
  border-bottom-color: rgba(0, 0, 0, 0.15);
}

/* Main heading text */
.cramer-mosaic-block--bg-white .cramer-home-text {
  color: #000000;
}

/* Large title block text */
.cramer-mosaic-block--bg-white .cramer-mosaic-text-title {
  color: #000000;
}

/* Quote text */
.cramer-mosaic-block--bg-white .cramer-mosaic-text-quote {
  color: #000000;
}

/* Body/paragraph text */
.cramer-mosaic-block--bg-white .cramer-mosaic-text {
  color: #000000;
}

/* Quote author line */
.cramer-mosaic-block--bg-white .cramer-mosaic-quote-author {
  color: #000000;
}

/* ── HTML editor block content ─────────────────────────────────────────────
   .cramer-mosaic-html-content wraps raw HTML from the ACF html_editor field.
   display:block overrides the parent flex-item context so block-level
   elements (h1-h6, p, ul, etc.) stack vertically rather than appearing
   side-by-side as flex items in a row.
   Text defaults to white for dark-background blocks; the --bg-white
   modifier selector below inverts all text to black.
   ─────────────────────────────────────────────────────────────────────── */
.cramer-mosaic-html-content {
  display: block;
  width: 100%;
}

/* Default (dark bg): force block-level stacking and white text on all
   common HTML elements that an editor might insert. */
.cramer-mosaic-html-content h1,
.cramer-mosaic-html-content h2,
.cramer-mosaic-html-content h3,
.cramer-mosaic-html-content h4,
.cramer-mosaic-html-content h5,
.cramer-mosaic-html-content h6,
.cramer-mosaic-html-content p,
.cramer-mosaic-html-content li {
  display: block;
  color: #ffffff;
  margin-top: 0;
  margin-bottom: 0.6em;
}

.cramer-mosaic-html-content h1:last-child,
.cramer-mosaic-html-content h2:last-child,
.cramer-mosaic-html-content h3:last-child,
.cramer-mosaic-html-content h4:last-child,
.cramer-mosaic-html-content h5:last-child,
.cramer-mosaic-html-content h6:last-child,
.cramer-mosaic-html-content p:last-child,
.cramer-mosaic-html-content li:last-child {
  margin-bottom: 0;
}

/* White bg override: invert all html-editor text to dark. */
.cramer-mosaic-block--bg-white .cramer-mosaic-html-content h1,
.cramer-mosaic-block--bg-white .cramer-mosaic-html-content h2,
.cramer-mosaic-block--bg-white .cramer-mosaic-html-content h3,
.cramer-mosaic-block--bg-white .cramer-mosaic-html-content h4,
.cramer-mosaic-block--bg-white .cramer-mosaic-html-content h5,
.cramer-mosaic-block--bg-white .cramer-mosaic-html-content h6,
.cramer-mosaic-block--bg-white .cramer-mosaic-html-content p,
.cramer-mosaic-block--bg-white .cramer-mosaic-html-content li {
  color: #000000;
}

/* ── chamfer-btn inside the HTML editor block ───────────────────────────────
   Usage in the ACF HTML editor field:
     <a class="chamfer-btn" href="/your-url">Button Label</a>
   Wrap in a <p> tag if you need the button on its own line:
     <p><a class="chamfer-btn" href="/your-url">Button Label</a></p>

   Rules here:
   - Override margin-bottom:0.6em set on <p> so the paragraph that wraps a
     lone button doesn't add excess space below it.
   - Add top spacing when the button follows any text element (h2, p, etc.).
   - Ensure the <a> renders as inline-block (inherits from .chamfer-btn but
     the <p> rule above must not override it with display:block).
   ─────────────────────────────────────────────────────────────────────── */

/* A lone chamfer-btn sitting directly inside the content wrapper (no <p>). */
.cramer-mosaic-html-content > .chamfer-btn {
  display: inline-block;
  margin-top: 1.6em;
}
.cramer-mosaic-html-content > .chamfer-btn:first-child {
  margin-top: 0;
}

/* A <p> whose only child is a chamfer-btn: collapse the paragraph's own
   bottom margin so spacing is driven by the button margins only. */
.cramer-mosaic-html-content p:has(> .chamfer-btn) {
  margin-bottom: 0;
}

/* The <a> inside a wrapping <p>: keep inline-block so the skew/clip-path
   chamfer effect renders correctly, and add top breathing room. */
.cramer-mosaic-html-content p .chamfer-btn {
  display: inline-block;
  margin-top: 1.2em;
}

/* First element is already flush — remove the top margin. */
.cramer-mosaic-html-content p:first-child .chamfer-btn {
  margin-top: 0;
}

.cramer-mosaic-grid-row-3 {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: 1fr;
  gap: 0;
  width: 100%;
  height: auto;
}

.cramer-mosaic-grid-row-4 {
  display: grid;
  grid-template-columns: 2fr 1fr;
  grid-template-rows: 1fr;
  gap: 0;
  width: 100%;
  height: auto;
}

.cramer-mosaic-grid-row-dynamic > div > .cramer-mosaic-block{
  width:100%;
  height:100%;
}

.cramer-mosaic-grid-row-dynamic > div{
  min-height:100%;
}

.cramer-mosaics-section .cramer-mosaic-block__media,
.cramer-mosaics-section .cramer-mosaic-video-trigger,
.cramer-mosaics-section .cramer-mosaic-video-trigger__image,
.cramer-mosaics-section .cramer-mosaic-block__media iframe{
  border-radius:12px !important;
}

.cramer-mosaics-section .cramer-mosaic-block__media,
.cramer-mosaics-section .cramer-mosaic-video-trigger{
  overflow:hidden;
  clip-path:inset(0 round 12px);
}
.cramer-mosaic-grid-row-trusted-1 .cramer-mosaic-block.cramer-mosaic-block--trusted{
  width:100%;
  max-width:100%;
  overflow:hidden;
  padding:0;
  align-items:stretch;
  justify-content:stretch;
}

.cramer-mosaic-grid-row-trusted-1 .cramer-trusted-split,
.cramer-mosaic-grid-row-trusted-1 .cramer-trusted-split__title,
.cramer-mosaic-grid-row-trusted-1 .cramer-trusted-split__carousel,
.cramer-mosaic-grid-row-trusted-1 .cramer-trusted-scroller,
.cramer-mosaic-grid-row-trusted-1 .cramer-trusted-row{
  min-width:0;
  max-width:100%;
}
.cramer-mosaic-block__media{
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  border-radius: 12px;
}

.cramer-mosaic-block__media iframe{
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
}

.cramer-mosaic-video-trigger{
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  border-radius: 12px;
  background: #000000;
  padding: 0;
  cursor: pointer;
  display: block;
}

.cramer-mosaic-video-trigger__image{
  width: 100%;
  height: 100%;
  border-radius: 12px;
  object-fit: cover;
  object-position: center;
  display: block;
}

.cramer-mosaic-video-trigger__play{
  position: absolute;
  top: 50%;
  left: 50%;
  width: clamp(56px, 7vw, 90px);
  height: clamp(56px, 7vw, 90px);
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.6);
  border: 2px solid rgba(255, 255, 255, 0.75);
}

.cramer-mosaic-video-trigger__play::before{
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-38%, -50%);
  width: 0;
  height: 0;
  border-top: clamp(10px, 1.2vw, 16px) solid transparent;
  border-bottom: clamp(10px, 1.2vw, 16px) solid transparent;
  border-left: clamp(16px, 1.9vw, 24px) solid #ffffff;
}
.cramer-mosaic-text-title{
  font-size: clamp(3rem, 9vw, 7rem);
  line-height: 1.1;
  font-weight: 900;
  font-style: italic;
  letter-spacing: -0.02em;
  color: #ffffff;
  margin: 0;
  padding: 2%;
}

.cramer-mosaic-text-quote{
  /* min raised to 1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size: clamp(1.6rem, 6vw, 4rem);
  line-height: 1.4;
  font-style: italic;
  color: #ffffff;
  font-weight: 400;
  margin: 0;
  
}

.cramer-mosaic-quote-author{
  font-size: var(--cramer-mosaic-quote-author-size);
  line-height: 1.2;
  font-weight: 700;
  letter-spacing: 0.01em;
  margin: 0;
}

.cramer-mosaic-text{
  /* min raised to 1.6rem (16px): html{font-size:10px} so 0.5rem=5px was well below threshold */
  font-size: clamp(1.6rem, 4vw, 3rem);
  line-height: 1.1;
  font-weight: 700;
  font-style: normal;
  letter-spacing: -0.02em;
  color: #ffffff;
  margin: 0;

  max-width: 100%;
}
.cramer-mosaic-block-img{
  /* Force the image to fill the cell width so flex centering on the parent
     is visually effective. height:auto preserves the natural aspect ratio.
     max-width from the ACF image_max_width inline style still takes precedence
     (e.g. max-width:60% will constrain to 60% and the flex container centers it). */
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
  object-position: center;
  border-radius: 12px;
}

.cramer-mosaic-inner-block-grid{
  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: auto auto;
  gap: 0;
  row-gap: 20px;
  width: 100%;
}

.cramer-mosaic-inner-block-grid-2cols{
  display: grid;
  grid-template-columns: auto auto;
  grid-template-rows: 1fr;
  gap: 0;
  row-gap: 20px;
  width: 100%;
  align-items: center;
}
.cramer-mosaic-inner-block-grid-2x2{
  display: grid;
  grid-template-columns: auto auto;
  grid-template-rows: auto auto;
  gap: 0;
  width: 100%;
  align-items: center;
}

.cramer-mosaic-inner-block-grid .cramer-mosaic-block{
  border: none;
}

.cramer-mosaic-inner-block {
  display: flex;
  align-items: center;
  justify-content: center;
}

.cramer-mosaic-block .chamfer-btn {
  display: inline-block;
  text-align: center;
  white-space: nowrap;
}

.cramer-mosaic-text-align-left {
  text-align: left;
  justify-content: flex-start !important;
}

.cramer-mosaic-text-align-left .cramer-mosaic-inner-block-grid {
  align-items: flex-start;
}

.cramer-mosaic-text-align-left .cramer-mosaic-inner-block {
  justify-content: flex-start;
}

.cramer-mosaic-text-align-center {
  text-align: center;
  justify-content: center !important;
}

.cramer-mosaic-text-align-center .cramer-mosaic-inner-block-grid {
  align-items: center;
}

.cramer-mosaic-text-align-center .cramer-mosaic-inner-block {
  justify-content: center;
}

.cramer-mosaic-text-align-right {
  text-align: right;
  justify-content: flex-end !important;
}

.cramer-mosaic-text-align-right .cramer-mosaic-inner-block-grid {
  align-items: flex-end;
}

.cramer-mosaic-text-align-right .cramer-mosaic-inner-block {
  justify-content: flex-end;
}

/* ─── Image overlay ────────────────────────────────────────────────────────────
 * .cramer-mosaic-image-container  – wraps the <img> and the optional overlay div.
 *   Used whenever image_overlay_text is populated (with or without a button).
 *   The container sits inside the standard .cramer-mosaic-block padding, so the
 *   image is inset the same way as the video block's media container.
 *
 * Hover state: overlay fades in and image scales up slightly.
 * Touch devices (@media hover:none): overlay is always visible at reduced opacity.
 * ─────────────────────────────────────────────────────────────────────────── */

/* Outer container: full-width flex wrapper that centres the inner wrap. */
.cramer-mosaic-image-container {
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}

/* Inner wrap: sized by the admin max-width (applied inline), position:relative
   so the absolutely-positioned overlay anchors to the image's actual edges.
   overflow:hidden + border-radius clip the overlay and zoom effect cleanly. */
.cramer-mosaic-image-wrap {
  position: relative;
  display: inline-block;
  overflow: hidden;
  border-radius: 12px;
  line-height: 0; /* prevents phantom space beneath inline-block img */
  max-width: 100%; /* fallback if inline style is absent */
}

/* Image inside the wrap: fills the wrap entirely; hover zoom via transform. */
.cramer-mosaic-image-wrap img {
  width: 100%;
  height: auto;
  display: block;
  transition: transform 0.45s ease;
}

/* ── Full-image colour-tint overlay (pseudo-element on the wrap) ────────────
   This covers the entire image on hover with a translucent colour wash.
   TWO PLACES TO ADJUST:
     1. At-rest state  : .cramer-mosaic-image-wrap::before  { background: ... }
     2. Hover state    : .cramer-mosaic-image-wrap:hover::before { background: ... }
   Format: rgba(R, G, B, Opacity) — e.g. rgba(0,0,0,0.4) = 40% black tint.
   ─────────────────────────────────────────────────────────────────────────── */
.cramer-mosaic-image-wrap::before {
  content: '';
  position: absolute;
  inset: 0;
  /* ── ADJUST: at-rest colour/opacity (default: invisible) ── */
  background: rgba(0, 0, 0, 0);
  transition: background 0.35s ease;
  z-index: 1;          /* sits above the img but below the text overlay */
  pointer-events: none;
}

.cramer-mosaic-image-wrap:hover::before {
  /* ── ADJUST: hover colour and opacity ─────────────────────── */
  background: rgba(0, 0, 0, 0.35);
}

/* Semi-transparent overlay panel — hidden by default, revealed on hover.  */
/* Layout: flex-column so text and button stack vertically, bottom-left.    */
.cramer-mosaic-image-overlay {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 2; /* above the ::before colour-tint overlay */
  background: linear-gradient(to top, rgba(0, 0, 0, 0.85) 0%, rgba(0, 0, 0, 0) 100%);
  display: flex;
  
  flex-direction: column;    /* stack text then button vertically */
  align-items: flex-start;   /* left-align both text and button   */
  justify-content: flex-end; /* push content to the bottom edge   */
  opacity: 0;
  transition: opacity 0.35s ease;
  padding: 2rem 2.4rem;
}

/* Text inside the overlay panel. */
.cramer-mosaic-image-overlay__text {
  color: #ffffff;
  text-align: left;
  margin: 0 0 0 0;
  font-size: clamp(1.4rem, 3vw, 2.4rem);
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: 0.01em;
}

/* Button label rendered inside the image hover overlay.
   Uses <span> (not <a>) because the outer .cramer-mosaic-image-link <a>
   is the real interactive element — avoids invalid nested <a> tags.
   pointer-events:none ensures clicks pass through to the parent link. */
.cramer-mosaic-overlay-btn {
  display: inline-block;
  margin-top: 1.2rem;
  pointer-events: none;
}

/* Wraps the entire image container when the image block has a button.
   Makes the whole image area a single clickable link. */
.cramer-mosaic-image-link {
  display: block;
  text-decoration: none;
  line-height: 0;
}

/* Hover: reveal overlay + subtle image zoom.
   Hover target is the wrap (the visible image area) so it triggers precisely
   when the user is over the image, not the surrounding cell padding. */
.cramer-mosaic-image-wrap:hover .cramer-mosaic-image-overlay {
  opacity: 1;
}

.cramer-mosaic-image-wrap:hover img {
  transform: scale(1.04);
  filter: blur(2px);
}

/* Touch/coarse-pointer devices: show overlay content immediately without hover. */
@media (hover: none), (pointer: coarse) {
  .cramer-mosaic-image-overlay {
    opacity: 1;
    background: linear-gradient(to top, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0) 100%);
  }

  .cramer-mosaic-image-wrap::before {
    background: rgba(0, 0, 0, 0.2);
  }
}

@media screen and (max-width: 1024px) {
  .cramer-mosaic-block {
    padding: 3rem;
  }
  
  .cramer-mosaic-block .chamfer-btn {
    font-size: 1.75rem;
    padding: 8px 24px 12px 24px;
  }
}

@media screen and (max-width: 768px) {
  .cramer-mosaics-section {
    --cramer-mosaic-quote-author-size: clamp(1.375rem, 5.2vw, 1.75rem);
  }

  .cramer-mosaic-block .chamfer-btn {
    white-space: normal;
    font-size: 1.6rem; /* 16px minimum: html{font-size:10px} so 1.6rem = 16px */
    padding: 8px 20px 10px 20px;
  }
  
  .cramer-mosaic-block {
    padding: 4rem 1.5rem;
  }

  .cramer-mosaic-quote-author {
    margin-top: -0.35rem;
  }
  
  /* Stack mosaic rows into single column */
  .cramer-mosaic-grid-row-dynamic,
  .cramer-mosaic-grid-row-3,
  .cramer-mosaic-grid-row-4 {
    display: flex !important;
    flex-direction: column !important;
    grid-template-columns: 1fr !important;
  }
  
  .cramer-mosaic-grid-row-dynamic > div {
    grid-column: span 1 !important;
    width: 100% !important;
    /* Respect the --mobile-order custom property set inline by PHP (ACF 'Mobile Order' field).
       Value 0 (default) = CSS order default, so unset blocks stack in DOM source order. */
    order: var(--mobile-order, 0);
  }
  
  /* Show only horizontal borders when stacked */
  .cramer-mosaic-block {
    border-left: none !important;
    border-right: none !important;
    border-top: 1px solid rgba(255, 255, 255, 0.15);
    border-bottom: none;
  }
  
  .cramer-mosaic-grid-row-dynamic > div:last-child .cramer-mosaic-block,
  .cramer-mosaic-grid-row-3 > div:last-child .cramer-mosaic-block,
  .cramer-mosaic-grid-row-4 > div:last-child .cramer-mosaic-block,
  .cramer-mosaic-grid-row-trusted-1 > .cramer-mosaic-block {
    border-bottom: 1px solid rgba(255, 255, 255, 0.15);
  }

  .cramer-mosaic-block.cramer-mosaic-block--bg-white {
    border-top-color: rgba(0, 0, 0, 0.15);
  }

  .cramer-mosaic-grid-row-dynamic > div:last-child .cramer-mosaic-block.cramer-mosaic-block--bg-white,
  .cramer-mosaic-grid-row-3 > div:last-child .cramer-mosaic-block.cramer-mosaic-block--bg-white,
  .cramer-mosaic-grid-row-4 > div:last-child .cramer-mosaic-block.cramer-mosaic-block--bg-white {
    border-bottom-color: rgba(0, 0, 0, 0.15);
  }
}

@media screen and (min-width: 993px) {
  .cramer-mosaics-section {
    padding-top: 0;
  }
}

/* ================================
   CONTACT SECTION
   ================================ */

.cramer-contact-section {
  position: relative;
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  background: #fff;
  color: #000;
  padding: clamp(6rem, 12vw, 12rem) 0;
  overflow: hidden;
}

.cramer-contact-section__container {
  max-width: 1400px;
  margin: 0 auto;
  padding: 0 clamp(2rem, 5vw, 4rem);
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: clamp(2rem, 4vw, 3.5rem);
}

.cramer-contact-section h2 {
  margin: 0;
  font-size: clamp(3rem, 5vw, 7rem);
  line-height: 1.1;
  font-weight: 900;
  font-style: italic;
  letter-spacing: -0.02em;
  color: #000;
}

.cramer-contact-section__blurb {
  /* min raised to 1.6rem (16px): html{font-size:10px} so 1rem=10px */
  font-size: clamp(1.6rem, 2vw, 2rem);
  line-height: 1.6;
  max-width: 800px;
  margin: 0;
  color: #000;
  font-weight: 400;
}

.cramer-contact-section__blurb .cramer-home-accent {
  color: #ee710c;
}

.cramer-contact-section__button {
  margin-top: clamp(1rem, 2vw, 2rem);
  font-size: clamp(2.25rem, 3vw, 2.75rem) !important;
  padding: clamp(2.5rem, 4vw, 3.5rem) clamp(6rem, 10vw, 10rem) !important;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-weight: 700;
  transition: all 0.3s ease;
  display: inline-block;
  text-decoration: none;
}

.cramer-contact-section__button:hover {
  transform: skew(-13deg) translateY(-2px);
}

/* Dark background modifier — mirrors cramer-stat-block--dark.
   Applied when the admin selects 'Dark' in the Contact tab background field.
   .cramer-home-accent stays orange (reads well on both bg colours).
   The button is already orange/black so no override is needed. */
.cramer-contact-section--dark {
  background: #000000;
  color: #ffffff;
}

.cramer-contact-section--dark h2 {
  color: #ffffff;
}

.cramer-contact-section--dark .cramer-contact-section__blurb {
  color: rgba(255, 255, 255, 0.8);
}

/* Mobile adjustments */
@media (max-width: 768px) {
  .cramer-contact-section {
    padding: clamp(4rem, 10vw, 6rem) 0;
  }
  
  .cramer-contact-section h2 {
    font-size: clamp(2.5rem, 10vw, 4rem);
  }
  
  .cramer-contact-section__blurb {
    /* min and max both raised to ≥1.6rem (16px): html{font-size:10px} so 1rem=10px */
    font-size: clamp(1.6rem, 4vw, 2.5rem);
  }
}


.chamfer-btn {
  --cut: 0px;          /* controls angle size */

  display: inline-block;
  padding: 16px 32px 18px 32px;
  background: #ee710c;
  color: #000 !important;
  text-decoration: none;
  font-size: 2rem;
  font-weight: 700;
  transform: skew(-13deg);
  transition: background-color 0.6s ease, color 0.6s ease, transform 0.3s ease, clip-path 0.3s ease;
  /* transition: skew 0.3s ease; /* smooth transition for the skew change */
  /*transition: clip-path 0.3s ease; /* smooth transition for the clip-path change */
  clip-path: polygon(
    0 0,
    calc(100% - var(--cut)) 0,
    100% var(--cut),
    100% 100%,
    var(--cut) 100%,
    0 calc(100% - var(--cut))
  );
}

.chamfer-btn:hover {
  --cut: 22px;          /* controls angle size */
  background: #f79442;
  color: #000 !important;
  text-decoration: none !important;
  transform: skew(0deg);
  transition: background-color 0.6s ease, color 0.6s ease, transform 0.3s ease, clip-path 0.3s ease;
  /* transition: skew 2.8s ease; /* smooth transition for the skew change */
  /*transition: clip-path 0.3s ease; smooth transition for the clip-path change */
  clip-path: polygon(
    0 0,
    calc(100% - var(--cut)) 0,
    100% var(--cut),
    100% 100%,
    var(--cut) 100%,
    0 calc(100% - var(--cut))
    /* ease in the color transition */

  );
}

/* ================================================
   CAPABILITIES 2 — NEW DESIGN
   ================================================ */

.cap2-wrap {
  --cap2-black: #000;
  --cap2-white: #fff;
  --cap2-orange: #ee710c;
  --cap2-orange-2: #ff7800;
  --cap2-orange-3: #ff8400;
  --cap2-border: rgba(255,255,255,0.09);
  --cap2-card: rgba(255,255,255,0.035);
  --cap2-nav-w: 160px;
  --cap2-circle: 56px;
  display: grid;
  grid-template-columns: var(--cap2-nav-w) 1fr;
}

/* ── PINNED LEFT NAV ── */
/*
 * DO NOT use position: sticky here. Any ancestor element in the WordPress
 * page wrapper chain (#main, #primary, #content) that has overflow set to
 * anything other than 'visible' silently breaks CSS sticky. Instead, GSAP
 * ScrollTrigger pins this nav via position: fixed during scroll, which
 * bypasses ancestor overflow rules entirely. The pin is set up in
 * cramer-home-new.js inside initCap2().
 */
.cap2-steps-nav {
  height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  border-right: 1px solid var(--cap2-border);
  background: var(--cap2-black);
  z-index: 20;
}

.cap2-steps-track {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.cap2-step-node {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.cap2-step-circle {
  width: var(--cap2-circle);
  height: var(--cap2-circle);
  border-radius: 50%;
  border: 1px solid rgba(255,255,255,0.14);
  background: transparent;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.6rem; /* 16px min: html{font-size:10px}, so 1rem=10px, 1.6rem=16px */
  font-weight: 700;
  font-style: italic;
  color: rgba(255,255,255,0.22);
  cursor: pointer;
  transition: all 0.4s cubic-bezier(0.4,0,0.2,1);
  user-select: none;
  font-family: 'Montserrat', sans-serif;
}

.cap2-step-circle:hover {
  border-color: rgba(255,255,255,0.35);
  color: rgba(255,255,255,0.55);
}

.cap2-step-circle.active {
  background: var(--cap2-orange);
  border-color: var(--cap2-orange);
  color: var(--cap2-white);
  transform: scale(1.1);
  box-shadow: 0 0 0 6px rgba(238,113,12,0.16), 0 0 28px rgba(238,113,12,0.4);
}

.cap2-step-circle.done {
  background: rgba(238,113,12,0.12);
  border-color: rgba(238,113,12,0.35);
  color: var(--cap2-orange-3);
}

.cap2-step-line {
  width: 1px;
  height: 38px;
  background: rgba(255,255,255,0.09);
  position: relative;
  overflow: hidden;
}

.cap2-step-line::after {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 0;
  background: var(--cap2-orange);
  transition: height 0.4s ease;
}

.cap2-step-line.lit::after { height: 100%; }

/* ── CONTENT COLUMN ── */
.cap2-content-col { padding: 0 72px 0 60px; }

/* Section heading — matches the large italic h2 style used throughout the page. */
.cap2-section-title {
  font-size: clamp(3rem, 9vw, 7rem);
  line-height: 1.1;
  font-weight: 900;
  font-style: italic;
  letter-spacing: -0.02em;
  color: #ffffff;
  margin: 0 0 4rem 0;
  text-align: center;
  padding-top: clamp(4rem, 6vw, 8rem);
}

/* ── SINGLE CAPABILITY SECTION ── */
.cap2-section {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 60px;
  align-items: center;
  min-height: 100vh;
  padding: 84px 0;
  border-bottom: 1px solid var(--cap2-border);
}

.cap2-section:last-child { border-bottom: none; }

/* TEXT */
.cap2-text { display: flex; flex-direction: column; }

.cap2-num {
  font-size: 1.6rem; /* 16px min: html{font-size:10px}, so 1rem=10px, 1.6rem=16px */
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--cap2-orange-2);
  margin-bottom: 14px;
  font-family: 'Montserrat', sans-serif;
}

.cap2-title {
  /* Scale matches other h2s on the page (slide rows: clamp(2.75rem,4.6vw,5rem)).
     Slightly smaller here as it sits in a narrower two-column layout. */
  font-size: clamp(2.5rem, 3.5vw, 4rem);
  font-weight: 900;
  font-style: italic;

  letter-spacing: -0.01em;
  line-height: 1.05;
  margin-bottom: 10px;
  color: #fff;
  font-family: 'Montserrat', sans-serif;
}

.cap2-title em { color: var(--cap2-orange); font-style: italic; }

.cap2-subtitle {
  font-size: 1.6rem; /* 16px min: html{font-size:10px}, so 1rem=10px, 1.6rem=16px */
  font-weight: 700;

  letter-spacing: 0.1em;
  color: rgba(255,255,255,0.3);
  margin-bottom: 20px;
  font-family: 'Montserrat', sans-serif;
}

.cap2-body {
  font-size: 1.6rem; /* 16px min: html{font-size:10px}, so 1rem=10px, 1.6rem=16px */
  line-height: 1.78;
  color: rgba(255,255,255,0.5);
  margin-bottom: 28px;
  max-width: 38ch;
  font-weight: 400;
  font-family: 'Montserrat', sans-serif;
}

.cap2-services {
  border: 1px solid var(--cap2-border);
  border-radius: 10px;
  background: var(--cap2-card);
  overflow: hidden;
}

.cap2-svc-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 16px;
  font-size: 1.6rem; /* 16px min: html{font-size:10px}, so 1rem=10px, 1.6rem=16px */
  font-weight: 500;
  color: rgba(255,255,255,0.45);
  border-bottom: 1px solid var(--cap2-border);
  letter-spacing: 0.03em;
  transition: color 0.2s, background 0.2s;
  font-family: 'Montserrat', sans-serif;
}

.cap2-svc-row:last-child { border-bottom: none; }

.cap2-svc-row:hover {
  color: #fff;
  background: rgba(238,113,12,0.07);
}

.cap2-svc-dot {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--cap2-orange);
  flex-shrink: 0;
  opacity: 0.75;
}

/* IMAGE */
.cap2-image {
  aspect-ratio: 4 / 3;
  border-radius: 10px;
  border: 1px solid var(--cap2-border);
  background: #0d0d0d;
  overflow: hidden;
  position: relative;
}

.cap2-image-link {
  display: block;
  width: 100%;
  height: 100%;
  color: inherit;
  text-decoration: none;
}

.cap2-image-link:focus-visible {
  outline: 2px solid var(--cap2-orange);
  outline-offset: -2px;
}

.cap2-image img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  opacity: 0.88;
  transition: transform 0.7s ease, opacity 0.3s;
}

.cap2-section:hover .cap2-image img {
  transform: scale(1.03);
  opacity: 1;
}

.cap2-img-tag {
  position: absolute;
  top: 14px; left: 14px;
  background: var(--cap2-orange);
  color: #fff;
  font-size: 1.6rem; /* 16px min: html{font-size:10px}, so 1rem=10px, 1.6rem=16px */
  font-weight: 700;
  font-style: italic;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 5px 10px;
  border-radius: 4px;
  z-index: 2;
  font-family: 'Montserrat', sans-serif;
}

.cap2-img-fallback {
  position: absolute;
  inset: 0;
  display: none;
  align-items: flex-end;
  padding: 20px;
}

.cap2-img-fallback span {
  font-size: 1.6rem; /* 16px min: html{font-size:10px}, so 1rem=10px, 1.6rem=16px */
  font-weight: 700;
  font-style: italic;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.25);
  font-family: 'Montserrat', sans-serif;
}

/* ── Image position modifiers ─────────────────────────────────────────────
 * Generated by home-capabilities-v2.php based on the image_position ACF field.
 * Default layout (--image-right) is the natural .cap2-section grid order and
 * needs no override — text is column 1, image is column 2.
 * ──────────────────────────────────────────────────────────────────────────── */

/* Image on the left: swap the visual order of the two columns. */
.cap2-section--image-left .cap2-text  { order: 2; }
.cap2-section--image-left .cap2-image { order: 1; }

/*
 * No image: collapse to a single centered column. max-width + auto margins
 * give comfortable reading width without spanning the full content column.
 */
.cap2-section--no-image {
  grid-template-columns: 1fr;
  justify-items: center;
  text-align: left;
}
.cap2-section--no-image .cap2-text {
  max-width: 64ch;
  width: 100%;
}

/* ── RESPONSIVE ── */
@media (max-width: 1024px) {
  .cap2-content-col { padding: 0 48px 0 40px; }
  .cap2-section { gap: 40px; }
}

@media (max-width: 900px) {
  .cap2-wrap { --cap2-nav-w: 72px; }
  .cap2-content-col { padding: 0 28px 0 22px; }
  .cap2-section {
    grid-template-columns: 1fr;
    min-height: auto;
    gap: 28px;
    padding: 68px 0;
  }
  .cap2-image { order: -1; }
  .cap2-body { max-width: none; }
}

@media (max-width: 768px) {
  .cap2-wrap { --cap2-nav-w: 58px; --cap2-circle: 40px; }
  .cap2-step-circle { font-size: 1.6rem; } /* 16px min: html{font-size:10px}, so 1rem=10px, 1.6rem=16px */
  .cap2-step-line { height: 26px; }
}

@media (prefers-reduced-motion: reduce) {
  .cap2-text,
  .cap2-image,
  .cap2-svc-row { opacity: 1 !important; transform: none !important; }
}


/* ═══════════════════════════════════════════════════════════════════════════
   MOSAIC V2 — ELEMENT BUILDER STYLES
  Supports the `column_elements` flexible content field in `mosaic_rows_v2`.
   Each .cramer-mosaic-block now contains a .cramer-mosaic-elements-wrap that
   stacks individual .cramer-mosaic-element divs vertically. Every element
   carries an alignment modifier class derived from its `justify` ACF field.
   All existing .cramer-mosaic-block rules continue to apply unchanged.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── Element stack container ─────────────────────────────────────────────── */

/*
 * Replaces the direct block content from v1. Flex column ensures elements
 * always stack vertically regardless of their individual widths.
 * `align-items: stretch` lets child elements fill the full column width by
 * default; individual elements override this with their alignment modifier.
 */
.cramer-mosaic-elements-wrap {
  display: flex;
  flex-direction: column;
  width: 100%;
  gap: 2.4rem;           /* vertical space between stacked elements */
  align-items: stretch;
}

/* ── Individual element wrapper ─────────────────────────────────────────── */

/*
 * Base element: flex column so inner content (img, p, a, etc.) stacks
 * predictably. Width 100% so each element spans the column.
 */
.cramer-mosaic-element {
  display: flex;
  flex-direction: column;
  width: 100%;
}

/* ── Alignment modifier classes ────────────────────────────────────────── */

/*
 * Each modifier sets both `align-items` (controls flex children horizontally
 * inside the column direction) and `text-align` (controls inline text within
 * block elements like <p>, <h2>, <h3>).
 */

.cramer-mosaic-element--align-left {
  align-items: flex-start;
  text-align: left;
}

.cramer-mosaic-element--align-center {
  align-items: center;
  text-align: center;
}

.cramer-mosaic-element--align-right {
  align-items: flex-end;
  text-align: right;
}

/* ── Image element: overlay path inside element wrapper ─────────────────── */

/*
 * When an image element uses the overlay structure the image container
 * should fill the available column width. The alignment modifier controls
 * where the image sits when it has a max-width constraint.
 */
.cramer-mosaic-element .cramer-mosaic-image-container {
  width: 100%;
}

.cramer-mosaic-element .cramer-mosaic-image-wrap {
  width: 100%;
}

/* ── Video element: fill column width ───────────────────────────────────── */

/*
 * Ensure the video trigger button fills its element wrapper so the thumbnail
 * scales correctly when the column is narrow or the alignment is centered.
 */
.cramer-mosaic-element .cramer-mosaic-block__media {
  width: 100%;
}

/* ── HTML element: block-level content stacks correctly ─────────────────── */

/*
 * The .cramer-mosaic-html-content wrapper already has display:block from the
 * original styles. Setting width:100% here ensures it fills the element
 * wrapper regardless of alignment without needing `!important` overrides.
 */
.cramer-mosaic-element .cramer-mosaic-html-content {
  width: 100%;
}

/* ── Button element: sizing ─────────────────────────────────────────────── */

/*
 * A standalone chamfer-btn inherits its size from its own padding and font.
 * `align-self` is left to the parent alignment modifier (flex-start / center
 * / flex-end) so it never stretches to 100% width unintentionally.
 */
.cramer-mosaic-element > .chamfer-btn {
  align-self: inherit; /* inherit from the alignment modifier on the parent */
}

/* ── Spacer element ─────────────────────────────────────── */

/*
 * Empty div whose height is set entirely by the inline style written by PHP.
 * width:100% ensures it spans the full column so it has the correct effect
 * even when preceding sibling elements are narrower.
 * On mobile the height is halved so large desktop spacers don't waste
 * disproportionate screen space on small viewports.
 */
.cramer-mosaic-spacer {
  display: block;
  width: 100%;
  flex-shrink: 0; /* prevent flex compression inside .cramer-mosaic-elements-wrap */
}

@media (max-width: 768px) {
  .cramer-mosaic-spacer {
    height: calc(var(--spacer-h, 40px) * 0.5) !important;
  }
}

/* ── Before / After Slider ──────────────────────────────────────────────── */

/*
 * Container: position:relative so absolutely-positioned layers and labels
 * anchor correctly. overflow:hidden clips the after image and rounded corners.
 * touch-action:none + user-select:none prevent scroll interference and
 * text selection during drag. cursor:ew-resize signals horizontal dragging.
 * The CSS custom property --ba-position (set to 50% in PHP, updated live
 * by initMosaicBeforeAfterSlider() in JS) drives both the clip-path on
 * .cramer-ba__after and the left: position of .cramer-ba__divider.
 */
.cramer-mosaic-before-after {
  position: relative;
  overflow: hidden;
  border-radius: 12px;
  width: 100%;
  display: block;
  touch-action: none;
  user-select: none;
  -webkit-user-select: none;
  cursor: ew-resize;
}

/* Before image: block display so it sets the container's natural height. */
.cramer-ba__before {
  display: block;
  width: 100%;
  height: auto;
  pointer-events: none;
}

/*
 * After image: absolutely fills the container; clip-path:inset() reveals
 * only the portion to the left of --ba-position. The right edge of the
 * inset equals (100% - --ba-position), so at 50% both halves are equal.
 */
.cramer-ba__after {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  pointer-events: none;
  clip-path: inset(0 calc(100% - var(--ba-position, 50%)) 0 0);
}

/*
 * Divider: thin vertical line positioned at --ba-position.
 * translateX(-50%) centers the 2 px line on the mathematical boundary.
 */
.cramer-ba__divider {
  position: absolute;
  top: 0;
  bottom: 0;
  left: var(--ba-position, 50%);
  transform: translateX(-50%);
  width: 2px;
  background: #fff;
  pointer-events: none;
}

/*
 * Handle button: circular pill centered on the divider line.
 * pointer-events:all overrides the parent's none so only the button
 * is interactive — the rest of the slider passes pointer events through.
 */
.cramer-ba__handle {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: #fff;
  border: none;
  padding: 0;
  cursor: ew-resize;
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: all;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.45);
  outline-offset: 3px;
}

.cramer-ba__handle:focus-visible {
  outline: 2px solid #fff;
  box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.35), 0 2px 8px rgba(0, 0, 0, 0.45);
}

/*
 * Handle icon: CSS-only double-arrow (◀ ▶) using ::before and ::after.
 * Each arrow is a 0-width/0-height box with three borders forming a triangle.
 * No SVG, no image — zero extra assets to load.
 */
.cramer-ba__handle-icon {
  position: relative;
  display: flex;
  align-items: center;
  gap: 4px;
}

.cramer-ba__handle-icon::before,
.cramer-ba__handle-icon::after {
  content: "";
  display: block;
  width: 0;
  height: 0;
}

/* Left-pointing triangle */
.cramer-ba__handle-icon::before {
  border-top: 6px solid transparent;
  border-bottom: 6px solid transparent;
  border-right: 8px solid #333;
}

/* Right-pointing triangle */
.cramer-ba__handle-icon::after {
  border-top: 6px solid transparent;
  border-bottom: 6px solid transparent;
  border-left: 8px solid #333;
}

/*
 * Labels: absolutely positioned text over each half of the slider.
 * font-size uses clamp() to scale between small and large viewports.
 * text-shadow ensures legibility on both light and dark images.
 */
.cramer-ba__label {
  position: absolute;
  font-weight: 700;
  font-style: italic;
  color: #fff;
  font-family: 'Montserrat', sans-serif;
  font-size: clamp(1.4rem, 3vw, 2.2rem);
  line-height: 1;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.7);
  padding: 0.8rem 1rem;
  pointer-events: none;
}

.cramer-ba__label--top-left     { top: 0;    left: 0;    }
.cramer-ba__label--top-right    { top: 0;    right: 0;   }
.cramer-ba__label--bottom-left  { bottom: 0; left: 0;    }
.cramer-ba__label--bottom-right { bottom: 0; right: 0;   }

/* On white-background blocks, flip labels to dark text */
.cramer-mosaic-block--bg-white .cramer-ba__label {
  color: #000;
  text-shadow: 0 1px 3px rgba(255, 255, 255, 0.6);
}

/* ── Responsive: mobile (≤768px) ────────────────────────────────────────── */

/*
 * On mobile the row collapses to a flex column (handled by the existing
 * .cramer-mosaic-grid-row-dynamic rule). The elements-wrap gap is reduced
 * slightly to tighten vertical rhythm on small screens.
 */
@media (max-width: 768px) {
  .cramer-mosaic-elements-wrap {
    gap: 1.6rem;
  }
}