/*
  sizes: .a-side-sheet--md, .a-side-sheet--lg (sm default)
  modes: .a-side-sheet--docked (dialog default)
  states: .a-side-sheet--open (closed default)
*/

.a-side-sheet {
  --bg: var(--lens-semantic-color-surface-default);
  --py: var(--lens-semantic-spacing-desktop-padding-3);
  --shadow: var(--lens-semantic-shadow-low);
  --max-width-sm: 350px;
  --max-width-md: 460px;
  --max-width-lg: 675px;
  --max-width: var(--a-side-sheet-max-width-sm, var(--max-width-sm));
  --max-width-min: 100svw;
  --border-color: var(--lens-semantic-color-ui-divider-default);
  --border-width: var(--lens-semantic-border-width-thin);
  display: none;
  flex-direction: column;
  margin-inline-end: 0;
  margin-block: 0;
  padding-inline: 0;
  padding-block: var(--a-side-sheet-py, var(--py));
  background: var(--a-side-sheet-bg, var(--bg));
  border: none;
  box-shadow: var(--a-side-sheet-shadow, var(--shadow));
  overflow: hidden;
  height: 100svh;
  max-height: 100svh;
  max-width: min(var(--max-width-min), var(--max-width));
  opacity: 0;
  transform: translateX(100%);
  transition:
    opacity var(--a-transition-duration) var(--a-transition-easing),
    transform var(--a-transition-duration) var(--a-transition-easing),
    overlay var(--a-transition-duration) var(--a-transition-easing) allow-discrete,
    display var(--a-transition-duration) var(--a-transition-easing) allow-discrete;
  &:open,
  &.a-side-sheet--open {
    display: flex;
    opacity: 1;
    transform: translateX(0);
    &::backdrop {
      background-color: var(--lens-semantic-color-background-backdrop);
    }
  }
  &::backdrop {
    transition: all var(--a-transition-duration) var(--a-transition-easing) allow-discrete;
    background-color: transparent;
  }
  &:focus-visible {
    outline: var(--lens-semantic-border-width-focus-width) solid
      var(--lens-semantic-color-ui-focus-ring);
    outline-offset: var(--lens-semantic-border-width-focus-offset);
  }
  & .a-side-sheet-content {
    flex: 1;
    overflow-y: auto;
  }
  &.a-side-sheet--md {
    --max-width: var(--a-side-sheet-max-width-md, var(--max-width-md));
  }
  &.a-side-sheet--lg {
    --max-width: var(--a-side-sheet-max-width-lg, var(--max-width-lg));
  }
  &.a-side-sheet--docked {
    --shadow: none;
    --max-width-min: 100%;
    height: 100%;
    max-height: 100%;
    border-inline-start: var(--a-side-sheet-border-width, var(--border-width)) solid
      var(--a-side-sheet-border-color, var(--border-color));
  }
}

@media (max-width: 480px) {
  .a-side-sheet {
    &:not(.a-side-sheet--docked) {
      padding-inline-start: 0;
      width: 100svw;
      max-width: 100svw;
    }
    &.a-side-sheet--docked {
      position: absolute;
      inset: 0;
      max-width: 100%;
      width: 100%;
      --border-width: 0;
    }
  }
}

html:has(.a-side-sheet:not(.a-side-sheet--docked)[open]) {
  overflow: hidden;
}

@starting-style {
  .a-side-sheet:open,
  .a-side-sheet.a-side-sheet--open {
    opacity: 0;
    transform: translateX(100%);
    &::backdrop {
      background-color: transparent;
    }
  }
}

