Python 3, 79 7070 63 bytes
Saved 916 bytes thanks to @ArnauldArnauld and Jo King, Thanksthanks!
defp=lambda p(s):
return len(s)<2or((ord(s[-2])%13>5)^ord(s[-1])%2)&p(s[:-1])
Python 3, 6767 60 bytes with ~ instead of ‾
defp=lambda p(s):
return len(s)<2or(~(ord(s[-2])//7^ord(s[-1]))&p(s[:-1]))