/* Services page template (scripts/service_template.py).
   Loaded after solution.css, whose tokens, art panels, text links, related
   cards, and closing CTA it shares. Only service-specific layout lives here. */

:root {
  /* Distance from the content edge to the viewport edge, for right bleeds. */
  --svc-col: calc((min(100vw, var(--grid-max-width)) - 2 * var(--space-page) - 15 * var(--grid-gutter)) / 16);
  --svc-bleed: calc(var(--space-page) + max(0px, (100vw - var(--grid-max-width)) / 2));
  --svc-card-ink: #0c1f18;
  --svc-card-muted: #3d564a;
  --svc-card-bg: #f2f6f3;
}

@media (min-width: 1440px) {
  :root {
    --svc-bleed: calc(var(--space-page) + 2 * var(--svc-col) + 2 * var(--grid-gutter) + max(0px, (100vw - var(--grid-max-width)) / 2));
  }
}

.svc-hero h1,
.svc-outcomes h2,
.svc-scope h2,
.svc-path h2,
.svc-doors h2 {
  margin: 0;
  font-weight: 700;
  letter-spacing: -0.035em;
  text-wrap: balance;
}

.svc-outcomes h2,
.svc-scope h2,
.svc-doors h2 {
  font-size: clamp(34px, 4vw, 60px);
  line-height: 1.02;
}

/* Hero: editorial split. Copy left with room to breathe; a portrait photo
   bleeds off the right edge, the illustration rides in as a chip. */

.svc-hero {
  position: relative;
  overflow: clip;
  padding-top: calc(var(--height-header) + var(--space-section-sm));
  padding-bottom: var(--space-section-xl);
}

.svc-hero-field {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    radial-gradient(42% 58% at 86% 44%, rgba(79, 220, 160, 0.2), transparent 70%),
    radial-gradient(28% 36% at 8% 92%, rgba(79, 220, 160, 0.08), transparent 70%),
    linear-gradient(90deg, var(--color-border) 1px, transparent 1px) 0 0 / calc(100% / 12) 100%;
  -webkit-mask-image: linear-gradient(180deg, #000 0%, transparent 85%);
  mask-image: linear-gradient(180deg, #000 0%, transparent 85%);
  opacity: 0.6;
}

.svc-hero-grid {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--grid-gutter);
  align-items: center;
  margin-top: clamp(16px, 3vw, 40px);
}

.svc-hero-copy {
  position: relative;
  z-index: 2;
  grid-column: 1 / span 8;
  padding-right: clamp(0px, 2vw, 32px);
}

.svc-hero-title {
  margin-bottom: 36px !important;
  font-size: clamp(40px, 4.2vw, 72px);
  line-height: 0.98;
  letter-spacing: -0.045em !important;
}

.svc-hero-lead {
  max-width: 50ch;
  margin: 0 0 40px;
  font-size: clamp(17px, 1.35vw, 20px);
  line-height: 1.55;
  color: var(--color-ink-muted);
  text-wrap: pretty;
  animation-delay: 80ms;
}

.svc-hero-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 16px 28px;
  animation-delay: 140ms;
}

.svc-hero-media {
  position: relative;
  grid-column: 9 / -1;
  margin: 0 calc(-1 * var(--svc-bleed)) 0 0;
  animation-delay: 160ms;
}

.svc-hero-photo {
  aspect-ratio: 4 / 5;
  max-height: min(78vh, 760px);
  width: 100%;
  overflow: hidden;
  border-radius: var(--sol-radius-lg) 0 0 var(--sol-radius-lg);
  background: var(--sol-forest);
}

.svc-hero-photo img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: saturate(0.9) contrast(1.04);
  transform-origin: 60% 40%;
}

.svc-hero-chip {
  position: absolute;
  left: -10%;
  bottom: -9%;
  display: grid;
  place-items: center;
  width: min(62%, 360px);
  aspect-ratio: 1.18;
  padding: 7%;
  border: 6px solid var(--color-bg);
  box-shadow: 0 40px 80px -40px rgba(12, 31, 24, 0.55);
}

