@use '../config' as *;

.alert {
  --alert-variant-color: var(--body-color);
  --alert-color: var(--alert-variant-color);
  --alert-bg: #{color-transparent(var(--alert-variant-color), 0.16, var(--bg-surface))};
  --alert-padding-x: #{$alert-padding-x};
  --alert-padding-y: #{$alert-padding-y};
  --alert-margin-bottom: #{$alert-margin-bottom};
  --alert-border-color: #{color-transparent(var(--alert-variant-color), 0.2, var(--bg-surface))};
  --alert-border: var(--border-width) solid var(--alert-border-color);
  --alert-border-radius: var(--border-radius);
  --alert-link-color: inherit;
  --alert-heading-font-weight: var(--font-weight-medium);
  --alert-heading-margin-bottom: #{$alert-heading-margin-bottom};
  --alert-icon-size: #{$alert-icon-size};
  --alert-padding-inline-end: #{$alert-padding-inline-end};
  --alert-gap: #{$alert-gap};

  position: relative;
  display: flex;
  flex-direction: row;
  gap: var(--alert-gap);
  padding: var(--alert-padding-y) var(--alert-padding-x);
  margin-bottom: var(--alert-margin-bottom);
  color: var(--alert-color);
  background-color: color-mix(in sRGB, var(--alert-bg), var(--bg-surface));
  border: var(--border-width) var(--border-style) var(--alert-border-color);
  @include border-radius(var(--alert-border-radius));
}

.alert-heading {
  margin-bottom: var(--alert-heading-margin-bottom);
  font-weight: var(--alert-heading-font-weight);
  color: inherit;
}

.alert-description {
  color: var(--secondary);
}

.alert-icon {
  width: var(--alert-icon-size) !important;
  height: var(--alert-icon-size) !important;
  color: var(--alert-color);
}

.alert-action {
  color: var(--alert-color);
  text-decoration: underline;

  &:hover {
    text-decoration: none;
  }
}

.alert-list {
  margin: 0;
}

.alert-link {
  font-weight: $alert-link-font-weight;
  color: var(--alert-link-color);

  &,
  &:hover {
    color: var(--alert-color);
  }
}

.alert-dismissible {
  padding-inline-end: var(--alert-padding-inline-end);

  .btn-close {
    position: absolute;
    inset-inline-end: calc(var(--alert-padding-y) / 2 - 1px);
    top: calc(var(--alert-padding-x) / 2 - 1px);
    z-index: 1;
    padding: calc(var(--alert-padding-y) * 1.25) var(--alert-padding-x);
  }
}

.alert-important {
  // Set the shared color token so every child that reads it - text, icon,
  // `.alert-action`, `.alert-link` - flips to white instead of the variant
  // color, which is the background here.
  --alert-color: var(--white);
  background-color: var(--alert-variant-color);

  .alert-description {
    color: inherit;
  }
}

.alert-minor {
  background: transparent;
  border-color: var(--border-color);
}

@each $name, $color in $theme-colors {
  .alert-#{$name} {
    --alert-variant-color: var(--#{$name});
  }
}
