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

  .IconButton_size_2xs {
    --icon-button-size: 32px;
  }

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

  .IconButton_size_xs {
    --icon-button-size: 40px;
  }

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

  .IconButton_size_s {
    --icon-button-size: 48px;
  }

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

  .IconButton_size_m {
    --icon-button-size: 56px;
  }

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

  .IconButton_size_l {
    --icon-button-size: 64px;
  }

  .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-accent-default);
    --icon-button-icon-color: var(--color-content-base-accent-on);
  }

  .IconButton_variant_contained.IconButton_color_primary:hover {
      --icon-button-bg-color: var(--color-background-accent-hover);
    }

  .IconButton_variant_contained.IconButton_color_primary:active {
      --icon-button-bg-color: var(--color-background-accent-pressed);
    }

  .IconButton_variant_contained.IconButton_color_secondary {
    --icon-button-bg-color: var(--color-background-base-secondary);
    --icon-button-icon-color: var(--color-content-base-primary);
  }

  .IconButton_variant_contained.IconButton_color_secondary:hover {
      --icon-button-bg-color: var(--color-background-base-secondary-hover);
    }

  .IconButton_variant_contained.IconButton_color_secondary:active {
      --icon-button-bg-color: var(--color-background-base-secondary-pressed);
    }

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

  .IconButton_variant_outlined.IconButton_color_primary {
    --icon-button-bg-color: transparent;
    --icon-button-icon-color: var(--color-content-accent-default);
    --icon-button-border-color: var(--color-border-accent-default);
  }

  .IconButton_variant_outlined.IconButton_color_primary:hover {
      --icon-button-bg-color: var(--color-background-accent-light-hover);
    }

  .IconButton_variant_outlined.IconButton_color_primary:active {
      --icon-button-bg-color: var(--color-background-accent-light-pressed);
    }

  .IconButton_variant_outlined.IconButton_color_secondary {
    --icon-button-bg-color: transparent;
    --icon-button-icon-color: var(--color-content-base-primary);
    --icon-button-border-color: var(--color-border-base-main);
  }

  .IconButton_variant_outlined.IconButton_color_secondary:hover {
      --icon-button-bg-color: var(--color-background-base-secondary-hover);
    }

  .IconButton_variant_outlined.IconButton_color_secondary:active {
      --icon-button-bg-color: var(--color-background-base-secondary-pressed);
    }

  .IconButton_variant_ghost.IconButton_color_primary {
    --icon-button-bg-color: transparent;
    --icon-button-icon-color: var(--color-content-accent-default);
  }

  .IconButton_variant_ghost.IconButton_color_primary:hover {
      --icon-button-bg-color: var(--color-background-accent-light-hover);
    }

  .IconButton_variant_ghost.IconButton_color_primary:active {
      --icon-button-bg-color: var(--color-background-accent-light-pressed);
    }

  .IconButton_variant_ghost.IconButton_color_secondary {
    --icon-button-bg-color: transparent;
    --icon-button-icon-color: var(--color-content-base-primary);
  }

  .IconButton_variant_ghost.IconButton_color_secondary:hover {
      --icon-button-bg-color: var(--color-background-base-secondary-hover);
    }

  .IconButton_variant_ghost.IconButton_color_secondary:active {
      --icon-button-bg-color: var(--color-background-base-secondary-pressed);
    }

  .IconButton_variant_function {
    --icon-button-size: auto;
  }

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

  .IconButton_variant_function.IconButton_color_primary {
    --icon-button-icon-color: var(--color-content-accent-default);
  }

  .IconButton_variant_function.IconButton_color_primary:hover {
      --icon-button-icon-color: var(--color-content-accent-hover);
    }

  .IconButton_variant_function.IconButton_color_primary:active {
      --icon-button-icon-color: var(--color-content-accent-pressed);
    }

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

  .IconButton_variant_function.IconButton_color_secondary:hover {
      opacity: 0.8;
    }

  .IconButton_variant_function.IconButton_color_secondary:active {
      opacity: 0.6;
    }

  .IconButton_variant_floating {
    --icon-button-bg-color: var(--color-background-surface-highest-default);
    --icon-button-icon-color: var(--color-content-primary);
  }

  .IconButton_variant_floating:hover {
      --icon-button-bg-color: var(--color-background-base-main-hover);
    }

  .IconButton_variant_floating:active {
      --icon-button-bg-color: var(--color-background-base-main-pressed);
    }

  .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_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-icon-color: var(--color-content-base-disabled);
  }

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

  .IconButton_variant_outlined.IconButton_disabled,
  .IconButton_variant_outlined.IconButton_loading {
    --icon-button-bg-color: transparent;
    --icon-button-border-color: var(--color-border-base-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;
  }

  .IconButton:focus-visible {
    outline: 0;
    box-shadow: var(--shadow-outline-focused);
  }

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