Thanks for that DenesL,
I already worked out why the font was messy and suspected web2py was adding the class but it's good that someone has confirmed the details.
I came across this problem when cutting and pasting a demo from bootstrap website so I assume their code is good.
Adding a class like that seems an odd thing to do, especially as there is no mention I can find in the documentation.
If we are stuck with this behaviour for some good reason, then maybe the text-shadow attribute could be amended at the same time as the class is added?