@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;1,300;1,400&family=Poppins:ital,wght@0,200;0,300;0,400;1,200;1,300&display=swap');

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

/*ABOUT SECTION*/
.about {
  background-color: #1a1a1a;
}

.about-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

h1 {
  font-family: 'Poppins', sans-serif;
  font-size: 4rem;
  font-weight: 300;
  letter-spacing: 0.01em;
  line-height: 1.125;
  text-align: center;
}

/* Mockup batches — 2x2 grid with gaps instead of a single centered row.
   Height is now content-sized (was 100svh) so there's no dead viewport
   space padding it out before the copy that follows. */
.about-hero,
.outro {
  position: relative;
  width: 100%;
  padding: 4rem 2rem 6rem;
  display: grid;
  grid-template-columns: repeat(2, auto);
  grid-template-rows: repeat(2, 1fr);
  justify-content: center;
  gap: 1.5rem;
  overflow: hidden;
}

.body-about {
  position: relative;
  width: 100%;
  height: auto;
  padding: 3rem 2rem 5rem;
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
}

.hero-img,
.outro-img {
  /* width: min(500px, 42vw); */
  aspect-ratio: 16/10;
  overflow: hidden;
}

.services {
  position: relative;
  width: 100%;
  height: 100svh;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  overflow: hidden;
}

.services-header {
  position: relative;
  width: 100%;
  padding: 0 2rem;
  background-color: #1a1a1a;
  will-change: transform;
  display: flex;               
  justify-content: center;     
  align-items: center;         
}

.services-header img {
  object-fit: contain;
  width: auto;     
  height: auto;        
  max-width: 100%;      
  max-height: 100%;      
}

.services-header:nth-child(1),
.services-header:nth-child(3) {
  transform: translateX(100%) translateY(0%);
}

.services-header:nth-child(2) {
  transform: translateX(-100%) translateY(0%);
  z-index: 2;
}

.services-copy {
  position: relative;
  width: 100%;
  height: 100%;
  margin-top: 155svh;
  text-align: center;
}

.animate-text {
  position: relative;
  width: 60%;
  margin: 0 auto;
  color: #4f4f4f;
  --clip-value: 100%;
}

.animate-text::before {
  content: attr(data-text);
  position: absolute;
  top: 0;
  left: 0;
  color: #fff;
  clip-path: inset(0 0 var(--clip-value) 0);
  will-change: clip-path;
}

/* --- Emphasis paragraph (services-copy) ---
   This paragraph carries an <em>, which attr(data-text) above can't
   render. Instead of the ::before/attr trick, it duplicates its own
   marked-up content into a base layer + a clipped reveal layer, both
   inheriting the same --clip-value from the JS. The default ::before
   reveal is switched off here so it doesn't double up underneath. */
.animate-text.has-emphasis::before {
  content: none;
}

.animate-text.has-emphasis {
  font-weight: 400;
}

.animate-text .text-reveal {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  color: #fff;
  clip-path: inset(0 0 var(--clip-value) 0);
  will-change: clip-path;
}

.animate-text em {
  font-style: italic;
  font-weight: 500;
}

@media (max-width: 1000px) {
  h1 {
    font-size: 2rem;
    letter-spacing: -0.05rem;
  }

  .animate-text{
    width: 100%;
  }

  .about-hero,
  .outro {
    gap: 0.85rem;
    padding: 3.5rem 1.25rem 2rem;
  }
}