.svc-hero-chip img {
  width: 100%;
  height: auto;
}

/* Portal screens fill the chip edge to edge instead of floating in it. */
.svc-hero-chip--ui {
  aspect-ratio: 16 / 9;
  width: min(74%, 460px);
  padding: 0;
  overflow: hidden;
  background: var(--sol-forest);
}

.svc-hero-chip--ui img {
  height: 100%;
  object-fit: cover;
  object-position: left top;
}

/* Proof directly under the hero: give it the hero's breathing room. */
.svc-hero + .sol-proof {
  padding-top: var(--space-section-sm);
}

/* Outcomes: the problem, then what the engagement leaves behind.
   3 x 3 bento, placed explicitly: photo 1x2, dark 2x1, two 1x1, wide 3x1. */

.svc-outcomes-head {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--grid-gutter);
  row-gap: 24px;
  align-items: end;
  margin-bottom: 64px;
}

.svc-outcomes-head h2 {
  grid-column: 1 / span 7;
}

.svc-outcomes-head p {
  grid-column: 8 / span 5;
  margin: 0;
  font-size: clamp(17px, 1.35vw, 19px);
  line-height: 1.6;
  color: var(--color-ink-muted);
  text-wrap: pretty;
}

.svc-bento {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  grid-auto-rows: minmax(280px, auto);
  grid-auto-flow: dense;
  gap: var(--grid-gutter);
}

.svc-card {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  min-width: 0;
  margin: 0;
  padding: 36px;
  overflow: hidden;
  border-radius: var(--sol-radius-lg);
}

.svc-card h3 {
  margin: 0 0 12px;
  font-size: clamp(22px, 1.8vw, 28px);
  line-height: 1.1;
  font-weight: 700;
  letter-spacing: -0.02em;
}

.svc-card p {
  max-width: 44ch;
  margin: 0;
  font-size: 15px;
  line-height: 1.6;
}

.svc-card--photo {
  grid-column: 1;
  grid-row: 1 / span 2;
  color: var(--sol-forest-ink);
  background: var(--sol-forest);
}

.svc-card-media {
  position: absolute;
  inset: 0;
}

.svc-card-media::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(12, 31, 24, 0) 35%, rgba(12, 31, 24, 0.9) 100%);
}

.svc-card-media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 900ms var(--sol-ease-media);
}

.svc-card:hover .svc-card-media img {
  transform: scale(1.05);
}

.svc-card-body {
  position: relative;
}

.svc-card--photo p {
  color: rgba(242, 246, 243, 0.84);
}

.svc-card--dark {
  grid-column: 2 / span 2;
  grid-row: 1;
  justify-content: space-between;
  background:
    radial-gradient(70% 90% at 100% 100%, rgba(79, 220, 160, 0.24), transparent 65%),
    var(--sol-forest);
  color: var(--sol-forest-ink);
}

.svc-card--dark h3 {
  max-width: 14ch;
  font-size: clamp(32px, 3.2vw, 52px);
  line-height: 1;
  letter-spacing: -0.035em;
}

.svc-card--dark p {
  max-width: 52ch;
  font-size: 16px;
  color: var(--sol-forest-muted);
}

.svc-card--line {
  grid-column: 2;
  grid-row: 2;
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border);
}

.svc-card--surface {
  grid-column: 3;
  grid-row: 2;
  background: var(--sol-art-surface);
  border: 1px solid var(--sol-art-border);
}

.svc-card--line p,
.svc-card--surface p {
  color: var(--color-ink-muted);
}

.svc-card--line::before,
.svc-card--surface::before {
  content: "";
  position: absolute;
  top: 36px;
  left: 36px;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--color-accent);
  box-shadow: 0 0 0 6px rgba(79, 220, 160, 0.2);
}

