Proper bubbles

This actually looks pretty good. There are some low-hanging fruit still, especially CSS tweaks.

Closes #40, #52, #51.