/**
 * Shell, container, section rhythm, stacks, clusters, grids, hero layout.
 * Depends on: tokens.css (and base.css for cascade order in HTML)
 */
.site-shell {
  min-height: 100vh;
}

.site-header,
.site-footer {
  padding: 1rem 0;
}

.container {
  width: min(calc(100% - 2rem), var(--measure));
  margin: 0 auto;
}

.section {
  padding: var(--section-pad-y) 0;
}

.stack-sm > * + * {
  margin-top: var(--space-sm);
}

.stack-md > * + * {
  margin-top: var(--space-md);
}

.stack-lg > * + * {
  margin-top: var(--space-lg);
}

.cluster {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-sm);
  align-items: center;
}

.cluster-between {
  justify-content: space-between;
}

.hero-layout {
  display: grid;
  gap: var(--space-lg);
}

/* Homepage hero variant: content + full-height image (mobile-first) */
.hero-layout-image {
  align-items: start;
  gap: 1rem;
}

.hero-layout-image .hero-aside {
  align-self: stretch;
  order: -1;
}

.hero-layout-image .hero-media,
.hero-layout-image .hero-image-wrap {
  height: 100%;
}

.hero-layout-image .hero-image-wrap {
  aspect-ratio: auto;
  min-height: 19rem;
}

.grid-2,
.grid-3 {
  display: grid;
  gap: var(--space-lg);
}

@media (min-width: 48rem) {
  .grid-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

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

  .hero-layout {
    grid-template-columns: minmax(0, 1.4fr) minmax(18rem, 0.9fr);
    align-items: start;
  }

  .hero-layout-image {
    grid-template-columns: minmax(0, 0.96fr) minmax(0, 1.04fr);
    gap: 2.5rem;
    align-items: center;
  }

  .hero-layout-image .hero-aside {
    order: initial;
    padding-left: 0;
  }

  .hero-layout-image .hero-content {
    width: 100%;
    max-width: 38rem;
    box-sizing: border-box;
    padding-right: 2rem;
    justify-self: start;
  }

  .hero-layout-image .hero-image-wrap {
    aspect-ratio: auto;
    min-height: 34rem;
  }
}