@use '../../variables' as *;
$default: $size-base;
$sizes:
  's' $size-s,
  'base' $size-base;

body {
  --silke-button-background: transparent;
  --silke-button-background-hover: var(--color-accent-20);
  --silke-button-background-pressed: (--color-accent-10);

  --silke-button-color: var(--color-neutral-100);
  --silke-button-color-hover: var(--color-neutral-100);
  --silke-button-color-pressed: var(--color-neutral-100);

  --silke-button-border: none;
  --silke-button-border-hover: none;
  --silke-button-border-pressed: none;
}

.button.button {
  text-align: center;
  align-items: center;
  justify-content: center;
  position: relative;
  white-space: nowrap;
  min-width: fit-content;
  backface-visibility: hidden;

  background: var(--silke-button-background);
  color: var(--silke-button-color);
  border: var(--silke-button-border);

  &:not([disabled]) {
    &:hover {
      background: var(--silke-button-background-hover);
      color: var(--silke-button-color-hover);
      border: var(--silke-button-border-hover);
    }

    &:active,
    &.selected {
      background: var(--silke-button-background-pressed);
      color: var(--silke-button-color-pressed);
      border: var(--silke-button-border-pressed);
    }
  }

  &:disabled {
    opacity: 0.4;
  }

  img,
  svg {
    width: 1.125em;
    height: 1.125em;
    vertical-align: text-bottom;
    object-fit: contain;
  }

  path {
    fill: currentColor;
  }

  &:not(.iconOnly) {
    padding: 0 $space-sm 0 $space-sm;
  }

  &.iconOnly {
    justify-content: center;
    text-align: center;
    padding: 0;
  }

  &[disabled] {
    cursor: not-allowed;
  }

  &:focus {
    outline: none;
  }

  &:focus-visible::before {
    border: 1px solid var(--color-neutral-70);
    position: absolute;
    border-radius: var(--border-radius-small);
    top: -4px;
    left: -4px;
    right: -4px;
    bottom: -4px;
    content: '';
    z-index: 1;
  }

  &.primary {
    --silke-button-background: var(--color-accent-30);
    --silke-button-background-hover: var(--color-accent-20);
    --silke-button-background-pressed: var(--color-accent-10);
  }

  &.secondary {
    --silke-button-background: var(--color-surface-1);
    --silke-button-background-hover: var(--color-surface-2);
    --silke-button-background-pressed: var(--color-surface-3);
    --silke-button-color-hover: var(--color-neutral-100);
    --silke-button-color-pressed: var(--color-neutral-100);
    --silke-button-border: 1px solid var(--color-surface-4);
    --silke-button-border-hover: 1px solid var(--color-surface-3);
    --silke-button-border-pressed: 1px solid var(--color-surface-3);
  }

  &.danger {
    --silke-button-background: var(--color-error-20);
    --silke-button-background-hover: rgba(var(--color-error-20-rgb), 0.72);
    --silke-button-background-pressed: var(--color-error-10);
  }

  &.ghost {
    --silke-button-color: var(--color-neutral-90);
    --silke-button-color-hover: var(--color-neutral-100);
    --silke-button-background-hover: var(--color-surface-2);
    --silke-button-background-pressed: var(--color-surface-2);
    --silke-button-color-pressed: var(--color-neutral-100);
  }

  &.upgrade {
    --silke-button-background: linear-gradient(
      24deg,
      var(--color-support-quaternary-30, 0.88) 0%,
      rgba(150, 90, 191, 0.88) 100%
    );
    --silke-button-color: var(--var-color-neutral-100);
    --silke-button-background-hover: linear-gradient(
      24deg,
      var(--color-support-quaternary-30, 0.88) 0%,
      var(--color-support-quaternary-30, 01) 100%
    );
    --silke-button-color: var(--var-color-neutral-90);
    --silke-button-background-pressed: var(--color-support-quaternary-20);
    --silke-button-color-pressed: var(--var-color-neutral-100);
  }
}

.icon {
  font-size: 12px;
}

.leftIcon {
  min-width: 16px;
  font-size: 12px;
}

@each $name, $size in $sizes {
  .button.#{$name} {
    height: $size;
    min-height: $size;

    @if $name == 's' {
      font-size: $font-small;
    }

    @if $size == $size-s {
      &:not(.iconOnly) {
        padding: 0 $space-s 0 $space-s;
      }
    }
    &.iconOnly {
      width: $size;
      min-width: $size;
    }
  }
}
