.IconButton {
  --icon-button-bg-color: var(--color-background-action);
  --icon-button-hover-bg-color: var(--color-background-action-hover);
  --icon-button-active-bg-color: var(--color-background-action-pressed);
  --icon-button-font-color: var(--color-content-action-on);
  block-size: var(--icon-button-size);
  inline-size: var(--icon-button-size);
  padding: 0;
  box-sizing: border-box;
  display: inline-flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  border: none;
  color: var(--icon-button-font-color);
  background-color: var(--icon-button-bg-color);
  opacity: 1;
  border-radius: var(--icon-button-border-radius);
  transition:
    background-color var(--transition-default),
    box-shadow var(--transition-default),
    opacity var(--transition-default);
  -webkit-tap-highlight-color: transparent;
  position: relative;
}

  .IconButton_size_2xs {
    --icon-button-size: 32px;
    --icon-button-border-radius: var(--border-radius-m);
  }

  .IconButton_size_2xs.IconButton_compressed:not(.IconButton_variant_function) {
    --icon-button-size: 24px;
  }

  .IconButton_size_xs {
    --icon-button-size: 40px;
    --icon-button-border-radius: var(--border-radius-m);
  }

  .IconButton_size_xs.IconButton_compressed:not(.IconButton_variant_function) {
    --icon-button-size: 28px;
  }

  .IconButton_size_s {
    --icon-button-size: 48px;
    --icon-button-border-radius: var(--border-radius-l);
  }

  .IconButton_size_s.IconButton_compressed:not(.IconButton_variant_function) {
    --icon-button-size: 32px;
  }

  .IconButton_size_m {
    --icon-button-size: 56px;
    --icon-button-border-radius: var(--border-radius-l);
  }

  .IconButton_size_m.IconButton_compressed:not(.IconButton_variant_function) {
    --icon-button-size: 40px;
  }

  .IconButton_size_l {
    --icon-button-size: 64px;
    --icon-button-border-radius: var(--border-radius-l);
  }

  .IconButton_size_l.IconButton_compressed:not(.IconButton_variant_function) {
    --icon-button-size: 48px;
  }

  .IconButton_variant_contained.IconButton_color_primary {
    --icon-button-bg-color: var(--color-background-action);
    --icon-button-hover-bg-color: var(--color-background-action-hover);
    --icon-button-active-bg-color: var(--color-background-action-pressed);
    --icon-button-font-color: var(--color-content-action-on);
  }

  .IconButton_variant_contained.IconButton_color_secondary {
    --icon-button-bg-color: var(--color-background-tertiary);
    --icon-button-hover-bg-color: var(--color-background-tertiary-hover);
    --icon-button-active-bg-color: var(--color-background-tertiary-pressed);
    --icon-button-font-color: var(--color-content-primary);
  }

  .IconButton_variant_outlined {
    --icon-button-border-color: var(--color-border-main);
    border: 1px solid var(--icon-button-border-color);
  }

  .IconButton_variant_outlined.IconButton_color_primary {
    --icon-button-bg-color: transparent;
    --icon-button-hover-bg-color: var(--color-background-action-light-hover);
    --icon-button-active-bg-color: var(--color-background-action-light-pressed);
    --icon-button-font-color: var(--color-content-action);
    --icon-button-border-color: var(--color-border-action);
  }

  .IconButton_variant_outlined.IconButton_color_secondary {
    --icon-button-bg-color: transparent;
    --icon-button-hover-bg-color: var(--color-background-primary-hover);
    --icon-button-active-bg-color: var(--color-background-primary-pressed);
    --icon-button-font-color: var(--color-content-primary);
    --icon-button-border-color: var(--color-border-main);
  }

  .IconButton_variant_ghost.IconButton_color_primary {
    --icon-button-bg-color: transparent;
    --icon-button-hover-bg-color: var(--color-background-action-light-hover);
    --icon-button-active-bg-color: var(--color-background-action-light-pressed);
    --icon-button-font-color: var(--color-content-action);
  }

  .IconButton_variant_ghost.IconButton_color_secondary {
    --icon-button-bg-color: transparent;
    --icon-button-hover-bg-color: var(--color-background-primary-hover);
    --icon-button-active-bg-color: var(--color-background-primary-pressed);
    --icon-button-font-color: var(--color-content-primary);
  }

  .IconButton_variant_function {
    --icon-button-size: auto;
    --icon-button-border-radius: var(--border-radius-xs);
  }

  .IconButton_variant_function:hover {
      opacity: 0.8;
    }

  .IconButton_variant_function:active {
      opacity: 0.6;
    }

  .IconButton_variant_function.IconButton_color_primary,
  .IconButton_variant_function.IconButton_color_secondary {
    --icon-button-bg-color: transparent;
    --icon-button-hover-bg-color: transparent;
    --icon-button-active-bg-color: transparent;
  }

  .IconButton_variant_function.IconButton_color_primary {
    --icon-button-font-color: var(--color-content-action);
  }

  .IconButton_variant_function.IconButton_color_secondary {
    --icon-button-font-color: var(--color-content-primary);
  }

  .IconButton_variant_floating {
    --icon-button-bg-color: var(--color-background-main);
    --icon-button-hover-bg-color: var(--color-background-main-hover);
    --icon-button-active-bg-color: var(--color-background-main-pressed);
    --icon-button-font-color: var(--color-content-primary);
  }

  .IconButton_variant_floating::after {
      content: '';
      inset: 0;
      position: absolute;
      inline-size: 100%;
      border-radius: inherit;
      box-shadow: 0 8px 32px rgb(0 0 0 / 8%);
    }

  .IconButton_variant_contained.IconButton_rounded,
  .IconButton_variant_outlined.IconButton_rounded,
  .IconButton_variant_ghost.IconButton_rounded,
  .IconButton_variant_floating.IconButton_rounded {
    border-radius: 50%;
  }

  .IconButton_variant_contained.IconButton_disabled,
  .IconButton_variant_contained.IconButton_loading,
  .IconButton_variant_outlined.IconButton_disabled,
  .IconButton_variant_outlined.IconButton_loading,
  .IconButton_variant_ghost.IconButton_disabled,
  .IconButton_variant_ghost.IconButton_loading,
  .IconButton_variant_function.IconButton_disabled,
  .IconButton_variant_function.IconButton_loading,
  .IconButton_variant_floating.IconButton_disabled,
  .IconButton_variant_floating.IconButton_loading {
    --icon-button-font-color: var(--color-content-disabled);
  }

  .IconButton_variant_contained.IconButton_disabled svg, .IconButton_variant_contained.IconButton_loading svg, .IconButton_variant_outlined.IconButton_disabled svg, .IconButton_variant_outlined.IconButton_loading svg, .IconButton_variant_ghost.IconButton_disabled svg, .IconButton_variant_ghost.IconButton_loading svg, .IconButton_variant_function.IconButton_disabled svg, .IconButton_variant_function.IconButton_loading svg, .IconButton_variant_floating.IconButton_disabled svg, .IconButton_variant_floating.IconButton_loading svg {
      color: currentcolor;
    }

  .IconButton_variant_contained.IconButton_disabled,
  .IconButton_variant_contained.IconButton_loading,
  .IconButton_variant_floating.IconButton_disabled,
  .IconButton_variant_floating.IconButton_loading {
    --icon-button-hover-bg-color: var(--color-background-disabled);
    --icon-button-active-bg-color: var(--color-background-disabled);
  }

  .IconButton_variant_outlined.IconButton_disabled,
  .IconButton_variant_outlined.IconButton_loading {
    --icon-button-bg-color: transparent;
    --icon-button-hover-bg-color: transparent;
    --icon-button-active-bg-color: transparent;
    --icon-button-border-color: var(--color-border-disabled);
  }

  .IconButton_variant_ghost.IconButton_disabled,
  .IconButton_variant_ghost.IconButton_loading,
  .IconButton_variant_function.IconButton_disabled,
  .IconButton_variant_function.IconButton_loading {
    --icon-button-bg-color: transparent;
    --icon-button-hover-bg-color: transparent;
    --icon-button-active-bg-color: transparent;
  }

  .IconButton:focus {
    outline: 0;

    /* the bug in outline property before chrome version 94 — doesn't repeat radius of an element */
    box-shadow: var(--shadow-outline-focused);
  }

  .IconButton:focus:not(:focus-visible) {
    box-shadow: none;
  }

  .IconButton:hover {
    background-color: var(--icon-button-hover-bg-color);
  }

  .IconButton:active {
    background-color: var(--icon-button-active-bg-color);
  }

  .IconButton_disabled,
  .IconButton_loading {
    pointer-events: none;
    cursor: auto;
  }
