/*
 * FormStatus component
 *
 */

@use '../../../style/core/utilities.scss' as utilities;

.dnb-form-status {
  --form-status-radius: 0.25rem;

  display: flex;

  opacity: 1;

  &__shell {
    --form-status-color-text: var(--token-color-text-neutral);
    display: flex;
    justify-content: flex-start;
    align-items: flex-start;

    min-width: inherit;

    border-radius: var(--form-status-radius);
    background-color: var(--form-status-color-background);
    color: var(--form-status-color-text);
  }

  &__variant--outlined &__shell {
    @include utilities.fakeBorder(var(--form-status-color-outline));
  }

  // Background and icon colors
  &--error &__shell {
    --form-status-color-background: var(
      --token-color-background-error-subtle
    );
    --form-status-color-icon: var(--token-color-icon-error);
  }

  &--information &__shell {
    --form-status-color-background: var(
      --token-color-background-info-subtle
    );
    --form-status-color-icon: var(--token-color-icon-info);
  }

  &--marketing &__shell {
    --form-status-color-background: var(
      --token-color-background-marketing-subtle
    );
    --form-status-color-icon: var(--token-color-icon-marketing);
  }

  &--warning &__shell {
    --form-status-color-background: var(
      --token-color-background-warning-subtle
    );
    --form-status-color-icon: var(--token-color-icon-warning);
  }

  // Outlines
  &__variant--outlined#{&}--error &__shell {
    --form-status-color-outline: var(--token-color-stroke-error);
  }
  &__variant--outlined#{&}--warning &__shell {
    --form-status-color-outline: var(--token-color-stroke-warning);
  }
  &__variant--outlined#{&}--information &__shell {
    --form-status-color-outline: var(--token-color-stroke-info);
  }
  &__variant--outlined#{&}--marketing &__shell {
    --form-status-color-outline: var(--token-color-stroke-marketing);
  }

  &__text {
    max-width: var(--prose-max-width); // to enhance readability

    padding: 0.625rem 1rem;

    cursor: text;

    button & {
      cursor: inherit;
    }
    color: inherit;
    line-height: var(--line-height-small);
    font-size: var(--font-size-small);

    .dnb-ul,
    .dnb-anchor {
      font-size: inherit;
    }
    .dnb-ul:not([class*='dnb-space__left']) {
      padding-left: 1rem;
    }
    .dnb-spacing & .dnb-ul:not([class*='dnb-space__bottom']) {
      .dnb-li {
        margin-top: 0.5rem;
        margin-bottom: 0.5rem;
      }
      margin-bottom: 0.5rem;
    }

    white-space: normal;
  }

  .dnb-icon + &__text {
    padding-left: 0.5rem;
  }

  &__shell > .dnb-icon {
    display: flex;
    justify-content: center;
    align-items: center;

    margin: 0.3333333em 0.3333333em 0.3333333em 0.6666666em;

    color: var(--form-status-color-icon);
    border: none;
  }

  // Large
  &__size--large &__text {
    padding-top: 1.125rem;
    padding-bottom: 1.125rem;
  }

  &__size--large &__shell > .dnb-icon {
    margin-top: 0.6666666em;
    margin-bottom: 0.6666666em;
  }

  // This would be a "real" large sizing
  // &__size--large &__text {
  //   padding: 1rem 1.5rem;
  // }
  // &__size--large .dnb-icon + &__text {
  //   padding-left: 1rem;
  // }
  // &__size--large &__shell > .dnb-icon {
  //   margin: 0.6666666em 0.3333333em 0.6666666em 0.9999999em;
  // }

  // Stretch support
  &--stretch {
    flex-grow: 1;
  }

  &--stretch &__shell {
    width: 100%;
  }

  &[hidden] {
    display: none;
  }

  // Attention focus animation used in conjunction with GlobalStatus
  &--error#{&}--attention-focus &__shell,
  &--error#{&}:focus &__shell {
    animation: attention-focus 2s ease-in-out 1 200ms;
  }
  &--error#{&}--attention-focus &__shell > .dnb-icon,
  &--error#{&}:focus &__shell > .dnb-icon {
    animation: attention-focus 2s ease-in-out 1 200ms;
  }
}

@keyframes attention-focus {
  0%,
  100% {
    color: var(--token-color-text-destructive);
    background-color: var(--token-color-background-error-subtle);
    border-color: var(--token-color-stroke-error);
  }

  35% {
    color: var(--token-color-text-neutral-inverse);
    background-color: var(--token-color-background-error);
    border-color: var(--token-color-stroke-error);
  }
}