.a-side-sheet-header {
  --px: var(--a-side-sheet-header-px, var(--lens-semantic-spacing-desktop-padding-3));
  --pt: var(--a-side-sheet-header-pt, var(--lens-semantic-spacing-desktop-padding-0));
  --pb: var(--a-side-sheet-header-pb, var(--lens-semantic-spacing-desktop-padding-3));
  --gap-x: var(--a-side-sheet-header-gap-x, var(--lens-semantic-spacing-desktop-gap-1));
  display: grid;
  flex-grow: 0;
  grid-template-columns: 1fr min-content;
  place-items: center flex-start;
  padding-inline: var(--px);
  padding-block-start: var(--pt);
  padding-block-end: var(--pb);
  column-gap: var(--gap-x);
  & .a-side-sheet-header-actions {
    grid-row: 1;
    grid-column: -1;
  }
  & .a-side-sheet-header-title {
    grid-column: 1;
    grid-row: 1;
  }
  & .a-side-sheet-header-description {
    grid-row: 2;
    grid-column: 1 / 3;
  }
  &:has(.a-side-sheet-header-extra-content) {
    grid-template-columns: 1fr min-content min-content;
    & .a-side-sheet-header-extra-content {
      grid-row: 1;
    }
  }
  &:has(.a-side-sheet-header-back-btn) {
    grid-template-columns: min-content 1fr min-content;
    & .a-side-sheet-header-back-btn {
      grid-row: 1;
      grid-column: 1;
    }
    & .a-side-sheet-header-title {
      grid-column: 2;
    }
    &:has(.a-side-sheet-header-extra-content) {
      grid-template-columns: min-content 1fr min-content min-content;
      & .a-side-sheet-header-extra-content {
        grid-column: 3;
      }
      & .a-side-sheet-header-description {
        grid-column: 1 / 4;
      }
    }
  }
}

.a-side-sheet-header-actions {
  --gap: var(--a-side-sheet-header-actions-gap, var(--lens-semantic-spacing-desktop-gap-1));
  display: flex;
  gap: var(--gap);
}

.a-side-sheet-header-title {
  --font-family: var(
    --a-side-sheet-header-title-font-family,
    var(--lens-semantic-font-family-label)
  );
  --font-size: var(
    --a-side-sheet-header-title-font-size,
    var(--lens-semantic-font-title-h3-lg-font-size)
  );
  --font-weight: var(
    --a-side-sheet-header-title-font-weight,
    var(--lens-semantic-font-weight-emphasis)
  );
  --line-height: var(
    --a-side-sheet-header-title-line-height,
    var(--lens-semantic-font-title-h3-lg-line-height)
  );
  --letter-spacing: var(
    --a-side-sheet-header-title-letter-spacing,
    var(--lens-semantic-font-title-h3-lg-letter-spacing)
  );
  margin: 0;
  &:is(h1, h2, h3, h4, h5, h6) {
    font-family: var(--font-family);
    font-size: var(--font-size);
    font-weight: var(--font-weight);
    line-height: var(--line-height);
    letter-spacing: var(--letter-spacing);
  }
}

.a-side-sheet-header-description {
  --font-family: var(
    --a-side-sheet-header-description-font-family,
    var(--lens-semantic-font-family-label)
  );
  --font-size: var(
    --a-side-sheet-header-description-font-size,
    var(--lens-semantic-font-text-md-font-size)
  );
  --font-weight: var(
    --a-side-sheet-header-description-font-weight,
    var(--lens-semantic-font-weight-default)
  );
  --line-height: var(
    --a-side-sheet-header-description-line-height,
    var(--lens-semantic-font-text-md-line-height)
  );
  --letter-spacing: var(
    --a-side-sheet-header-description-letter-spacing,
    var(--lens-semantic-font-text-md-letter-spacing)
  );
  font-family: var(--font-family);
  font-size: var(--font-size);
  font-weight: var(--font-weight);
  line-height: var(--line-height);
  letter-spacing: var(--letter-spacing);
}

.a-side-sheet-content {
  --px: var(--a-side-sheet-content-px, var(--lens-semantic-spacing-desktop-padding-3));
  --pb: var(--a-side-sheet-content-pb, var(--lens-semantic-spacing-desktop-padding-3));
  padding-inline: var(--px);
  padding-block-end: var(--pb);
}
