code: def is_empty(self):
          
          if self.properties:
              # Rules containing CSS properties are never empty
              return False
  
          if not self.descendants:
              for header in self.ancestry.headers:
                  if header.is_atrule and header.directive != '@media':
                      # At-rules should always be preserved, UNLESS they are @media
                      # blocks, which are known to be noise if they don't have any
                      # contents of their own
                      return False
  
          return True
docs: Return whether this rule is considered "empty" -- i.e., has no
          contents that should end up in the final CSS.