.svc-card--wide {
  grid-column: 1 / -1;
  grid-row: 3;
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  align-items: center;
  gap: 48px;
  padding: 24px 24px 24px 48px;
  background: var(--color-bg-elevated);
  border: 1px solid var(--color-border);
}

.svc-card--wide h3 {
  font-size: clamp(26px, 2.4vw, 38px);
  line-height: 1.05;
  letter-spacing: -0.03em;
}

.svc-card--wide p {
  font-size: 16px;
  color: var(--color-ink-muted);
}

.svc-card-art {
  display: grid;
  place-items: center;
  min-height: 320px;
  padding: 6%;
  overflow: hidden;
}

.svc-card-art img {
  width: min(88%, 560px);
  transition: transform 900ms var(--sol-ease-media);
}

.svc-card--wide:hover .svc-card-art img {
  transform: scale(1.04);
}

/* Scope: a dark typographic index. Rows dim around the one in focus. */

.svc-scope-head {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--grid-gutter);
  row-gap: 24px;
  align-items: end;
}

.svc-scope-head h2 {
  grid-column: 1 / span 6;
}

.svc-scope-head p {
  grid-column: 8 / span 5;
  margin: 0;
  font-size: 18px;
  line-height: 1.6;
  color: var(--sol-forest-muted);
}

.svc-index {
  margin: 72px 0 0;
  padding: 0;
  list-style: none;
  border-top: 1px solid rgba(242, 246, 243, 0.16);
}

.svc-index-row {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--grid-gutter);
  align-items: baseline;
  padding: clamp(28px, 3vw, 44px) 0;
  border-bottom: 1px solid rgba(242, 246, 243, 0.16);
}

.svc-index-num {
  grid-column: 1;
  font-family: var(--font-mono);
  font-size: 13px;
  letter-spacing: 0.04em;
  color: var(--sol-forest-muted);
}

.svc-index-row h3 {
  grid-column: 2 / span 6;
  margin: 0;
  font-size: clamp(28px, 3.1vw, 50px);
  line-height: 1.02;
  font-weight: 700;
  letter-spacing: -0.035em;
  transition:
    transform 600ms var(--sol-ease-media),
    color 300ms var(--ease-out),
    opacity 300ms var(--ease-out);
}

.svc-index-row p {
  grid-column: 9 / span 4;
  margin: 0;
  font-size: 16px;
  line-height: 1.6;
  color: var(--sol-forest-muted);
  transition: opacity 300ms var(--ease-out);
}

@media (hover: hover) and (pointer: fine) {
  .svc-index-row:hover h3 {
    transform: translateX(20px);
    color: var(--color-accent);
  }

  .svc-index:hover .svc-index-row:not(:hover) h3,
  .svc-index:hover .svc-index-row:not(:hover) p {
    opacity: 0.38;
  }
}

/* Path: pinned heading; step cards stick at staggered offsets so each new
   step slides over the last, leaving a sliver of every card above it. */

.svc-path-grid {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--grid-gutter);
  align-items: start;
}

.svc-path-head {
  position: sticky;
  top: var(--sol-stage-top);
  grid-column: 1 / span 4;
}

.svc-path-head h2 {
  font-size: clamp(34px, 3.4vw, 56px);
  line-height: 1.02;
}

.svc-path-head p {
  max-width: 38ch;
  margin: 24px 0 0;
  font-size: 17px;
  line-height: 1.6;
  color: var(--sol-forest-muted);
}

.svc-steps {
  grid-column: 6 / span 7;
  margin: 0;
  padding: 0;
  list-style: none;
}

.svc-step {
  position: sticky;
  top: calc(var(--sol-stage-top) + var(--i) * 20px);
  margin-bottom: 22vh;
}

.svc-step:last-child {
  margin-bottom: 0;
}

