[data-fs-badge] {
  // --------------------------------------------------------
  // Design Tokens for Badges
  // --------------------------------------------------------

  // Default properties
  --fs-badge-padding                      : var(--fs-spacing-0) var(--fs-spacing-2);

  --fs-badge-border-radius                : var(--fs-border-radius-pill);
  --fs-badge-border-width                 : 0;
  --fs-badge-border-style                 : none;
  --fs-badge-border-color                 : transparent;

  --fs-badge-bkg-color                    : var(--fs-color-neutral-bkg);

  --fs-badge-text-color                   : var(--fs-color-text);
  --fs-badge-text-size                    : var(--fs-text-size-tiny);
  --fs-badge-text-weight                  : var(--fs-text-weight-bold);

  --fs-badge-transition-function          : var(--fs-transition-function);
  --fs-badge-transition-property          : var(--fs-transition-property);
  --fs-badge-transition-timing            : var(--fs-transition-timing);

  // Neutral
  --fs-badge-neutral-bkg-color            : var(--fs-color-neutral-bkg);
  --fs-badge-neutral-text-color           : var(--fs-badge-text-color);
  --fs-badge-neutral-border-color         : var(--fs-color-neutral-bkg);

  // Success
  --fs-badge-success-bkg-color            : var(--fs-color-success-bkg);
  --fs-badge-success-text-color           : var(--fs-badge-text-color);
  --fs-badge-success-border-color         : var(--fs-color-success-bkg);

  // Highlighted
  --fs-badge-highlighted-bkg-color        : var(--fs-color-highlighted-bkg);
  --fs-badge-highlighted-text-color       : var(--fs-color-highlighted-text);
  --fs-badge-highlighted-border-color     : var(--fs-color-highlighted-bkg);

  // Info
  --fs-badge-info-bkg-color               : var(--fs-color-info-bkg);
  --fs-badge-info-text-color              : var(--fs-color-info-text);
  --fs-badge-info-border-color            : var(--fs-color-info-bkg);

  // Warning
  --fs-badge-warning-bkg-color            : var(--fs-color-warning-bkg);
  --fs-badge-warning-text-color           : var(--fs-color-warning-text);
  --fs-badge-warning-border-color         : var(--fs-color-warning-bkg);

  // Danger
  --fs-badge-danger-bkg-color             : var(--fs-color-danger-bkg);
  --fs-badge-danger-text-color            : var(--fs-badge-text-color);
  --fs-badge-danger-border-color          : var(--fs-color-danger-bkg);

  // Big
  --fs-badge-big-text-size                : var(--fs-text-size-legend);
  --fs-badge-big-padding                  : var(--fs-spacing-1) var(--fs-spacing-2);

  // Counter
  --fs-badge-counter-size                : var(--fs-spacing-3);
  --fs-badge-counter-padding             : var(--fs-spacing-0);
  --fs-badge-counter-text-size           : var(--fs-text-size-0);
  --fs-badge-counter-text-color          : var(--fs-color-text-inverse);
  --fs-badge-counter-bkg-color           : var(--fs-color-link);
  --fs-badge-counter-border-radius       : var(--fs-border-radius-pill);
  --fs-badge-counter-border-color        : var(--fs-color-body-bkg);

  // --------------------------------------------------------
  // Structural Styles
  // --------------------------------------------------------

  width: fit-content;
  height: fit-content;
  font-size: var(--fs-badge-text-size);
  font-weight: var(--fs-badge-text-weight);
  line-height: 1;
  color: var(--fs-badge-text-color);
  text-transform: uppercase;
  white-space: nowrap;
  border: var(--fs-badge-border-width) var(--fs-badge-border-style) var(--fs-badge-border-color);
  border-radius: var(--fs-badge-border-radius);

  [data-fs-badge-wrapper] {
    padding: var(--fs-badge-padding);
    overflow: hidden;
    border-radius: var(--fs-badge-border-radius);
  }

  // --------------------------------------------------------
  // Variants Styles
  // --------------------------------------------------------

  &[data-fs-badge-size="big"] {
    font-size: var(--fs-badge-big-text-size);

    [data-fs-badge-wrapper] {
      padding: var(--fs-badge-big-padding);
    }
  }

  &[data-fs-badge-counter="true"] {
    position: absolute;
    top: .375rem;
    left: 1.625rem;
    font-size: 10px;
    color: var(--fs-badge-counter-text-color);
    border-color: var(--fs-badge-counter-border-color);
    border-radius: var(--fs-badge-counter-border-radius);

    [data-fs-badge-wrapper] {
      display: flex;
      align-items: center;
      justify-content: center;
      min-width: var(--fs-badge-counter-size);
      height: var(--fs-badge-counter-size);
      padding: var(--fs-badge-counter-padding);
      background-color: var(--fs-badge-counter-bkg-color);
      border-radius: var(--fs-badge-counter-border-radius);
    }
  }

  &[data-fs-badge-variant="success"] {
    color: var(--fs-badge-success-text-color);

    [data-fs-badge-wrapper] {
      background-color: var(--fs-badge-success-bkg-color);
      border-color: var(--fs-badge-success-border-color);
    }
  }

  &[data-fs-badge-variant="neutral"] {
    color: var(--fs-badge-neutral-text-color);

    [data-fs-badge-wrapper] {
      background-color: var(--fs-badge-neutral-bkg-color);
      border-color: var(--fs-badge-neutral-border-color);
    }
  }

  &[data-fs-badge-variant="highlighted"] {
    color: var(--fs-badge-highlighted-text-color);

    [data-fs-badge-wrapper] {
      background-color: var(--fs-badge-highlighted-bkg-color);
      border-color: var(--fs-badge-highlighted-border-color);
    }
  }

  &[data-fs-badge-variant="info"] {
    color: var(--fs-badge-info-text-color);

    [data-fs-badge-wrapper] {
      background-color: var(--fs-badge-info-bkg-color);
      border-color: var(--fs-badge-info-border-color);
    }
  }

  &[data-fs-badge-variant="warning"] {
    color: var(--fs-badge-warning-text-color);

    [data-fs-badge-wrapper] {
      background-color: var(--fs-badge-warning-bkg-color);
      border-color: var(--fs-badge-warning-border-color);
    }
  }

  &[data-fs-badge-variant="danger"] {
    color: var(--fs-badge-danger-text-color);

    [data-fs-badge-wrapper] {
      background-color: var(--fs-badge-danger-bkg-color);
      border-color: var(--fs-badge-danger-border-color);
    }
  }
}
