Detect air above a player's head (1.21.5)

Hey, so I'm trying to make a feature that gives players slowness when a block is above their head. Currently I have /execute as @p at @s unless block ~ ~1 ~ air run effect @s weakness but I don't want ladders or signs to count as blocks.

Is there a way to do this with predicates or a command I'm not thinking of?

Continue to help post