.svc-step-inner {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 36px;
  min-height: 440px;
  padding: 36px;
  border-radius: var(--sol-radius-lg);
  background: var(--svc-card-bg);
  color: var(--svc-card-ink);
  box-shadow: 0 -30px 60px -36px rgba(0, 0, 0, 0.75);
  transform-origin: 50% 0;
  will-change: transform;
}

.svc-step-copy {
  display: flex;
  flex-direction: column;
}

.svc-step-num {
  margin: 0 0 auto;
  font-family: var(--font-mono);
  font-size: 15px;
  font-weight: 500;
  color: var(--svc-card-ink);
}

.svc-step-num span {
  color: #7b9187;
}

.svc-step-copy h3 {
  margin: 48px 0 16px;
  font-size: clamp(32px, 3vw, 48px);
  line-height: 1;
  font-weight: 700;
  letter-spacing: -0.035em;
}

.svc-step-copy p {
  margin: 0;
  font-size: 16px;
  line-height: 1.6;
  color: var(--svc-card-muted);
}

.svc-step-copy .content-link {
  color: var(--svc-card-ink);
}

.svc-step-media {
  overflow: hidden;
  border-radius: var(--sol-radius-md);
  background: var(--sol-forest);
}

.svc-step-media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Doors: this service beside the one to choose instead. */

.svc-doors-head {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--grid-gutter);
  row-gap: 24px;
  align-items: end;
  margin-bottom: 64px;
}

.svc-doors-head h2 {
  grid-column: 1 / span 6;
}

.svc-doors-head p {
  grid-column: 8 / span 5;
  margin: 0;
  font-size: 18px;
  line-height: 1.6;
  color: var(--color-ink-muted);
}

.svc-door-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--grid-gutter);
}

.svc-door {
  display: flex;
  flex-direction: column;
  min-width: 0;
  overflow: hidden;
  border: 1px solid var(--color-border);
  border-radius: var(--sol-radius-lg);
  background: var(--color-bg-elevated);
  color: inherit;
  text-decoration: none;
  transition:
    transform 600ms var(--sol-ease-media),
    box-shadow 600ms var(--sol-ease-media);
}

a.svc-door:hover {
  transform: translateY(-6px);
  box-shadow: 0 40px 80px -48px rgba(12, 31, 24, 0.45);
}

.svc-door-art {
  display: grid;
  place-items: center;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  border: 0;
  border-radius: 0;
  border-bottom: 1px solid var(--sol-art-border);
}

.svc-door-art img {
  width: min(58%, 420px);
  transition: transform 900ms var(--sol-ease-media);
}

a.svc-door:hover .svc-door-art img {
  transform: scale(1.06);
}

.svc-door-body {
  display: flex;
  flex: 1;
  flex-direction: column;
  gap: 14px;
  padding: 40px;
}

.svc-door h3 {
  margin: 0;
  font-size: clamp(26px, 2.4vw, 36px);
  line-height: 1.05;
  font-weight: 700;
  letter-spacing: -0.03em;
}

.svc-door-when {
  margin: 0;
  max-width: 36ch;
  font-size: 19px;
  line-height: 1.4;
  font-weight: 600;
}

.svc-door-body > p:not(.svc-door-when):not(.svc-door-here) {
  max-width: 48ch;
  margin: 0;
  font-size: 16px;
  line-height: 1.6;
  color: var(--color-ink-muted);
}

.svc-door-body .sol-text-link,
.svc-door-here {
  margin-top: auto;
  padding-top: 20px;
}

.svc-door--here {
  border-color: transparent;
  background: var(--sol-forest);
  color: var(--sol-forest-ink);
}

.svc-door--here .svc-door-body > p:not(.svc-door-when):not(.svc-door-here) {
  color: var(--sol-forest-muted);
}

.svc-door-here {
  margin-bottom: 0;
  font-family: var(--font-mono);
  font-size: 13px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-accent);
}

/* Layout breakpoints */

