/* =========================================================================
   Aster — Services and prices
   A sticky heading against hairline-ruled rows, closed by a full-bleed
   breakout panel for the one elective treatment.
   ========================================================================= */

.aster-prices__layout {
  display: grid;
  grid-template-columns: minmax(0, 4fr) minmax(0, 7fr);
  gap: var(--wp--custom--grid-gap) clamp(var(--wp--preset--spacing--60), 6vw, var(--wp--preset--spacing--100));
  align-items: start;
}

.aster-prices__aside-sticky {
  position: sticky;
  top: calc(var(--wp--custom--header-height) + var(--wp--preset--spacing--70));
}

.aster-prices__note {
  max-width: 36ch;
  margin: var(--wp--preset--spacing--50) 0 var(--wp--preset--spacing--60);
  font-size: var(--wp--preset--font-size--sm);
  line-height: var(--wp--custom--leading-relaxed);
  color: var(--wp--preset--color--ink-muted);
}


/* -------------------------------------------------------------------------
   The rows
   ------------------------------------------------------------------------- */
.aster-price-list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.aster-price-row {
  position: relative;
  z-index: 0;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  column-gap: var(--wp--preset--spacing--60);
  padding-block: var(--wp--preset--spacing--60);
}

/* The hover wash bleeds into the gutter so it never crowds the type, and the
   dividing rules are drawn on the same element — so line and wash are always
   exactly the same width, at rest and on hover. */
.aster-price-row::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: 0 calc(var(--wp--preset--spacing--40) * -1);
  background: transparent;
  border-bottom: var(--wp--custom--line-hairline) solid var(--wp--preset--color--line);
  transition: background var(--wp--custom--duration-base) var(--wp--custom--ease-out);
}
.aster-price-row:first-child::before {
  border-top: var(--wp--custom--line-hairline) solid var(--wp--preset--color--line);
}
.aster-price-row:hover::before { background: var(--wp--preset--color--accent-tint); }

.aster-price-row__head {
  grid-column: 1;
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: var(--wp--preset--spacing--20) var(--wp--preset--spacing--40);
}

.aster-price-row__name {
  margin: 0;
  font-family: var(--wp--preset--font-family--display);
  font-size: var(--wp--preset--font-size--lg);
  font-weight: var(--wp--custom--weight-medium);
  line-height: var(--wp--custom--leading-snug);
  letter-spacing: var(--wp--custom--tracking-tight);
  color: var(--wp--preset--color--contrast);
}

.aster-price-row__flag {
  margin: 0;
  padding: 2px var(--wp--preset--spacing--20);
  font-size: var(--wp--preset--font-size--xxs);
  line-height: var(--wp--custom--leading-relaxed);
  letter-spacing: var(--wp--custom--tracking-label);
  text-transform: uppercase;
  color: var(--wp--preset--color--accent);
  border: var(--wp--custom--line-hairline) solid var(--wp--preset--color--accent);
  border-radius: var(--wp--custom--radius-sm);
}

.aster-price-row__desc {
  grid-column: 1;
  max-width: 46ch;
  margin: var(--wp--preset--spacing--20) 0 0;
  font-size: var(--wp--preset--font-size--sm);
  line-height: var(--wp--custom--leading-relaxed);
  color: var(--wp--preset--color--ink-muted);
}

.aster-price-row__price {
  grid-column: 2;
  grid-row: 1 / span 2;
  align-self: start;
  margin: 0;
  font-family: var(--wp--preset--font-family--display);
  font-size: var(--wp--preset--font-size--lg);
  font-weight: var(--wp--custom--weight-medium);
  /* Body leading, not heading leading — the price is a paragraph sitting
     beside the treatment name, and the design lets it inherit. */
  line-height: var(--wp--custom--leading-relaxed);
  letter-spacing: var(--wp--custom--tracking-tight);
  color: var(--wp--preset--color--contrast);
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

.aster-price-row__cur {
  font-size: 0.7em;
  font-weight: var(--wp--custom--weight-regular);
  color: var(--wp--preset--color--ink-muted);
  margin-right: 0.15em;
}


/* -------------------------------------------------------------------------
   Breakout panel
   The block is already alignfull, so this reaches the page edges on its own —
   no 100vw / negative-margin trick is needed the way it was in the design.
   ------------------------------------------------------------------------- */
.aster-breakout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  align-items: stretch;
  width: 100%;
  margin-top: var(--wp--custom--section-space);
  background: var(--wp--preset--color--paper-tint);
}

.aster-breakout__media img {
  display: block;
  width: 100%;
  height: 100%;
  min-height: 22rem;
  object-fit: cover;
  background: var(--wp--custom--image-fill);
}

.aster-breakout__text {
  align-self: center;
  max-width: 42rem;
  padding: clamp(var(--wp--preset--spacing--70), 6vw, var(--wp--preset--spacing--90));
}
/* Inside the panel everything is spaced on the wider rhythm, the eyebrow
   included — it takes the same 32px as the paragraph, not its usual 24px. */
.aster-breakout__text .aster-eyebrow { margin-bottom: var(--wp--preset--spacing--60); }

.aster-breakout__title {
  margin: 0 0 var(--wp--preset--spacing--50);
  font-family: var(--wp--preset--font-family--display);
  font-size: var(--wp--preset--font-size--xl);
  font-weight: var(--wp--custom--weight-medium);
  line-height: var(--wp--custom--leading-snug);
  letter-spacing: var(--wp--custom--tracking-display);
  color: var(--wp--preset--color--contrast);
  text-wrap: balance;
}

.aster-breakout__body {
  margin: 0 0 var(--wp--preset--spacing--60);
  color: var(--wp--preset--color--ink-secondary);
  line-height: var(--wp--custom--leading-relaxed);
}


/* -------------------------------------------------------------------------
   Tablet
   ------------------------------------------------------------------------- */
@media (max-width: 62rem) {
  .aster-prices__layout { grid-template-columns: minmax(0, 1fr); }
  .aster-prices__aside-sticky { position: static; }
  .aster-prices__list-wrap { margin-top: var(--wp--preset--spacing--70); }

  .aster-breakout { grid-template-columns: minmax(0, 1fr); }
  .aster-breakout__media img {
    min-height: 16rem;
    height: auto;
    aspect-ratio: var(--wp--custom--ratio-wide);
  }
}


/* -------------------------------------------------------------------------
   Phone — the price drops under the description
   ------------------------------------------------------------------------- */
@media (max-width: 46rem) {
  .aster-price-row { grid-template-columns: minmax(0, 1fr); }
  /* Narrower gutter here, so the hover wash bleeds less far. */
  .aster-price-row::before { inset: 0 calc(var(--wp--preset--spacing--20) * -1); }
  .aster-price-row__price {
    grid-column: 1;
    grid-row: auto;
    margin-top: var(--wp--preset--spacing--30);
  }
}
