@use "../../wc";

:host {
  display: block;
  line-height: var(--zn-line-height-dense);
  max-width: var(--zn-container-lg);
  --zn-col-gap: calc(var(--zn-spacing-medium, 20px) * 3);
  --zn-form-group-sticky-top: var(--zn-spacing-medium, 20px);
}

.form-control {
  position: relative;
  border: none;
  padding: 0;
  margin: 0;
}

.form-control__label {
  padding: 0;
}

.form-control--has-label .form-control__label {
  font-weight: var(--zn-font-weight-bold);
  font-size: var(--zn-font-size-large);
}

.form-control__container {
  --zn-col-basis: 200px;
}

// Only while the label sits beside the inputs: once zn-cols wraps them into one column a sticky
// label would scroll over the fields it labels. zn-cols wraps below the two columns' bases plus
// the gap, so 670px = --zn-col-basis * (1 + 2) + 70px — keep in step with both values below.
@container (min-width: 670px) {
  .form-control__text {
    position: sticky;
    top: var(--zn-form-group-sticky-top);
    // A stretched flex item is as tall as the row, leaving sticky nothing to travel through.
    align-self: flex-start;
  }
}

.form-control__chip {
  margin-top: var(--zn-spacing-x-small);
}

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.form-control-input {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--zn-spacing-medium) var(--zn-spacing-small);

  // `1fr` floors each track at its min-content width, so one long label steals width from
  // the other tracks and the spans stop lining up.
  @include wc.media-query(md) {
    grid-template-columns: repeat(6, minmax(0, 1fr));
  }
}

.form-control-input > ::slotted(*) {
  grid-column: span 6 / span 6;
}

.form-control-input > ::slotted([span="1"]) {
  @include wc.media-query(md) {
    grid-column: span 1 / span 1;
  }
}

.form-control-input > ::slotted([span="2"]) {
  @include wc.media-query(md) {
    grid-column: span 2 / span 2;
  }
}

.form-control-input > ::slotted([span="3"]) {
  @include wc.media-query(md) {
    grid-column: span 3 / span 3;
  }
}

.form-control-input > ::slotted([span="4"]) {
  @include wc.media-query(md) {
    grid-column: span 4 / span 4;
  }
}

.form-control-input > ::slotted([span="5"]) {
  @include wc.media-query(md) {
    grid-column: span 5 / span 5;
  }
}

zn-cols::part(base) {
  gap: 70px;
}


.form-control--pad .form-control__text {
  padding-top: var(--zn-base-gap);
  padding-left: var(--zn-base-gap);
}
