Not really sure, but what are these values
'color' => $color,
'class' => $class,
'fabric' => $fabric,
'category_name' => $category,
category_name specifically seems to be empty. I’m not sure what happens if you include this query parameter and do not include a value. Is it ignored or will it only get posts that have no category? There is nothing in the WP_Query docs that say this can be empty. Empty values can have odd results.