@media (max-width: 1100px) {
  .svc-hero-copy {
    grid-column: 1 / span 8;
  }

  .svc-outcomes-head h2,
  .svc-scope-head h2,
  .svc-doors-head h2 {
    grid-column: 1 / span 9;
  }

  .svc-outcomes-head p,
  .svc-scope-head p,
  .svc-doors-head p {
    grid-column: 1 / span 9;
  }
}

@media (max-width: 1023px) {
  .svc-hero-copy {
    grid-column: 1 / -1;
    padding-right: 0;
  }

  .svc-hero-media {
    grid-column: 3 / -1;
    margin-top: 56px;
  }

  .svc-hero-photo {
    aspect-ratio: 5 / 4;
  }

  .svc-hero-chip {
    left: -12%;
    bottom: -10%;
    width: 46%;
  }

  .svc-bento {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .svc-card--photo {
    grid-column: 1;
    grid-row: 1 / span 2;
  }

  .svc-card--dark {
    grid-column: 2;
    grid-row: 1;
  }

  .svc-card--line {
    grid-column: 2;
    grid-row: 2;
  }

  .svc-card--surface {
    grid-column: 1 / -1;
    grid-row: 3;
  }

  .svc-card--wide {
    grid-column: 1 / -1;
    grid-row: 4;
    grid-template-columns: 1fr;
    gap: 24px;
    padding: 36px;
  }

  .svc-card-art {
    min-height: 260px;
  }

  .svc-index-row {
    grid-template-columns: 40px minmax(0, 1fr);
    row-gap: 12px;
    align-items: start;
  }

  .svc-index-num {
    grid-column: 1;
    grid-row: 1;
    padding-top: 8px;
  }

  .svc-index-row h3 {
    grid-column: 2;
    grid-row: 1;
  }

  .svc-index-row p {
    grid-column: 2;
    grid-row: 2;
  }

  .svc-path-head {
    position: static;
    grid-column: 1 / -1;
    margin-bottom: 56px;
  }

  .svc-steps {
    grid-column: 1 / -1;
  }

  .svc-step {
    top: calc(var(--height-header) + 16px + var(--i) * 14px);
    margin-bottom: 10vh;
  }
}

@media (max-width: 800px) {
  .svc-hero-media {
    grid-column: 2 / -1;
  }

  .svc-step-inner {
    grid-template-columns: 1fr;
    gap: 24px;
    min-height: 0;
    padding: 24px;
  }

  .svc-step-copy h3 {
    margin-top: 20px;
  }

  .svc-step-media {
    order: -1;
    aspect-ratio: 16 / 10;
  }

  .svc-door-grid {
    grid-template-columns: 1fr;
  }

  .svc-door-body {
    padding: 28px;
  }
}

@media (max-width: 640px) {
  .svc-hero-title {
    font-size: clamp(34px, 9.6vw, 44px);
    line-height: 1;
  }

  .svc-bento {
    grid-template-columns: 1fr;
  }

  .svc-card--photo,
  .svc-card--dark,
  .svc-card--line,
  .svc-card--surface,
  .svc-card--wide {
    grid-column: 1;
    grid-row: auto;
  }

  .svc-card--photo {
    min-height: 460px;
  }

  .svc-card {
    padding: 28px;
  }

  .svc-card--line::before,
  .svc-card--surface::before {
    top: 28px;
    left: 28px;
  }

  .svc-index-row {
    grid-template-columns: 32px minmax(0, 1fr);
  }
}

@media (prefers-reduced-motion: reduce) {
  .svc-step {
    position: static;
    margin-bottom: var(--grid-gutter);
  }

  .svc-index-row h3,
  .svc-index-row p,
  .svc-card-media img,
  .svc-card-art img,
  .svc-door,
  .svc-door-art img {
    transition: none;
  }

  .svc-index-row:hover h3 {
    transform: none;
  }
}
