/* Process method — Define / Develop / Deploy / Drive.
   Per-step accents come from a modifier class, not an inline style: the CSP
   forbids inline styles. Body copy stays dozen-blue / dozen-dark on the white
   field so it clears AA regardless of the step's accent hue. */

.steps {
  background: var(--pure-white);
  padding-block: clamp(3.5rem, 7vw, 6rem);
}

.steps__step--define {
  --accent: var(--light-purple);
}
.steps__step--develop {
  --accent: var(--dozen-blue);
}
.steps__step--deploy {
  --accent: var(--dozen-teal);
}
.steps__step--drive {
  --accent: var(--dozen-red);
}

.steps__grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  border-top: 1px solid rgba(51, 51, 51, 0.14);
}

.steps__step {
  display: flex;
  flex-direction: column;
  padding: 1.75rem 1.5rem 2rem;
  border-top: 3px solid var(--accent);
  margin-top: -1px;
  transition:
    transform 0.22s ease,
    box-shadow 0.22s ease;
}

.steps__step:not(:first-child) {
  border-left: 1px solid rgba(51, 51, 51, 0.12);
}

@media (hover: hover) {
  .steps__step:hover {
    transform: translateY(-5px);
    box-shadow:
      inset 0 4px 0 0 var(--accent),
      0 18px 32px -16px rgba(40, 30, 90, 0.35);
  }
}

.steps__num {
  font-family: var(--font-heading);
  font-weight: var(--weight-heading);
  font-size: clamp(2rem, 2.8vw, 2.625rem);
  font-variant-numeric: tabular-nums;
  line-height: 1;
  /* Darkened accent keeps the per-step hue while clearing AA at this size. */
  color: color-mix(in srgb, var(--accent) 62%, var(--dozen-dark));
  margin-bottom: 0.85rem;
}

.steps__heading {
  margin: 0 0 0.35rem;
  font-family: var(--font-heading);
  font-weight: var(--weight-heading);
  font-size: 1.625rem;
  line-height: 1.2;
  color: var(--dozen-dark);
}

.steps__subline {
  margin: 0 0 1rem;
  font-family: var(--font-heading);
  font-weight: var(--weight-heading);
  font-style: italic;
  font-size: 1.1875rem;
  line-height: 1.3;
  color: var(--dozen-blue);
}

.steps__lead {
  margin: 0 0 1.1rem;
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 1.0625rem;
  line-height: 1.5;
  color: var(--dozen-dark);
}

.steps__list {
  list-style: none;
  margin: 0 0 1.5rem;
  padding: 0;
  flex-grow: 1;
  font-family: var(--font-body);
  font-weight: var(--weight-body);
  font-size: 1rem;
  line-height: 1.5;
  color: var(--dozen-dark);
}

.steps__list li {
  position: relative;
  padding-left: 1.05rem;
  margin-bottom: 0.55rem;
}

.steps__list li::before {
  content: "–";
  position: absolute;
  left: 0;
  color: var(--dozen-blue);
}

.steps__outcome {
  margin: 0;
  padding-top: 0.9rem;
  border-top: 1px solid rgba(51, 51, 51, 0.14);
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 0.9375rem;
  line-height: 1.45;
  color: var(--dozen-dark);
}

.steps__outcome-label {
  display: block;
  margin-bottom: 0.3rem;
  font-size: 0.8125rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--dozen-blue);
}

/* Carousel controls — hidden until the mobile carousel is active. */
.steps__nav,
.steps__dots {
  display: none;
}

.steps__arrow {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  cursor: pointer;
  color: var(--dozen-blue);
  background: var(--pure-white);
  border: 1px solid rgba(51, 51, 51, 0.2);
  transition:
    background 0.2s ease,
    color 0.2s ease,
    border-color 0.2s ease;
}

.steps__arrow:disabled {
  opacity: 0.32;
  cursor: default;
}

.steps__arrow:not(:disabled):hover {
  background: var(--dozen-blue);
  color: var(--pure-white);
  border-color: var(--dozen-blue);
}

.steps__arrow svg {
  width: 15px;
  height: 15px;
}

.steps__dot {
  width: 8px;
  height: 8px;
  padding: 0;
  border: 0;
  position: relative;
  border-radius: 50%;
  cursor: pointer;
  background: rgba(51, 51, 51, 0.22);
  transition:
    background 0.2s ease,
    transform 0.2s ease;
}

/* The dot stays 8px; the touch target does not. Pointer targets this small are
   a coin-flip to hit on a phone, and growing the dot itself would change the
   design. */
.steps__dot::after {
  content: "";
  position: absolute;
  inset: -8px;
}

.steps__dot.is-active {
  background: var(--dozen-blue);
  transform: scale(1.3);
}

.steps__arrow:focus-visible,
.steps__dot:focus-visible {
  outline: 2px solid var(--dozen-blue);
  outline-offset: 3px;
}

@media (prefers-reduced-motion: reduce) {
  .steps__step {
    transition: none;
  }
  .steps__step:hover {
    transform: none;
  }
}

/* Tablet: two columns. */
@media (min-width: 640px) and (max-width: 1023.98px) {
  .steps__grid {
    grid-template-columns: repeat(2, 1fr);
  }
  .steps__step {
    border-left: 0;
  }
  .steps__step:nth-child(even) {
    border-left: 1px solid rgba(51, 51, 51, 0.12);
  }
}

/* Mobile: swipe carousel — arrows above the track, dots below it. */
@media (max-width: 639.98px) {
  .steps__nav--arrows {
    display: flex;
    justify-content: center;
    gap: 0.6rem;
    margin-bottom: 1.1rem;
  }

  .steps__grid {
    display: flex;
    grid-template-columns: none;
    border-top: 0;
    gap: 1rem;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    margin-inline: calc(-1 * var(--container-padding));
    padding-inline: var(--container-padding);
    padding-bottom: 0.25rem;
  }

  .steps__grid::-webkit-scrollbar {
    display: none;
  }

  .steps__step {
    flex: 0 0 84%;
    scroll-snap-align: center;
    margin-top: 0;
    border-left: 0;
    border-top: 3px solid var(--accent);
    box-shadow: 0 10px 26px -20px rgba(40, 30, 90, 0.45);
  }

  .steps__dots {
    display: flex;
    justify-content: center;
    gap: 0.5rem;
    margin-top: 1.5rem;
  }
}
