Not sure if you’ve tried this yet, but this is what I do for case sensitive contains searches:
//*[contains(translate(./@id,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'), 'footer')]/@id
I saw you have found your solution, so I’m posting this answer in case others have the same issue.